Migrating from v5 to v6

Version 6.0 renames quint-code to haft, introduces the 5-mode model, and adds claim-aware decisions. Your data is preserved — migration is handled automatically by haft init.

Why the rename? The name "quint" conflicts with Quint — a formal specification language by Informal Systems. To avoid confusion between the two projects, v6 adopts a new name: haft (the handle of an axe — the part you actually grip when doing the work).

What changed

Naming

  • Binary: quint-codehaft
  • Project directory: .quint/.haft/
  • User home: ~/.quint-code/~/.haft/
  • All slash commands: /q-*/h-*

Data model

  • Claims — decisions now carry verifiable claims with verify_after dates. Existing decisions get claims generated from their evidence during migration.
  • /h-verify replaces /q-refresh — the fifth cognitive mode actively checks claims against reality, not just evidence age.
  • 5-mode model — Understand, Explore, Choose, Execute, Verify maps to /h-frame, /h-explore, /h-compare, /h-decide, /h-verify.

New features

  • haft sync — team workflow, syncs git-tracked markdown into local DB
  • haft agent — standalone TUI runtime, no external AI tool required
  • Knowledge graph — file-to-decision mapping with invariant injection
  • Desktop app (pre-alpha) — visual dashboard

How to migrate

Update the binary, then re-run init in each project:

# Install haft (replaces quint-code)
curl -fsSL https://quint.codes/install.sh | bash

# In each project directory
cd your-project
haft init

haft init detects your existing .quint/ directory and automatically:

  1. Renames .quint/ to .haft/
  2. Migrates the database from ~/.quint-code/projects/{id}/ to ~/.haft/projects/{id}/
  3. Runs schema migrations (adds claims table, updates artifact types)
  4. Generates claims from existing evidence where possible
  5. Updates project.yaml with the new schema version

All your decisions, problems, notes, and evidence are preserved.

Safe to run multiple times. haft init is idempotent — if it detects .haft/ already exists, it skips the rename and only runs pending database migrations.

Update project prompt files

If you have a CLAUDE.md (or .cursorrules, AGENTS.md, GEMINI.md) with haft-specific instructions, update the slash commands:

# Download the latest reference prompt
curl -fsSL https://raw.githubusercontent.com/m0n0x41d/quint-code/main/CLAUDE.md > CLAUDE.md

Or manually find-and-replace in your existing file:

v5 (old) v6 (new)
quint-codehaft
.quint/.haft/
~/.quint-code/~/.haft/
/q-reason/h-reason
/q-frame/h-frame
/q-char/h-char
/q-explore/h-explore
/q-compare/h-compare
/q-decide/h-decide
/q-note/h-note
/q-refresh/h-verify
/q-status/h-status
/q-search/h-search
/q-problems/h-problems
/q-onboard/h-onboard
quint-code inithaft init
quint-code boardhaft board

Update CI scripts

If you have CI pipelines that reference quint-code, update them:

  • Binary name: quint-codehaft
  • Directory references: .quint/.haft/
  • Database path: ~/.quint-code/~/.haft/
  • CI governance gate: quint-code board --checkhaft sync && haft check

Verify migration

After running haft init, verify everything works:

/h-status

You should see your existing decisions, problems, and notes. If the MCP connection fails, make sure the new binary is in your PATH and restart your AI tool.

Git cleanup

After confirming migration, commit the renamed directory:

git add .haft/
git rm -r --cached .quint/   # if .quint/ was tracked
git commit -m "chore: migrate quint-code to haft v6"

Coordinate with your team. If multiple engineers work on the same repo, agree on a migration point. Once .quint/ is renamed to .haft/ in the main branch, everyone needs to update their binary and run haft init.

What if I don't migrate?

The haft 6.0 MCP server detects old .quint/ directories and prompts you to run haft init. Your data is safe — it just won't work until you migrate. The old quint-code binary continues to work with v5 data if you need to roll back.