ai-global 1.12.0 → 1.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +34 -54
  2. package/ai-global +220 -189
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -36,7 +36,7 @@ This will:
36
36
 
37
37
  1. Scan your system for installed AI tools
38
38
  2. Backup original configs to `~/.ai-global/backups/`
39
- 3. Merge global/skills/agents/rules/commands/prompts from all tools
39
+ 3. Merge AGENTS.md/skills/agents/rules/commands from all tools
40
40
  4. Create symlinks from each tool's config to shared directories
41
41
 
42
42
  ### Commands
@@ -50,16 +50,12 @@ This will:
50
50
  | `ai-global unlink <key>` | Restore a tool's original config |
51
51
  | `ai-global unlink all` | Restore all tools |
52
52
  | `ai-global skill <user/repo>` | Add a skill |
53
- | `ai-global agent <source>` | Add an agent |
54
- | `ai-global rule <source>` | Add a rule |
55
- | `ai-global command <source>` | Add a command |
56
- | `ai-global prompt <source>` | Add a prompt |
57
53
  | `ai-global upgrade` | Upgrade to latest version |
58
54
  | `ai-global uninstall` | Completely remove ai-global |
59
55
  | `ai-global version` | Show version |
60
56
  | `ai-global help` | Show help |
61
57
 
62
- ### Add skill/agent/rule/command/prompt
58
+ ### Add skills
63
59
 
64
60
  ```bash
65
61
  ai-global skill user/repo
@@ -70,25 +66,23 @@ ai-global skill https://github.com/user/repo
70
66
 
71
67
  ```
72
68
  ~/.ai-global/
73
- ├── global.md <- Shared global (edit this)
69
+ ├── AGENTS.md <- Shared AGENTS.md (edit this)
74
70
  ├── skills/ <- Shared skills (merged from all tools)
75
71
  ├── agents/ <- Shared agents
76
72
  ├── rules/ <- Shared rules
77
73
  ├── commands/ <- Shared slash commands
78
- ├── prompts/ <- Shared prompt templates
79
74
  └── backups/ <- Original configs (backup)
80
75
 
81
76
  Each AI tool's config directory contains symlinks:
82
77
 
83
78
  ~/.claude/
84
- ├── CLAUDE.md -> ~/.ai-global/global.md (symlink)
79
+ ├── CLAUDE.md -> ~/.ai-global/AGENTS.md (symlink)
85
80
  ├── skills/ -> ~/.ai-global/skills/ (symlink)
86
81
  └── commands/ -> ~/.ai-global/commands/ (symlink)
87
82
 
88
83
  ~/.cursor/
89
- ├── rules/global.md -> ~/.ai-global/global.md (symlink)
90
- ├── skills/ -> ~/.ai-global/skills/ (symlink)
91
- └── prompts/ -> ~/.ai-global/prompts/ (symlink)
84
+ ├── rules/AGENTS.md -> ~/.ai-global/AGENTS.md (symlink)
85
+ └── skills/ -> ~/.ai-global/skills/ (symlink)
92
86
 
93
87
  ... and more tools
94
88
  ```
@@ -105,48 +99,34 @@ The first file found wins (dedup by filename).
105
99
 
106
100
  ## Supported Tools
107
101
 
108
- | Tool | Key | Global | Skills | Agents | Rules | Commands | Prompts |
109
- | ----------------- | ------------------- | :----: | :----: | :----: | :---: | :------: | :-----: |
110
- | Claude Code | `claude` | ✓ | ✓ | | | ✓ | |
111
- | Cursor | `cursor` | ✓ | ✓ | | | | ✓ |
112
- | GitHub Copilot | `github-copilot` | ✓ | | | | | |
113
- | Factory Droid | `droid` | ✓ | | | | | |
114
- | Gemini CLI | `gemini` | ✓ | ✓ | | | ✓ | |
115
- | Windsurf | `windsurf` | ✓ || ✓ || | |
116
- | Kiro | `kiro` | ✓ | | ✓ | | | |
117
- | Qodo | `qodo` | ✓ | | ✓ | | | |
118
- | Antigravity | `antigravity` | ✓ | ✓ | | | ✓ | |
119
- | Continue | `continue` | ✓ | | | ✓ | | ✓ |
120
- | Cline | `cline` | ✓ | | | ✓ | | |
121
- | Roo Code | `roo` | ✓ | | | ✓ | | |
122
- | Sourcegraph Cody | `cody` | ✓ | | | | ✓ | |
123
- | CodeGPT | `codegpt` | ✓ | | | | | ✓ |
124
- | GPT Engineer | `gpt-engineer` | ✓ | | | | | ✓ |
125
- | Smol Developer | `smol` | ✓ | | | | | ✓ |
126
- | Amp | `amp` | ✓ | | | | | |
127
- | Trae | `trae` | ✓ | | | | | |
128
- | OpenCode | `opencode` | ✓ | | | | | |
129
- | OpenAI Codex | `codex` | ✓ | | | | | |
130
- | Aider | `aider` | ✓ | | | | | |
131
- | Codeium | `codeium` | ✓ | | | | | |
132
- | TabNine | `tabnine` | ✓ | | | | | |
133
- | Zed | `zed` | ✓ | | | | | |
134
- | Aide | `aide` | ✓ | | | | | |
135
- | PearAI | `pearai` | ✓ | | | | | |
136
- | Supermaven | `supermaven` | ✓ | | | | | |
137
- | CodeStory | `codestory` | ✓ | | | | | |
138
- | Double | `double` | ✓ | | | | | |
139
- | Blackbox AI | `blackbox` | ✓ | | | | | |
140
- | Amazon Q | `amazonq` | ✓ | | | | | |
141
- | Copilot Workspace | `copilot-workspace` | ✓ | | | | | |
142
- | Goose AI | `goose` | ✓ | | | | | |
143
- | Mentat | `mentat` | ✓ | | | | | |
144
- | Melty | `melty` | ✓ | | | | | |
145
- | Void | `void` | ✓ | | | | | |
146
- | Qoder | `qoder` | ✓ | | | | | |
147
- | Augment | `augment` | ✓ | | ✓ | ✓ | | |
148
- | Codebuff | `codebuff` | ✓ | | ✓ | | | |
149
- | CodeBuddy | `codebuddy` | ✓ | | ✓ | | | |
102
+ | Tool | Key | Global | Rules | Commands | Skills | Agents |
103
+ | -------------- | ------------- | :----: | :---: | :------: | :----: | :----: |
104
+ | Claude Code | `claude` | ✓ | | ✓ || ✓ |
105
+ | OpenAI Codex | `codex` | ✓ | ✓ | | | ✓ |
106
+ | Cursor | `cursor` | ✓ |||||
107
+ | Factory Droid | `droid` | ✓ |||||
108
+ | Amp | `amp` | ✓ | ✓ | ✓ || |
109
+ | Antigravity | `antigravity` | ✓ | | | ✓ | |
110
+ | Gemini CLI | `gemini` | ✓ | | | ✓ | |
111
+ | Kiro CLI | `kiro` | ✓ || | ✓ ||
112
+ | OpenCode | `opencode` | ✓ | | ✓ || ✓ |
113
+ | Qoder | `qoder` | ✓ | ✓ || | ✓ |
114
+ | Qodo | `qodo` | ✓ | | | | ✓ |
115
+ | GitHub Copilot | `copilot` | ✓ | | | ✓ | |
116
+ | Continue | `continue` | ✓ | ✓ | | | |
117
+ | Windsurf | `windsurf` | ✓ || | ✓ | |
118
+ | Roo Code | `roo` | ✓ || ✓ | ✓ | |
119
+ | Cline | `cline` | ✓ || | ✓ | |
120
+ | Blackbox AI | `blackbox` | | | || |
121
+ | Goose AI | `goose` | ✓ | | || |
122
+ | Augment | `augment` | ✓ || ✓ | ||
123
+ | Clawdbot Code | `clawdbot` | ✓ | | || ✓ |
124
+ | Command Code | `commandcode` | ✓ | ||| |
125
+ | Kilo Code | `kilocode` | ✓ |||| |
126
+ | Neovate | `neovate` | ✓ | ||||
127
+ | OpenHands | `openhands` | ✓ | | || |
128
+ | TRAE | `trae` | ✓ || || |
129
+ | Zencoder | `zencoder` | ✓ || || |
150
130
 
151
131
  ## Uninstall
152
132
 
package/ai-global CHANGED
@@ -7,15 +7,14 @@ set -e
7
7
 
8
8
  CONFIG_DIR="$HOME/.ai-global"
9
9
  BACKUP_DIR="$CONFIG_DIR/backups"
10
- GLOBAL_MD="$CONFIG_DIR/global.md"
10
+ AGENTS_MD="$CONFIG_DIR/AGENTS.md"
11
11
  SKILLS_DIR="$CONFIG_DIR/skills"
12
12
  AGENTS_DIR="$CONFIG_DIR/agents"
13
13
  RULES_DIR="$CONFIG_DIR/rules"
14
14
  COMMANDS_DIR="$CONFIG_DIR/commands"
15
- PROMPTS_DIR="$CONFIG_DIR/prompts"
16
15
 
17
16
  # Version
18
- VERSION="1.12.0"
17
+ VERSION="1.14.0"
19
18
 
20
19
  # Colors
21
20
  RED='\033[0;31m'
@@ -24,6 +23,7 @@ YELLOW='\033[0;33m'
24
23
  BLUE='\033[0;34m'
25
24
  CYAN='\033[0;36m'
26
25
  MAGENTA='\033[0;35m'
26
+ GRAY='\033[0;90m'
27
27
  BRIGHT_RED='\033[1;31m'
28
28
  BRIGHT_GREEN='\033[1;32m'
29
29
  BRIGHT_YELLOW='\033[1;33m'
@@ -32,19 +32,35 @@ BRIGHT_MAGENTA='\033[1;35m'
32
32
  BRIGHT_CYAN='\033[1;36m'
33
33
  NC='\033[0m'
34
34
 
35
- # Tool color palette (using xterm-256 colors for more variety)
36
- # We pick a spread of colors from the 256-color palette (avoiding too dark/grayscale)
35
+ # Tool color palette (using bright xterm-256 colors for 26 tools)
36
+ # All colors are bright and visually distinct for better visibility
37
37
  TOOL_COLORS=(
38
- "\033[38;5;39m" "\033[38;5;214m" "\033[38;5;118m" "\033[38;5;171m" "\033[38;5;208m"
39
- "\033[38;5;45m" "\033[38;5;190m" "\033[38;5;161m" "\033[38;5;111m" "\033[38;5;220m"
40
- "\033[38;5;75m" "\033[38;5;202m" "\033[38;5;112m" "\033[38;5;141m" "\033[38;5;210m"
41
- "\033[38;5;47m" "\033[38;5;226m" "\033[38;5;201m" "\033[38;5;81m" "\033[38;5;215m"
42
- "\033[38;5;51m" "\033[38;5;184m" "\033[38;5;197m" "\033[38;5;105m" "\033[38;5;209m"
43
- "\033[38;5;121m" "\033[38;5;227m" "\033[38;5;165m" "\033[38;5;33m" "\033[38;5;216m"
44
- "\033[38;5;159m" "\033[38;5;178m" "\033[38;5;162m" "\033[38;5;117m" "\033[38;5;221m"
45
- "\033[38;5;78m" "\033[38;5;203m" "\033[38;5;113m" "\033[38;5;142m" "\033[38;5;211m"
46
- "\033[38;5;159m" "\033[38;5;178m" "\033[38;5;162m" "\033[38;5;117m" "\033[38;5;221m"
47
- "\033[38;5;78m" "\033[38;5;203m" "\033[38;5;113m" "\033[38;5;142m" "\033[38;5;211m"
38
+ "\033[38;5;226m" # Bright Yellow
39
+ "\033[38;5;46m" # Bright Green
40
+ "\033[38;5;51m" # Bright Cyan
41
+ "\033[38;5;180m" # Light Blue (replaced Bright Blue)
42
+ "\033[38;5;201m" # Bright Magenta
43
+ "\033[38;5;208m" # Bright Orange
44
+ "\033[38;5;9m" # Red
45
+ "\033[38;5;11m" # Yellow
46
+ "\033[38;5;10m" # Green
47
+ "\033[38;5;14m" # Cyan
48
+ "\033[38;5;12m" # Blue
49
+ "\033[38;5;13m" # Magenta
50
+ "\033[38;5;214m" # Orange
51
+ "\033[38;5;220m" # Gold
52
+ "\033[38;5;82m" # Aquamarine
53
+ "\033[38;5;117m" # Light Blue
54
+ "\033[38;5;165m" # Purple
55
+ "\033[38;5;118m" # Lime Green
56
+ "\033[38;5;225m" # Pink
57
+ "\033[38;5;39m" # Sky Blue
58
+ "\033[38;5;129m" # Bright Purple
59
+ "\033[38;5;203m" # Rose
60
+ "\033[38;5;77m" # Spring Green
61
+ "\033[38;5;215m" # Salmon
62
+ "\033[38;5;159m" # Light Cyan
63
+ "\033[38;5;147m" # Pale Blue
48
64
  )
49
65
 
50
66
  beautify_path() {
@@ -90,49 +106,34 @@ log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
90
106
  log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
91
107
 
92
108
  # Known AI tool patterns
93
- # Format: dir|key|name|instr_file|skills_dir|agents_dir|rules_dir|commands_dir|prompts_dir
109
+ # Format: dir|key|name|agents_md|rules_dir|commands_dir|skills_dir|agents_dir
94
110
  declare -a KNOWN_PATTERNS=(
95
- ".claude|claude|Claude Code|CLAUDE.md|skills|.|.|commands|."
96
- ".cursor|cursor|Cursor|rules/global.md|skills|.|.|.|prompts"
97
- ".factory|droid|Factory Droid|droids/global.md|.|.|.|.|."
98
- ".amp|amp|Amp|instructions.md|.|.|.|.|."
99
- ".antigravity|antigravity|Antigravity|CLAUDE.md|skills|.|.|commands|."
100
- ".gemini|gemini|Gemini CLI|GEMINI.md|skills|.|.|commands|."
101
- ".kiro|kiro|Kiro|steering/global.md|.|agents|.|.|."
102
- ".opencode|OpenCode|instructions.md|.|.|.|.|."
103
- ".qoder|Qoder|instructions.md|.|.|.|.|."
104
- ".qodo|qodo|Qodo|instructions.md|.|agents|.|.|."
105
- ".config/github-copilot|github-copilot|GitHub Copilot|instructions.md|.|.|.|.|."
106
- ".aider|aider|Aider|.aider.conf.yml|.|.|.|.|."
107
- ".continue|continue|Continue|config.json|.|.|rules|.|prompts"
108
- ".codeium|codeium|Codeium|config.json|.|.|.|.|."
109
- ".tabnine|tabnine|TabNine|tabnine_config.json|.|.|.|.|."
110
- ".sourcegraph|cody|Sourcegraph Cody|cody.json|.|.|.|commands|."
111
- ".codegpt|codegpt|CodeGPT|settings.json|.|.|.|.|prompts"
112
- ".windsurf|windsurf|Windsurf|instructions.md|skills|agents|rules|.|."
113
- ".trae|trae|Trae|instructions.md|.|.|.|.|."
114
- ".melty|melty|Melty|instructions.md|.|.|.|.|."
115
- ".void|void|Void|instructions.md|.|.|.|.|."
116
- ".roo|roo|Roo Code|instructions.md|.|.|rules|.|."
117
- ".zed|zed|Zed|settings.json|.|.|.|.|."
118
- ".cline|cline|Cline|instructions.md|.|.|rules|.|prompts"
119
- ".aide|aide|Aide|instructions.md|.|.|.|.|."
120
- ".pear|pear|PearAI|instructions.md|.|.|.|.|."
121
- ".supermaven|supermaven|Supermaven|config.json|.|.|.|.|."
122
- ".codestory|codestory|CodeStory|instructions.md|.|.|.|.|."
123
- ".double|double|Double|instructions.md|.|.|.|.|."
124
- ".blackbox|blackbox|Blackbox AI|config.json|.|.|.|.|."
125
- ".amazonq|amazonq|Amazon Q|instructions.md|.|.|.|.|."
126
- ".copilot-workspace|copilot-workspace|Copilot Workspace|instructions.md|.|.|.|.|."
127
- ".codex|codex|OpenAI Codex|instructions.md|skills|agents|rules|.|."
128
- ".goose|goose|Goose AI|instructions.md|skills|agents|rules|.|."
129
- ".mentat|mentat|Mentat|instructions.md|skills|agents|rules|.|."
130
- ".gpt-engineer|gpt-engineer|GPT Engineer|instructions.md|skills|agents|rules|.|prompts"
131
- ".smol|smol|Smol Developer|instructions.md|skills|agents|rules|.|prompts"
132
- ".config/opencode|opencode|OpenCode Config|instructions.md|.|.|.|.|."
133
- ".augment|augment|Augment|instructions.md|.|agents|rules|.|."
134
- ".codebuff|codebuff|Codebuff|instructions.md|.|agents|.|.|."
135
- ".codebuddy|codebuddy|CodeBuddy|settings.json|.|agents|.|.|."
111
+ ".claude|claude|Claude Code|CLAUDE.md|.|commands|skills|agents"
112
+ ".codex|codex|OpenAI Codex|AGENTS.md|rules|.|skills|agents"
113
+ ".cursor|cursor|Cursor|AGENTS.md|rules|commands|skills|agents"
114
+ ".factory|droid|Factory Droid|AGENTS.md|rules|commands|skills|droids"
115
+ ".amp|amp|Amp|AGENTS.md|rules|commands|skills|."
116
+ ".gemini|antigravity|Antigravity|GEMINI.md|.|.|antigravity/skills|."
117
+ ".gemini|gemini|Gemini CLI|GEMINI.md|.|.|skills|."
118
+ ".kiro|kiro|Kiro CLI|steering/AGENTS.md|steering|.|skills|agents"
119
+ ".config/opencode|opencode|OpenCode|AGENTS.md|.|command|skill|agents"
120
+ ".qoder|qoder|Qoder|AGENTS.md|rules|commands|skills|agents"
121
+ ".qodo|qodo|Qodo|AGENTS.md|.|.|.|agents"
122
+ ".copilot|copilot|GitHub Copilot|AGENTS.md|.|.|skills|agents"
123
+ ".continue|continue|Continue|AGENTS.md|rules|.|.|."
124
+ ".codeium/windsurf|windsurf|Windsurf|AGENTS.md|rules|.|skills|."
125
+ ".roo|roo|Roo Code|AGENTS.md|rules|commands|skills|."
126
+ ".cline|cline|Cline|AGENTS.md|rules|.|skills|."
127
+ ".blackbox|blackbox|Blackbox AI|.|.|.|skills|."
128
+ ".goose|goose|Goose AI|AGENTS.md|.|.|skills|."
129
+ ".augment|augment|Augment|AGENTS.md|rules|commands|.|agents"
130
+ ".clawdbot|clawdbot|Clawdbot Code|AGENTS.md|.|.|skills|subagents"
131
+ ".commandcode|commandcode|Command Code|AGENTS.md|.|.|skills|."
132
+ ".kilocode|kilocode|Kilo Code|AGENTS.md|rules|commands|skills|."
133
+ ".neovate|neovate|Neovate|AGENTS.md|.|commands|skills|agents"
134
+ ".openhands|openhands|OpenHands|AGENTS.md|.|.|skills|."
135
+ ".trae|trae|TRAE|AGENTS.md|rules|.|skills|."
136
+ ".zencoder|zencoder|Zencoder|AGENTS.md|rules|.|skills|."
136
137
  )
137
138
 
138
139
  # Backup a file or directory
@@ -229,13 +230,12 @@ show_status() {
229
230
 
230
231
  local total_links=0
231
232
 
232
- # Instructions
233
233
  local instr_output=""
234
234
  for pattern in "${KNOWN_PATTERNS[@]}"; do
235
- local p_dir p_name p_instr p_skills p_agents p_rules p_cmds p_prompts
236
- IFS='|' read -r p_dir p_key p_name p_instr p_skills p_agents p_rules p_cmds p_prompts <<< "$pattern"
235
+ local p_dir p_name p_instr p_skills p_agents p_rules p_cmds
236
+ IFS='|' read -r p_dir p_key p_name p_instr p_rules p_cmds p_skills p_agents <<< "$pattern"
237
237
 
238
- if [[ "$p_instr" != "." ]] && [[ "$p_instr" != *.json ]] && [[ "$p_instr" != *.yml ]]; then
238
+ if [[ "$p_instr" != "." ]] && [[ "$p_instr" == *.md ]]; then
239
239
  local target="$HOME/$p_dir/$p_instr"
240
240
  if [[ -L "$target" ]]; then
241
241
  local link_target=$(readlink "$target" 2>/dev/null || true)
@@ -249,23 +249,22 @@ show_status() {
249
249
  done
250
250
 
251
251
  if [[ -n "$instr_output" ]]; then
252
- echo -e "${BLUE}[global.md]${NC}"
252
+ echo -e "${BLUE}[AGENTS.md]${NC}"
253
253
  echo -e -n "$instr_output"
254
254
  fi
255
255
 
256
- for type_name in skills agents rules commands prompts; do
256
+ for type_name in rules commands skills agents; do
257
257
  local type_output=""
258
258
  for pattern in "${KNOWN_PATTERNS[@]}"; do
259
- local p_dir p_name p_instr p_skills p_agents p_rules p_cmds p_prompts
260
- IFS='|' read -r p_dir p_key p_name p_instr p_skills p_agents p_rules p_cmds p_prompts <<< "$pattern"
259
+ local p_dir p_name p_instr p_skills p_agents p_rules p_cmds
260
+ IFS='|' read -r p_dir p_key p_name p_instr p_rules p_cmds p_skills p_agents <<< "$pattern"
261
261
 
262
262
  local type_dir=""
263
263
  case "$type_name" in
264
- skills) type_dir="$p_skills" ;;
265
- agents) type_dir="$p_agents" ;;
266
264
  rules) type_dir="$p_rules" ;;
267
265
  commands) type_dir="$p_cmds" ;;
268
- prompts) type_dir="$p_prompts" ;;
266
+ skills) type_dir="$p_skills" ;;
267
+ agents) type_dir="$p_agents" ;;
269
268
  esac
270
269
 
271
270
  if [[ "$type_dir" != "." ]]; then
@@ -292,46 +291,88 @@ show_status() {
292
291
  fi
293
292
 
294
293
  echo ""
295
- log_info "Shared items: skills=$(count_items "$SKILLS_DIR"), agents=$(count_items "$AGENTS_DIR"), rules=$(count_items "$RULES_DIR"), commands=$(count_items "$COMMANDS_DIR"), prompts=$(count_items "$PROMPTS_DIR")"
294
+ log_info "Shared items: rules=$(count_items "$RULES_DIR"), commands=$(count_items "$COMMANDS_DIR"), skills=$(count_items "$SKILLS_DIR"), agents=$(count_items "$AGENTS_DIR")"
296
295
  }
297
296
 
298
297
  # List supported tools
299
298
  list_supported() {
300
299
  log_info "Supported AI tools:"
301
300
  echo ""
302
- printf " ${BLUE}%-18s %-18s %-20s %-6s %-6s %-7s %-5s %-8s %s${NC}\n" "Tool" "Key" "Directory" "Skills" "Agents" "Rules" "Cmds" "Prompts" "Status"
303
- echo " ---------------------------------------------------------------------------------------------------------"
301
+ printf " ${BLUE}%-16s %-12s %-15s %-7s %-7s %-7s %-6s %-11s %s${NC}\n" "Tool" "Key" "Directory" "AGENTS.md" "Rules" "Commands" "Skills" "Agents" "Status"
302
+ echo " ----------------------------------------------------------------------------------------------------"
304
303
 
305
304
  for pattern in "${KNOWN_PATTERNS[@]}"; do
306
- local p_dir p_name p_instr p_skills p_agents p_rules p_cmds p_prompts
307
- IFS='|' read -r p_dir p_key p_name p_instr p_skills p_agents p_rules p_cmds p_prompts <<< "$pattern"
305
+ local p_dir p_name p_instr p_skills p_agents p_rules p_cmds
306
+ IFS='|' read -r p_dir p_key p_name p_instr p_rules p_cmds p_skills p_agents <<< "$pattern"
308
307
  local full_path="$HOME/$p_dir"
309
308
 
310
- local s_str="." a_str="." r_str="." c_str="." p_str="."
309
+ local g_str="." s_str="." a_str="." r_str="." c_str="."
310
+
311
+ # Check what the tool supports based on KNOWN_PATTERNS
312
+ if [[ "$p_instr" != "." ]]; then
313
+ g_str="○"
314
+ else
315
+ g_str="${GRAY}.${NC}"
316
+ fi
317
+ if [[ "$p_skills" != "." ]]; then
318
+ s_str="○"
319
+ else
320
+ s_str="${GRAY}.${NC}"
321
+ fi
322
+ if [[ "$p_agents" != "." ]]; then
323
+ a_str="○"
324
+ else
325
+ a_str="${GRAY}.${NC}"
326
+ fi
327
+ if [[ "$p_rules" != "." ]]; then
328
+ r_str="○"
329
+ else
330
+ r_str="${GRAY}.${NC}"
331
+ fi
332
+ if [[ "$p_cmds" != "." ]]; then
333
+ c_str="○"
334
+ else
335
+ c_str="${GRAY}.${NC}"
336
+ fi
337
+
338
+ # If tool is installed, check if the configs actually exist
311
339
  if [[ -d "$full_path" ]]; then
312
- [[ "$p_skills" != "." && -d "$full_path/$p_skills" ]] && s_str=""
313
- [[ "$p_agents" != "." && -d "$full_path/$p_agents" ]] && a_str=""
314
- [[ "$p_rules" != "." && -d "$full_path/$p_rules" ]] && r_str=""
315
- [[ "$p_cmds" != "." && -d "$full_path/$p_cmds" ]] && c_str=""
316
- # Prompts can be a file or dir
317
- [[ "$p_prompts" != "." && -e "$full_path/$p_prompts" ]] && p_str="✓"
340
+ [[ "$p_instr" != "." && "$p_instr" == *.md && -f "$full_path/$p_instr" ]] && g_str=""
341
+ [[ "$p_skills" != "." && -d "$full_path/$p_skills" ]] && s_str=""
342
+ [[ "$p_agents" != "." && -d "$full_path/$p_agents" ]] && a_str=""
343
+ [[ "$p_rules" != "." && -d "$full_path/$p_rules" ]] && r_str=""
344
+ [[ "$p_cmds" != "." && -d "$full_path/$p_cmds" ]] && c_str="○"
318
345
  fi
319
346
 
320
347
  local status=""
321
348
  local tool_color=""
349
+
322
350
  if [[ -d "$full_path" ]]; then
323
351
  status="${GREEN}Installed${NC}"
324
352
  tool_color=$(get_tool_color "$p_name")
325
353
  else
326
- status="${YELLOW}Not found${NC}"
327
- tool_color="${NC}"
354
+ status="${GRAY}Not found${NC}"
355
+ tool_color="${GRAY}"
356
+
357
+ # For not found tools, make all symbols gray too
358
+ if [[ "$g_str" == "○" ]]; then
359
+ g_str="${GRAY}○${NC}"
360
+ fi
361
+ if [[ "$s_str" == "○" ]]; then
362
+ s_str="${GRAY}○${NC}"
363
+ fi
364
+ if [[ "$a_str" == "○" ]]; then
365
+ a_str="${GRAY}○${NC}"
366
+ fi
367
+ if [[ "$r_str" == "○" ]]; then
368
+ r_str="${GRAY}○${NC}"
369
+ fi
370
+ if [[ "$c_str" == "○" ]]; then
371
+ c_str="${GRAY}○${NC}"
372
+ fi
328
373
  fi
329
374
 
330
- # Use manual padding because printf handles multibyte characters () by byte count in Bash 3.2.
331
- # Each category block matches the header's "%-10s " (11 characters total).
332
- # We use indicator + 10 spaces = 11 characters.
333
- printf " %b%-18s %-18s %-22s%b %s %s %s %s %s %b\n" \
334
- "$tool_color" "$p_name" "$p_key" "$p_dir" "$NC" "$s_str" "$a_str" "$r_str" "$c_str" "$p_str" "$status"
375
+ echo -e " ${tool_color}${p_name:0:16}$(printf '%*s' $((16 - ${#p_name})) | tr ' ' ' ') ${p_key:0:12}$(printf '%*s' $((12 - ${#p_key})) | tr ' ' ' ') ${p_dir:0:19}$(printf '%*s' $((19 - ${#p_dir})) | tr ' ' ' ')${NC} ${g_str} ${r_str} ${c_str} ${s_str} ${a_str} ${status}"
335
376
  done
336
377
  echo ""
337
378
  }
@@ -350,7 +391,7 @@ list_backups() {
350
391
  return
351
392
  fi
352
393
 
353
- printf " ${BLUE}%-14s %-10s %s${NC}\n" "Tool" "Type" "Backup File"
394
+ printf " ${BLUE}%-18s %-10s %s${NC}\n" "Tool" "Type" "Backup File"
354
395
  echo " -----------------------------------------------------------------------------------"
355
396
 
356
397
  while read -r filename; do
@@ -359,8 +400,10 @@ list_backups() {
359
400
  local type=""
360
401
 
361
402
  # Improved regex to handle various path characters
362
- if [[ "$filename" =~ ^(.+)\.([^\.]+)\.([0-9]+)$ ]]; then
363
- tool_name="${BASH_REMATCH[1]}"
403
+ # Format: backup_name.type.timestamp where backup_name has '/' replaced with '_'
404
+ if [[ "$filename" =~ ^(.+)\.([^.]+)\.([0-9]+)$ ]]; then
405
+ # Convert underscores back to slashes for display
406
+ tool_name="${BASH_REMATCH[1]//_//}"
364
407
  type="${BASH_REMATCH[2]}"
365
408
  else
366
409
  tool_name="$filename"
@@ -370,21 +413,21 @@ list_backups() {
370
413
  local tool_color=$(get_tool_color "${tool_name//_/ }")
371
414
  # Print the backup filename as a path prefixed with ~/ using beautify_path
372
415
  local backup_path=$(beautify_path "$BACKUP_DIR/$filename")
373
- printf " %s%-14s %-10s %s%b\n" "$tool_color" "$tool_name" "$type" "$backup_path" "$NC"
416
+ printf " %s%-18s %-10s %s%b\n" "$tool_color" "$tool_name" "$type" "$backup_path" "$NC"
374
417
  done <<< "$backups_list"
375
418
  echo ""
376
419
  }
377
420
 
378
- # Collect and merge instructions from all tools
379
- collect_instructions() {
421
+ # Collect and merge AGENTS.md from all tools
422
+ collect_agents_md() {
380
423
  local merged_content=""
381
424
  local found_count=0
382
425
 
383
426
  for pattern in "${KNOWN_PATTERNS[@]}"; do
384
- IFS='|' read -r dir_name key tool_name instr_file skills agents rules commands prompts <<< "$pattern"
427
+ IFS='|' read -r dir_name key tool_name agents_md rules commands skills agents <<< "$pattern"
385
428
 
386
- if [[ "$instr_file" != "." ]] && [[ "$instr_file" != *.json ]] && [[ "$instr_file" != *.yml ]]; then
387
- local actual_path="$HOME/$dir_name/$instr_file"
429
+ if [[ "$agents_md" != "." ]] && [[ "$agents_md" == *.md ]]; then
430
+ local actual_path="$HOME/$dir_name/$agents_md"
388
431
  [[ -L "$actual_path" ]] && continue
389
432
 
390
433
  if [[ -f "$actual_path" ]]; then
@@ -400,16 +443,23 @@ collect_instructions() {
400
443
  fi
401
444
  done
402
445
 
446
+ # Skip if AGENTS.md already exists
447
+ if [[ -f "$AGENTS_MD" ]]; then
448
+ log_ok "Preserved existing AGENTS.md (skipped merge)"
449
+ return
450
+ fi
451
+
452
+ # Only create and merge if AGENTS.md doesn't exist
403
453
  if [[ $found_count -gt 0 ]]; then
404
- echo -e "$merged_content" > "$GLOBAL_MD"
405
- log_ok "Merged instructions from $found_count tool(s)"
454
+ echo -e "$merged_content" > "$AGENTS_MD"
455
+ log_ok "Merged AGENTS.md from $found_count tool(s) to $AGENTS_MD"
406
456
  else
407
- cat > "$GLOBAL_MD" << 'EOF'
408
- # AI Assistant Instructions
457
+ cat > "$AGENTS_MD" << 'EOF'
458
+ # AI Coding Assistant
409
459
 
410
- <!-- Add your instructions here. They will sync to all AI tools. -->
460
+ <!-- Add your prompts here. They will sync to all AI tools. -->
411
461
  EOF
412
- log_ok "Created: $GLOBAL_MD"
462
+ log_ok "Created: $AGENTS_MD"
413
463
  fi
414
464
  }
415
465
 
@@ -418,14 +468,21 @@ update_tools() {
418
468
  log_info "Scanning for AI tools..."
419
469
  echo ""
420
470
 
421
- mkdir -p "$SKILLS_DIR" "$AGENTS_DIR" "$RULES_DIR" "$COMMANDS_DIR" "$PROMPTS_DIR" "$BACKUP_DIR"
471
+ mkdir -p "$SKILLS_DIR" "$AGENTS_DIR" "$RULES_DIR" "$COMMANDS_DIR" "$BACKUP_DIR"
472
+
473
+ # Check and rename global.md to AGENTS.md if it exists
474
+ if [[ -f "$CONFIG_DIR/global.md" ]]; then
475
+ log_info "Found legacy global.md file, renaming to AGENTS.md..."
476
+ mv "$CONFIG_DIR/global.md" "$CONFIG_DIR/AGENTS.md"
477
+ log_ok "Renamed global.md to AGENTS.md"
478
+ fi
422
479
 
423
- collect_instructions
480
+ collect_agents_md
424
481
 
425
482
  local tool_count=0
426
483
 
427
484
  for pattern in "${KNOWN_PATTERNS[@]}"; do
428
- IFS='|' read -r dir_name key tool_name instr_file skills agents rules commands prompts <<< "$pattern"
485
+ IFS='|' read -r dir_name key tool_name agents_md rules commands skills agents <<< "$pattern"
429
486
  local full_path="$HOME/$dir_name"
430
487
 
431
488
  if [[ -d "$full_path" ]]; then
@@ -433,30 +490,28 @@ update_tools() {
433
490
  echo -e "${GREEN}[OK]${NC} ${color}Found: $tool_name${NC}"
434
491
  ((tool_count++))
435
492
 
436
- if [[ "$instr_file" != "." ]] && [[ "$instr_file" != *.json ]] && [[ "$instr_file" != *.yml ]]; then
437
- local actual_path="$HOME/$dir_name/$instr_file"
438
- backup_item "$actual_path" "$dir_name" "instructions"
493
+ if [[ "$agents_md" != "." ]] && [[ "$agents_md" == *.md ]]; then
494
+ local actual_path="$HOME/$dir_name/$agents_md"
495
+ backup_item "$actual_path" "$dir_name" "AGENTS.md"
439
496
  fi
440
497
 
441
- for type_name in skills agents rules commands prompts; do
498
+ for type_name in rules commands skills agents; do
442
499
  local type_dir=""
443
500
  case "$type_name" in
444
- skills) type_dir="$skills" ;;
445
- agents) type_dir="$agents" ;;
446
501
  rules) type_dir="$rules" ;;
447
502
  commands) type_dir="$commands" ;;
448
- prompts) type_dir="$prompts" ;;
503
+ skills) type_dir="$skills" ;;
504
+ agents) type_dir="$agents" ;;
449
505
  esac
450
506
  if [[ "$type_dir" != "." ]]; then
451
507
  local path="$HOME/$dir_name/$type_dir"
452
508
  backup_item "$path" "$dir_name" "$type_name"
453
509
  local target_dir=""
454
510
  case "$type_name" in
455
- skills) target_dir="$SKILLS_DIR" ;;
456
- agents) target_dir="$AGENTS_DIR" ;;
457
511
  rules) target_dir="$RULES_DIR" ;;
458
512
  commands) target_dir="$COMMANDS_DIR" ;;
459
- prompts) target_dir="$PROMPTS_DIR" ;;
513
+ skills) target_dir="$SKILLS_DIR" ;;
514
+ agents) target_dir="$AGENTS_DIR" ;;
460
515
  esac
461
516
  merge_items "$path" "$target_dir" "$type_name" "$tool_name"
462
517
  fi
@@ -473,63 +528,60 @@ update_tools() {
473
528
  log_info "Creating symlinks..."
474
529
 
475
530
  for pattern in "${KNOWN_PATTERNS[@]}"; do
476
- IFS='|' read -r dir_name key tool_name instr_file skills agents rules commands prompts <<< "$pattern"
531
+ IFS='|' read -r dir_name key tool_name agents_md rules commands skills agents <<< "$pattern"
477
532
  local full_path="$HOME/$dir_name"
478
533
 
479
534
  if [[ -d "$full_path" ]]; then
480
535
  local tool_color=$(get_tool_color "$tool_name")
481
- if [[ "$instr_file" != "." ]] && [[ "$instr_file" != *.json ]] && [[ "$instr_file" != *.yml ]]; then
482
- local target="$HOME/$dir_name/$instr_file"
483
- create_symlink "$GLOBAL_MD" "$target"
484
- printf " ${tool_color}%-40s -> %s${NC}\n" "$(beautify_path "$target")" "$(beautify_path "$GLOBAL_MD")"
536
+ if [[ "$agents_md" != "." ]] && [[ "$agents_md" == *.md ]]; then
537
+ local target="$HOME/$dir_name/$agents_md"
538
+ create_symlink "$AGENTS_MD" "$target"
539
+ printf "${tool_color}%-40s -> %s${NC}\n" "$(beautify_path "$target")" "$(beautify_path "$AGENTS_MD")"
485
540
  fi
486
541
 
487
- for type_name in skills agents rules commands prompts; do
542
+ for type_name in rules commands skills agents; do
488
543
  local type_dir=""
489
544
  local source_dir=""
490
545
  case "$type_name" in
491
- skills) type_dir="$skills"; source_dir="$SKILLS_DIR" ;;
492
- agents) type_dir="$agents"; source_dir="$AGENTS_DIR" ;;
493
546
  rules) type_dir="$rules"; source_dir="$RULES_DIR" ;;
494
547
  commands) type_dir="$commands"; source_dir="$COMMANDS_DIR" ;;
495
- prompts) type_dir="$prompts"; source_dir="$PROMPTS_DIR" ;;
548
+ skills) type_dir="$skills"; source_dir="$SKILLS_DIR" ;;
549
+ agents) type_dir="$agents"; source_dir="$AGENTS_DIR" ;;
496
550
  esac
497
551
  if [[ "$type_dir" != "." ]]; then
498
552
  local target="$HOME/$dir_name/$type_dir"
499
553
  create_symlink "$source_dir" "$target"
500
- printf " ${tool_color}%-40s -> %s${NC}\n" "$(beautify_path "$target")" "$(beautify_path "$source_dir")/"
554
+ printf "${tool_color}%-40s -> %s${NC}\n" "$(beautify_path "$target")" "$(beautify_path "$source_dir")/"
501
555
  fi
502
556
  done
503
557
  fi
504
558
  done
505
559
 
506
560
  echo ""
507
- log_info "Done! Shared: skills=$(count_items "$SKILLS_DIR"), agents=$(count_items "$AGENTS_DIR"), rules=$(count_items "$RULES_DIR"), commands=$(count_items "$COMMANDS_DIR"), prompts=$(count_items "$PROMPTS_DIR")"
561
+ log_info "Done! Shared: rules=$(count_items "$RULES_DIR"), commands=$(count_items "$COMMANDS_DIR"), skills=$(count_items "$SKILLS_DIR"), agents=$(count_items "$AGENTS_DIR")"
508
562
  }
509
563
 
510
564
  # Unlink a single tool
511
565
  unlink_single_tool() {
512
566
  local tool_name="$1"
513
567
  local dir_name="$2"
514
- local instr_file="$3"
515
- local skills="$4"
516
- local agents="$5"
517
- local rules="$6"
518
- local commands="$7"
519
- local prompts="$8"
520
- local silent="${9:-false}"
568
+ local agents_md="$3"
569
+ local rules="$4"
570
+ local commands="$5"
571
+ local skills="$6"
572
+ local agents="$7"
573
+ local silent="${8:-false}"
521
574
 
522
575
  local backup_name=$(echo "$dir_name" | tr '/' '_')
523
576
  local worked=false
524
577
 
525
- # Check for instructions link
526
- if [[ "$instr_file" != "." ]]; then
527
- local target="$HOME/$dir_name/$instr_file"
578
+ if [[ "$agents_md" != "." ]]; then
579
+ local target="$HOME/$dir_name/$agents_md"
528
580
  if [[ -L "$target" ]]; then
529
581
  local link_target=$(readlink "$target" 2>/dev/null || true)
530
582
  if [[ "$link_target" == *".ai-global"* ]]; then
531
583
  rm "$target"
532
- local backup_file=$(ls -t "$BACKUP_DIR"/${backup_name}.instructions.* 2>/dev/null | head -1)
584
+ local backup_file=$(ls -t "$BACKUP_DIR"/${backup_name}.AGENTS.md.* 2>/dev/null | head -1)
533
585
  [[ -f "$backup_file" ]] && cp "$backup_file" "$target"
534
586
  worked=true
535
587
  fi
@@ -537,14 +589,13 @@ unlink_single_tool() {
537
589
  fi
538
590
 
539
591
  # Check for components links
540
- for type_name in skills agents rules commands prompts; do
592
+ for type_name in rules commands skills agents; do
541
593
  local type_dir=""
542
594
  case "$type_name" in
543
- skills) type_dir="$skills" ;;
544
- agents) type_dir="$agents" ;;
545
595
  rules) type_dir="$rules" ;;
546
596
  commands) type_dir="$commands" ;;
547
- prompts) type_dir="$prompts" ;;
597
+ skills) type_dir="$skills" ;;
598
+ agents) type_dir="$agents" ;;
548
599
  esac
549
600
  if [[ "$type_dir" != "." ]]; then
550
601
  local target="$HOME/$dir_name/$type_dir"
@@ -588,8 +639,8 @@ unlink_all_tools() {
588
639
  local unlinked_count=0
589
640
  # Scan all known patterns to find and remove any symlinks
590
641
  for pattern in "${KNOWN_PATTERNS[@]}"; do
591
- IFS='|' read -r dir_name key tool_name instr_file skills agents rules commands prompts <<< "$pattern"
592
- if unlink_single_tool "$tool_name" "$dir_name" "$instr_file" "$skills" "$agents" "$rules" "$commands" "$prompts"; then
642
+ IFS='|' read -r dir_name key tool_name agents_md rules commands skills agents <<< "$pattern"
643
+ if unlink_single_tool "$tool_name" "$dir_name" "$agents_md" "$rules" "$commands" "$skills" "$agents"; then
593
644
  ((unlinked_count++))
594
645
  fi
595
646
  done
@@ -634,12 +685,12 @@ unlink_tool() {
634
685
  local found=false
635
686
 
636
687
  for pattern in "${KNOWN_PATTERNS[@]}"; do
637
- IFS='|' read -r dir_name key tool_name instr_file skills agents rules commands prompts <<< "$pattern"
688
+ IFS='|' read -r dir_name key tool_name agents_md rules commands skills agents <<< "$pattern"
638
689
  local tool_lower=$(echo "$tool_name" | tr '[:upper:]' '[:lower:]')
639
690
  local query_lower=$(echo "$tool_query" | tr '[:upper:]' '[:lower:]')
640
691
 
641
692
  if [[ "$tool_lower" == *"$query_lower"* ]] || [[ "$dir_name" == *"$query_lower"* ]] || [[ "$key" == "$query_lower" ]]; then
642
- if ! unlink_single_tool "$tool_name" "$dir_name" "$instr_file" "$skills" "$agents" "$rules" "$commands" "$prompts"; then
693
+ if ! unlink_single_tool "$tool_name" "$dir_name" "$agents_md" "$rules" "$commands" "$skills" "$agents"; then
643
694
  log_info "$tool_name is not currently linked."
644
695
  fi
645
696
  found=true
@@ -825,51 +876,32 @@ download_from_github() {
825
876
  fi
826
877
  }
827
878
 
828
- # Add item to a type directory
829
- add_item() {
830
- local type="$1"
831
- local input="$2"
879
+ # Add skill to skills directory
880
+ add_skill() {
881
+ local input="$1"
832
882
 
833
883
  if [[ -z "$input" ]]; then
834
- log_error "Usage: ai-global $type <file|github-repo>"
884
+ log_error "Usage: ai-global skill <file|github-repo>"
835
885
  echo ""
836
886
  echo "Examples:"
837
- echo " ai-global $type react.md"
838
- echo " ai-global $type /path/to/file.md"
839
- echo " ai-global $type user/repo"
840
- echo " ai-global $type https://github.com/user/repo"
841
- echo " ai-global $type user/repo/path/to/file.md"
887
+ echo " ai-global skill user/repo"
888
+ echo " ai-global skill https://github.com/user/repo"
842
889
  return 1
843
890
  fi
844
891
 
845
- local target_dir=""
846
- case "$type" in
847
- skill) target_dir="$SKILLS_DIR" ;;
848
- agent) target_dir="$AGENTS_DIR" ;;
849
- rule) target_dir="$RULES_DIR" ;;
850
- command) target_dir="$COMMANDS_DIR" ;;
851
- prompt) target_dir="$PROMPTS_DIR" ;;
852
- esac
853
-
892
+ local target_dir="$SKILLS_DIR"
854
893
  mkdir -p "$target_dir"
855
894
 
856
895
  # Check if it's a GitHub reference
857
896
  if is_github_ref "$input"; then
858
- download_from_github "$type" "$input" "$target_dir"
859
- elif [[ -f "$input" ]]; then
860
- # Local file
861
- local basename=$(basename "$input")
862
- cp "$input" "$target_dir/$basename"
863
- log_ok "Added $type: $target_dir/$basename"
897
+ download_from_github "skill" "$input" "$target_dir"
864
898
  else
865
- # Create new file
866
- local target_file="$target_dir/$input"
867
- if [[ ! "$input" == *.md ]]; then
868
- target_file="$target_dir/${input}.md"
869
- fi
870
- touch "$target_file"
871
- log_ok "Created $type: $target_file"
872
- echo "Edit: $target_file"
899
+ log_error "Invalid input. Please provide a GitHub repository."
900
+ echo ""
901
+ echo "Examples:"
902
+ echo " ai-global skill user/repo"
903
+ echo " ai-global skill https://github.com/user/repo"
904
+ return 1
873
905
  fi
874
906
  }
875
907
 
@@ -934,6 +966,13 @@ upgrade() {
934
966
  mv "$exec_temp" "$current_script"
935
967
 
936
968
  log_ok "Upgraded to v$remote_version"
969
+
970
+ # Check and rename global.md to AGENTS.md after upgrade
971
+ if [[ -f "$CONFIG_DIR/global.md" ]]; then
972
+ log_info "Found legacy global.md file, renaming to AGENTS.md..."
973
+ mv "$CONFIG_DIR/global.md" "$CONFIG_DIR/AGENTS.md"
974
+ log_ok "Renamed global.md to AGENTS.md"
975
+ fi
937
976
  else
938
977
  rm -f "$exec_temp"
939
978
  log_error "Failed to download update"
@@ -958,10 +997,6 @@ show_help() {
958
997
  echo ""
959
998
  echo -e "${BLUE}RESOURCE MANAGEMENT:${NC}"
960
999
  echo -e " ${GREEN}skill <user/repo>${NC} Add a skill"
961
- echo -e " ${GREEN}agent <source>${NC} Add an agent"
962
- echo -e " ${GREEN}rule <source>${NC} Add a rule"
963
- echo -e " ${GREEN}command <source>${NC} Add a command"
964
- echo -e " ${GREEN}prompt <source>${NC} Add a prompt"
965
1000
  echo ""
966
1001
  echo -e "${BLUE}SYSTEM COMMANDS:${NC}"
967
1002
  echo -e " ${GREEN}upgrade${NC} Upgrade ai-global to latest version"
@@ -984,11 +1019,11 @@ main() {
984
1019
  help|--help|-h) show_help; exit 0 ;;
985
1020
  list) list_supported; exit 0 ;;
986
1021
  version|-v|--version) show_version; exit 0 ;;
987
- skill|agent|rule|command|prompt|unlink|status|backups|upgrade|uninstall)
1022
+ skill|unlink|status|backups|upgrade|uninstall)
988
1023
  if [[ ! -d "$CONFIG_DIR" ]]; then
989
1024
  log_info "No configuration found. Running initial scan..."
990
1025
  update_tools
991
- [[ "$cmd" == "skill" || "$cmd" == "agent" || "$cmd" == "rule" || "$cmd" == "command" || "$cmd" == "prompt" || "$cmd" == "status" ]] || exit 0
1026
+ [[ "$cmd" == "skill" || "$cmd" == "status" ]] || exit 0
992
1027
  fi
993
1028
  ;;
994
1029
  version|-v|--version|help|--help|-h) ;;
@@ -1001,11 +1036,7 @@ main() {
1001
1036
  list) list_supported ;;
1002
1037
  backups) list_backups ;;
1003
1038
  unlink) unlink_tool "$2" ;;
1004
- skill) add_item "skill" "$2" ;;
1005
- agent) add_item "agent" "$2" ;;
1006
- rule) add_item "rule" "$2" ;;
1007
- command) add_item "command" "$2" ;;
1008
- prompt) add_item "prompt" "$2" ;;
1039
+ skill) add_skill "$2" ;;
1009
1040
  upgrade) upgrade ;;
1010
1041
  uninstall) uninstall ;;
1011
1042
  version|-v|--version) show_version ;;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ai-global",
3
- "version": "1.12.0",
3
+ "version": "1.14.0",
4
4
  "description": "Unified configuration manager for AI coding assistants",
5
5
  "bin": {
6
6
  "ai-global": "ai-global"