Skip to content

Show tool errors instead of silence, gemini sign-in check, drop amp - #78

Merged
lacymorrow merged 1 commit into
mainfrom
fix/tool-ux-round2
Sep 29, 2026
Merged

lacymorrow merged 1 commit into
mainfrom
fix/tool-ux-round2

Conversation

@lacymorrow

Copy link
Copy Markdown
Owner

Fixes the Lacy bugs the live tool smoke test found, and removes amp.

Bugs

  • Silent answers. lash and opencode exit 0 and print errors only to stderr, so Lacy showed nothing. Now: " finished without an answer" plus the stderr tail. The server path gets the same treatment: a 200 with no text and the reason in .info.error used to show (no text response) and now shows Error from lash: OpenCode's free tier can only be used from within OpenCode.

  • gemini hang. With no login, gemini asks [Y/n] on the terminal to open a browser, and that question sat hidden behind the spinner. Lacy now checks for a login first (key env or .env, non-OAuth auth type, token file, macOS keychain gemini-cli-oauth) and says how to sign in.

  • zsh spinner job notices ([N] done { trap ... }, "you have running jobs"). The spinner is now disowned in zsh too. The Ctrl+C path keeps its wait for an interrupt that lands between & and the disown. I caught that race under load in the full suite.

  • codex outside a git repo failed with "Not inside a trusted directory". Added --skip-git-repo-check to the command and the resume hint.

  • Install hints installed the wrong software:

    • brew install claude installs the Claude desktop app.
    • brew install gemini installs a duplicate-file cleaner.
    • brew install goose installs a Go database migration tool.
    • brew install opencode has no formula.
    • gh-copilot doesn't provide a copilot binary.

    They now use the official npm packages, and block-goose-cli for goose.

Changes

  • lacy setup offers to install a missing tool (clack confirm) and sets it only if the install worked. tool set points there. A test keeps INSTALL_CMDS in index.mjs in sync with lacy_tool_install_cmd.
  • amp is removed everywhere.
  • Live suite: OpenCode Zen's free-tier refusal counts as "not signed in".

Tests: new cases for the silent answer, the gemini sign-in check, the 200-with-error reply (lash and opencode), and the spinner not appearing in the zsh job table. The job-table case fails on main with JOBS=1. All regular suites pass locally. The zsh adapter and fish suites each flaked once under heavy machine load and passed twice on rerun. The zsh flake was the Ctrl+C race above, now fixed.

Found by the live tool smoke test.

- Silent answers: lash/opencode exit 0 and print errors only to stderr, so
  the generic path showed nothing. Exit 0 with no stdout now gets the
  failure frame ("<tool> finished without an answer" + stderr tail). The
  server path answered 200 with no text and the reason in .info.error, shown
  as "(no text response)"; it is now shown as "Error from <tool>: <reason>".
- gemini with no login asks "[Y/n]" on the terminal to open a browser,
  hidden behind the spinner, so Lacy hung. _lacy_gemini_signed_in checks for
  a login first (key env/.env, non-OAuth auth, token file, macOS keychain
  gemini-cli-oauth) and says how to sign in.
- zsh spinner job notices: "[N] done { trap ... }" and "you have running
  jobs" on exit. The spinner is now disowned in zsh too (`disown %%`; zsh's
  disown takes a job spec). The interrupt path keeps its `wait` for Ctrl+C
  landing between `&` and the disown.
- codex refused to run outside a git repo ("Not inside a trusted
  directory"): add --skip-git-repo-check to the command and resume hint.
- Install hints installed the wrong software: `brew install claude` (desktop
  app), `brew install gemini` (a duplicate-file cleaner), `brew install
  goose` (a Go DB migration tool), `brew install opencode` (no formula),
  `gh extension install github/gh-copilot` (no `copilot` binary). Now the
  official npm packages, and block-goose-cli.
- `lacy setup` offers to install a tool that is not installed (clack
  confirm) and sets it only if the install worked; `tool set` points there.
  INSTALL_CMDS in index.mjs is checked against lacy_tool_install_cmd.
- Remove amp from every tool list, command, and doc.
- Live suite: OpenCode Zen's free-tier refusal counts as not signed in.
@lacymorrow
lacymorrow merged commit 7906538 into main Sep 29, 2026
13 checks passed
@lacymorrow
lacymorrow deleted the fix/tool-ux-round2 branch September 29, 2026 12:12
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.

1 participant