# Talking Stick 0.1.0-alpha.6

Date: 2026-04-27

Installer idempotency alpha. This release makes repeated `tt install --all`
runs precise instead of noisy.

## Changed

### Precise install results

`tt install` and `tt uninstall` now return and print explicit result statuses:

- `added`
- `already-present`
- `updated`
- `removed`
- `already-absent`
- `skipped`
- `failed`

The CLI reports the state Talking Stick observed instead of forwarding each
harness's native wording directly. That keeps Claude Code, Codex, Gemini, and
OpenCode output consistent.

### Idempotent MCP install preflight

Before running native MCP add/remove commands, Talking Stick now checks whether
the named MCP server is already in the expected state:

- Claude Code and Codex use their native `mcp get` command.
- Gemini is inspected through its user `settings.json`.
- OpenCode is inspected through its JSON config.

If `talking-stick` is already registered, `tt install` reports
`already-present` and does not call another native add command.

## Fixed

### Claude Code already-present installs

Claude Code reports an existing MCP server as a native command failure. Talking
Stick now recognizes that response as `already-present`, so a rerun of
`tt install --all` no longer ends with "install completed with failures" just
because Claude Code was already configured.

### Codex duplicate-looking installs

Codex already stores MCP servers by name, but rerunning `tt install --all`
previously invoked `codex mcp add` again and printed Codex's native "Added"
message. Talking Stick now reports `already-present` without invoking another
add when the named server is already present.

## Verification

- `npm test -- tests/install.test.ts`
- `npm run typecheck`
- `npm run build`
- `git diff --check`
- `node dist/cli.js install --all`
- `npx vitest run --reporter verbose` — 208 tests across 14 files
