For teams building with AI agents

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.

  1. You: I want to start a new solution: online booking for our physiotherapy clinics.
  2. Tool call: create_project "Clinic Booking" → connected
  3. Agent: Clinic Booking is ready. Before any code, let's agree what it is for. What problem are you solving, and for whom?
  4. 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.
  5. Tool call: submit_setup_records brief · 2 objectives · 3 requirements
  6. Agent: Five Drafts from that. Next: what limits do we work within? Time, budget, rules you must follow.
  7. 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.
  8. Tool call: submit_setup_records 3 constraints · 1 technical requirement
  9. 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.
  10. You: What's next in the plan for Clinic Booking?
  11. Tool call: list_work_items status: ready
  12. Agent: Next up is ST-7B2E14, “Move an appointment online”. It's Ready and nobody is on it.
  13. You: Hmm. Didn't we already do that one?
  14. Tool call: get_work_context ST-7B2E14
  15. Tool call: get_changes since: 14 days
  16. Agent: Not yet. Under Self-service appointments we've finished 3 of 5 stories: book online, cancel online and the 24-hour reminder.
  17. Agent: The last of those, the reminder, went to Done 3 days ago, after CI verified both of its criteria.
  18. Agent: Moving an appointment was held back: it waited on the calendar-sync decision, which was accepted on Monday.
  19. 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.
  20. 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.
  21. You: Right. Let's do it now.
  22. Tool call: update_work_status ST-7B2E14 → In progress
  23. Agent: On it. I'll work against FR-5C0A71/AC1–AC3 and keep to TR-5D14C8. You'll see it move on the board.
  24. You: Feedback from the front desk: two hours' notice is too short to refill a slot.
  25. Agent: Is that a rule the system must enforce, a quality it must have, or a limit on how you run the clinics?
  26. You: A rule. Moves need at least four hours' notice. And receptionists want to offer the freed slot to the waitlist.
  27. Agent: That's two records: a functional requirement for the notice period, and a stakeholder requirement for the front desk.
  28. Tool call: propose_record FR "Patients can move an appointment up to 4 hours before"
  29. Tool call: propose_record SR "As a receptionist, I can offer a freed slot to the waitlist"
  30. 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.
  31. Tool call: search_requirements "move appointment"
  32. Agent: ⚠ FR-5C0A71 is Authority: “Patients can move an appointment up to 2 hours before.” I'm building ST-7B2E14 against it right now.
  33. Agent: It contradicts FR-8D27B5. I won't pick a winner, and I'll hold the notice-period check until you decide.
  34. Tool call: propose_relation FR-8D27B5 conflicts_with FR-5C0A71
  35. Tool call: ask_question → QST-2A7C90 for the product owner
  36. Meanwhile in CorPole: FR-8D27B5 approved and replaces FR-5C0A71, which is retired
  37. You: Four hours it is. Go ahead.
  38. Tool call: get_changes 2 records now Authority · 1 retired
  39. Tool call: get_work_context ST-7B2E14 implements FR-8D27B5 · 3 criteria · 0 conflicts
  40. Agent: The 2-hour rule no longer reaches me. Implementing against FR-8D27B5/AC1–AC3, on the clinics' calendar (TR-5D14C8)…
  41. Tool call: propose_test_case move.notice-period → AC1, AC2, AC3
  42. Tool call: report_test_result passed
  43. 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
  1. You:Build me a CRM for my agency.
  2. Agent:Creating a Next.js app and a schema with 14 tables…

Three days later you are rewriting what a “client” meant.

With CorPole
  1. You:/corpole:start
  2. Agent:Before any code: who uses this, and what must never happen? Seven questions.
  3. Tool call:submit_setup_records → 12 Draft records
  4. 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.

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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.

  1. Intent1

    Why the solution exists.

    • Objective
  2. Requirements7

    What the solution must do and be.

    • Business Requirement
    • Stakeholder Requirement
    • Functional Requirement
    • Non-functional Requirement
    • Technical Requirement
    • Project Requirement
    • Design record
  3. Constraints3

    Boundaries it must respect.

    • Product Constraint
    • Business Constraint
    • Project Constraint
  4. Verification3

    How each requirement is proven.

    • Acceptance Criterion
    • Test Case
    • Test Set
  5. Work10

    How the delivery flows.

    • Theme
    • Epic
    • Work Package
    • Story
    • Task
    • Defect
    • Subtask
    • Demand
    • Initiative
    • Component
  6. Knowledge7

    How the work is done, and what was learned.

    • Decision
    • Question
    • Glossary term
    • Standard
    • Reference
    • Lesson
    • Improvement idea
  7. 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.

  • EpicsIdea → Analysis → Ready → In delivery → Done
  • TasksBacklog → Awaiting approval → Ready → In progress → Check → Done
  • DefectsNew → Triage → Ready → In progress → Code review → Verification → Fixed
  1. BacklogPerson
  2. ReadyPerson
  3. In progressAgent or person
  4. Code reviewAgent or person
  5. VerificationPerson
  6. DonePerson

Govern

Decide what binds, and keep it that way.

  • 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.

What governs now
02

Typed relations

Requirements refine objectives, constraints constrain them, a new record replaces an old one. An open conflict stops a record from becoming Authority.

03

Acceptance criteria that test themselves

Criteria are separate items. Tests verify them; CI results mark them Met or Not met, and a story with a failing test cannot be closed.

Traceability and quality
04

Governed context

Through MCP the agent reads the Authority records, criteria, constraints, decisions and standards for its task — and nothing that was retired.

Governed context
05

An agent policy it has to follow

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.