Skip to content

Commit 6a4bbd5

Browse files
committed
fix: correct SOURCE_KIRO path in Kiro installer
The script lives inside .kiro/, so SCRIPT_DIR already resolves to the .kiro directory. Appending /.kiro again produced an invalid path (.kiro/.kiro) causing the installer to find no source files to copy.
1 parent 656cf4c commit 6a4bbd5

1 file changed

Lines changed: 143 additions & 139 deletions

File tree

.kiro/install.sh

Lines changed: 143 additions & 139 deletions
Original file line numberDiff line numberDiff line change
@@ -1,139 +1,143 @@
1-
#!/bin/bash
2-
#
3-
# ECC Kiro Installer
4-
# Installs Everything Claude Code workflows into a Kiro project.
5-
#
6-
# Usage:
7-
# ./install.sh # Install to current directory
8-
# ./install.sh /path/to/dir # Install to specific directory
9-
# ./install.sh ~ # Install globally to ~/.kiro/
10-
#
11-
12-
set -euo pipefail
13-
14-
# When globs match nothing, expand to empty list instead of the literal pattern
15-
shopt -s nullglob
16-
17-
# Resolve the directory where this script lives (the repo root)
18-
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
19-
SOURCE_KIRO="$SCRIPT_DIR/.kiro"
20-
21-
# Target directory: argument or current working directory
22-
TARGET="${1:-.}"
23-
24-
# Expand ~ to $HOME
25-
if [ "$TARGET" = "~" ] || [[ "$TARGET" == "~/"* ]]; then
26-
TARGET="${TARGET/#\~/$HOME}"
27-
fi
28-
29-
# Resolve to absolute path
30-
TARGET="$(cd "$TARGET" 2>/dev/null && pwd || echo "$TARGET")"
31-
32-
echo "ECC Kiro Installer"
33-
echo "=================="
34-
echo ""
35-
echo "Source: $SOURCE_KIRO"
36-
echo "Target: $TARGET/.kiro/"
37-
echo ""
38-
39-
# Subdirectories to create and populate
40-
SUBDIRS="agents skills steering hooks scripts settings"
41-
42-
# Create all required .kiro/ subdirectories
43-
for dir in $SUBDIRS; do
44-
mkdir -p "$TARGET/.kiro/$dir"
45-
done
46-
47-
# Counters for summary
48-
agents=0; skills=0; steering=0; hooks=0; scripts=0; settings=0
49-
50-
# Copy agents (JSON for CLI, Markdown for IDE)
51-
if [ -d "$SOURCE_KIRO/agents" ]; then
52-
for f in "$SOURCE_KIRO/agents"/*.json "$SOURCE_KIRO/agents"/*.md; do
53-
[ -f "$f" ] || continue
54-
local_name=$(basename "$f")
55-
if [ ! -f "$TARGET/.kiro/agents/$local_name" ]; then
56-
cp "$f" "$TARGET/.kiro/agents/" 2>/dev/null || true
57-
agents=$((agents + 1))
58-
fi
59-
done
60-
fi
61-
62-
# Copy skills (directories with SKILL.md)
63-
if [ -d "$SOURCE_KIRO/skills" ]; then
64-
for d in "$SOURCE_KIRO/skills"/*/; do
65-
[ -d "$d" ] || continue
66-
skill_name="$(basename "$d")"
67-
if [ ! -d "$TARGET/.kiro/skills/$skill_name" ]; then
68-
mkdir -p "$TARGET/.kiro/skills/$skill_name"
69-
cp "$d"* "$TARGET/.kiro/skills/$skill_name/" 2>/dev/null || true
70-
skills=$((skills + 1))
71-
fi
72-
done
73-
fi
74-
75-
# Copy steering files (markdown)
76-
if [ -d "$SOURCE_KIRO/steering" ]; then
77-
for f in "$SOURCE_KIRO/steering"/*.md; do
78-
local_name=$(basename "$f")
79-
if [ ! -f "$TARGET/.kiro/steering/$local_name" ]; then
80-
cp "$f" "$TARGET/.kiro/steering/" 2>/dev/null || true
81-
steering=$((steering + 1))
82-
fi
83-
done
84-
fi
85-
86-
# Copy hooks (.kiro.hook files and README)
87-
if [ -d "$SOURCE_KIRO/hooks" ]; then
88-
for f in "$SOURCE_KIRO/hooks"/*.kiro.hook "$SOURCE_KIRO/hooks"/*.md; do
89-
[ -f "$f" ] || continue
90-
local_name=$(basename "$f")
91-
if [ ! -f "$TARGET/.kiro/hooks/$local_name" ]; then
92-
cp "$f" "$TARGET/.kiro/hooks/" 2>/dev/null || true
93-
hooks=$((hooks + 1))
94-
fi
95-
done
96-
fi
97-
98-
# Copy scripts (shell scripts) and make executable
99-
if [ -d "$SOURCE_KIRO/scripts" ]; then
100-
for f in "$SOURCE_KIRO/scripts"/*.sh; do
101-
local_name=$(basename "$f")
102-
if [ ! -f "$TARGET/.kiro/scripts/$local_name" ]; then
103-
cp "$f" "$TARGET/.kiro/scripts/" 2>/dev/null || true
104-
chmod +x "$TARGET/.kiro/scripts/$local_name" 2>/dev/null || true
105-
scripts=$((scripts + 1))
106-
fi
107-
done
108-
fi
109-
110-
# Copy settings (example files)
111-
if [ -d "$SOURCE_KIRO/settings" ]; then
112-
for f in "$SOURCE_KIRO/settings"/*; do
113-
[ -f "$f" ] || continue
114-
local_name=$(basename "$f")
115-
if [ ! -f "$TARGET/.kiro/settings/$local_name" ]; then
116-
cp "$f" "$TARGET/.kiro/settings/" 2>/dev/null || true
117-
settings=$((settings + 1))
118-
fi
119-
done
120-
fi
121-
122-
# Installation summary
123-
echo "Installation complete!"
124-
echo ""
125-
echo "Components installed:"
126-
echo " Agents: $agents"
127-
echo " Skills: $skills"
128-
echo " Steering: $steering"
129-
echo " Hooks: $hooks"
130-
echo " Scripts: $scripts"
131-
echo " Settings: $settings"
132-
echo ""
133-
echo "Next steps:"
134-
echo " 1. Open your project in Kiro"
135-
echo " 2. Agents: Automatic in IDE, /agent swap in CLI"
136-
echo " 3. Skills: Available via / menu in chat"
137-
echo " 4. Steering files with 'auto' inclusion load automatically"
138-
echo " 5. Toggle hooks in the Agent Hooks panel"
139-
echo " 6. Copy desired MCP servers from .kiro/settings/mcp.json.example to .kiro/settings/mcp.json"
1+
#!/bin/bash
2+
#
3+
# ECC Kiro Installer
4+
# Installs Everything Claude Code workflows into a Kiro project.
5+
#
6+
# Usage:
7+
# ./install.sh # Install to current directory
8+
# ./install.sh /path/to/dir # Install to specific directory
9+
# ./install.sh ~ # Install globally to ~/.kiro/
10+
#
11+
12+
set -euo pipefail
13+
14+
# When globs match nothing, expand to empty list instead of the literal pattern
15+
shopt -s nullglob
16+
17+
# Resolve the directory where this script lives
18+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
19+
20+
# The script lives inside .kiro/, so SCRIPT_DIR *is* the source.
21+
# If invoked from the repo root (e.g., .kiro/install.sh), SCRIPT_DIR already
22+
# points to the .kiro directory — no need to append /.kiro again.
23+
SOURCE_KIRO="$SCRIPT_DIR"
24+
25+
# Target directory: argument or current working directory
26+
TARGET="${1:-.}"
27+
28+
# Expand ~ to $HOME
29+
if [ "$TARGET" = "~" ] || [[ "$TARGET" == "~/"* ]]; then
30+
TARGET="${TARGET/#\~/$HOME}"
31+
fi
32+
33+
# Resolve to absolute path
34+
TARGET="$(cd "$TARGET" 2>/dev/null && pwd || echo "$TARGET")"
35+
36+
echo "ECC Kiro Installer"
37+
echo "=================="
38+
echo ""
39+
echo "Source: $SOURCE_KIRO"
40+
echo "Target: $TARGET/.kiro/"
41+
echo ""
42+
43+
# Subdirectories to create and populate
44+
SUBDIRS="agents skills steering hooks scripts settings"
45+
46+
# Create all required .kiro/ subdirectories
47+
for dir in $SUBDIRS; do
48+
mkdir -p "$TARGET/.kiro/$dir"
49+
done
50+
51+
# Counters for summary
52+
agents=0; skills=0; steering=0; hooks=0; scripts=0; settings=0
53+
54+
# Copy agents (JSON for CLI, Markdown for IDE)
55+
if [ -d "$SOURCE_KIRO/agents" ]; then
56+
for f in "$SOURCE_KIRO/agents"/*.json "$SOURCE_KIRO/agents"/*.md; do
57+
[ -f "$f" ] || continue
58+
local_name=$(basename "$f")
59+
if [ ! -f "$TARGET/.kiro/agents/$local_name" ]; then
60+
cp "$f" "$TARGET/.kiro/agents/" 2>/dev/null || true
61+
agents=$((agents + 1))
62+
fi
63+
done
64+
fi
65+
66+
# Copy skills (directories with SKILL.md)
67+
if [ -d "$SOURCE_KIRO/skills" ]; then
68+
for d in "$SOURCE_KIRO/skills"/*/; do
69+
[ -d "$d" ] || continue
70+
skill_name="$(basename "$d")"
71+
if [ ! -d "$TARGET/.kiro/skills/$skill_name" ]; then
72+
mkdir -p "$TARGET/.kiro/skills/$skill_name"
73+
cp "$d"* "$TARGET/.kiro/skills/$skill_name/" 2>/dev/null || true
74+
skills=$((skills + 1))
75+
fi
76+
done
77+
fi
78+
79+
# Copy steering files (markdown)
80+
if [ -d "$SOURCE_KIRO/steering" ]; then
81+
for f in "$SOURCE_KIRO/steering"/*.md; do
82+
local_name=$(basename "$f")
83+
if [ ! -f "$TARGET/.kiro/steering/$local_name" ]; then
84+
cp "$f" "$TARGET/.kiro/steering/" 2>/dev/null || true
85+
steering=$((steering + 1))
86+
fi
87+
done
88+
fi
89+
90+
# Copy hooks (.kiro.hook files and README)
91+
if [ -d "$SOURCE_KIRO/hooks" ]; then
92+
for f in "$SOURCE_KIRO/hooks"/*.kiro.hook "$SOURCE_KIRO/hooks"/*.md; do
93+
[ -f "$f" ] || continue
94+
local_name=$(basename "$f")
95+
if [ ! -f "$TARGET/.kiro/hooks/$local_name" ]; then
96+
cp "$f" "$TARGET/.kiro/hooks/" 2>/dev/null || true
97+
hooks=$((hooks + 1))
98+
fi
99+
done
100+
fi
101+
102+
# Copy scripts (shell scripts) and make executable
103+
if [ -d "$SOURCE_KIRO/scripts" ]; then
104+
for f in "$SOURCE_KIRO/scripts"/*.sh; do
105+
local_name=$(basename "$f")
106+
if [ ! -f "$TARGET/.kiro/scripts/$local_name" ]; then
107+
cp "$f" "$TARGET/.kiro/scripts/" 2>/dev/null || true
108+
chmod +x "$TARGET/.kiro/scripts/$local_name" 2>/dev/null || true
109+
scripts=$((scripts + 1))
110+
fi
111+
done
112+
fi
113+
114+
# Copy settings (example files)
115+
if [ -d "$SOURCE_KIRO/settings" ]; then
116+
for f in "$SOURCE_KIRO/settings"/*; do
117+
[ -f "$f" ] || continue
118+
local_name=$(basename "$f")
119+
if [ ! -f "$TARGET/.kiro/settings/$local_name" ]; then
120+
cp "$f" "$TARGET/.kiro/settings/" 2>/dev/null || true
121+
settings=$((settings + 1))
122+
fi
123+
done
124+
fi
125+
126+
# Installation summary
127+
echo "Installation complete!"
128+
echo ""
129+
echo "Components installed:"
130+
echo " Agents: $agents"
131+
echo " Skills: $skills"
132+
echo " Steering: $steering"
133+
echo " Hooks: $hooks"
134+
echo " Scripts: $scripts"
135+
echo " Settings: $settings"
136+
echo ""
137+
echo "Next steps:"
138+
echo " 1. Open your project in Kiro"
139+
echo " 2. Agents: Automatic in IDE, /agent swap in CLI"
140+
echo " 3. Skills: Available via / menu in chat"
141+
echo " 4. Steering files with 'auto' inclusion load automatically"
142+
echo " 5. Toggle hooks in the Agent Hooks panel"
143+
echo " 6. Copy desired MCP servers from .kiro/settings/mcp.json.example to .kiro/settings/mcp.json"

0 commit comments

Comments
 (0)