Make project bootstrap available from a real init command

The Rust CLI previously hid init behind the REPL slash-command surface and only
created a starter INSTRUCTIONS.md. This change adds a direct `init` subcommand and
moves bootstrap behavior into a shared helper so `/init` and `init` create the
same project scaffolding: `.claw/`, `.claw.json`, starter `INSTRUCTIONS.md`, and
local-only `.gitignore` entries. The generated guidance now adapts to a small,
explicit set of repository markers so new projects get language/framework-aware
starting instructions without overwriting existing files.

Constraint: Runtime config precedence already treats `.claw.json`, `.claw/settings.json`, and `.claw/settings.local.json` as separate scopes
Constraint: `.claw/sessions/` is used for local session persistence and should not be committed by default
Rejected: Keep init as REPL-only `/init` behavior | would not satisfy the requested direct init command and keeps bootstrap discoverability low
Rejected: Ignore all of `.claw/` | would hide shared project config that the runtime can intentionally load
Confidence: high
Scope-risk: moderate
Reversibility: clean
Directive: Keep direct `init` and `/init` on the same helper path and keep detection heuristics bounded to explicit repository markers
Tested: cargo fmt --all; cargo clippy --workspace --all-targets -- -D warnings; cargo test --workspace
Not-tested: interactive manual run of `claw-cli init` against a non-test repository
This commit is contained in:
Yeachan-Heo
2026-04-01 01:14:44 +00:00
parent b4e4070216
commit f7fb193f64
4 changed files with 555 additions and 138 deletions

View File

@@ -101,7 +101,7 @@ const SLASH_COMMAND_SPECS: &[SlashCommandSpec] = &[
},
SlashCommandSpec {
name: "init",
summary: "Create a starter CLAUDE.md for this repo",
summary: "Bootstrap Claude project files for this repo",
argument_hint: None,
resume_supported: true,
},