Skip to content

Non-TTY installer hardcodes Claude setup instead of supporting Codex cleanly #528

Description

@joshyorko

Summary

The non-interactive install path unconditionally runs basecamp setup claude, even when the intended agent is Codex. This produces a confusing and unrelated Claude plugin installation attempt after the Basecamp CLI itself has installed successfully.

Codex is supported by the embedded skill picker, but the piped installer does not select or install the Codex-specific skill location.

Environment

  • Basecamp CLI: v0.7.2
  • Platform: Linux amd64 (Bluefin/Fedora-family desktop)
  • Intended agent: Codex
  • Claude Code also happened to be installed on the machine

Reproduction

Run the documented installer:

curl -fsSL https://basecamp.com/install-cli | bash

Because stdin is piped, the installer takes the non-TTY branch.

Observed behavior

The CLI binary installs and verifies successfully, then setup proceeds into Claude-specific behavior:

✓ Installed basecamp
✓ Skipping interactive setup (no terminal detected).
✓ Agent skill installed
...
Installing plugin "basecamp@37signals"...
✘ Failed to install plugin "basecamp@37signals" ...
Claude Code plugin not installed

In this environment, the optional Claude marketplace/plugin clone failed on SSH host-key configuration. That failure is unrelated to the intended Codex setup, but it becomes the most prominent final result of an otherwise successful Basecamp CLI installation.

The source currently hardcodes the behavior in the non-interactive paths:

"$BIN_DIR/$binary_name" setup claude || true

This is present in both the v0.7.2 installer and current main:

The reported Agent skill installed result writes the shared skill under ~/.agents/skills/basecamp/. It does not demonstrate that the Codex-specific location ~/.codex/skills/basecamp/SKILL.md was populated.

The working recovery was:

basecamp skill
# Select: Codex (Global) (~/.codex/skills/basecamp/SKILL.md)

Codex support already exists in the skill picker:

https://github.com/basecamp/basecamp-cli/blob/v0.7.2/internal/commands/skill.go

Authentication and CLI operation then worked normally.

Expected behavior

The generic installer should not attempt to configure Claude unless Claude is explicitly selected.

For a non-TTY installation, one of these would be clearer:

  1. Install only the agent-neutral shared skill and print agent-specific follow-up commands.
  2. Detect supported agents and install their skill locations without invoking unrelated plugin systems.
  3. Accept an explicit selector such as BASECAMP_AGENT=codex.
  4. Direct Codex users to basecamp skill or install ~/.codex/skills/basecamp/SKILL.md when Codex is detected.

The final summary should also distinguish:

  • CLI installed successfully
  • shared agent skill installed
  • Codex skill installed or still required
  • optional Claude plugin installation failed

Additional related UX

After successful basecamp auth login, the CLI again prints:

Claude Code detected. Connect it to Basecamp:
basecamp setup claude

That nudge may be technically accurate when a Claude binary exists, but it reinforces the impression that Claude is the primary or only supported agent even when the user is setting up Codex.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions