Install & init (v7)

Install

One-line installer:

curl -fsSL https://quint.codes/install.sh | bash

The installer fetches the latest tagged release for your platform, places the binary at ~/.haft/bin/haft, and links it onto your PATH. It also installs the packaged Open-Sleigh runtime under ~/.haft/runtimes/open-sleigh/current so haft harness run works without a local Open-Sleigh checkout.

From source (Go ≥ 1.23):

git clone https://github.com/m0n0x41d/haft
cd haft
task install

Initialize a project

Inside the repository you want to onboard:

cd path/to/your/project
haft init

This creates:

  • .haft/ directory with project identity (.haft/project.yaml), workflow policy (.haft/workflow.md), and placeholder spec carriers.
  • .haft/specs/target-system.md — placeholder TargetSystemSpec with one parseable draft section.
  • .haft/specs/enabling-system.md — placeholder EnablingSystemSpec.
  • .haft/specs/term-map.md — empty TermMap awaiting load-bearing terms.
  • MCP server config for the chosen host agent (default: Claude Code in .mcp.json; --codex for Codex; --all for both).

The placeholders are intentionally status: draft. They reserve a parseable structure without claiming active product authority. Onboarding promotes them as the human approves load-bearing claims.

Init flags

haft init                    # Claude Code, global commands (~/.claude/commands/)
haft init --local            # Claude Code, project-local commands (.claude/commands/)
haft init --codex            # Codex skills under ~/.agents/skills/
haft init --codex --local    # Codex skills under .agents/skills/ in this project
haft init --all              # All supported hosts
haft init --opencode         # Experimental: OpenCode (sst/opencode), opencode.json + ~/.config/opencode/
haft init --opencode --local # Experimental: OpenCode under .opencode/ in this project

Verify readiness

Right after init the project is needs_onboard — the harness will refuse broad runtime execution until you produce active spec sections.

haft spec check
# spec_sections: 2
# active_spec_sections: 0
# term_map_entries: 0
# Findings: spec_carrier_no_active_sections (target + enabling),
#           term_map_missing_term

That's expected. Drive onboarding next:

haft spec onboard --json     # see the next typed phase
# In Claude Code / Codex with the haft MCP plugin loaded:
/h-onboard

See Spec onboarding for the typed flow.

Supported host agents

v7 product support targets Claude Code and Codex. Cursor, Gemini CLI, OpenCode (sst/opencode), JetBrains Air, and generic MCP clients remain protocol-compatible carriers — they will receive tool calls, but the bundled prompts and skills are tested against Claude Code and Codex specifically. haft init --opencode writes opencode.json with an mcp.haft block and installs the same command/skill files used by Claude Code.

Upgrade from v6

Existing v6 .haft/ data is forward-compatible. Re-run haft init in your existing project to pick up the new prompt files in ~/.claude/commands/ (or .claude/commands/ if you used --local) and to add the placeholder spec carriers if absent. Existing .haft/decisions/*, problems/*, and notes/* survive untouched.

After re-init, restart your host agent so it re-reads the MCP tools/list response.