Govern your coding agents in a way you never could with people.
A person reads the spec once and remembers what they remember. An agent reads exactly what you hand it, on every run. CorPole keeps your requirements, decisions and constraints with a state on each — binding, or retired — and hands the agent only what binds today.
Every record carries its state: Draft, Approved, Authority, Retired
Retired records never reach the agent
Every change kept with who, what and why
In action
Watch people and their coding agent work through CorPole.
Five short scenes: a founder starts a solution in a conversation and comes back weeks later to ask what's next; the agent drafts records, stops at a conflict, and builds only what people approved, proven by tests. On the left, the chat with the agent; on the right, CorPole keeping the record as it happens.
claude — my-app
CorPoleNo solution yet
RecordsBoardSearch
Nothing recorded yet.
Only Authority records reach the agent.
You: I want to start a new solution: online booking for our physiotherapy clinics.
Agent: Clinic Booking is ready. Before any code, let's agree what it is for. What problem are you solving, and for whom?
You: Patients book by phone, and after hours we just lose them.
Our receptionists spend half the day moving appointments around.
I'd love people to book, move or cancel online in under a minute, and fewer no-shows.
Agent: Five Drafts from that. Next: what limits do we work within? Time, budget, rules you must follow.
You: We have about three months, before the spring rush.
Patient data can't leave the EU, and it has to work with our existing calendar.
Budget is tight, so no native apps for now.
Agent: Great start: a clear goal, real limits and nine Drafts, all in your own words. Approve what's right and I'll plan the first stories.
You: What's next in the plan for Clinic Booking?
Tool call: list_work_items status: ready
Agent: Next up is ST-7B2E14, “Move an appointment online”. It's Ready and nobody is on it.
You: Hmm. Didn't we already do that one?
Tool call: get_work_context ST-7B2E14
Tool call: get_changes since: 14 days
Agent: Not yet. Under Self-service appointments we've finished 3 of 5 stories: book online, cancel online and the 24-hour reminder.
Agent: The last of those, the reminder, went to Done 3 days ago, after CI verified both of its criteria.
Agent: Moving an appointment was held back: it waited on the calendar-sync decision, which was accepted on Monday.
Agent: It realises FR-5C0A71, “Patients can move an appointment up to 2 hours before”, and it is bound by TR-5D14C8: it must work with the clinics' existing calendar.
Agent: And it matters: stories in 4 work packages of the plan depend on it (staff view, waitlist, SMS changes, reporting). None of them can start until it's done.
You: Right. Let's do it now.
Tool call: update_work_status ST-7B2E14 → In progress
Agent: On it. I'll work against FR-5C0A71/AC1–AC3 and keep to TR-5D14C8. You'll see it move on the board.
You: Feedback from the front desk: two hours' notice is too short to refill a slot.
Agent: Is that a rule the system must enforce, a quality it must have, or a limit on how you run the clinics?
You: A rule. Moves need at least four hours' notice.
And receptionists want to offer the freed slot to the waitlist.
Agent: That's two records: a functional requirement for the notice period, and a stakeholder requirement for the front desk.
Tool call: propose_record FR "Patients can move an appointment up to 4 hours before"
Tool call: propose_record SR "As a receptionist, I can offer a freed slot to the waitlist"
Agent: ✓ Drafted FR-8D27B5 and SR-4E6A19. Neither binds until you approve them. The waitlist part belongs to WP-5A93C7, which is already waiting on this story.
Tool call: search_requirements "move appointment"
Agent: ⚠ FR-5C0A71 is Authority: “Patients can move an appointment up to 2 hours before.” I'm building ST-7B2E14 against it right now.
Agent: It contradicts FR-8D27B5. I won't pick a winner, and I'll hold the notice-period check until you decide.
Agent: ✓ AC1–AC3 met, with evidence. ST-7B2E14 is in Code review. Done is yours.
Sound familiar?
Pick the moment you're in. See what changes.
Same agent, same prompt. The only difference is whether it reads what binds your solution.
“I have an idea, not a spec.”
Without CorPole
›You:Build me a CRM for my agency.
●Agent:Creating a Next.js app and a schema with 14 tables…
Three days later you are rewriting what a “client” meant.
With CorPole
›You:/corpole:start
●Agent:Before any code: who uses this, and what must never happen? Seven questions.
↳Tool call:submit_setup_records → 12 Draft records
●Agent:Approve the ones that bind, then I'll plan the first story.
The first commit already has requirements behind it.
Try it in your agentAdd the server, then run /mcp to sign in. You need a CorPole account; request access if you don't have one.
claude mcp add --transport http corpole https://corpole.com/api/mcp
Twenty moments
Where a coding agent goes wrong, and what CorPole does about it.
Each one is a real situation from building with agents, and each answer is something CorPole does today.
Start
“I have an idea, not a spec.”
Run the kickoff interview before the first line of code. The agent asks the questions, CorPole records the answers as requirements, and nothing binds until you approve it.
/corpole:start
Start
“I inherited a half-built vibe-coded app.”
Onboarding reads the code, tests, documents and commits, and proposes the modules, behaviour and decisions it finds as findings for you to confirm, correct or reject.
/corpole:onboard
Start
“My CLAUDE.md is 800 lines and contradicts itself.”
Handover moves your rule files, ADRs and glossaries into CorPole as proposals. Conflicts come up side by side, and once you approve, the file stops being the authority.
/corpole:handover
Build
“Claude forgot what we decided yesterday.”
Decisions are records, not chat history. Every session starts from what binds in the solution, on whichever machine and in whichever session you are.
/corpole:context
Build
“The agent brought back an approach we dropped.”
Retiring a record takes it out of every agent's context at once. What you dropped cannot steer the next run.
/corpole:context
Build
“The agent quietly changed the spec to fit its code.”
An agent can only propose. A change to an Authority record arrives as a proposal with a diff, and nothing binds until a person approves it.
/corpole:check
Build
“I switch between Claude Code, Cursor and Codex.”
One MCP server. Every client reads the same Authority records, so the rules do not change with the editor.
claude mcp add --transport http corpole https://corpole.com/api/mcp
Build
“My context window is full of old docs.”
The agent reads the records for its task, not your whole docs folder, and nothing that was retired.
Ask your agent“What binds the task I'm on?”
Build
“The requirement changed, and the agent kept going.”
The agent can ask what changed since it last read the solution: which record, who changed it and why.
Ask your agent“What changed in CorPole since yesterday?”
Build
“It says “done”. Is it?”
Acceptance criteria are separate items. Tests verify them, CI marks them Met or Not met, and a story with a failing test cannot be closed.
Ask your agent“Which acceptance criteria are not met yet?”
Build
“Our conventions drift every session.”
Standards and solution rules are records the agent reads for its task, and the plugin checks each edit against the governed code areas.
/corpole:init
Break
“The agent almost ran a migration on production.”
Decide per solution whether an agent may write migrations, add dependencies, touch CI or merge: allowed, ask first or forbidden. The repository kit turns it into Claude Code permission rules.
/corpole:init
Break
“Production is down at 2 a.m.”
Declare an emergency and the agent can fix it now, with a defect on record and a make-good task so the shortcut gets cleaned up later.
Ask your agent“Declare a production emergency for the checkout outage.”
Break
“The agent is going in circles.”
Drift signals flag an agent that is going off course, and Agent health shows them per solution, before the damage compounds.
Break
“It pasted a secret into a ticket.”
Everything an agent writes to CorPole is masked first, so keys and tokens do not end up in your records.
Break
“We keep making the same mistake.”
Retrospectives record lessons and improvement ideas, and a lesson can become a solution rule the agent follows from then on.
/corpole:retro
Team
“A second developer joined. How do they catch up?”
They connect their own agent with their own identity and read the same Authority records, decisions and open work. Nothing to forward, nothing out of date.
claude mcp add --transport http corpole https://corpole.com/api/mcp
Team
“Two agents, two opinions.”
Every agent reads the same Authority records and proposes into the same review queue, so they cannot drift into two versions of the truth.
Team
“The client asks why we built it this way.”
Decisions are records with their reasons, and every change keeps who made it — person, agent, GitHub or CI — and why.
Team
“My PM writes the requirements. My agent builds them.”
People write and approve requirements in the web app. The agent reads only what they made Authority.
Guardrails, not good intentions
What happens when…
The agent does not have to remember the rules. CorPole answers at the moment it acts: some things it refuses, some it stops, some it simply lets through.
When the agent tries to approve, close or merge its own work
The server refuses. The agent tells you who can do it and where in CorPole it is done.
Refused
When the agent reports a criterion as met without evidence
The report is refused. A criterion is met by a test or a named proof, not by a claim.
Refused
When two binding records disagree
The agent does not pick a winner. It stops, shows you both codes, and a pull request citing a record in a confirmed conflict is flagged.
Stopped
When the same test fails three times in a row
The agent is told to change its approach or open a question, and you are told why.
Redirected
When the agent writes before reading the policy and standards
Its next reply tells it to read them first, so the session starts on the rules rather than on a guess.
Reminded
When the change is a typo, formatting or a rename
No interview and no record. The pull request carries the no-requirement label and the check lets it through.
Let through
When you want to start a solution without opening the web app
The agent creates it from the chat, in your tenant and with your permissions, and switches its connection to the new solution.
Handled
When the agent in Claude Code is waiting for your answer
CorPole shows it in the app, so a question does not sit unseen in a terminal you closed.
Surfaced
Inside CorPole
32 kinds of record, 31 features, one place.
Every icon below is the one you see in the app. Each kind of record has its own shape, and its group has its own colour, so a requirement never looks like a decision and a risk never looks like a test.
Intent1
Why the solution exists.
Objective
Requirements7
What the solution must do and be.
Business Requirement
Stakeholder Requirement
Functional Requirement
Non-functional Requirement
Technical Requirement
Project Requirement
Design record
Constraints3
Boundaries it must respect.
Product Constraint
Business Constraint
Project Constraint
Verification3
How each requirement is proven.
Acceptance Criterion
Test Case
Test Set
Work10
How the delivery flows.
Theme
Epic
Work Package
Story
Task
Defect
Subtask
Demand
Initiative
Component
Knowledge7
How the work is done, and what was learned.
Decision
Question
Glossary term
Standard
Reference
Lesson
Improvement idea
Risk1
What may go wrong.
Risk
Kanban boards
The work moves on boards, and the board knows who may move it.
Every work type has its own board and its own columns. An agent picks only what a person moved to Ready, moves it to In progress and Code review, and stops there: verification and Done belong to people, and a failing test keeps a story out of Done.
Draft → Approved → Authority → Retired on every record
Typed relations, with open conflicts blocking Authority
Change proposals with a side-by-side diff
Maker-checker approval and functional roles
Append-only history with who, what and why
Authority handover from CLAUDE.md, ADRs and docs
Accounts, tenants and solutions with shared tenant knowledge
Start
Get to binding requirements before code.
Kickoff interview run by your agent
Setup wizard: write, upload a document or tell the story
Onboarding that reads an existing codebase
Start a solution straight from the chat
Plan
Turn requirements into work people can pick up.
Themes, epics, work packages, stories, tasks and subtasks
Kanban boards with a workflow per work type
Agent proposals land in the Backlog, people move them to Ready
Decisions, questions, glossary, standards and references
Guide the agent
Hand the agent what binds, and only that.
Remote MCP server with OAuth and personal agent tokens
Claude Code plugin, hooks and repository kit
Governed work context: why-chain, constraints, criteria
Autonomy policy: allowed, ask first or forbidden
Behaviour rules at platform, tenant, solution and personal level
Notices and "your agent is waiting"
Masking of secrets in everything an agent writes
Prove
Show that it works, and see when it stops.
Acceptance criteria tracked as Met or Not met
Test cases with CI results
Traceability from criterion to test, work and code
Change-request check and webhook on every pull or merge request (GitHub, GitLab)
Defects with severity and violated criteria
Risk register: probability × impact, decision-backed acceptance
Watch and learn
Catch drift early, and don't repeat mistakes.
Drift signals and Agent health per solution
Production emergency with a make-good task
Retrospectives: lessons that become rules, ideas that become work
The mechanism
Every record knows whether it still governs.
The state is the product. Everything else follows from a record being able to answer one question: does this bind right now, in this solution?
01
Authority state
A record is drafted, approved, made Authority or retired. Only Authority binds the agent, and retiring a record takes it out of every agent's context at once.
Decide per solution whether an agent may write migrations, add dependencies, touch CI or merge. The repository kit turns it into Claude Code permission rules, so the agent stops or asks before it acts.
06
History you can trust
Every change is appended, never rewritten: who made it — person, agent, the repository (GitHub, GitLab) or CI — what changed and, for Authority records, why.
The boundary
It records which decision governs. You still decide.
The fastest way to lose an experienced reader is to imply the system knows what is correct. It does not, and it is not built to.
01
It does not decide what is correct
The system surfaces conflicts and tells you what currently binds. Which record should win is a judgement, and it stays with the people accountable for it.
02
It does not let an agent promote itself
Whatever an agent proposes — a requirement, a decision, a relation — arrives as a Draft or a proposal. Nothing binds until a person approves it.
03
It does not act beyond your permissions
A connection acts for the person who created it and carries at most that person's permissions in the solution. A read-only connection cannot propose anything.
Start with one repository
The first run ends with a list of what appears to bind your code.
Onboarding reads your tests, documents, code and commits and proposes the requirements, decisions and constraints it finds — for you to confirm, correct or retire before any of it binds the agent.