PR typecheck
Copilot calls run_ci_privilege. Limetry allows ci_privilege so tests run. Deploy secrets stay unavailable.
Evaluate before the tool runs. Outcomes: allow, deny, or wait for a human — then a scrubbed audit.
import { createRemoteEngine } from "@limetry/sdk"
const engine = createRemoteEngine({
baseUrl: process.env.LIMETRY_BASE_URL,
apiKey: process.env.LIMETRY_BEARER_TOKEN,
})
const decision = await engine.evaluateAction({
intent_id: crypto.randomUUID(),
policy_id: policyId,
agent_id: "ci-bot",
action_type: "deploy",
resource: "github.com/acme/api@abc123",
issued_at: new Date().toISOString(),
})
if (!decision.ok || !decision.approved) {
throw new Error((decision.reasons ?? ["denied"]).join("; "))
}MIT-licensed MCP, CLI, and SDK. ActionIntent evaluate runs on the self-hostable server. Audit stores scrubbed projections by default — see data minimization docs.
ActionIntent hits the server first. Allowed types, resource patterns, cost caps, and approval gates — not a prompt instruction.
Allow continues. Deny blocks with reasons and a signed receipt. Approval-required waits for a human. Your loop still enforces the outcome.
Every evaluate writes a minimized projection. Operators see what policy did — not secrets, tokens, or chat transcripts.
How it works
The same evaluate path works for any irreversible tool. These loops show allow, deny, or wait before the side effect runs.
Agent surface: Copilot coding agent
Copilot calls run_ci_privilege. Limetry allows ci_privilege so tests run. Deploy secrets stay unavailable.
request_production_deploy on pull_request is untrusted. Limetry evaluates, records deny, then require_trusted fails closed before AWS keys load.
Trusted push to main still returns approval_required. The coding agent prints approval_id and exits closed.
Same contract everywhere
Call createRemoteEngine().evaluateAction from any agent loop or adapter. Every evaluation returns an outcome — allow, deny, or wait — plus reasons and a signed receipt. The server requires intent_id (UUID) and issued_at.
Read SDK docsimport { createRemoteEngine } from "@limetry/sdk"
const engine = createRemoteEngine({
baseUrl: process.env.LIMETRY_BASE_URL,
apiKey: process.env.LIMETRY_BEARER_TOKEN,
})
const decision = await engine.evaluateAction({
intent_id: crypto.randomUUID(),
policy_id: policyId,
agent_id: "ci-bot",
action_type: "deploy",
resource: "github.com/acme/api@abc123",
issued_at: new Date().toISOString(),
})
if (!decision.ok || !decision.approved) {
throw new Error((decision.reasons ?? ["denied"]).join("; "))
}Examples
Adapters that wire evaluate into real agent loops. The ActionIntent contract stays the same when you add the next one.
GitHub Actions + Copilot
Allow · deny · approval
Shopify support / ops agent
Allow · deny · approval
Cursor / Claude SQL tool
Allow · deny · approval
OpenAI Procurement Agent
Recommended
Serverless Slack Cost Control
Integration
LangGraph Action Governance
Integration
LangChain-style Governance
Simulation
CrewAI-style Approvals
Simulation
AutoGen-style Renewal Broker
Simulation
ChatGPT GPT Actions Schema
Schema
SDK, CLI, MCP, and the evaluation server are MIT-licensed. Apply an ActionPolicy, call evaluate from your agent loop, and tail scrubbed audit on infrastructure you control.