Quickstart
Set up policy-enforced, audited agentic coding in minutes
By the end of this quickstart, you’ll have:
- Keycard protecting all tool calls via policies
- Audit log of all tool authorization decisions
You should be able to complete this quickstart in about 10 minutes.
-
Sign up for Keycard
Go to console.keycard.ai, create your account, and sign in.
-
Install the Keycard CLI
Install the Keycard CLI from your computer’s terminal:
Terminal window brew install keycardai/tap/keycardThis gives you the
keycardbinary, Claude Code plugin, and a set of Skills Claude uses to configure your access policy. -
Install the Keycard Claude plugin
Terminal window claude plugin marketplace add keycardai/pluginsclaude plugin install keycard-cli@keycardai -
Install an MCP server from the catalog
The Keycard Catalog lets you install official MCP servers like Linear, Sentry, Notion, Jira, GitHub, and more. Pick one to install:
-
Open Console → Applications → Add Application → Explore MCP Servers.
-
Pick a server (this quickstart uses Linear as the running example) and click Install. The server appears in your Applications list with a Keycard MCP Gateway URL.
-
Open the installed application, click Add to Coding Agent → Claude Code, and copy the displayed
claude mcp addcommand into your terminal:Terminal window claude mcp add --transport http --scope user <server-name> <gateway-url>
-
-
Run your agent in a secure session
Find the CLI configuration snippet with your Organization ID and Zone ID in the Keycard Console:
-
Click Zone → Zone Settings, then copy the CLI configuration code block.
-
In the root of your project, create a
keycard.tomland paste your CLI configuration into the file:[org]id = "<org-id>"[zone]id = "<zone-id>"
Then start a Keycard-protected Claude Code session:
Terminal window keycard run -- claudeEvery tool call Claude makes is evaluated by Keycard before it runs.
-
-
Have the agent write a policy
Keycard lets you control sensitive actions agents may take. Configure access controls by asking the agent to write a policy for you. Your policy should have at least one rule that requires Human-in-the-Loop or denies a specific action.
For example, if you’re using Linear, try a prompt like this:
Help me set up a Keycard policy for the Linear MCP server. Allow me to read issues and require In-the-Loop approval for saving and updating issues.
Claude may trigger an initial connection to Linear via Keycard. You’ll be prompted to authorize access between Keycard and Linear:

Default policies require your approval. You will see Keycard ITL Prompt like this:

Claude proposes a policy written in the Cedar policy language for you to review. It might look something like this:
@description("Allow get and list.")permit (principal, action == Action::"Agent::ToolUse", resource)when { resource like Tool::"mcp__linear__get_*" || resource like Tool::"mcp__linear__list_*" };@description("Require in-the-loop prompt for saving new issues and updating.")@itl("prompt")permit (principal, action == Action::"Agent::ToolUse", resource)when { resource like Tool::"mcp__linear__save_issue_*"|| resource like Tool::"mcp__linear__update_*" };Type
yesto apply it. Claude writes the policy to your Keycard state directory and confirms it’s active. The exact tool names will match what your installed MCP server actually exposes. -
Trigger an action governed by your policy
Ask Claude to complete a task the policy now gates or forbids:
Create a new issue.
The Keycard hook intercepts the tool call before it runs and prompts you for approval:
Claude uses the
/keycard-query-policyskill to explain what happened. -
Check the session log
In your Keycard Console, click Sessions to see tool calls made and denied, during your session with Claude.
What’s Next
Section titled “What’s Next”Now that you have Claude Code running in a secure session with token exchange and policy governance, here’s where to go next:
- Install more MCP and API servers for Sentry, Notion, Atlassian, Gmail, Slack, and more in the Catalog
- Access APIs on Behalf of Users so each agent call is scoped to the signed-in user’s identity, permissions, and audit attribution
- Run Apps Without Static Secrets so workloads authorize every call with their own identity instead of long-lived API keys
- Grant Agent Access to APIs so autonomous agents get their own scoped identity and audit trail, independent of any human
Troubleshooting
Section titled “Troubleshooting”Why am I being prompted each time?
- The default policy at
~/.local/state/keycard/policy.cedarconfigures Bash, Edit, and Write actions to require ITL approval these are the tools most commonly used during development. - To reduce prompts, ask Claude to update your policy with more permissive rules for actions you trust.
keycard run fails to start
- Verify
keycard auth signinsucceeded by runningkeycard whoami - Check that
keycard.tomlexists in the project root with a valid[zone] id = "<your-zone-id>" - Confirm the zone ID matches what you used for
signin
The policy isn’t blocking what I expect
- Ask Claude: “What’s my current policy?” to trigger /keycard-query-policy and see the active rules
- Make sure the Cedar diff included a
forbidclause, or that the tool was simply omitted from anypermitclause (allow-list policies deny by omission) - Restart
keycard run -- claudeafter editing the policy if the change isn’t picked up
MCP server OAuth fails on first tool call
- Open the application in Console → Applications and re-run the OAuth flow from the install dropdown
- Confirm your
claude mcp addcommand used the correct Gateway URL - Check that your zone’s identity provider is configured (Console → Identity Providers)