Docs
PlatformAgents

Worked example

Configure issues-manager from scratch and see, call by call, how each part of the configuration decides.

This example builds a real agent and follows five calls to their decision. The company uses Keycloak for people and Google Workspace for part of the team, and has connected the GitHub MCP server.

The goal

issues-manager helps the engineering team handle issues and pull requests. The company policy is:

  • everyone in Keycloak can use the agent, except Diego, who is in another area;
  • the agent can list issues in acme/payments-api and acme/web;
  • the agent can merge, but only in acme/payments-api, and only pull requests with at least two approvals and no changes requested;
  • the agent cannot create branches.

The configuration

PartConfigurationPage
Who can delegateKeycloak customer: 80 of 81 people and services, everyone except DiegoWho can delegate
ToolsGitHub · list_issues and GitHub · merge_pull_request. No create_branchTools
RulesOn list_issues: "Payments and web repositories", repository is one of [acme/payments-api, acme/web]. On merge_pull_request: "Payments repository only", repository is one of [acme/payments-api], and "At least 2 approvals, no changes requested", reading the pull request reviews from a context sourceRules

In the graph, merge_pull_request shows "2 rules", and a dashed link goes from it to the context source of the reviews. After publishing, the bar shows the effective revision.

The calls

Each call goes through the three checks. The first one that fails sets the reason.

CallDelegationToolRulesResult
Alice merges a PR with 2 approvals in acme/payments-api✓✓✓ALLOW
Alice merges a PR with 1 approval in acme/payments-api✓✓✗ "At least 2 approvals"DENY · condition
Bruno merges in acme/infra✓✓✗ "Payments repository only"DENY · condition
release-pipeline creates a branch in acme/web✓✗—DENY · no_grant
Diego lists issues in acme/web✗——DENY · no_delegation

Diego never gets to call: his token exchange is already refused with no_delegation, and the agent gets no token for him. The table row shows what would happen if the delegation were revoked after the token was issued: the per-call check denies the same way.

What the administrator sees

Each denial appears in Investigate with the step that failed and an action that leads straight to the fix. The first denied call, in the inspector:

Inspector of a decision denied by a rule

The path comes first: delegation, agent, server and tool passed, and the Rules step names the rule that failed. The result reads "Rule not met:" with the rule as a sentence, and Open the rule, under it, leads to the tool panel in the graph. No value is recorded: the record does not say how many approvals the PR had.

Bruno's denial names the other rule, "Payments repository only". Open the rule leads to the same panel. The administrator decides whether the agent should really merge in acme/infra. If so, they add the repository to the list of that rule and publish, and the next call goes through.

What to change if the policy changes

ChangeWhereEffect
Diego moves to engineeringCheck Diego in the Keycloak panel and publishHis next token exchange works
Merge also in acme/webAdd acme/web to the list of "Payments repository only"Merges in acme/web are evaluated by the approval rule
Merge only during business hoursAnother rule, with a time attribute from a context sourceEvery rule must pass
Temporary access to create_branchAdd the tool with an expirationAfter the date, it is no_grant again with nobody touching it
Incident with the agentDisable agentNo new token, next call refused