All CLI flags, persistent defaults, and post-scaffold tools.
Skip all prompts and use defaults:
scaffold --non-interactiveDefaults: directory name as project name, python language, no archetype, safe permissions only, no Ralph Wiggum, blank plan template.
Preview what scaffold would create without writing anything:
scaffold --non-interactive --dry-runPreserve the scaffold script and templates/ directory after init (required for --add and --update):
scaffold --keepBy default, these are removed after init to keep the project clean.
scaffold --versionLayer a second language into an existing scaffolded project:
scaffold --add typescript # Specify language
scaffold --add # Interactive selectionThis appends language conventions to CLAUDE.md, adds config files (without overwriting existing ones), updates .gitignore, adds prefixed Makefile targets (test-ts, lint-ts, fmt-ts, typecheck-ts), and updates the CI workflow. Requires templates to be present (use --keep on initial run).
When called without a language argument, --add prompts for interactive selection (or defaults to python in --non-interactive mode).
For monorepo layouts, place the language in a subdirectory:
scaffold --add python --dir backendConfig files go in backend/, Makefile targets are namespaced (test-backend-py, lint-backend-py), and commands are scoped to the subdirectory.
Add Claude Code configuration to a project that already has code:
cd existing-project
scaffold --migrateThis auto-detects your language (from pyproject.toml, package.json, go.mod, or Cargo.toml), then adds only what's missing — CLAUDE.md, skills, hooks, agents, tasks, test structure — without overwriting any existing files. Running twice is safe (idempotent).
Run a post-scaffold health check:
scaffold --verifyChecks: git repo initialized, required files present (CLAUDE.md, .claude/settings.json, Makefile, .gitignore), .scaffold-version exists, settings.json is valid JSON, no leftover {{placeholders}}. Exits 0 on pass, 1 on failure.
Update skills, hooks, and agents from the scaffold repo:
scaffold --updateCompares your .claude/skills/, .claude/hooks/, and agents/ against the latest from the scaffold repo, shows a diff, and applies changes with your confirmation. Requires the scaffold script (use --keep during init, or re-download).
Install a community language template:
scaffold --install-template https://github.com/user/scaffold-template-ruby
scaffold --install-template ./local-template-dirTemplates are installed to ~/.scaffold/templates/<name>/ and become available in --add language selection. A valid template must contain at minimum CONVENTIONS.md and gitignore.append.
List all available templates (built-in + installed):
scaffold --list-templatesEnable tab-completion for scaffold flags:
# Bash
source <(scaffold --completions bash)
scaffold --completions bash >> ~/.bashrc
# Zsh
source <(scaffold --completions zsh)
scaffold --completions zsh >> ~/.zshrc
# Auto-detect from $SHELL
source <(scaffold --completions)Save your preferences so future runs skip redundant prompts:
# Save after a scaffold run
scaffold --save-defaults
# Or create manually
cat > ~/.scaffoldrc <<'EOF'
LANGUAGE=python
ARCHETYPE=api
ENABLE_DOCKER=true
ENABLE_VSCODE=true
ALLOW_COMMIT=true
ALLOW_PUSH=false
EOFValues in ~/.scaffoldrc serve as defaults. CLI flags and interactive prompts still override them. In --non-interactive mode, .scaffoldrc values replace the built-in defaults.