fix(skills): drop two ix commands that do not exist - #31
Conversation
Checked every `ix` command the plugin references against the CLI's actual registered command list (37 OSS + 13 Pro stubs, enumerated from ix-cli/src/cli/register/oss.ts rather than from docs). Two did not resolve. `ix goals` — the CLI's command is `goal`, singular. `goals` exists only as a help-topic alias that forwards to `goal`'s help, so `ix goals --format json` could never return data. ix-plan ran it directly, so the Pro branch of that skill silently produced no goal context: no error surfaced, the section just came back empty. Replaced with `ix goal list --format json`. `ix connect` — never existed. There is no `connect` command anywhere in the CLI's history. ix-architecture used it as the recovery instruction for an unreachable graph, which sent users to a dead end at precisely the moment something was already broken. It now says to run `ix docker start` and confirm with `ix status`, which is what the CLI itself prints for an unreachable backend, so the plugin and the tool now agree. Also corrects a stale plugin version in IX_CLAUDE_PLUGIN_OVERVIEW.md (2.3.0). Bumped to 3.1.2 across plugin.json, marketplace.json and CHANGELOG.md — these are instructions Claude follows, so without a version bump the fix reaches nobody. 83 hook tests pass, shellcheck clean, all JSON valid, versions consistent.
KageBinary
left a comment
There was a problem hiding this comment.
Reviewed. The ix connect half is straightforwardly right — connect is not a registered command in either the OSS CLI or @ix/pro, and pointing users at ix docker start + ix status (which docker is a real command) is a strict improvement, especially since that text fires at the moment something is already broken.
The ix goals half has the right conclusion but the wrong reason, and the CHANGELOG states it as fact.
The changelog says:
ix goalsdoes not exist — replaced withix goal list. The CLI's command isgoal(singular);goalsis only a help-topic alias that forwards togoal's help, soix goals --format jsoncould never return data.
That isn't accurate. goals is a real, fully implemented Pro command — Ix-pro/src/cli/commands/goals.ts:
.command("goals")
.description("List all goals")
.option("--status <status>", "Filter by status (active|all)", "all")
.option("--format <fmt>", "Output format (text|json)", "text")
.action(async (opts) => { const client = await createClient(); let intents = await client.listGoals(); ... })I checked both invocations against a Pro-loaded install and they behave identically — ix goals --format json and ix goal list --format json both reach the auth layer, i.e. both resolve to real command implementations. Since this line only runs in the Pro branch of the skill, ix goals --format json was working.
The real defect is in the Ix repo. PRO_COMMANDS in ix-cli/src/cli/register/oss.ts is:
briefing, bug, bugs, decide, decisions, goal, patches, plan, task, plans, tasks, truth, workflow
goals is missing, while the other plural list commands — bugs, plans, tasks — are all present. So on an OSS install ix goal gives the documented The 'goal' command requires Ix Pro. and exit 1, but ix goals gives commander's "unknown command" instead. That breaks the stub contract the plugins' Pro detection depends on, and it's the same contract ix-cli/src/cli/__tests__/pro-stub-message.test.ts asserts for every other Pro command.
So:
- The change itself is fine to keep —
ix goal listworks and sidesteps the gap. - Please correct the CHANGELOG wording, and the same line in
IX_CLAUDE_PLUGIN_OVERVIEW.md. As written it will send the next person looking for a nonexistent alias, and it also undercuts the "everyixcommand referenced anywhere in the plugin was checked against the CLI's registered command list" claim — that check appears to have been run against the OSS list only, which is exactly whygoalslooked missing. - The actual one-line fix belongs in the Ix repo: add
{ name: "goals", desc: "List all goals" }toPRO_COMMANDS. Happy to open that if you want it.
ix-opencode-plugin#13 makes the identical ix goals → ix goal list change and has the same issue.
I checked every
ixcommand this plugin references against the CLI's actual registered command list — enumerated by loadingix-cli/src/cli/register/oss.tsand readingprogram.commands, rather than trusting any documentation. That's 37 OSS commands + 13 Pro stubs. Two references did not resolve.ix goals→ix goal listThe CLI's command is
goal, singular.goalsexists only as a help-topic alias (workflows.ts:83) that forwards togoal's help — soix goals --format jsoncould never return data.ix-planran it directly:ix plans --format json ix goals --format json # <- no such commandThe failure mode is quiet: no error surfaced to the user, the Pro branch's goal context just came back empty every time.
ix connect→ix docker startThis one never existed — there is no
connectcommand anywhere in the CLI's history.ix-architectureused it as the recovery instruction:So it sent users to a dead end at precisely the moment something was already broken. It now says to run
ix docker startand confirm withix status, which matches what the CLI itself prints for an unreachable backend since ix-infrastructure/Ix#333 — plugin and tool now agree.What I checked and found fine
Worth stating, since it's most of the surface:
[Pro]labels with explicit "skip if it errors" fallbacks, andix-briefing.shis gated behindix_check_pro— OSS users skip it cleanly rather than erroring every session.--format llmis used 66× in skills and 38× in agents; the remainingjsonuses are in hooks (which parse withjq, so json is correct) and against Pro commands.Version bump
Bumped to 3.1.2 across
plugin.json,marketplace.jsonandCHANGELOG.md. These are instructions Claude follows at runtime, so without a bump the fix reaches nobody — and CI enforces the two manifests match.Verification