- Stars
- 4.9k
- This week
- —
- Forks
- 224
- Open issues
- 184
- Skills inside
- 29
Get started
Add it to your agent
claude mcp add --scope user --transport http coral <your-mcp-url> # Claude CodeFrom the project README.
Inside this repo
29 skills
.agents/skills/add-recipeask-mattAsk which skill or flow fits your situation. A router over the skills in this repo..agents/skills/ask-mattcode-reviewReview the changes since a fixed point (commit, branch, tag, or merge-base) along two axes: Standards (does the code follow this repo's documented coding standards?) and Spec (does the code match what the originating issue/spec asked for?). Runs both reviews in parallel sub-agents and reports them s.agents/skills/code-reviewcodebase-designShared vocabulary for designing deep modules. Use when the user wants to design or improve a module's interface, find deepening opportunities, decide where a seam goes, make code more testable or AI-navigable, or when another skill needs the deep-module vocabulary..agents/skills/codebase-designdiagnosing-bugsDiagnosis loop for hard bugs and performance regressions. Use when the user says "diagnose"/"debug this", or reports something broken/throwing/failing/slow..agents/skills/diagnosing-bugsdomain-modelingBuild and sharpen a project's domain model. Use when discussing codebase terminology, writing or editing a GLOSSARY.md, or recording or editing an ADR..agents/skills/domain-modelinggrill-meA relentless interview to sharpen a plan or design..agents/skills/grill-megrill-with-docsA relentless interview to sharpen a plan or design, which also creates docs (ADR's and glossary) as we go..agents/skills/grill-with-docsgrillingGrill the user relentlessly about a plan, decision, or idea. Use when the user wants to stress-test their thinking, or uses any 'grill' trigger phrases..agents/skills/grillinghandoffCompact the current conversation into a handoff document for another agent to pick up..agents/skills/handoffimplement-specImplement the result of /to-spec and /to-tickets in code..agents/skills/implement-specimplementImplement a piece of work based on a spec or set of tickets..agents/skills/implementimprove-codebase-architectureScan a codebase for deepening opportunities, present them as a visual HTML report, then grill through whichever one you pick..agents/skills/improve-codebase-architectureprUse when writing a PR body..agents/skills/prprototypeBuild a throwaway prototype to answer a design question. Use when the user wants to sanity-check whether a state model or logic feels right, or explore what a UI should look like..agents/skills/prototyperesearchInvestigate a question against high-trust primary sources and capture the findings as a Markdown file in the repo. Use when the user wants a topic researched, docs or API facts gathered, or reading legwork delegated to a background agent..agents/skills/researchretroConduct a retrospective on a coding session..agents/skills/retroshow-meHelp the user understand the current topic visually with concise diagrams, code-shape sketches, and focused HTML artifacts..agents/skills/show-metddTest-driven development. Use when the user wants to build features or fix bugs test-first, mentions "red-green-refactor", or wants integration tests..agents/skills/tddteachTeach the user a new skill or concept, within this workspace..agents/skills/teachto-benchmarkCreate a benchmark skill from an issue. The benchmark skill runs coding agents against main and an optional branch and reports whether the issue's behaviour improved..agents/skills/to-benchmarkto-questionnaireTurn a decision you can't fully answer into a questionnaire for someone else to fill in..agents/skills/to-questionnaireto-specTurn the current conversation into a spec and publish it to the project issue tracker: no interview, just synthesis of what you've already discussed..agents/skills/to-specto-ticketsBreak a plan, spec, or the current conversation into a set of tracer-bullet tickets, each declaring its blocking edges, published to the configured tracker (edges as text in one file per ticket locally, or native blocking links on a real tracker)..agents/skills/to-ticketstriageMove issues and external PRs through a state machine of triage roles, categorise, verify, grill if needed, and write agent-ready briefs..agents/skills/triagewait-whatStop. That last message did not land: re-pitch it..agents/skills/wait-whatwayfinderPlan a huge chunk of work (more than one agent session can hold) as a shared map of decision tickets on your issue tracker, and resolve them one at a time until the way to the destination is clear..agents/skills/wayfinderwizardGenerate an interactive bash wizard that walks a human through steps only they can perform. Use when provisioning infrastructure, setting up credentials or CI secrets, walking an unfamiliar third-party dashboard, or running a one-off migration or cutover. Don't invoke this for steps the agent can pe.agents/skills/wizardwriting-for-agentsWriting documents for agents. Use when creating or editing skills, or modifying AGENTS.md or CLAUDE.md..agents/skills/writing-for-agentsDocumentation
README

Coral
One MCP server for every service your agents use, with your credentials and your rules. Agents write short TypeScript programs. Coral runs them in a sandbox, adds the credentials, and checks every call against your policy.
Why Coral
Connecting an agent to many services usually means many MCP servers, a token pasted into each one, and every tool definition loaded into every prompt. Coral replaces that with one server:
- Smaller context, fewer round trips. The agent searches for the tools it needs instead of loading them all up front. It then sends one program that can call several tools and return only the fields the answer needs.
- Agents build on what already worked. When a program works, the agent saves it as a function. The next time, it calls that function in one step instead of finding the tools and writing the program again. Saved functions are typed and appear in search alongside provider tools.
- Agents never hold credentials. Coral stores your tokens and adds them to each call. Programs run in an isolated sandbox with no secrets, no network access, and no imports.
- You decide what runs. Set each tool's policy to Allow, Ask, or Block. A call to a tool set to Ask waits until a person approves it.
- Every run is recorded. Review each program and the calls it made in the Coral UI.
- You host it. Run Coral on your laptop or on your own server. Your data, credentials, and usage history stay with you.
Coral includes setup recipes for GitHub, Linear, Jira, Notion, Gmail, Stripe, Datadog, Sentry, HubSpot, and more. You can add any service that has an OpenAPI document or an MCP server.
Get started
Install Coral. Download the desktop app for macOS, Linux, or Windows from the releases page, or run a shared server for your team.
Add a provider. A provider is one service your agents can use. Pick one from the catalog, or bring your own OpenAPI document or MCP server. See Add a provider.
Connect your agent. Each workspace in Coral has its own MCP URL. Copy it from the Coral UI and add it to your MCP client:
claude mcp add --scope user --transport http coral <your-mcp-url> # Claude Code codex mcp add coral --url <your-mcp-url> # CodexFor Cursor, VS Code, OpenCode, and other clients, see Connect an MCP client.
Now ask your agent something that needs that provider, such as "What are my open pull requests?"
Setup guides and the configuration reference are at withcoral.com/docs.
How Coral works
graph LR
Agent["Your agent"] -->|"search, exec"| MCP["Coral MCP server"]
You["You"] -->|"providers, policy, approvals"| UI["Coral UI"]
subgraph Coral["Coral (your machine or server)"]
MCP --> Run["Sandboxed program run"]
UI --> Gate["Credentials and policy"]
Run --> Gate
end
Gate --> GH["GitHub"]
Gate --> SL["Slack"]
Gate --> Own["Your OpenAPI or MCP service"]
The agent searches for the tools it can use and reads their TypeScript signatures. Then it sends Coral a short program. This one finds open pull requests that have no reviewer and posts them to Slack:
const { data: pulls } = await coral.providers.github.pulls.list({
owner: "withcoral",
repo: "coral",
state: "open",
});
const unreviewed = pulls.filter((pull) => pull.requested_reviewers.length === 0);
await coral.providers.slack.chat.postMessage({
channel: "#engineering",
text: unreviewed.map((pull) => `#${pull.number} ${pull.title}`).join("\n"),
});
return unreviewed.map((pull) => pull.number);
Coral adds the credentials and checks each call against your policy. If
posting to Slack requires approval, the run pauses there until you approve it.
Only the pull request numbers go back to the agent, not the full GitHub
response. Once this works, the agent can save it as a function, and later
programs call it as coral.functions.<name>().
To learn about providers, accounts, policy, and workspaces, read Concepts.
Upgrade from Coral 0.x
Coral 1.0 replaces the SQL interface with TypeScript programs. It is a rewrite and starts from fresh state: it does not convert what 0.x stored, and it tells you at startup if it finds 0.x state. See Upgrade from Coral 0.x.
Development
To run Coral from a checkout, follow the development guide.
Community
Ask questions, share ideas, and show what you built in our Discord or on GitHub issues.
Security
Do not report security issues in public issues or pull requests. See
SECURITY.md.
License
Coral is licensed under the Apache License 2.0. See LICENSE.
Releases