setup · diff

git:20260916.1fe1dae to git:20260918.97f85e8

29 added, 20 removed. Audit B to B.

---
- description: First run after cloning the engine — create and fill CLAUDE.local.md and identities.local.md by interview, set the session model (Fable), offer the global git identity guard; never overwrites, runs no git operation
+ description: First run after cloning the engine — create and fill CLAUDE.local.md by interview, set the session model (Fable), offer the git identity per host and the global guard in ~/.gitconfig; never overwrites, runs no git operation
disable-model-invocation: true
---
Prepare this instance of the forge (POS.1050). Run after cloning the
engine, before any other work. Two files in the engine — plus, on the
- user's word, the git identity configuration outside it; the command
- runs no git operation.
+ user's word, the git identity configuration outside it, which is
+ git's own (CLAUDE.md, Persistence); the command runs no git
+ operation.
The conversation language is not configured yet on a true first run:
speak whatever language the user speaks to you.
1. **`CLAUDE.local.md`** at the engine root.
- If it already exists: report briefly what it holds and do not
touch it.
- Otherwise copy `templates/CLAUDE.local.md` to the root and fill
it by elicitation interview, one question at a time, the
language first so that every later question arrives in it:
- **Conversation language** — the language the working
conversation runs in (the template says what follows it);
- **Principal** — the role, whose thinking is being forged (the
- template's placeholder);
- - **Git identities** — name and e-mail per git host the user
- will push to (e.g. github.com, a company host), written to
- `identities.local.md` beside it from
- `templates/identities.local.md` — the roster of CLAUDE.md,
- Persistence. May be left empty and added later; say so.
- - Keep the templates' format; both files are gitignored and never
+ template's placeholder).
+ - Keep the template's format; the file is gitignored and never
committed.
- - Close the git-identities part with the offer of the global
- guard (CLAUDE.md, Persistence): `user.useConfigOnly = true`
- under `[user]` in `~/.gitconfig`, appended on the user's word —
- read the file first, never overwrite existing content. Where
- `~/.gitconfig` carries a global `user.name` or `user.email`, say
- the guard only bites once that identity is removed, and offer
- the removal — again only on the user's word. Declined: print the
- lines for the user to apply by hand. This is the one edit
- outside the engine; it is a configuration text file, not a git
- operation.
+ - Close with the **git identity**, which is git's, per host
+ (CLAUDE.md, Persistence): ask for the git hosts the user will
+ push to (e.g. github.com, a company host) with a name and an
+ e-mail for each — may be left for later; say so. Then offer to
+ write, on the user's word, into the global git configuration
+ file git actually reads (`git config --global --list
+ --show-origin` names it; read it first, never overwrite existing
+ content, report an existing stanza or guard and leave it):
+ - per host, one stanza
+ `[includeIf "hasconfig:remote.*.url:https://<host>/**"]` and
+ one `[includeIf "hasconfig:remote.*.url:git@<host>:*/**"]`,
+ both with `path = <absolute path>/.gitconfig-<host>` — the
+ path absolute, beside that global file, since `~` in git's
+ hands and in the shell's may differ — and the file
+ `.gitconfig-<host>` created with `[user]` `name` and `email`
+ when missing;
+ - the global guard `user.useConfigOnly = true` under `[user]`.
+ Where the global file carries a `user.name` or `user.email`,
+ say the guard only bites once that identity is removed, and
+ offer the removal — again only on the user's word.
+ Declined: print the stanzas and the lines for the user to apply
+ by hand. These are the only edits outside the engine; they are
+ configuration text files, not a git operation.
2. **`.claude/settings.local.json`**.
- If it already exists: report the model it names and do not touch
it.
- Otherwise create it with `{ "model": "fable" }` and tell the
user in one sentence: the session is set to Fable — the
strongest available model, which the whole forge including the
blind reviewers runs on — and it can be changed at any time with
`/model` or by editing this file. A notice, not a question.
3. Finish by pointing at the next step from the Quickstart: start a
new project with `/new-project <slug>`, or bring an existing one
with `/import-project <git-url>`.