Packs and MCP tools
The pack
A pack is a short Markdown block of the team decisions that apply to what you are working on. Your agent gets it at the start of each session:
- Claude Code and Codex: from the session-start hook, with a one-line notice for you, such as
ALIGN · 4 decisions and 1 open question apply here; your agent has them. /align to read. - Cursor: from its session-start hook and the always-applied rule file
.cursor/rules/align.mdc.
What is in it:
- Up to 12 decisions and commitments and 3 open questions, within about 1,500 tokens (the lowest-ranked lines are dropped to fit).
- Ranked by the files you are working on: the files changed on your branch,
git statusand your working directory. A decision scoped to a matching path ranks first; open conflicts and drift, things you own, commitments due within a week and recent confirmations rank higher. When no path matches, the pack has the six most recently confirmed decisions and every conflicted one. - Never a receipt quote: those stay in the console and in
get_decision.
The pack is fetched with a 1.2 second limit and cached for 10 minutes. If the server does not answer, your agent gets the cached pack with a line saying how old it is.
align pack # print the pack for where you are
align pack --format json
align pack --paths src/billing # for these paths instead (not cached)In Claude Code, /align prints it.
MCP tools
align init registers an MCP server named align with each agent it sets up (align mcp runs it over stdio).
Seven tools:
| Tool | What it does | Writes |
|---|---|---|
get_context | the pack for given paths and branch | no |
get_decision | one entry by key: statement, why, rejected alternatives, scope, receipts you can read, open conflicts | no |
search_decisions | search by words; confirmed by default, or proposed or all | no |
list_open_questions | open questions, those about your paths first | no |
get_contract | reserved for Linear issue contracts; today it answers that Linear is not connected | no |
record_decision | proposes a decision you stated; visible only to you until you confirm it | yes |
ask_owner | opens a question for the team | yes |
What the tools can and cannot do:
- No tool confirms, rejects, supersedes or answers anything. A proposal from
record_decisionwaits for you inalign confirmor the console. - Writes go only to the repository the agent is running in, never to another one the model names.
- Every argument is redacted on your laptop before it is sent (what is captured).
- Limits: 120 tool calls a minute per person;
record_decision30 an hour;ask_owner5 an hour and 20 a day. Repeating the same proposal within 10 minutes, or an open question, returns the existing one.
Every tool also takes an optional repo (owner/name) to read another repository you can read; on your laptop the
agent's working directory decides by default, and writes always go to that repository. For an agent that is not on
your laptop, the same tools are served over HTTPS and take repo in every call: see Remote MCP and
OAuth.