Skip to content

fix: resolve CLI as altimate or altimate-code (1.1.1) - #8

Merged
sahrizvi merged 7 commits into
AltimateAI:mainfrom
hkaltai:fix/altimate-code-altimate-cli-conflict
Oct 20, 2026
Merged

sahrizvi merged 7 commits into
AltimateAI:mainfrom
hkaltai:fix/altimate-code-altimate-cli-conflict

Conversation

@hkaltai

@hkaltai hkaltai commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

What / How

Since v0.7.1 the CLI's canonical binary is altimate. npm (npm install -g altimate-code) and Homebrew installs expose both altimate and altimate-code, but curl and PowerShell installs made before the installers add an altimate-code alias (AltimateAI/altimate-code#1562, open) expose only altimate. The plugin only ever ran altimate-code, so on those installs it reported the CLI as missing and every delegated run failed.

Before / After

Situation Before (main, 1.1.0) After (this PR, 1.1.1)
Older curl or PowerShell install (only altimate) Reports "altimate-code is not installed" and every run fails, even though the CLI is there Finds altimate and runs it
Installed with npm or Homebrew (both names) Runs altimate-code Runs altimate, the same CLI under its canonical name
Old npm install from before v0.7.1 (only altimate-code) Runs altimate-code Runs altimate-code, no change
Not installed Shows only the npm install command Shows the npm and curl install commands
User has an alias such as alias altimate-code=altimate Can pick up the alias text instead of the real program, and the run fails Ignores aliases and shell functions and runs the real program
Both names installed, from installs of different versions Uses altimate-code, even if it is the older copy Uses altimate, the canonical name; which copy of it comes first on PATH is still up to the install layout (AltimateAI/altimate-code#824)

Test plan

  • Resolution snippet run in bash and zsh with stub binaries on an isolated PATH: only altimate → runs altimate; both → runs altimate; only altimate-code → runs altimate-code; neither → reports the CLI as not installed.
  • tests/resolve-cli.sh passes when run with bash and with zsh. It checks that every copy of the resolver is identical, that no command line calls the CLI by name, and that the resolver ignores aliases and shell functions, skips a non-executable altimate (falling back, or exiting 127 with nothing else installed), resolves relative PATH entries, and exits 127 when neither binary is found. The test file matches altimate-codex-plugin#5 apart from per-file block counts.
  • plugin.json and marketplace.json parse as JSON.
  • Fresh Claude Code session with only the curl-installed altimate on PATH: install the plugin, send a warehouse prompt, confirm the skill delegates and the run completes.

Limits

  • If an unrelated tool named altimate is on PATH, the plugin runs it, even when altimate-code is also installed, because altimate is tried first. The upstream installer makes the same assumption.
  • When two installs of different versions are on PATH, the first altimate on PATH wins, even if older. That is an upstream install-layout issue (ux: warn at startup if multiple altimate binaries are on $PATH altimate-code#824), not handled here.

Spec

Criteria:

  • block · With only altimate (no altimate-code) on PATH, both skills and both slash commands detect the CLI as installed and invoke altimate run / altimate review instead of reporting it as missing.
  • block · With both altimate and altimate-code on PATH, the plugin invokes altimate; with only altimate-code on PATH, it invokes altimate-code.
  • block · Every CLI command the skills and slash commands run, including workspace status, workspace list and link, goes through the resolver; no command line in them calls altimate or altimate-code by name.
  • block · With neither binary on PATH, the plugin reports the CLI as not installed and shows both the npm and the curl install commands.
  • warn · plugin.json and marketplace.json both declare version 1.1.1, and the CHANGELOG has a 1.1.1 entry.

Catalog: none

🤖 Generated with Claude Code

hkaltai and others added 2 commits October 15, 2026 19:09
Standalone installs (curl, Homebrew, PowerShell) expose only the
`altimate` binary; npm exposes both names. The skills and commands
hard-required `altimate-code` and reported the CLI as missing on
standalone installs. Resolve either name in every invocation and list
both install methods.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
`command -v` reports alias text or a function name before the PATH
binary, so a user alias such as `alias altimate-code=altimate` was
captured as the binary path and every run failed. The resolver now
drops the candidate's alias/function in a subshell before looking it
up, which also accepts relative PATH entries, and exits 127 with a
clear message when neither name is installed. It runs before mktemp so
a missing CLI leaves no temp file behind.

Review scope tables now use the resolved binary, and recovery messages
name `altimate`, which both install methods provide.

Adds tests/resolve-cli.sh, which checks every resolver copy is
identical and resolves correctly in bash and zsh.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@hkaltai
hkaltai marked this pull request as ready for review October 19, 2026 07:30
1. **Verify altimate-code is installed:**
```bash
command -v altimate-code
command -v altimate-code || command -v altimate

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

WARNING: Redundant pre-check does not ignore aliases or shell functions

Step 1 runs command -v altimate-code || command -v altimate without clearing aliases or shell functions, whereas the inline resolver in Step 3 explicitly strips them via unalias and unset -f before exiting 127 if neither binary is on PATH. Because each Bash tool call runs in a fresh shell and Step 3 already performs the authoritative check before mktemp, this separate Step 1 check is redundant (requiring an extra tool round-trip) and inconsistent with Step 3 when a broken alias or function exists.


Reply with @kilocode-bot fix it to have Kilo Code address this issue.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed, and fixed in 032fa43. That separate command -v step came from this PR and could be satisfied by an alias or shell function that the resolver ignores. Step 1 no longer runs its own check: it relies on the resolver, which runs first and exits 127 with altimate-code CLI not found, and that exit points to the install message. The same change is in all four files. tests/resolve-cli.sh passes in bash and zsh.

## Workflow

1. **Verify altimate-code is on PATH.** Run `command -v altimate-code`. If nothing is returned, tell the user: `"altimate-code is not installed. Install with 'npm install -g altimate-code' (Node 20+), then run 'altimate-code' once to configure your provider and warehouse auth."` — then STOP.
1. **Verify altimate-code is on PATH.** Run `command -v altimate-code || command -v altimate`. If nothing is returned, tell the user: `"altimate-code is not installed. Install with 'npm install -g altimate-code' (Node 20+) or 'curl -fsSL https://www.altimate.sh/install | bash', then run 'altimate' once to configure your provider and warehouse auth."` — then STOP.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

WARNING: Separate command -v pre-check is redundant with the inline resolver and does not ignore aliases/functions

Step 1 instructs running command -v altimate-code || command -v altimate first and also provides the inline for ALTIMATE_NAME in ... resolver block below it that strips aliases/functions and exits 127 when neither binary is found. Running a separate command -v call first adds an extra Bash tool invocation and does not protect against aliases or shell functions the way the inline loop does.


Reply with @kilocode-bot fix it to have Kilo Code address this issue.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed, and fixed in 032fa43. That separate command -v step came from this PR and could be satisfied by an alias or shell function that the resolver ignores. Step 1 no longer runs its own check: it relies on the resolver, which runs first and exits 127 with altimate-code CLI not found, and that exit points to the install message. The same change is in all four files. tests/resolve-cli.sh passes in bash and zsh.

## You MUST follow this workflow

1. **Verify altimate-code is on PATH** with `command -v altimate-code`. If it returns nothing, jump to "Not installed" below and stop.
1. **Verify altimate-code is on PATH** with `command -v altimate-code || command -v altimate`. The CLI ships under two names: the npm package exposes both `altimate-code` and `altimate`, while the standalone curl/Homebrew/PowerShell installers expose only `altimate`. Either name is the same CLI. If neither resolves, jump to "Failure modes" below and stop.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

WARNING: Step 1 command -v check is redundant with the Step 2 resolver and does not strip aliases/functions

Step 1 runs command -v altimate-code || command -v altimate, while Step 2 already resolves ALTIMATE_BIN (ignoring aliases and functions) before mktemp and exits 127 with altimate-code CLI not found if neither binary is on PATH (matching the symptom in the Failure modes table). Removing the separate command -v pre-check avoids an extra shell invocation and ensures consistent alias-safe resolution.


Reply with @kilocode-bot fix it to have Kilo Code address this issue.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed, and fixed in 032fa43. That separate command -v step came from this PR and could be satisfied by an alias or shell function that the resolver ignores. Step 1 no longer runs its own check: it relies on the resolver, which runs first and exits 127 with altimate-code CLI not found, and that exit points to the install message. The same change is in all four files. tests/resolve-cli.sh passes in bash and zsh.

## You MUST follow this workflow

1. **Verify altimate-code is on PATH** with `command -v altimate-code`. If it returns nothing, jump to "Failure modes" below and stop.
1. **Verify altimate-code is on PATH** with `command -v altimate-code || command -v altimate`. If neither resolves, jump to "Failure modes" below and stop.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

WARNING: Separate command -v pre-check is redundant with the inline resolver and does not strip aliases/functions

Step 1 instructs verifying PATH with command -v altimate-code || command -v altimate, even though the inline resolver immediately below already checks both binary names (ignoring aliases and functions) and exits 127 with altimate-code CLI not found when neither is installed.


Reply with @kilocode-bot fix it to have Kilo Code address this issue.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed, and fixed in 032fa43. That separate command -v step came from this PR and could be satisfied by an alias or shell function that the resolver ignores. Step 1 no longer runs its own check: it relies on the resolver, which runs first and exits 127 with altimate-code CLI not found, and that exit points to the install message. The same change is in all four files. tests/resolve-cli.sh passes in bash and zsh.

Comment thread tests/resolve-cli.sh
expect "$sh" "$STUBS/both" '' 0 'ran altimate-code'
expect "$sh" "$STUBS/neither" '' 127 'altimate-code CLI not found (tried altimate-code, altimate)'
expect "$sh" "$STUBS/only-altimate" "$ALIAS_SETUP" 0 'ran altimate'
expect "$sh" "$STUBS/only-altimate" "$ALIAS_SETUP; altimate() { echo function; }" 0 'ran altimate'

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SUGGESTION: Add a test case where altimate-code itself is defined as a shell function

Line 65 tests altimate() as a function while altimate-code is an alias, but there is no test case where altimate-code() is defined as a shell function (with only altimate on PATH), which is the primary first-iteration path where unset -f "$ALTIMATE_NAME" is needed to prevent command -v altimate-code from succeeding with the function name.

Suggested change
expect "$sh" "$STUBS/only-altimate" "$ALIAS_SETUP; altimate() { echo function; }" 0 'ran altimate'
expect "$sh" "$STUBS/only-altimate" "$ALIAS_SETUP; altimate() { echo function; }" 0 'ran altimate'
expect "$sh" "$STUBS/only-altimate" 'altimate-code() { echo function; }' 0 'ran altimate'

Reply with @kilocode-bot fix it to have Kilo Code address this issue.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added in 032fa43: a case with altimate-code() { echo function; } defined and only altimate on PATH, which expects ran altimate. It passes in both bash and zsh.

@kilo-code-bot

kilo-code-bot Bot commented Oct 19, 2026 •

Copy link
Copy Markdown

Code Review Summary

Status: No Issues Found | Recommendation: Merge

Files Reviewed (10 files)
  • .claude-plugin/marketplace.json
  • CONTRIBUTING.md
  • plugins/altimate-code/.claude-plugin/plugin.json
  • plugins/altimate-code/CHANGELOG.md
  • plugins/altimate-code/README.md
  • plugins/altimate-code/commands/altimate.md
  • plugins/altimate-code/commands/review.md
  • plugins/altimate-code/skills/altimate-code/SKILL.md
  • plugins/altimate-code/skills/review/SKILL.md
  • tests/resolve-cli.sh
Previous Review Summaries (4 snapshots, latest commit 2c0f11f)

Current summary above is authoritative. Previous snapshots are kept for context only.

Previous review (commit 2c0f11f)

Status: No Issues Found | Recommendation: Merge

Files Reviewed (10 files)
  • .claude-plugin/marketplace.json
  • CONTRIBUTING.md
  • plugins/altimate-code/.claude-plugin/plugin.json
  • plugins/altimate-code/CHANGELOG.md
  • plugins/altimate-code/README.md
  • plugins/altimate-code/commands/altimate.md
  • plugins/altimate-code/commands/review.md
  • plugins/altimate-code/skills/altimate-code/SKILL.md
  • plugins/altimate-code/skills/review/SKILL.md
  • tests/resolve-cli.sh

Previous review (commit 032fa43)

Status: No Issues Found | Recommendation: Merge

Files Reviewed (10 files)
  • .claude-plugin/marketplace.json
  • CONTRIBUTING.md
  • plugins/altimate-code/.claude-plugin/plugin.json
  • plugins/altimate-code/CHANGELOG.md
  • plugins/altimate-code/README.md
  • plugins/altimate-code/commands/altimate.md
  • plugins/altimate-code/commands/review.md
  • plugins/altimate-code/skills/altimate-code/SKILL.md
  • plugins/altimate-code/skills/review/SKILL.md
  • tests/resolve-cli.sh

Previous review (commit 648354e)

Status: 5 Issues Found | Recommendation: Address before merge

Overview

Severity Count
CRITICAL 0
WARNING 4
SUGGESTION 1
Issue Details (click to expand)

WARNING

File Line Issue
plugins/altimate-code/commands/altimate.md 12 Redundant command -v pre-check does not ignore aliases or shell functions
plugins/altimate-code/commands/review.md 20 Separate command -v pre-check is redundant with the inline resolver and does not ignore aliases/functions
plugins/altimate-code/skills/altimate-code/SKILL.md 24 Step 1 command -v check is redundant with the Step 2 resolver and does not strip aliases/functions
plugins/altimate-code/skills/review/SKILL.md 30 Separate command -v pre-check is redundant with the inline resolver and does not strip aliases/functions

SUGGESTION

File Line Issue
tests/resolve-cli.sh 65 Add a test case where altimate-code itself is defined as a shell function
Files Reviewed (10 files)
  • .claude-plugin/marketplace.json - 0 issues
  • CONTRIBUTING.md - 0 issues
  • plugins/altimate-code/.claude-plugin/plugin.json - 0 issues
  • plugins/altimate-code/CHANGELOG.md - 0 issues
  • plugins/altimate-code/README.md - 0 issues
  • plugins/altimate-code/commands/altimate.md - 1 issue
  • plugins/altimate-code/commands/review.md - 1 issue
  • plugins/altimate-code/skills/altimate-code/SKILL.md - 1 issue
  • plugins/altimate-code/skills/review/SKILL.md - 1 issue
  • tests/resolve-cli.sh - 1 issue

Fix these issues in Kilo Cloud

Previous review (commit 457f3c2)

Status: 5 Issues Found | Recommendation: Address before merge

Overview

Severity Count
CRITICAL 0
WARNING 4
SUGGESTION 1
Issue Details (click to expand)

WARNING

File Line Issue
plugins/altimate-code/commands/altimate.md 12 Redundant command -v pre-check does not ignore aliases or shell functions
plugins/altimate-code/commands/review.md 20 Separate command -v pre-check is redundant with the inline resolver and does not ignore aliases/functions
plugins/altimate-code/skills/altimate-code/SKILL.md 24 Step 1 command -v check is redundant with the Step 2 resolver and does not strip aliases/functions
plugins/altimate-code/skills/review/SKILL.md 30 Separate command -v pre-check is redundant with the inline resolver and does not strip aliases/functions

SUGGESTION

File Line Issue
tests/resolve-cli.sh 65 Add a test case where altimate-code itself is defined as a shell function
Files Reviewed (10 files)
  • .claude-plugin/marketplace.json - 0 issues
  • CONTRIBUTING.md - 0 issues
  • plugins/altimate-code/.claude-plugin/plugin.json - 0 issues
  • plugins/altimate-code/CHANGELOG.md - 0 issues
  • plugins/altimate-code/README.md - 0 issues
  • plugins/altimate-code/commands/altimate.md - 1 issue
  • plugins/altimate-code/commands/review.md - 1 issue
  • plugins/altimate-code/skills/altimate-code/SKILL.md - 1 issue
  • plugins/altimate-code/skills/review/SKILL.md - 1 issue
  • tests/resolve-cli.sh - 1 issue

Fix these issues in Kilo Cloud


Reviewed by gemini-4-argon · Input: 53.8K · Output: 1.1K · Cached: 156.6K

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@hkaltai hkaltai changed the title fix: resolve CLI as altimate-code or altimate (1.0.1) fix: resolve CLI as altimate-code or altimate (1.1.0) Oct 19, 2026
hkaltai and others added 2 commits October 19, 2026 13:16
The separate `command -v` step could be satisfied by an alias or shell
function that the resolver deliberately ignores, and cost an extra shell
call. The skills and slash commands now rely on the resolver's
`altimate-code CLI not found` exit instead. Adds a resolver test where
`altimate-code` is a shell function.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
`altimate` is the CLI's canonical name since v0.7.1 and every install
method provides it, so the resolver now tries it first and falls back to
`altimate-code` only for npm installs that predate it. With both names
on PATH from installs of different versions, the canonical name wins
instead of a possibly stale `altimate-code` copy.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The review flow ran `gh pr checkout` before resolving the CLI, so a
machine without it had its branch switched before "not found" was
reported. The PR-scope command now runs after the resolver in the same
Bash call.

bash's `command -v` returns a non-executable file when no executable
match exists, so a broken `altimate` on PATH beat a working
`altimate-code`. The resolver now only accepts an executable path.

Recovery messages name `altimate-code` for npm installs older than
v0.7.1, which the resolver still supports.

The resolver test checks its temp dir, runs with only the stub dirs on
PATH, and covers legacy-only installs with an alias or function, aliases
and functions with nothing installed, and a non-executable `altimate`.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

@sahrizvi sahrizvi left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Multi-model consensus review (Claude, Grok 4.3, Qwen 3.6 Plus, DeepSeek V4 Pro, Kimi K2.6). Major findings are inline; minor findings and nits are in a separate comment.

Comment thread plugins/altimate-code/CHANGELOG.md Outdated
## [1.1.0] — 2026-10-19

### Fixed
- The skills and slash commands now resolve the CLI as `altimate`, its canonical name since v0.7.1, and fall back to `altimate-code` for older npm installs. Standalone installs (curl, Homebrew, PowerShell) expose only `altimate`, so the plugin previously reported "not installed" on machines where the CLI was present.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[MAJOR] The "only altimate" claim is false for Homebrew today, and for curl and PowerShell once altimate-code#1562 ships

The Homebrew formula has always installed both names: bin.install "altimate" plus bin.install_symlink "altimate" => "altimate-code" (altimate-code packages/opencode/script/publish.ts:329-358; altimate-code CHANGELOG #820 says "Homebrew installs are unchanged"). altimate-code#1562, part of this change set, makes the curl and PowerShell installers create an altimate-code alias. It also rewrites the CLI README to say the standalone install exposes "the same two names the npm install exposes".

The same claim is repeated in README.md:20, commands/altimate.md:10, commands/review.md:22, skills/altimate-code/SKILL.md:24 and skills/review/SKILL.md:32. In the skill files, the model reads it as fact. Behaviour is fine, because the resolver handles both layouts. Only the text is wrong.

Suggested fix: remove Homebrew from the claim and describe the gap as historical, e.g. "curl and PowerShell installs from v0.7.1 until altimate-code vX.Y put only altimate on PATH". For README line 20: # standalone binary; exposes altimate (and altimate-code from vX.Y).

Consensus: Claude, Grok, Qwen, DeepSeek, Kimi

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed, and fixed in 2c8423c. I checked the formula in publish.ts: Homebrew installs altimate and links altimate-code to it. Every place that made the claim (the README, both slash commands, both skills and the CHANGELOG) now says that npm and Homebrew installs expose both names and that only older curl and PowerShell installs lack altimate-code. The README install comment for curl now just says it exposes altimate. I didn't name an installer version because altimate-code#1562 is still open. altimate-codex-plugin#5 has the same fix (54196eb).

"name": "altimate-code",
"displayName": "Altimate Code",
"version": "1.0.0",
"version": "1.1.0",

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[MAJOR] Conflicts with #7: both release 1.1.0, and the branches conflict in 5 files

git merge-tree of this branch and #7 reports content conflicts in plugin.json, CHANGELOG.md, README.md, commands/altimate.md and skills/altimate-code/SKILL.md. marketplace.json merges cleanly only because both PRs set it to 1.1.0. Both PRs add ## [1.1.0] — 2026-10-19.

#7 also rewrites the same run blocks this PR edits: --agent builder, < /dev/null, and mktemp "${TMPDIR:-/tmp}/altimate-result.XXXXXX". Whichever PR merges second must carry both sets of changes into every block. If this PR's version of the blocks wins the conflict resolution, the stdin-hang, agent and mktemp fixes are lost silently, and nothing in tests/resolve-cli.sh would catch it.

Suggested fix: agree on a merge order and rebase the second PR onto the first. Either fold both sets of bullets into one [1.1.0] section, or release 1.1.1 if 1.1.0 has already been tagged or submitted to the directory. Re-run tests/resolve-cli.sh afterwards, since its per-file block counts may change.

Consensus: Claude, Grok, Qwen, DeepSeek, Kimi (DeepSeek rated it CRITICAL)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Resolved: #7 is now merged. 2c8423c merges main into this branch, and GitHub reports it as mergeable. Every run block keeps #7's --agent builder, < /dev/null and mktemp "${TMPDIR:-/tmp}/altimate-result.XXXXXX", and only the binary goes through "$ALTIMATE_BIN". Because 1.1.0 is already on main, this PR now releases 1.1.1 with its own CHANGELOG section, so users who already have 1.1.0 get an update. tests/resolve-cli.sh passes after the merge, with the SKILL.md block count raised to 3 for the new workspace block.

<user's task, verbatim>
ALTIMATE_TASK
)"
for ALTIMATE_NAME in altimate altimate-code; do

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[MAJOR] Once #7 is merged in, its new altimate-code workspace|link|auth commands bypass this resolver

#7 has Claude run altimate-code workspace status < /dev/null, altimate-code workspace list, and altimate-code link --workspace … or --create. It also tells users to type ! altimate-code auth login … and ! altimate-code workspace sync, and its "not installed" message says to run altimate-code once. grep -c ALTIMATE_BIN on #7's branch returns 0.

On an install that has only altimate (curl or PowerShell before #1562, or before the installer is re-run), delegated runs would work, but checking the workspace link, linking and signing in would fail with command not found. That is the bug this PR fixes, now inside the same skill.

Suggested fix: in the merged result, put this resolver in front of every command Claude runs ("$ALTIMATE_BIN" workspace status < /dev/null, and so on). For the ! commands users type, write altimate and add "(altimate-code on npm installs older than v0.7.1)", as this PR does elsewhere. Also add a test guard against bare invocations (see the summary comment).

Consensus: Claude, Grok, Qwen, DeepSeek, Kimi

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 2c8423c. The Altimate workspaces section now starts with a resolver block, and workspace status, workspace list, link --workspace and link --create all run as "$ALTIMATE_BIN" … < /dev/null. Commands the user types after ! (auth login, workspace sync, workspace status, link) now say altimate, with a note that npm installs older than v0.7.1 use altimate-code. The same goes for the failure-modes rows and the README's workspace setup. tests/resolve-cli.sh now fails if any line starts with altimate or altimate-code followed by run, review, workspace, link, auth or session. I checked that a bare altimate-code workspace status makes it fail.

@sahrizvi

Copy link
Copy Markdown
Collaborator

Consensus review: minor findings and nits

Reviewed by 5 models: Claude, Grok 4.3, Qwen 3.6 Plus, DeepSeek V4 Pro and Kimi K2.6. Kimi replaced GPT 5.3 Codex, which stalled. The 3 major findings are posted as inline comments.

Verdict: changes requested. The resolver code itself is correct. I verified locally that bash tests/resolve-cli.sh passes, that every run/review goes through "$ALTIMATE_BIN", and that the resolver block is byte-identical to altimate-codex-plugin#5. The problems are the documentation and the coordination with #7 and altimate-code#1562.

Minor

  1. tests/resolve-cli.sh:73: a test case is missing compared with altimate-codex-plugin#5. The Codex copy also asserts expect "$sh" "$STUBS/broken-altimate" '' 127 'altimate-code CLI not found (tried altimate, altimate-code)', the case of a non-executable altimate with no fallback. Add it so the two test files stay identical. (Claude, DeepSeek, Kimi)
  2. tests/resolve-cli.sh doesn't catch bare invocations. It checks that the resolver blocks are identical and counts them per file, but a stray altimate-code run or altimate-code workspace … would still pass. That is the most likely mistake when merging with fix: delegated runs no longer hang; route workspace questions; real agent and command names (1.1.0) #7. Add a check that fails on any match of something like grep -nE '^\s*altimate-code (run|review|workspace|link|auth)' over the skill and command files. (Claude)
  3. The resolution order should be decided together with #1562. Once npm, Homebrew and the post-#1562 standalone installs all provide altimate-code, trying altimate first only helps one case: a stale pre-0.7.1 npm altimate-code next to a newer altimate. The cost is the risk in the Limits section, that an unrelated altimate on PATH wins. Commit 2c0f11f chose this order deliberately, and Qwen and DeepSeek think it's right, so this is not blocking. Whichever order is chosen, both plugins must use the same one. (Claude, Grok)

Nits

  1. tests/resolve-cli.sh:54: status=$? fails with read-only variable: status if someone runs zsh tests/resolve-cli.sh. The shebang and the CONTRIBUTING instruction both run it under bash, and the zsh resolver cases are real assertions, so the documented path works. Renaming the variable to rc makes running it under zsh safe too. (Grok, Qwen, DeepSeek, Kimi; downgraded from CRITICAL/MAJOR after verification)
  2. PR title: it reads "altimate-code or altimate", but the lookup tries altimate first. The title of altimate-codex-plugin#5 has the right order.
  3. skills/altimate-code/SKILL.md:130: "altimate-code session list (or altimate session list)" lists the names in the opposite order from every other row, which lead with altimate.
  4. CHANGELOG bullet 2: "which both install methods provide" should be reworded together with the "only altimate" fix.
  5. commands/review.md:30 and skills/review/SKILL.md:40: the template ends with a complete command, "$ALTIMATE_BIN" review # plus any scope/flags from below. A model that runs it as written and then runs the scoped command from the table would run two reviews. Consider a placeholder such as "$ALTIMATE_BIN" review <scope flags from the table below>. (DeepSeek)

Not tied to a diff line

Done well: the resolver runs in the same Bash call as the CLI, and the docs explain why. Aliases and functions are removed inside a subshell, so the user's shell isn't changed. The -x check covers bash returning a file that isn't executable. A missing CLI exits before gh pr checkout. The test runs on an isolated PATH in both shells. The Limits section is candid.

🤖 Generated with Claude Code

Keeps main's builder agent, stdin redirect and mktemp template in every
run block, with the CLI resolved through the resolver. The workspace,
link and sign-in commands from main also go through the resolver, and
commands the user types name `altimate`. Releases as 1.1.1, since 1.1.0
is already on main.

Install notes now say npm and Homebrew expose both names and only older
curl and PowerShell installs lack `altimate-code`. The review template
no longer ends in a complete command. The resolver test fails on bare
CLI command lines, covers a non-executable `altimate` with no fallback,
and runs under zsh.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@hkaltai hkaltai changed the title fix: resolve CLI as altimate-code or altimate (1.1.0) fix: resolve CLI as altimate or altimate-code (1.1.1) Oct 20, 2026
@hkaltai

hkaltai commented Oct 20, 2026

Copy link
Copy Markdown
Contributor Author

Thanks. Replies to the minor findings and nits; the three major findings are answered inline. All fixes are in 2c8423c, and the Codex-side ones are in altimate-codex-plugin#5 (54196eb).

Minor

  1. broken-altimate case: added. A non-executable altimate with nothing else installed exits 127 with altimate-code CLI not found. Apart from the per-file block counts, tests/resolve-cli.sh is now identical in both repos.
  2. Bare invocations: added a check that fails on any command line in the skill and command files that calls altimate or altimate-code with run, review, workspace, link, auth or session. I confirmed that it catches a bare altimate-code workspace status.
  3. Resolution order: keeping altimate first. That was the owner's decision, and both plugins already use the same order. Until altimate-code#1562 ships and older standalone installs are re-run, altimate is the only name every install has. The risk from an unrelated altimate is listed under Limits.

Nits

  1. Renamed status to rc. zsh tests/resolve-cli.sh now passes too.
  2. The title is now "resolve CLI as altimate or altimate-code (1.1.1)".
  3. The session list row now leads with altimate, with altimate-code for npm installs older than v0.7.1.
  4. Reworded the CHANGELOG bullets along with the install-name fix. They are now in the 1.1.1 section.
  5. The review template's last line is now the placeholder <the scope command chosen below, run through "$ALTIMATE_BIN">, in both the command and the skill, so it no longer runs a review on its own.

Not tied to a diff line: this PR now merges after #7, so #7's run-block fixes are kept, as described in the inline reply. The version switch for users with both names is listed under Limits (altimate-code#824). The end-to-end Claude Code check with only altimate installed is still unchecked in the test plan.

@sahrizvi sahrizvi left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Consensus re-review at 2c8423c: minor findings and nits

Reviewed by 5 models: Claude, GPT 5.3 Codex, DeepSeek V4 Pro, Grok 4.3 and Qwen 3.6 Plus. The resolver-order finding (vs codex#5) is inline and non-blocking. bash tests/resolve-cli.sh and zsh tests/resolve-cli.sh both pass locally.

Verdict: approve. The resolver-order item inline is non-blocking: please finish porting dc86f54 here as you planned, ideally before both plugins release. Thanks for the thorough follow-up: Majors 1–3 from the last round are fixed, and so are Minor 1 and Nits 1, 2, 3 and 5. The merge with #7 is clean. --agent builder, mktemp "${TMPDIR:-/tmp}/altimate-result.XXXXXX" and < /dev/null are in every run block, #7's 1.1.0 CHANGELOG section is untouched, and the workspace, link and auth commands go through the resolver.

Minor

  1. "altimate-code on npm installs older than v0.7.1" is wrong. Every published altimate-code release on npm from 0.4.7 to 0.7.1 declares both bins (npm view altimate-code@0.6.0 bin). altimate-code's v0.7.1 notes say the rename to altimate was "for the curl path only". The installs that have only altimate-code are standalone (curl/PowerShell) installs from before v0.7.1, so those users are told to type ! altimate … and the fallback note points them at npm. It appears in skills/altimate-code/SKILL.md:125,141-144,152, README.md:32,50,77-82, commands/review.md:69 and skills/review/SKILL.md:83. Related: CHANGELOG 1.1.1 bullet 2 (CHANGELOG.md:9) says altimate is the name "which every install method provides", which is also false for those installs. Suggest using codex#5's wording: "curl and PowerShell installs from v0.7.1 on may expose only altimate, and installs older than v0.7.1 expose only altimate-code". After the reorder, use "(altimate on installs without altimate-code)". (DeepSeek, Claude; verified against the npm registry)
  2. The bare-invocation guard only matches at line start (tests/resolve-cli.sh:38). It misses chained forms like gh pr checkout 1 && altimate-code review (the shape the review files use, currently correctly through "$ALTIMATE_BIN") and TASK=x; altimate run …. The reply's "fails on any command line … that calls" overstates it. Suggest scanning fenced ```bash blocks for (^|[;&|(][[:space:]]*)altimate(-code)?([[:space:]]|$), or at least allowing &&/; prefixes. (Claude, GPT 5.3 Codex)
  3. tests/resolve-cli.sh has drifted from codex#5 again. codex#5 added a broken-altimate-code stub and cases plus a foreign altimate ahead of a real altimate-code, and its both case expects ran altimate-code. The PR body's "matches altimate-codex-plugin#5 apart from per-file block counts" no longer holds. Port it with the reorder. (Qwen, DeepSeek, Claude)

Nits

  1. skills/altimate-code/SKILL.md:130: "Open it in the browser" runs "$ALTIMATE_BIN" workspace status without < /dev/null, unlike the other three workspace bullets. (Claude, Qwen)
  2. Failure-row label order: README.md:76, commands/review.md:68 and skills/review/SKILL.md:82 say "neither altimate-code nor altimate", while skills/altimate-code/SKILL.md:140 and codex#5 say "neither altimate nor altimate-code". (DeepSeek)
  3. README.md:33-34: double blank line. (Claude)
  4. The end-to-end Claude Code check with only altimate installed is still unchecked in the test plan.

Not tied to a diff line

  • Cross-repo, outside this PR: codex#5 still has mktemp -t altimate-result.XXXXXX.md, no < /dev/null on its runs, and the fast-edit/analyst/builder persona selection, all of which #7 fixed here. If the same CLI behaviour applies under Codex, it needs its own #7-equivalent change. (Qwen)
  • Users with both names from different installs: this goes away with the reorder (inline).

🤖 Generated with Claude Code

<user's task, verbatim>
ALTIMATE_TASK
)"
for ALTIMATE_NAME in altimate altimate-code; do

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Non-blocking] The resolver order now differs from altimate-codex-plugin#5

This loop tries altimate first and fails with (tried altimate, altimate-code). codex#5 dc86f54 ("prefer altimate-code over altimate") now tries altimate-code first and fails with (tried altimate-code, altimate). Its docs say "the lookup tries altimate-code first, because no other tool uses that name", and its recovery text says "altimate-code (altimate on installs without altimate-code)". Its both test expects ran altimate-code. The two plugins ship as one change set, so with an unrelated altimate on PATH, or two installs of different versions, Claude Code and Codex now run different binaries.

The reply on this thread ("both plugins already use the same order") was written 14 seconds before dc86f54 landed. Your codex#5 comment says #8 would get "the same reorder, the same doc wording, the broken-altimate and foreign-altimate test cases, the failure-table label and the CHANGELOG text". That isn't in 2c8423c yet.

Suggested follow-up (not blocking this approval): port dc86f54. Flip all 7 loops and error strings. Update step 1 in both skills and both commands. Update the recovery parentheticals, CHANGELOG 1.1.1, README.md:32 and the tests (both → ran altimate-code, plus the broken-altimate-code and foreign-altimate cases). Update the PR title and the body's Before/After, Limits and Spec. Then diff the resolver blocks and tests/resolve-cli.sh across the two repos.

Consensus: Claude, GPT 5.3 Codex, DeepSeek V4 Pro, Qwen 3.6 Plus, Grok 4.3 (after convergence)

@sahrizvi
sahrizvi merged commit 7c9b1da into AltimateAI:main Oct 20, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants