Open source · offline-first · git-native

Architecture context that lives in your repo

Tack encodes your architecture contract in .tack/, tracks drift, and generates deterministic handoffs. Switch agents, switch branches, switch people — the context stays.

$ npx tack-cli init click to copy
or join the waitlist for early access
No spam. One email when it's ready.
You're on the list. We'll be in touch.
tack — invoice-app
████████╗ █████╗ ██████╗██╗ ██╗ ╚══██╔══╝██╔══██╗██╔════╝██║ ██╔╝ ██║ ███████║██║ █████╔╝ ██║ ██╔══██║██║ ██╔═██╗ ██║ ██║ ██║╚██████╗██║ ██╗ ╚═╝ ╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝ v0.1.0
invoice-app · main · a3f82c1 GUARDRAILS allowed: auth:clerk db:prisma payments:stripe forbidden: pdf-export multi-currency DETECTED SYSTEMS auth:clerk src/middleware.ts, src/lib/auth.ts db:prisma prisma/schema.prisma, src/lib/db.ts payments:stripe not yet detected — in guardrails but missing DRIFT 1 item payments:stripe declared but not implemented LAST HANDOFF feat-auth-clerk_20260302T2001.md
HANDOFF feat-auth-clerk_20260302T2001 Project: invoice-app · Branch: feat-auth-clerk · Ref: a3f82c1 North Star Ship invoicing MVP for solo freelancers Clerk for auth, Prisma + Postgres for data No PDF export, no multi-currency in v1 source: .tack/context.md Drift payments:stripe declared but not implemented source: .tack/_drift.yaml Changed Files (since HEAD~1) M src/middleware.ts M src/lib/auth.ts A src/lib/clerk-config.ts source: git diff Next Steps 1. Resolve drift: implement Stripe integration 2. Review 3 changed files for spec compliance Saved to .tack/handoffs/feat-auth-clerk_20260302T2001.md JSON: .tack/handoffs/feat-auth-clerk_20260302T2001.json
⚠ SCOPE CHANGE DETECTED just now You added jspdf to package.json. PDF export is currently listed as out of scope in your guardrails. Before I update your spec, I looked into this: COMPETITIVE CHECK Your ICP is solo freelancers sending simple invoices. The top 3 competitors in this niche all offer PDF export. But they also have 18+ months of development and dedicated teams. Adding PDF export puts you in direct feature parity competition with established players instead of shipping your differentiator (recurring billing) first. WHAT THIS COSTS jspdf + layout logic: ~1-2 weeks Delays Stripe recurring billing milestone Moves spec from 3 systems to 4 systems OPTIONS [a] Accept — add PDF export to scope, update guardrails [d] Defer — keep out of scope, remove jspdf, revisit in v2 [m] More — show me what competitors actually ship for PDF Waiting for input...
Date2026-03-02
Watch#3 — agent
Branchfeat-stripe-billing
Bearingon course — 0 drift
Helmcursor / claude-sonnet

Every change the agent makes gets logged with a commit ref and rationale. When something unexpected shows up three sessions later, you don't grep through the codebase — you check the log, find the exact commit, and see what was added and why. The agent's memory doesn't live in a context window. It lives in git.

001 — Why Tack
Git-native

Context that travels with your code

Everything lives in .tack/ inside your repo. Clone it, branch it, merge it, review it in a PR. No SaaS, no database, no new surface to maintain. Your architecture decisions get a commit history.

spec.yaml · context.md · decisions.md · _drift.yaml · handoffs/
Agent-agnostic

Switch tools. Keep context.

Cursor today, Claude Code tomorrow, Codex next week — your .tack/ comes with you. Tack is the backbone that stays constant while everything else in your AI toolchain churns.

Works with any MCP-compatible agent. Also works standalone — no agent required.
Deterministic

Every statement has a source

Handoffs are built from your spec, drift state, context docs, and git diff. No LLM in the enforcement loop. No hallucinated summaries. Every claim traces to a file and line number.

LLM assists during onboarding only. After that, all enforcement is deterministic.

Agents forget. Git doesn't.

Context windows get compacted. Sessions restart. Agents lose track of what they decided three hours ago. Tack sidesteps all of it — every decision is logged with the commit ref where it happened. Any agent can look back at exactly what the code was when the choice was made.

# Agent reads a decision from .tack/ decision: switched auth from NextAuth → Clerk ref: 7d1e4b0 file: src/lib/auth.ts # Any agent, any session, can recall exactly # what the code looked like at that moment: $ git show 7d1e4b0:src/lib/auth.ts

◇ 002 —
Your agent already knows Tack

Tack serves your project context over MCP — the protocol that lets tools show up to agents as structured APIs instead of a wall of text. You don't memorize commands. You say "continue this work" and your agent reads the guardrails, checks drift, and logs decisions back.

Your agent calls log_decision and log_agent_note instead of hallucinating its own memory. You don't have to know the commands — your agent already does.

Cursor Claude Code Codex Windsurf Any MCP client
// Agent reads on demand via MCP tack://context/intent goals, guardrails, north star tack://context/facts detected systems, drift state tack://handoff/latest last handoff, structured JSON // Write-back tools log_decision record a choice + rationale log_agent_note append to session log // stdio transport · zero config
◇ 003 — Your crew

Keep your stack.
Add Tack.

Cursor
Claude Code
Windsurf
⌁ .tack/
GitHub
Linear
No new dashboard to babysit.
No cloud lock-in.
Just a .tack/ folder your tools can agree on.

◇ 004 —
Tack meets you where you are

Plug into your existing tools, or let Tack maintain the repo docs you keep meaning to update. It's not editing code — it's handling the paperwork.

CI / GitHub — fail builds on drift CHANGELOG.md — auto-formatted from decisions Backstage — feed your developer portal ADRs — architecture decisions on file Linear / Jira — decisions become tickets TODO.md — open questions as tasks Conventional Commits — structured messages
ROADMAP.md — progress from detected systems NDJSON logs — append events for analytics Keep a Changelog — standard format, auto-filled GitHub Actions — drift checks in your pipeline Changesets — version bumps from decisions Notion / Confluence — sync context to your wiki Dependabot / Renovate — track dep drift

Your project deserves a source of truth.

Git-native. Agent-agnostic. Deterministic. Every person and tool on your project works from the same context.

You're in. Talk soon.