|
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