ai-global 1.13.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 +217 -193
  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.13.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,23 +443,23 @@ collect_instructions() {
400
443
  fi
401
444
  done
402
445
 
403
- # Skip if global.md already exists
404
- if [[ -f "$GLOBAL_MD" ]]; then
405
- log_ok "Preserved existing $GLOBAL_MD (skipped merge)"
446
+ # Skip if AGENTS.md already exists
447
+ if [[ -f "$AGENTS_MD" ]]; then
448
+ log_ok "Preserved existing AGENTS.md (skipped merge)"
406
449
  return
407
450
  fi
408
451
 
409
- # Only create and merge if global.md doesn't exist
452
+ # Only create and merge if AGENTS.md doesn't exist
410
453
  if [[ $found_count -gt 0 ]]; then
411
- echo -e "$merged_content" > "$GLOBAL_MD"
412
- log_ok "Merged instructions from $found_count tool(s) to $GLOBAL_MD"
454
+ echo -e "$merged_content" > "$AGENTS_MD"
455
+ log_ok "Merged AGENTS.md from $found_count tool(s) to $AGENTS_MD"
413
456
  else
414
- cat > "$GLOBAL_MD" << 'EOF'
415
- # AI Assistant Instructions
457
+ cat > "$AGENTS_MD" << 'EOF'
458
+ # AI Coding Assistant
416
459
 
417
- <!-- Add your instructions here. They will sync to all AI tools. -->
460
+ <!-- Add your prompts here. They will sync to all AI tools. -->
418
461
  EOF
419
- log_ok "Created: $GLOBAL_MD"
462
+ log_ok "Created: $AGENTS_MD"
420
463
  fi
421
464
  }
422
465
 
@@ -425,14 +468,21 @@ update_tools() {
425
468
  log_info "Scanning for AI tools..."
426
469
  echo ""
427
470
 
428
- 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"
429
472
 
430
- collect_instructions
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
479
+
480
+ collect_agents_md
431
481
 
432
482
  local tool_count=0
433
483
 
434
484
  for pattern in "${KNOWN_PATTERNS[@]}"; do
435
- 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"
436
486
  local full_path="$HOME/$dir_name"
437
487
 
438
488
  if [[ -d "$full_path" ]]; then
@@ -440,30 +490,28 @@ update_tools() {
440
490
  echo -e "${GREEN}[OK]${NC} ${color}Found: $tool_name${NC}"
441
491
  ((tool_count++))
442
492
 
443
- if [[ "$instr_file" != "." ]] && [[ "$instr_file" != *.json ]] && [[ "$instr_file" != *.yml ]]; then
444
- local actual_path="$HOME/$dir_name/$instr_file"
445
- 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"
446
496
  fi
447
497
 
448
- for type_name in skills agents rules commands prompts; do
498
+ for type_name in rules commands skills agents; do
449
499
  local type_dir=""
450
500
  case "$type_name" in
451
- skills) type_dir="$skills" ;;
452
- agents) type_dir="$agents" ;;
453
501
  rules) type_dir="$rules" ;;
454
502
  commands) type_dir="$commands" ;;
455
- prompts) type_dir="$prompts" ;;
503
+ skills) type_dir="$skills" ;;
504
+ agents) type_dir="$agents" ;;
456
505
  esac
457
506
  if [[ "$type_dir" != "." ]]; then
458
507
  local path="$HOME/$dir_name/$type_dir"
459
508
  backup_item "$path" "$dir_name" "$type_name"
460
509
  local target_dir=""
461
510
  case "$type_name" in
462
- skills) target_dir="$SKILLS_DIR" ;;
463
- agents) target_dir="$AGENTS_DIR" ;;
464
511
  rules) target_dir="$RULES_DIR" ;;
465
512
  commands) target_dir="$COMMANDS_DIR" ;;
466
- prompts) target_dir="$PROMPTS_DIR" ;;
513
+ skills) target_dir="$SKILLS_DIR" ;;
514
+ agents) target_dir="$AGENTS_DIR" ;;
467
515
  esac
468
516
  merge_items "$path" "$target_dir" "$type_name" "$tool_name"
469
517
  fi
@@ -480,63 +528,60 @@ update_tools() {
480
528
  log_info "Creating symlinks..."
481
529
 
482
530
  for pattern in "${KNOWN_PATTERNS[@]}"; do
483
- 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"
484
532
  local full_path="$HOME/$dir_name"
485
533
 
486
534
  if [[ -d "$full_path" ]]; then
487
535
  local tool_color=$(get_tool_color "$tool_name")
488
- if [[ "$instr_file" != "." ]] && [[ "$instr_file" != *.json ]] && [[ "$instr_file" != *.yml ]]; then
489
- local target="$HOME/$dir_name/$instr_file"
490
- create_symlink "$GLOBAL_MD" "$target"
491
- 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")"
492
540
  fi
493
541
 
494
- for type_name in skills agents rules commands prompts; do
542
+ for type_name in rules commands skills agents; do
495
543
  local type_dir=""
496
544
  local source_dir=""
497
545
  case "$type_name" in
498
- skills) type_dir="$skills"; source_dir="$SKILLS_DIR" ;;
499
- agents) type_dir="$agents"; source_dir="$AGENTS_DIR" ;;
500
546
  rules) type_dir="$rules"; source_dir="$RULES_DIR" ;;
501
547
  commands) type_dir="$commands"; source_dir="$COMMANDS_DIR" ;;
502
- 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" ;;
503
550
  esac
504
551
  if [[ "$type_dir" != "." ]]; then
505
552
  local target="$HOME/$dir_name/$type_dir"
506
553
  create_symlink "$source_dir" "$target"
507
- 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")/"
508
555
  fi
509
556
  done
510
557
  fi
511
558
  done
512
559
 
513
560
  echo ""
514
- 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")"
515
562
  }
516
563
 
517
564
  # Unlink a single tool
518
565
  unlink_single_tool() {
519
566
  local tool_name="$1"
520
567
  local dir_name="$2"
521
- local instr_file="$3"
522
- local skills="$4"
523
- local agents="$5"
524
- local rules="$6"
525
- local commands="$7"
526
- local prompts="$8"
527
- 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}"
528
574
 
529
575
  local backup_name=$(echo "$dir_name" | tr '/' '_')
530
576
  local worked=false
531
577
 
532
- # Check for instructions link
533
- if [[ "$instr_file" != "." ]]; then
534
- local target="$HOME/$dir_name/$instr_file"
578
+ if [[ "$agents_md" != "." ]]; then
579
+ local target="$HOME/$dir_name/$agents_md"
535
580
  if [[ -L "$target" ]]; then
536
581
  local link_target=$(readlink "$target" 2>/dev/null || true)
537
582
  if [[ "$link_target" == *".ai-global"* ]]; then
538
583
  rm "$target"
539
- 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)
540
585
  [[ -f "$backup_file" ]] && cp "$backup_file" "$target"
541
586
  worked=true
542
587
  fi
@@ -544,14 +589,13 @@ unlink_single_tool() {
544
589
  fi
545
590
 
546
591
  # Check for components links
547
- for type_name in skills agents rules commands prompts; do
592
+ for type_name in rules commands skills agents; do
548
593
  local type_dir=""
549
594
  case "$type_name" in
550
- skills) type_dir="$skills" ;;
551
- agents) type_dir="$agents" ;;
552
595
  rules) type_dir="$rules" ;;
553
596
  commands) type_dir="$commands" ;;
554
- prompts) type_dir="$prompts" ;;
597
+ skills) type_dir="$skills" ;;
598
+ agents) type_dir="$agents" ;;
555
599
  esac
556
600
  if [[ "$type_dir" != "." ]]; then
557
601
  local target="$HOME/$dir_name/$type_dir"
@@ -595,8 +639,8 @@ unlink_all_tools() {
595
639
  local unlinked_count=0
596
640
  # Scan all known patterns to find and remove any symlinks
597
641
  for pattern in "${KNOWN_PATTERNS[@]}"; do
598
- IFS='|' read -r dir_name key tool_name instr_file skills agents rules commands prompts <<< "$pattern"
599
- 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
600
644
  ((unlinked_count++))
601
645
  fi
602
646
  done
@@ -641,12 +685,12 @@ unlink_tool() {
641
685
  local found=false
642
686
 
643
687
  for pattern in "${KNOWN_PATTERNS[@]}"; do
644
- 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"
645
689
  local tool_lower=$(echo "$tool_name" | tr '[:upper:]' '[:lower:]')
646
690
  local query_lower=$(echo "$tool_query" | tr '[:upper:]' '[:lower:]')
647
691
 
648
692
  if [[ "$tool_lower" == *"$query_lower"* ]] || [[ "$dir_name" == *"$query_lower"* ]] || [[ "$key" == "$query_lower" ]]; then
649
- 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
650
694
  log_info "$tool_name is not currently linked."
651
695
  fi
652
696
  found=true
@@ -832,51 +876,32 @@ download_from_github() {
832
876
  fi
833
877
  }
834
878
 
835
- # Add item to a type directory
836
- add_item() {
837
- local type="$1"
838
- local input="$2"
879
+ # Add skill to skills directory
880
+ add_skill() {
881
+ local input="$1"
839
882
 
840
883
  if [[ -z "$input" ]]; then
841
- log_error "Usage: ai-global $type <file|github-repo>"
884
+ log_error "Usage: ai-global skill <file|github-repo>"
842
885
  echo ""
843
886
  echo "Examples:"
844
- echo " ai-global $type react.md"
845
- echo " ai-global $type /path/to/file.md"
846
- echo " ai-global $type user/repo"
847
- echo " ai-global $type https://github.com/user/repo"
848
- 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"
849
889
  return 1
850
890
  fi
851
891
 
852
- local target_dir=""
853
- case "$type" in
854
- skill) target_dir="$SKILLS_DIR" ;;
855
- agent) target_dir="$AGENTS_DIR" ;;
856
- rule) target_dir="$RULES_DIR" ;;
857
- command) target_dir="$COMMANDS_DIR" ;;
858
- prompt) target_dir="$PROMPTS_DIR" ;;
859
- esac
860
-
892
+ local target_dir="$SKILLS_DIR"
861
893
  mkdir -p "$target_dir"
862
894
 
863
895
  # Check if it's a GitHub reference
864
896
  if is_github_ref "$input"; then
865
- download_from_github "$type" "$input" "$target_dir"
866
- elif [[ -f "$input" ]]; then
867
- # Local file
868
- local basename=$(basename "$input")
869
- cp "$input" "$target_dir/$basename"
870
- log_ok "Added $type: $target_dir/$basename"
897
+ download_from_github "skill" "$input" "$target_dir"
871
898
  else
872
- # Create new file
873
- local target_file="$target_dir/$input"
874
- if [[ ! "$input" == *.md ]]; then
875
- target_file="$target_dir/${input}.md"
876
- fi
877
- touch "$target_file"
878
- log_ok "Created $type: $target_file"
879
- 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
880
905
  fi
881
906
  }
882
907
 
@@ -941,6 +966,13 @@ upgrade() {
941
966
  mv "$exec_temp" "$current_script"
942
967
 
943
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
944
976
  else
945
977
  rm -f "$exec_temp"
946
978
  log_error "Failed to download update"
@@ -965,10 +997,6 @@ show_help() {
965
997
  echo ""
966
998
  echo -e "${BLUE}RESOURCE MANAGEMENT:${NC}"
967
999
  echo -e " ${GREEN}skill <user/repo>${NC} Add a skill"
968
- echo -e " ${GREEN}agent <source>${NC} Add an agent"
969
- echo -e " ${GREEN}rule <source>${NC} Add a rule"
970
- echo -e " ${GREEN}command <source>${NC} Add a command"
971
- echo -e " ${GREEN}prompt <source>${NC} Add a prompt"
972
1000
  echo ""
973
1001
  echo -e "${BLUE}SYSTEM COMMANDS:${NC}"
974
1002
  echo -e " ${GREEN}upgrade${NC} Upgrade ai-global to latest version"
@@ -991,11 +1019,11 @@ main() {
991
1019
  help|--help|-h) show_help; exit 0 ;;
992
1020
  list) list_supported; exit 0 ;;
993
1021
  version|-v|--version) show_version; exit 0 ;;
994
- skill|agent|rule|command|prompt|unlink|status|backups|upgrade|uninstall)
1022
+ skill|unlink|status|backups|upgrade|uninstall)
995
1023
  if [[ ! -d "$CONFIG_DIR" ]]; then
996
1024
  log_info "No configuration found. Running initial scan..."
997
1025
  update_tools
998
- [[ "$cmd" == "skill" || "$cmd" == "agent" || "$cmd" == "rule" || "$cmd" == "command" || "$cmd" == "prompt" || "$cmd" == "status" ]] || exit 0
1026
+ [[ "$cmd" == "skill" || "$cmd" == "status" ]] || exit 0
999
1027
  fi
1000
1028
  ;;
1001
1029
  version|-v|--version|help|--help|-h) ;;
@@ -1008,11 +1036,7 @@ main() {
1008
1036
  list) list_supported ;;
1009
1037
  backups) list_backups ;;
1010
1038
  unlink) unlink_tool "$2" ;;
1011
- skill) add_item "skill" "$2" ;;
1012
- agent) add_item "agent" "$2" ;;
1013
- rule) add_item "rule" "$2" ;;
1014
- command) add_item "command" "$2" ;;
1015
- prompt) add_item "prompt" "$2" ;;
1039
+ skill) add_skill "$2" ;;
1016
1040
  upgrade) upgrade ;;
1017
1041
  uninstall) uninstall ;;
1018
1042
  version|-v|--version) show_version ;;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ai-global",
3
- "version": "1.13.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"