Development record
Setting abcd up is short, plain, and finishes
Press Release
A person sets abcd up in a repository in one short sitting, and it finishes. Setup asks only the questions whose answers it cannot work out for itself, one screen at a time in a polished terminal interface, each with a sentence or two rather than a page; it does what each answer allows at once, shows plainly what it changed, and ends either with abcd fully working (its command on the PATH, the status line wired, the commit identity right) or with the one next step that is still needed and why. Nothing is left half-done behind a generic yes or no, and running it again from a source checkout works the same way as from a release.
Why This Matters
Drafted by the agent from the 2026-10-24 setup session; not yet confirmed by the product thinker.
On 2026-10-24 the product thinker set abcd up in abcd's own checkout and found it "complicated, too much text, and doesn't seem to be working". Getting to a clean install took five runs of ahoy install (one refused outright, one with every question declined, three at a terminal), a hand-typed git config, and the README's install line pasted by hand. What the session showed:
- The status line only worked after a step nobody was told about. The status-line offer was asked and answered through all its element switches, then refused afterwards because no PATH entry was on record (iss-2610240823574047). The only way on was the README's install line: one very long command, pasted into a terminal by hand.
- After setup, abcd does not recognise the command it just installed. With
~/.local/bin/abcdon PATH and recorded in~/.abcd.noindex/path-entry, the detection pass still reports an emptyinstall_mode, beside the standing note that the plugin folder was not found (iss-2610240916382802). - The identity fix was hidden behind a generic yes or no. A no to "Change the settings listed above?" silently skipped the identity question the person wanted answered (iss-2610240824005655).
- The committed identity pin names one person, so setup and the pre-commit hook tell any other contributor to commit under the maintainer's name (iss-2610240830397793).
- A run from the source checkout is always refused as stale, because
go runnever stamps a build, although the repository's own rules makego runthe only sanctioned way to run abcd there (iss-2610240824047504). - Tool installs assume admin rights. Homebrew on this machine belongs to another account, so
brew install gitleaksfailed on every run, and the failure note passed on Homebrew'ssudoadvice (iss-2610240824571059). A by-hand Go build of the tool into~/.local/binworked, which shows a route without admin rights exists; it is evidence, not the route chosen. - Too much text, too many questions. Each run asked up to thirteen questions, several of them only "go on to the offer listed above?", and a clean run's report still ran to a screen of detail and notes.
Mechanism
- We expect setup to finish in one run because it checks everything before asking anything, and asks a question only once the steps it depends on can run.
Scope Conditions
- macOS and Linux.
- An account with or without admin rights.
- An interactive terminal; anywhere else, setup is answered by options or an answers file.
- A released abcd and a source checkout of abcd.
Acceptance Criteria
Each criterion confirmed by the product thinker, one at a time, on 2026-10-24.
- Given no git, no repository or no agent harness, when setup runs, then it stops before any question with one message naming what is missing.
- Given setup can run, when it starts at a terminal, then it checks everything first, shows one plan screen listing every change and every default with where to change it, and asks once: proceed, customise or cancel.
- Given a step only a person can approve (the commit identity, a download, the assistant's settings, the shell settings), when setup reaches it, then it is its own question naming the value and where it is written, whatever the answer to proceed.
- Given abcd is not on the PATH, when setup runs, then it offers the abcd download before the status line, and on a yes wires the status line in the same run; it never asks about the status line when it cannot wire it.
- Given an account that has never used abcd and the suggested answers, when setup runs at a terminal, then it asks at most four questions (the abcd download, the shell settings, the plan screen, the commit identity), plus one question for each missing tool it offers to install.
- Given any setup question, when it is shown, then it is one line, and answering
?shows the full explanation and asks again. - Given setup ends, when its report is printed, then it has three parts: done (one line per change, with where), needs you (a numbered checklist, each with the exact step and why), and next (one step).
- Given a repository that is fully set up, when setup runs again, then it prints one line and changes nothing.
Open Questions
- resolved: Should setup work on an account without admin rights, installing every tool it offers for that account alone? (raised 2026-10-24; see Decisions)
- resolved: Should setup work for more than one person committing to the same repository, so that no contributor is ever asked to take on another's identity? (raised 2026-10-24; see Decisions)
- resolved: Should setup put abcd's own command on the PATH itself, so that the status line never depends on the README's install line? (raised 2026-10-24; see Decisions)
- resolved: When a tool setup needs is already installed some other way (by Homebrew, a package manager, or by hand), what does setup do? (raised 2026-10-24; see Decisions)
- resolved: Which basics does setup check before anything else, and how does it report a missing one? (raised 2026-10-24; see Decisions)
- resolved: Do the research proposals under Research stand: one plan and one proceed, two to four questions on a first run, one line per question with
?for more, a one-line clean re-run? Two of them sit against brief invariant 1 ("every prompt shows current state, consequences of each option, and how to change later. No silent defaults."), so accepting them amends that invariant. (raised 2026-10-24 by the design and record reviews) (answered 2026-10-24; see Decisions) - resolved: The basics decisions disagree with each other and with the research:
curland a checksum tool are needed only by the README's install line,ghis not needed for a verified install, and without git, a repository or a harness there is nothing to set up, so those stop setup rather than wait for the end. Which basics block, and which go on the end-of-run list? (raised 2026-10-24 by the design review) (answered 2026-10-24; see Decisions) - resolved: Is this one intent, or a setup-flow intent plus separate records for the commit identity, third-party tool installs and shell settings, with the stale
go runrefusal and the status-line order fixed as issues on their own? (raised 2026-10-24 by both reviews) Split by the product thinker on 2026-10-24; see Decisions.
Research
State of the art (2026-10-24; sources: clig.dev, rustup, uv, Homebrew's installer and documentation, the GitHub CLI, mise, aqua, flutter doctor, create-next-app, Nielsen Norman Group on progressive disclosure, and Sampath, Merrick and Macvean, "Accessibility of Command Line Interfaces", CHI 2021). Proposals for the planning interview, not yet confirmed:
- Detect everything first, show one short plan grouped by where each change lands, and ask once: proceed, customise, or cancel (rustup, Homebrew's installer, Terraform, create-next-app).
- A question only a person can answer (the identity, installing a tool, the harness's settings) is asked as itself, naming the value and where it is written, never behind a generic approval.
- Steps run in dependency order, and a step that cannot run is never asked about.
- A first run asks two to four questions; everything with a reasonable default is decided and listed in the plan with where to change it.
- Each question is one line; answering
?shows the full explanation. - The report ends in three short parts: done, needs you (a numbered checklist), next.
- The prerequisite pass reads like a doctor: ok, needs you, or missing, each with one fix line, and blockers kept apart from notes.
- Tools install from a per-tool table checked in-process: GitHub's asset digest, the release's checksums, and the signed build record where the project publishes one (gh does; gitleaks is checksum-checked only);
ghis not needed for a verified install. - abcd keeps its own question package rather than adding a terminal UI framework, and makes it calmer: no animation,
NO_COLOR, the numbered mode always available. - A clean re-run prints one line.
Decisions
- 2026-10-24, the product thinker: before asking anything, setup checks everything abcd needs to work, and the list grows as abcd does; today that is git (present and recent enough), the agent harnesses it wires into and whether each reads
AGENTS.md,~/.local/binexisting and on the PATH, the download tools it relies on (curl, a checksum tool),ghwhere signed build records are checked, and, in a source checkout of abcd, Go at the versiongo.moddeclares. - 2026-10-24, the product thinker: a missing basic does not stop setup. At the end, setup offers to install what is missing, or, where it cannot or the person declines, gives a checklist in plain language of what to do by hand.
- 2026-10-24, the product thinker: setup puts abcd's own command on the PATH itself, in the same run, after one question that names the download; the status line never depends on the README's install line (iss-2610240823574047).
- 2026-10-24, the product thinker: this plan is split. It keeps the setup flow (what is checked first, what is asked and in which order, and the report). Three parts are their own drafts: every contributor commits as themselves (itd-2610240918547728), abcd installs the tools it needs for the person alone (itd-2610240918594138), and setup offers to put abcd's folder on the PATH (itd-2610240919030303). The stale refusal of a source-checkout run and the status-line order are fixed as issues on their own (iss-2610240824047504, iss-2610240823574047).
- 2026-10-24, the product thinker: a missing git, a folder that is not a repository, or no agent harness stops setup at once, before any question, with a plain message saying what is missing; every other missing basic goes on the end-of-run list. The earlier decision that a missing basic does not stop setup holds for those others only.
- 2026-10-24, the product thinker: setup's questions are short (one line, with
?showing the full explanation), and defaults are decided for the person and listed on the plan screen; what each answer does is shown in full only on?. This changes brief invariant 1 ("every prompt shows current state, consequences of each option, and how to change later. No silent defaults.") for setup, and the change is owed an ADR that amends the invariant before the work ships.
Audit Notes
Empty. Populated by intent-auditor when intent moves to shipped/.
Grounds
- pursued: we expect a first-time setup to end working in one run; it is shown wrong if a fresh account still needs a hand-run step or a second run.
Frontmatter
| id | itd-2610240823055889 |
|---|---|
| type | intent |
| lifecycle | planned |
| kind | standalone |
| severity | major |
.abcd/development/intents/planned/itd-2610240823055889-a-person-sets-abcd-up-in-a-repository-in.md
open on GitHub ↗ · commit history ↗
References1
- itd-2610030810370060abcd's interviews run in a plain Terminal, with the same question layoutbuilds on
Referenced by7
- adr-2610241022330872Setup edits the shell settings to put abcd's folder on the PATH, on a yesrelated
- adr-2610241101463288Setup asks short questions and lists its defaults on one planrelated
- itd-2610240918547728Every contributor commits as themselvesbuilt on by
- itd-2610240918594138abcd installs the tools it needs for the person alone, checkedbuilt on by
- itd-2610240919030303Setup offers to put abcd's folder on the PATHbuilt on by
- spc-2610241007434505a-person-sets-abcd-up-in-a-repository-inimplemented by
- spc-2610242112593216setup-question-budgetimplemented by
mentions9
- dcn-26102412285984852026-10-24 — Held for the product thinker: criteria 3 and 5 of itd-2610240823055889 conflict when the assistant's settings file exists. Criterion 3 makes the status line (the assistant's settings) its own person-approved question, and criterion 5 allows four questions (download, shell settings, plan, identity) plus one per tool, so a fresh account can be asked five. The build keeps the status-line question separate, the side on which nothing changes without a yes, and the spec close records criterion 5 as not met in that case until the product thinker rules: count the status line in the budget, fold it into the download question, or move it onto the plan screen.
- iss-2610240823574047ahoy install run from a plain Terminal cannot wire the status line or a PATH entry: with no CLAUDE_PLUGIN_ROOT the plugin root is missing (plugin.root_missing), stepPathEntry returns early, ~/.abcd.noindex/path-entry stays absent, and the status-line offer is answered yes through all its element switches only to be refused afterwards (no PATH entry on record). The person learns of the prerequisite after answering every question.
- iss-2610240824005655ahoy install hides the git identity fix behind the generic settings approval: the identity mismatch is listed only as one line under 'Change the settings listed above?', a no there means the identity question is never asked, and nothing says that declining the settings approval also declines the identity pin the person wanted to keep.
- iss-2610240824047504in a source checkout of abcd, go run ./cmd/abcd ahoy install is always refused as a stale binary, because go run never stamps VCS build info, although AGENTS.md makes go run the only sanctioned way to run abcd there; every run needs --allow-stale-binary.
- iss-2610240824571059ahoy install offers a tool install through Homebrew on an account that cannot write to Homebrew: on this machine /opt/homebrew is owned by the admin account, so brew install gitleaks fails on every run, and the failure note relays Homebrew's own sudo chown advice, although abcd never escalates privileges. The registry has one install step per platform (Homebrew), so an account without admin rights has no route that works.
- iss-2610240830397793the committed identity pin names one person, so it misleads every other contributor: .abcd/config/identity.json pins the product thinker's identity, ahoy install reports any other contributor's identity as a required git_identity.mismatch gap and proposes they commit as the pinned person, and the committed .githooks/pre-commit refuses their commits with 'fix: git config user.name "<login>" && git config user.email ...', telling them to commit under the maintainer's name. That contradicts the attribution rule that every commit is honestly authored by the human who made it, in a repository that takes outside contributions.
- iss-2610240916382802ahoy reports an empty install_mode for a working, recorded PATH entry whenever no plugin root resolves: detectInstallMode returns "" when !pluginOK, so after a successful README install (~/.local/bin/abcd on PATH and named by ~/.abcd.noindex/path-entry) a plain-terminal or session run still says nothing is installed.
- iss-2611030744340532The board lists itd-2610240823055889 as next and ready ('implement against the spec body'), though its only open spec, spc-2610242112593216, says in its summary that it holds until the product thinker rules on dcn-2610241228598485; the hold is prose, so neither the board nor abcd build can see it, and a build would run against an unruled spec.
- spc-2610241008191355when-the-folder-abcd-installs-into-is