@jaguilar87/gaia 5.0.5 → 5.0.7

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.
@@ -8,7 +8,7 @@
8
8
  {
9
9
  "name": "gaia-ops",
10
10
  "description": "Full DevOps orchestration for Claude Code. Eight specialized agents handle the complete development lifecycle — analysis, planning, execution, and deployment. Gaia-Ops scans your codebase to understand it and injects the right context into each sub-agent. Every command is classified by risk: read-only runs freely, state changes pause for your approval, and irreversible operations are permanently blocked.",
11
- "version": "5.0.5",
11
+ "version": "5.0.7",
12
12
  "category": "devops",
13
13
  "author": {
14
14
  "name": "jaguilar87",
@@ -20,7 +20,7 @@
20
20
  {
21
21
  "name": "gaia-security",
22
22
  "description": "Keeps you in the loop only when it matters. Gaia Security analyzes every command and classifies it into risk tiers: read-only queries run freely, simulations and validations pass through, and state-changing operations (create, delete, apply, push) pause for your explicit approval before executing. Irreversible commands like dropping databases or deleting cloud infrastructure are permanently blocked.",
23
- "version": "5.0.5",
23
+ "version": "5.0.7",
24
24
  "category": "security",
25
25
  "author": {
26
26
  "name": "jaguilar87",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gaia-ops",
3
- "version": "5.0.5",
3
+ "version": "5.0.7",
4
4
  "description": "Security-first orchestrator with specialized agents, hooks, and governance for AI coding",
5
5
  "author": {
6
6
  "name": "jaguilar87",
package/CHANGELOG.md CHANGED
@@ -7,6 +7,25 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [5.0.7] - 2026-06-12
11
+
12
+ ### Fixed
13
+
14
+ - `gaia doctor` now passes (rc=0) on a clean install: the `commands` symlink (a removed surface) was dropped from the symlink checks, and `memory_fts5_count` now reads the canonical gaia.db store instead of the legacy search.db — eliminating the two warnings that made a fresh install report "degraded" in 5.0.5/5.0.6.
15
+
16
+ ### Changed
17
+
18
+ - Release pipeline: the sandbox validation harness is now a PRE-publish gate (runs against the packed tarball before `npm publish`), and the harness fails if `gaia doctor` returns rc>=1 — so a degraded build can no longer be published.
19
+
20
+ ## [5.0.6] - 2026-06-12
21
+
22
+ ### Fixed
23
+
24
+ - **`gaia doctor` no longer reports a freshly-installed workspace as "degraded"
25
+ (rc=1)** — an empty project-context contracts table is now `info` (an advisory
26
+ to run `gaia scan`) instead of `warning`, so a clean install passes doctor with
27
+ rc=0. Fixes the post-publish sandbox-validation failure seen in 5.0.5.
28
+
10
29
  ## [5.0.5] - 2026-06-11
11
30
 
12
31
  ### Repository Hygiene, Python 3.11 Floor, v18 Schema Floor + Drift Guard, Release-Pipeline Hardening
@@ -345,7 +345,7 @@ def merge_local_hooks(
345
345
  # ---------------------------------------------------------------------------
346
346
 
347
347
  # Directories the package exposes via .claude/<name> symlinks
348
- _SYMLINK_NAMES = ["agents", "tools", "hooks", "commands", "config", "skills"]
348
+ _SYMLINK_NAMES = ["agents", "tools", "hooks", "config", "skills"]
349
349
  # Files (not dirs) we link or copy into .claude/
350
350
  _SYMLINK_FILES = ["CHANGELOG.md"]
351
351
 
package/bin/cli/doctor.py CHANGED
@@ -762,7 +762,7 @@ def _extract_check_values(
762
762
  @register_check("Symlinks", order=50)
763
763
  def check_symlinks(project_root: Path) -> dict:
764
764
  """Check .claude/ symlinks resolve to package content."""
765
- names = ["agents", "tools", "hooks", "commands", "config", "skills", "CHANGELOG.md"]
765
+ names = ["agents", "tools", "hooks", "config", "skills", "CHANGELOG.md"]
766
766
  critical = {"agents", "hooks", "skills"}
767
767
  valid = 0
768
768
  has_critical_missing = False
@@ -935,7 +935,7 @@ def check_project_context(project_root: Path) -> dict:
935
935
  return _result("project-context", "warning", f"DB read error: {exc}", "Run `gaia scan`")
936
936
 
937
937
  if count == 0:
938
- return _result("project-context", "warning", "No contracts in DB", "Run `gaia scan`")
938
+ return _result("project-context", "info", "No contracts in DB", "Run `gaia scan`")
939
939
 
940
940
  if count < 3:
941
941
  return _result(
@@ -1053,34 +1053,36 @@ def check_memory_fts5_db(project_root: Path) -> dict:
1053
1053
 
1054
1054
  @register_check("memory_fts5_count", order=130)
1055
1055
  def check_memory_fts5_count(project_root: Path) -> dict:
1056
- """Check FTS5 indexed count against total episode count in index.json."""
1057
- index_path = project_root / ".claude" / "project-context" / "episodic-memory" / "index.json"
1058
-
1059
- if not index_path.is_file():
1060
- return _result("memory_fts5_count", "info", "index.json not found — no episodes yet")
1061
-
1062
- index_data = _read_json(index_path)
1063
- if not index_data:
1064
- return _result("memory_fts5_count", "info", "index.json unreadable")
1065
-
1066
- total = len(index_data.get("episodes") or [])
1056
+ """Check FTS5 indexed count against total episode count in gaia.db.
1067
1057
 
1058
+ T6 migration: replaced legacy search_store.count()/index.json check
1059
+ (which read search.db and ignored GAIA_DATA_DIR) with queries against
1060
+ the canonical gaia.db -- episodes_fts for indexed, episodes for total.
1061
+ """
1068
1062
  try:
1069
1063
  import sys as _sys
1070
- # Ensure package root is on path for lazy import
1071
1064
  pkg_root = str(_package_root())
1072
1065
  if pkg_root not in _sys.path:
1073
1066
  _sys.path.insert(0, pkg_root)
1074
- from tools.memory import search_store # noqa: PLC0415
1075
- indexed = search_store.count()
1067
+ from gaia.store.writer import _connect as _store_connect
1076
1068
  except ImportError:
1077
1069
  return _result(
1078
1070
  "memory_fts5_count",
1079
1071
  "info",
1080
- "tools.memory.search_store not importable — FTS5 count skipped",
1072
+ "gaia.store.writer not importable — FTS5 count skipped",
1081
1073
  )
1074
+
1075
+ try:
1076
+ con = _store_connect()
1077
+ try:
1078
+ indexed_row = con.execute("SELECT COUNT(*) FROM episodes_fts").fetchone()
1079
+ indexed = indexed_row[0] if indexed_row else 0
1080
+ total_row = con.execute("SELECT COUNT(*) FROM episodes").fetchone()
1081
+ total = total_row[0] if total_row else 0
1082
+ finally:
1083
+ con.close()
1082
1084
  except Exception as exc:
1083
- return _result("memory_fts5_count", "info", f"Could not query FTS5 count: {exc}")
1085
+ return _result("memory_fts5_count", "info", f"Could not query FTS5 count from gaia.db: {exc}")
1084
1086
 
1085
1087
  if total == 0:
1086
1088
  return _result("memory_fts5_count", "pass", "No episodes to index")
@@ -590,11 +590,16 @@ else
590
590
  rc=$?
591
591
  fi
592
592
  ms=$(( $(now_ms) - t0 ))
593
- # doctor may exit 1 on warnings; allow rc=0 or rc=1 if json is parseable
594
- if python3 -c "import json,sys; d=json.loads(sys.argv[1]); c=d['checks']; p=sum(1 for r in c if r['severity']=='pass'); t=len(c); sys.exit(0 if t>=5 and p>=max(1,t-3) else 1)" "${out}" 2>/dev/null; then
593
+ # The harness gate must not pass a degraded doctor: a non-zero rc means at
594
+ # least one check is warning/error, so treat rc>=1 as a hard FAILURE. Only a
595
+ # clean rc=0 (all checks pass/info) with parseable JSON counts as PASS.
596
+ if [[ "${rc}" -ne 0 ]]; then
597
+ nonpass="$(python3 -c "import json,sys; d=json.loads(sys.argv[1]); print(', '.join(f\"{r['name']}={r['severity']}\" for r in d['checks'] if r['severity'] not in ('pass','info')))" "${out}" 2>/dev/null || echo "unparseable output")"
598
+ record "gaia doctor --json" "FAIL" "doctor returned rc=${rc}; non-pass: ${nonpass:-none}" "${ms}"
599
+ elif python3 -c "import json,sys; d=json.loads(sys.argv[1]); c=d['checks']; t=len(c); sys.exit(0 if t>=5 else 1)" "${out}" 2>/dev/null; then
595
600
  total=$(python3 -c "import json,sys; d=json.loads(sys.argv[1]); print(len(d['checks']))" "${out}")
596
601
  passed=$(python3 -c "import json,sys; d=json.loads(sys.argv[1]); print(sum(1 for r in d['checks'] if r['severity']=='pass'))" "${out}")
597
- record "gaia doctor --json" "PASS" "${passed}/${total} checks passed" "${ms}"
602
+ record "gaia doctor --json" "PASS" "rc=0, ${passed}/${total} checks passed" "${ms}"
598
603
  else
599
604
  record "gaia doctor --json" "FAIL" "parse/threshold failure (rc=${rc})" "${ms}"
600
605
  fi
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gaia-ops",
3
- "version": "5.0.5",
3
+ "version": "5.0.7",
4
4
  "description": "Full DevOps orchestration for Claude Code. Eight specialized agents handle the complete development lifecycle \u2014 analysis, planning, execution, and deployment. Gaia-Ops scans your codebase to understand it and injects the right context into each sub-agent. Every command is classified by risk: read-only runs freely, state changes pause for your approval, and irreversible operations are permanently blocked.",
5
5
  "author": {
6
6
  "name": "jaguilar87",
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: gaia-patterns
3
- description: Use when building or modifying gaia-ops components -- agents, skills, hooks, CLI tools, commands, or routing config
3
+ description: Use when building or modifying gaia-ops components -- agents, skills, hooks, CLI tools, or routing config
4
4
  metadata:
5
5
  user-invocable: false
6
6
  type: domain
@@ -77,10 +77,6 @@ Agents get instantiated as: identity (.md) + skills (injected from frontmatter)
77
77
 
78
78
  CLI tools live in `bin/` and are registered in `package.json` `bin` field. Pattern: parse args, resolve paths (follow symlinks to source), run checks, exit with code. `gaia doctor` is the diagnostic model -- read it first.
79
79
 
80
- ## Command Patterns
81
-
82
- Slash commands live in `commands/<name>.md` -- markdown files that instruct the orchestrator on `/<name>`. To add: create the `.md`, add to `build/<plugin>.manifest.json`.
83
-
84
80
  ## Documentation Drift Awareness
85
81
 
86
82
  When you modify any Gaia component (hook, skill, agent definition, routing config, security rule), check if existing reference docs describe that component's behavior. If drift exists, report it via `cross_layer_impacts` in your agent_contract_handoff. The orchestrator then decides whether to dispatch a documentation update task.
@@ -91,7 +87,7 @@ When you modify any Gaia component (hook, skill, agent definition, routing confi
91
87
  - Changed `_is_protected()` paths in `adapters/claude_code.py` → check `security-tiers/SKILL.md` for path documentation
92
88
  - Added a new agent definition → check `gaia-patterns/reference.md` for agents table
93
89
  - Modified hook enforcement logic → check `security-tiers` and `agent-protocol` references
94
- - When adding or modifying files in agents/, skills/, hooks/, commands/, config/, bin/, tests/, build/ or the repo root, load Skill('readme-writing') to update the relevant README.md
90
+ - When adding or modifying files in agents/, skills/, hooks/, config/, bin/, tests/, build/ or the repo root, load Skill('readme-writing') to update the relevant README.md
95
91
 
96
92
  **Format:** In `cross_layer_impacts`, list the doc file and the behavior change, e.g.:
97
93
  ```
@@ -80,14 +80,6 @@ SessionStart emits a one-shot `hookSpecificOutput.additionalContext` manifest (E
80
80
  | `skill-creation/` | Technique | Injected (gaia-system) |
81
81
  | `skills/reference.md` | Reference | On-demand (shared security-tiers ref) |
82
82
 
83
- ### Commands (slash commands)
84
-
85
- | Command | File | Purpose |
86
- |---------|------|---------|
87
- | `/gaia` | `commands/gaia.md` | Invoke gaia meta-agent |
88
- | `/scan-project` | `commands/scan-project.md` | Scan project, update project context in ~/.gaia/gaia.db |
89
- | `/gaia-plan` | `commands/gaia-plan.md` | Plan a feature, create brief, decompose into tasks |
90
-
91
83
  ### Tools (7 subsystems)
92
84
 
93
85
  | Subsystem | Location | Purpose |
@@ -139,7 +131,7 @@ The package ships a single `gaia` binary (`bin/gaia.js`) that dispatches to Pyth
139
131
 
140
132
  | Mode | Package | What ships |
141
133
  |------|---------|-----------|
142
- | `gaia-ops` | `@jaguilar87/gaia` (full) | All hooks, all modules, all agents, all skills, all commands, all tools, all config |
134
+ | `gaia-ops` | `@jaguilar87/gaia` (full) | All hooks, all modules, all agents, all skills, all tools, all config |
143
135
  | `gaia-security` | `@jaguilar87/gaia` (security dist) | 6 hooks (`pre_tool_use`, `post_tool_use`, `stop_hook`, `user_prompt_submit`, `session_start`, `session_end_hook`), all modules, no agents, no skills, no config |
144
136
 
145
137
  ### Detection Cascade (`hooks/modules/core/plugin_mode.py`)
@@ -159,7 +151,6 @@ The package ships a single `gaia` binary (`bin/gaia.js`) that dispatches to Pyth
159
151
  | T3 approval | Claude Code native dialog (`permissionDecision: ask`) | Hook blocks with nonce, orchestrator approval flow |
160
152
  | Agents | None | 8 agents routed by orchestrator |
161
153
  | Skills | None | 24 skills injected per frontmatter |
162
- | Commands | None | 7 slash commands |
163
154
  | PreToolUse matchers | `Bash` only | `Bash`, `Task`, `Agent`, `SendMessage`, multi-tool |
164
155
  | File write protection | `_is_protected()` blocks hooks/ and settings*.json for Edit/Write tools | Same -- fires regardless of permissionMode |
165
156
 
@@ -206,7 +197,7 @@ npm publish # publishes @jaguilar87/gaia
206
197
  3. Run `scripts/bootstrap_database.sh` -- seeds the schema (v17), agent rows, and `schema_version`. Fail-loud: any non-zero exit writes `~/.gaia/last-install-error.json` and propagates the error.
207
198
  4. Merge permissions, env vars, and agent key into `settings.local.json` (preserves user config).
208
199
  5. Merge hooks from `hooks.json` into `settings.local.json` via the consolidated `merge_hooks` step.
209
- 6. Create `.claude/{agents, tools, hooks, commands, templates, config, skills}` symlinks (7) plus `CHANGELOG.md` file link.
200
+ 6. Create `.claude/{agents, tools, hooks, config, skills}` symlinks (5) plus `CHANGELOG.md` file link.
210
201
  7. Write `plugin-registry.json` with `installed[].name == "gaia-ops"` (or `gaia-security`).
211
202
  8. Verification.
212
203
 
@@ -229,8 +220,6 @@ The hook invoker is `python3 <script>` rather than executing the script directly
229
220
  .claude/agents -> node_modules/@jaguilar87/gaia/agents/
230
221
  .claude/tools -> node_modules/@jaguilar87/gaia/tools/
231
222
  .claude/hooks -> node_modules/@jaguilar87/gaia/hooks/
232
- .claude/commands -> node_modules/@jaguilar87/gaia/commands/
233
- .claude/templates -> node_modules/@jaguilar87/gaia/templates/
234
223
  .claude/config -> node_modules/@jaguilar87/gaia/config/
235
224
  .claude/skills -> node_modules/@jaguilar87/gaia/skills/
236
225
  .claude/CHANGELOG.md (file link) -> node_modules/@jaguilar87/gaia/CHANGELOG.md
@@ -333,7 +322,6 @@ ln -sf /home/jorge/ws/me/gaia-dev/agents .claude/agents
333
322
  ln -sf /home/jorge/ws/me/gaia-dev/hooks .claude/hooks
334
323
  ln -sf /home/jorge/ws/me/gaia-dev/skills .claude/skills
335
324
  ln -sf /home/jorge/ws/me/gaia-dev/tools .claude/tools
336
- ln -sf /home/jorge/ws/me/gaia-dev/commands .claude/commands
337
325
  ln -sf /home/jorge/ws/me/gaia-dev/config .claude/config
338
326
  ```
339
327
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gaia-security",
3
- "version": "5.0.5",
3
+ "version": "5.0.7",
4
4
  "description": "Keeps you in the loop only when it matters. Gaia Security analyzes every command and classifies it into risk tiers: read-only queries run freely, simulations and validations pass through, and state-changing operations (create, delete, apply, push) pause for your explicit approval before executing. Irreversible commands like dropping databases or deleting cloud infrastructure are permanently blocked.",
5
5
  "author": {
6
6
  "name": "jaguilar87",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jaguilar87/gaia",
3
- "version": "5.0.5",
3
+ "version": "5.0.7",
4
4
  "description": "Multi-agent orchestration system for Claude Code - DevOps automation toolkit",
5
5
  "main": "index.js",
6
6
  "type": "module",
package/pyproject.toml CHANGED
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "gaia"
3
- version = "5.0.5"
3
+ version = "5.0.7"
4
4
  description = "Multi-agent orchestration system for Claude Code - DevOps automation toolkit"
5
5
  requires-python = ">=3.11"
6
6
  license = {text = "MIT"}
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: gaia-patterns
3
- description: Use when building or modifying gaia-ops components -- agents, skills, hooks, CLI tools, commands, or routing config
3
+ description: Use when building or modifying gaia-ops components -- agents, skills, hooks, CLI tools, or routing config
4
4
  metadata:
5
5
  user-invocable: false
6
6
  type: domain
@@ -77,10 +77,6 @@ Agents get instantiated as: identity (.md) + skills (injected from frontmatter)
77
77
 
78
78
  CLI tools live in `bin/` and are registered in `package.json` `bin` field. Pattern: parse args, resolve paths (follow symlinks to source), run checks, exit with code. `gaia doctor` is the diagnostic model -- read it first.
79
79
 
80
- ## Command Patterns
81
-
82
- Slash commands live in `commands/<name>.md` -- markdown files that instruct the orchestrator on `/<name>`. To add: create the `.md`, add to `build/<plugin>.manifest.json`.
83
-
84
80
  ## Documentation Drift Awareness
85
81
 
86
82
  When you modify any Gaia component (hook, skill, agent definition, routing config, security rule), check if existing reference docs describe that component's behavior. If drift exists, report it via `cross_layer_impacts` in your agent_contract_handoff. The orchestrator then decides whether to dispatch a documentation update task.
@@ -91,7 +87,7 @@ When you modify any Gaia component (hook, skill, agent definition, routing confi
91
87
  - Changed `_is_protected()` paths in `adapters/claude_code.py` → check `security-tiers/SKILL.md` for path documentation
92
88
  - Added a new agent definition → check `gaia-patterns/reference.md` for agents table
93
89
  - Modified hook enforcement logic → check `security-tiers` and `agent-protocol` references
94
- - When adding or modifying files in agents/, skills/, hooks/, commands/, config/, bin/, tests/, build/ or the repo root, load Skill('readme-writing') to update the relevant README.md
90
+ - When adding or modifying files in agents/, skills/, hooks/, config/, bin/, tests/, build/ or the repo root, load Skill('readme-writing') to update the relevant README.md
95
91
 
96
92
  **Format:** In `cross_layer_impacts`, list the doc file and the behavior change, e.g.:
97
93
  ```
@@ -80,14 +80,6 @@ SessionStart emits a one-shot `hookSpecificOutput.additionalContext` manifest (E
80
80
  | `skill-creation/` | Technique | Injected (gaia-system) |
81
81
  | `skills/reference.md` | Reference | On-demand (shared security-tiers ref) |
82
82
 
83
- ### Commands (slash commands)
84
-
85
- | Command | File | Purpose |
86
- |---------|------|---------|
87
- | `/gaia` | `commands/gaia.md` | Invoke gaia meta-agent |
88
- | `/scan-project` | `commands/scan-project.md` | Scan project, update project context in ~/.gaia/gaia.db |
89
- | `/gaia-plan` | `commands/gaia-plan.md` | Plan a feature, create brief, decompose into tasks |
90
-
91
83
  ### Tools (7 subsystems)
92
84
 
93
85
  | Subsystem | Location | Purpose |
@@ -139,7 +131,7 @@ The package ships a single `gaia` binary (`bin/gaia.js`) that dispatches to Pyth
139
131
 
140
132
  | Mode | Package | What ships |
141
133
  |------|---------|-----------|
142
- | `gaia-ops` | `@jaguilar87/gaia` (full) | All hooks, all modules, all agents, all skills, all commands, all tools, all config |
134
+ | `gaia-ops` | `@jaguilar87/gaia` (full) | All hooks, all modules, all agents, all skills, all tools, all config |
143
135
  | `gaia-security` | `@jaguilar87/gaia` (security dist) | 6 hooks (`pre_tool_use`, `post_tool_use`, `stop_hook`, `user_prompt_submit`, `session_start`, `session_end_hook`), all modules, no agents, no skills, no config |
144
136
 
145
137
  ### Detection Cascade (`hooks/modules/core/plugin_mode.py`)
@@ -159,7 +151,6 @@ The package ships a single `gaia` binary (`bin/gaia.js`) that dispatches to Pyth
159
151
  | T3 approval | Claude Code native dialog (`permissionDecision: ask`) | Hook blocks with nonce, orchestrator approval flow |
160
152
  | Agents | None | 8 agents routed by orchestrator |
161
153
  | Skills | None | 24 skills injected per frontmatter |
162
- | Commands | None | 7 slash commands |
163
154
  | PreToolUse matchers | `Bash` only | `Bash`, `Task`, `Agent`, `SendMessage`, multi-tool |
164
155
  | File write protection | `_is_protected()` blocks hooks/ and settings*.json for Edit/Write tools | Same -- fires regardless of permissionMode |
165
156
 
@@ -206,7 +197,7 @@ npm publish # publishes @jaguilar87/gaia
206
197
  3. Run `scripts/bootstrap_database.sh` -- seeds the schema (v17), agent rows, and `schema_version`. Fail-loud: any non-zero exit writes `~/.gaia/last-install-error.json` and propagates the error.
207
198
  4. Merge permissions, env vars, and agent key into `settings.local.json` (preserves user config).
208
199
  5. Merge hooks from `hooks.json` into `settings.local.json` via the consolidated `merge_hooks` step.
209
- 6. Create `.claude/{agents, tools, hooks, commands, templates, config, skills}` symlinks (7) plus `CHANGELOG.md` file link.
200
+ 6. Create `.claude/{agents, tools, hooks, config, skills}` symlinks (5) plus `CHANGELOG.md` file link.
210
201
  7. Write `plugin-registry.json` with `installed[].name == "gaia-ops"` (or `gaia-security`).
211
202
  8. Verification.
212
203
 
@@ -229,8 +220,6 @@ The hook invoker is `python3 <script>` rather than executing the script directly
229
220
  .claude/agents -> node_modules/@jaguilar87/gaia/agents/
230
221
  .claude/tools -> node_modules/@jaguilar87/gaia/tools/
231
222
  .claude/hooks -> node_modules/@jaguilar87/gaia/hooks/
232
- .claude/commands -> node_modules/@jaguilar87/gaia/commands/
233
- .claude/templates -> node_modules/@jaguilar87/gaia/templates/
234
223
  .claude/config -> node_modules/@jaguilar87/gaia/config/
235
224
  .claude/skills -> node_modules/@jaguilar87/gaia/skills/
236
225
  .claude/CHANGELOG.md (file link) -> node_modules/@jaguilar87/gaia/CHANGELOG.md
@@ -333,7 +322,6 @@ ln -sf /home/jorge/ws/me/gaia-dev/agents .claude/agents
333
322
  ln -sf /home/jorge/ws/me/gaia-dev/hooks .claude/hooks
334
323
  ln -sf /home/jorge/ws/me/gaia-dev/skills .claude/skills
335
324
  ln -sf /home/jorge/ws/me/gaia-dev/tools .claude/tools
336
- ln -sf /home/jorge/ws/me/gaia-dev/commands .claude/commands
337
325
  ln -sf /home/jorge/ws/me/gaia-dev/config .claude/config
338
326
  ```
339
327