ControlKeel
ControlKeel is a governance and control plane for AI agent-led software delivery, providing deterministic validation, sandboxed execution, cost control, memory, review gates, and observability across AI coding hosts.
Validation & Execution
ck_validate: Check code, config, shell commands, or text against governance rules (trust boundaries, domain packs) before executionck_execute_code: Run generated JavaScript or Python in a Docker sandbox with network/filesystem restrictions and dry-run support
Context & Files
ck_context/ck_context_pack: Fetch mission state, findings, budget, proof summaries, and build compact context bundles for agentsck_fs_ls,ck_fs_read,ck_fs_find,ck_fs_grep: Read-only browsing and searching of the bound project root
Git Integration
ck_git_diff: Generate diffs with CK validation appliedck_git_commit: Validate commit messages before committingck_git_status: Get git status correlated with findings
Governance & Review
ck_finding: Persist findings with severity and ruling (allow/warn/block/escalate)ck_review_submit/ck_review_status/ck_review_feedback: Submit plans or diffs for human review, check status, and approve/denyck_regression_result: Ingest external regression test evidence into proof bundles
Memory & Goals
ck_memory_search/ck_memory_record/ck_memory_archive: Store, retrieve, and archive typed governed memory (decisions, findings, proofs)ck_goal: Record, list, and update durable goals across sessions
Budget & Cost Control
ck_budget: Estimate/commit costs against session and daily budgets with circuit breakersck_cost_optimizer: Get cost optimization suggestions or compare agent pricingck_token_audit: Audit rule files and skills for token bloat and duplicates
Routing & Delegation
ck_route: Recommend the best AI agent for a task based on security tier, budget, and task typeck_delegate: Hand off governed tasks to another agent in auto, embedded, handoff, or runtime mode
Deployment & Observability
ck_deployment_advisor: Analyze project stack, suggest platforms, and generate CI/CD or Docker config filesck_outcome_tracker: Record session outcomes and retrieve leaderboard data for reinforcement learningck_mcp_discover: Auto-discover tools from external MCP servers
Integrates with Amp as a plugin-native host for governing agent-generated software delivery, providing MCP configuration and companion files.
ControlKeel
Turn the way your team works into enforceable memory for AI agents. - @arya_minus
ControlKeel is an agent control plane for day-to-day governed engineering. Through observation, findings and evaluation, it learns your intent rules, review taste and delivery habits, turning them into typed memory, policy checks and proof bundles. CK sits between your coding agents and production as a portable "company brain": comparing intended delivery against actual delivery and turning raw agent intent into policy-validated tasks.
If you're using an AI agent today, you probably have an *.md telling it how to behave. But a rules/specs file is just a promise made to the model. ControlKeel enforces the output. Beyond just catching bugs, CK solves the "Unknown Unknowns" problem: having to re-explain your domain knowledge in every single session.
Product loop
Capture intent and policy — scope, risk, budget, domain pack, and human taste become CK state.
Validate agent output — deterministic checks and optional advisory review produce findings before risky work reaches main.
Gate only when needed — humans approve high-impact actions when intent, risk, or policy requires it.
Persist evidence — findings, reviews, proofs, memory, cost, and task outcomes survive host switches.
Improve with evals — traces and recurring failures become bounded regression evidence for specific suites and subjects.
The operating rule is simple: spend tokens on discovery, not rediscovery. Recurring behavior moves through a human-gated deterministic promotion path; once its regression evidence passes, checks, APIs, CLIs, or workflows handle the known case and agents handle only exceptions and genuinely new uncertainty.
ControlKeel transforms your domain knowledge from "raw" intent and "shelfware" documentation into a living system that remembers, enforces, and evolves.
Related MCP server: sp-devcontrol
Quick start
One-line setup via your agent
Copy/paste this into your agent (OpenCode, Codex, Claude, or another supported host):
Set up ControlKeel for this repository. Read and follow https://raw.githubusercontent.com/aryaminus/controlkeel/main/README.md, https://raw.githubusercontent.com/aryaminus/controlkeel/main/docs/getting-started.md, https://raw.githubusercontent.com/aryaminus/controlkeel/main/docs/support-matrix.md, and https://raw.githubusercontent.com/aryaminus/controlkeel/main/docs/agent-integrations.md. Install ControlKeel if missing, run `controlkeel setup`, detect this agent host, attach the strongest supported path with `controlkeel attach <host>`, then run `controlkeel attach doctor`, `controlkeel provider doctor`, `controlkeel status`, `controlkeel findings`, and the host-native MCP check. If CK is available only as MCP, call `ck_attach` for this host. Apply only safe local fixes and redact secrets from logs. Pause and ask before continuing if the host needs workspace trust, manual provider configuration, a restart after attach/plugin changes, or a plan-review approval that cannot auto-wait. Ensure the project is trusted and restart the host after attach/plugin changes.CLI install
Install the CLI:
brew tap aryaminus/controlkeel && brew install controlkeel
# or
npm i -g @aryaminus/controlkeel
# or
curl -fsSL https://github.com/aryaminus/controlkeel/releases/latest/download/install.sh | shWindows PowerShell:
irm https://github.com/aryaminus/controlkeel/releases/latest/download/install.ps1 | iexFirst governed run:
controlkeel
controlkeel setup
controlkeel attach opencode # project scope by default; use another supported host as needed
controlkeel attach doctor
controlkeel provider doctor
controlkeel status
controlkeel findingsRun setup and attach from the repository you want to govern. Project scope writes host files only inside that repository. --scope user writes host-level files under your user configuration only for targets that explicitly support user scope; it does not turn project binding or proof state into global state.
For the complete first-run path, use docs/getting-started.md. For host truth, use docs/support-matrix.md and docs/agent-integrations.md.
Benchmark-backed evidence
ControlKeel includes a persisted benchmark engine. Current user-facing evidence is bounded to the named suite, subject, and scoring definition below; docs/benchmarks.md is the canonical reference for full tables, caveats, JSON exports, and agent-host protocols.
Verified with-vs-without-CK baseline (host_comparison_v1, 12 risky scenarios)
Verified with ControlKeel 0.3.45:
Risky suite
host_comparison_v1:null_policy_baselinecaught 0/12;controlkeel_validatecaught 12/12, blocked 9/12, and hit expected rules 9/12 with median deterministic validation time 52 ms, 0 provider tokens.Paired benign suite
benign_baseline_v1:controlkeel_validateproduced 0/10 catches, 0/10 blocks, FPR 0.000, median deterministic validation time 42 ms, 0 provider tokens.
Read the numbers precisely: deterministic scanner evidence is not the same as model-backed agent-host evidence. Reproduction commands and the OpenCode/Copilot/Claude/Codex comparison protocol live in docs/benchmarks.md.
What ships today
Local governance: CLI, the full local stdio MCP tool set, project binding, host attach/export bundles, scanner validation, findings, reviews, proof bundles, budgets, and typed memory.
Host and runtime support: native attach for supported hosts, runtime exports for headless/outer-loop systems, a narrower OAuth-scoped hosted MCP set, minimal A2A, and fallback validation/proxy paths.
Team/project operations: org membership, invitations, workspace GitHub repo bindings, service accounts, webhooks, workspace tool policy, and policy-set APIs.
Cloud evidence paths: opt-in cloud telemetry, workspace keys, cloud run packages, runtime callbacks, and dormant-until-configured bidirectional sync for findings, reviews, digests, and memory records.
Observability loop: timelines, memory quality, costs, trends, problem clusters, eval candidates, benchmark drafts/history, and promotion advisories.
Docs map
docs/README.md — documentation map by job
docs/getting-started.md — install to first finding
docs/support-matrix.md — canonical host/protocol inventory
docs/agent-integrations.md — integration mechanisms and support tiers
docs/benchmarks.md — benchmark scoring, metadata, and claim discipline
docs/observability-feedback-loop.md — local evidence-to-regression loop
docs/control-plane-claim-matrix.md — README claim-to-test matrix for governance, memory, cloud sync, and human gates
docs/api-reference.md and docs/cli-reference.md — code-aligned surfaces
docs/packages.md — package and distribution catalog
docs/self-hosting.md — self-host deployment guidance
Development
mix setup
mix phx.server
mix test
mix precommitPhoenix + Ecto on SQLite. Uses Req for HTTP. Single-binary builds ship through Burrito and GitHub Releases.
Available Tools
55 toolsck_attachA
Wire ControlKeel into the current agent host (Claude Code, Cursor, Codex, OpenCode, etc.). Closes the gap for users who installed ControlKeel via a one-line MCP-add command but skipped controlkeel attach <host>. Installs the host-specific hooks (SessionStart, PreToolUse, PostToolUse, UserPromptSubmit), skills directory, slash commands, AGENTS.md/CLAUDE.md preamble, and subagent profiles for the requested host. Idempotent — re-running refreshes artifacts to the current version. Writes only inside project_root; no network egress. Call this once after a one-line MCP install when the host lacks ControlKeel hooks/skills. Use ck_mcp_discover first if unsure which host ID to pass.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | Agent host ID to attach. One of: claude-code, codex-cli, cursor, opencode, augment, continue, aider, cline, roo-code, kiro, goose, gemini-cli, letta-code, windsurf, vscode, copilot, pi. | |
| scope | No | Attach scope. Defaults to project. | |
| project_root | No | Absolute path to the project root. Defaults to CK_PROJECT_ROOT or the MCP server's working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| host | No | |
| attached | No | |
| files_created | No | |
| hooks_installed | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description claims idempotency ('Idempotent — re-running refreshes artifacts'), but annotations set idempotentHint: false. This is a direct contradiction, warranting a score of 1. Other behavioral details are provided but overridden by the inconsistency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise single paragraph, front-loaded with main purpose. Every sentence adds value, no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Comprehensive description covering use case, idempotency, filesystem impact, and prerequisites. Output schema exists so return values are not needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters. Description adds default values (project_root, scope) but no syntactic or usage details beyond schema. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool wires ControlKeel into the agent host, installing hooks and artifacts. It distinguishes from sibling ck_mcp_discover with specific guidance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use (after one-line MCP install when host lacks hooks) and suggests using ck_mcp_discover first for host ID. Provides clear context and alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_budgetA
Estimate, record, or check the cost of an agent operation against session and daily spend budgets. Three modes: estimate (read-only, returns headroom and projected cost); commit (write — deducts estimated_cost_cents from the session budget); status (read-only, returns remaining budget). For commit mode: pass session_id, estimated_cost_cents, provider, model, input_tokens, and output_tokens. Pass include_token_overhead: true with project_root to attach a token overhead audit (rule files, skill duplicates, tool schemas) to the response. Check ck_budget before expensive multi-agent work or large model calls. Use ck_cost_optimizer for model price comparisons without recording spend.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Operation mode that determines the tool behavior and return shape. | |
| tool | No | Specific tool or operation that incurred the cost. | |
| model | No | AI model identifier (e.g., claude-sonnet-4.6, o4-mini). | |
| source | No | Source system or component that triggered the cost. | |
| task_id | No | Task identifier within the session for scoped operations. | |
| metadata | No | Arbitrary key-value metadata for extensibility and audit context. | |
| provider | No | AI provider name (e.g., openai, anthropic, ollama). | |
| session_id | Yes | Unique session identifier for correlating findings, proofs, budget, and audit trail. | |
| input_tokens | No | Number of input (prompt) tokens consumed. | |
| project_root | No | Absolute path to project root. Required when include_token_overhead is true. | |
| output_tokens | No | Number of output (completion) tokens generated. | |
| cached_input_tokens | No | Number of tokens served from cache. | |
| estimated_cost_cents | No | Estimated cost of the operation in US cents. | |
| include_token_overhead | No | When true, attach a token overhead summary (rule files, skill duplicates, tool schemas) to the response. |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | No | |
| decision | No | |
| session_id | No | |
| headroom_cents | No | |
| token_overhead | No | |
| projected_cost_cents | No | |
| remaining_daily_cents | No | |
| remaining_session_cents | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description fully discloses behavior: explains that estimate and status are read-only, commit is a write operation that deducts from session budget, and mentions optional token overhead attachment. Annotations only provide hints, but the description gives concrete behavioral details without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four concise sentences that efficiently convey purpose, modes, usage guidance, and parameter hints. Front-loaded with key information, no redundant or vague phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (three modes, 14 parameters, nested objects), the description covers all essential aspects: mode behavior, required params per mode, integration with token overhead, and link to sibling tool. Has output schema (context says true), so return values are documented elsewhere.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
While schema covers all parameters, the description adds crucial context: specifies required parameters for commit mode (session_id, estimated_cost_cents, provider, model, input_tokens, output_tokens) and explains include_token_overhead requires project_root. This goes beyond schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Estimate, record, or check the cost of an agent operation against session and daily spend budgets.' It explicitly describes three modes (estimate, commit, status), distinguishing it from sibling tools like ck_cost_optimizer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance: 'Check ck_budget before expensive multi-agent work or large model calls' and 'Use ck_cost_optimizer for model price comparisons without recording spend.' This clearly indicates when to use this tool and when to use an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_checkpoint_createA
Create a workspace checkpoint capturing git state, workspace context, and metadata for migration or rollback.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Type classification for the operation. | |
| summary | No | Brief human-readable summary of the record. | |
| task_id | Yes | Task identifier within the session for scoped operations. | |
| created_by | No | ||
| session_id | No | Unique session identifier for correlating findings, proofs, budget, and audit trail. |
Output Schema
| Name | Required | Description |
|---|---|---|
| type | No | |
| summary | No | |
| created_at | No | |
| checkpoint_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds moderate behavioral context beyond annotations: it indicates a mutating operation ('Create') and what is captured, but does not disclose side effects, authorization needs, or whether earlier checkpoints are affected. Annotations are minimal, so description carries burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, direct and informative with no redundant words. All information is front-loaded and essential.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 5 parameters (1 required, 1 enum) and an output schema, the description is too brief to fully guide usage. It lacks parameter details and usage scenarios, but is adequate for a simple create operation. The output schema likely documents return values, partially compensating.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 80% description coverage (4 of 5 parameters described). The description adds no additional meaning to any parameters, relying on schema. Baseline 3 is appropriate as no further value is provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb 'Create' and specific resource 'workspace checkpoint' with details of contents (git state, workspace context, metadata) and purpose (migration or rollback), distinguishing it from sibling tools like ck_checkpoint_restore.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description implies usage for creating checkpoints but provides no explicit guidance on when to use this tool versus alternatives such as ck_rollback or other snapshot tools, nor any conditions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_checkpoint_listBRead-onlyIdempotent
List all checkpoints for a session, optionally filtered by type.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Type classification for the operation. | |
| limit | No | ||
| session_id | No | Unique session identifier for correlating findings, proofs, budget, and audit trail. |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | No | |
| checkpoints | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds minimal context by specifying that it lists checkpoints for a session, but does not disclose any additional behavioral traits like sorting, pagination, or limits on results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence that efficiently conveys the tool's purpose without any superfluous words or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the description covers the basic functionality, it omits details such as the behavior of the 'limit' parameter and the structure of the output (though an output schema exists). Given the tool's simplicity and annotation support, it is adequate but not fully comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description only restates the optional type filter from the schema. It does not add meaning for the 'limit' parameter (which lacks a schema description) or elaborate on 'session_id'. With 67% schema coverage, the description fails to compensate for the missing parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'checkpoints', with scope 'for a session' and optional filter by type. This distinguishes it from sibling tools like ck_checkpoint_create or ck_checkpoint_restore.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide any guidance on when to use this tool versus alternatives, such as ck_checkpoint_restore or ck_checkpoint_create. There is no mention of when not to use it or what conditions favor this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_checkpoint_restoreBDestructive
Restore session state from a previous checkpoint, updating session metadata with checkpoint information.
| Name | Required | Description | Default |
|---|---|---|---|
| strict | No | ||
| session_id | No | Unique session identifier for correlating findings, proofs, budget, and audit trail. | |
| checkpoint_id | Yes | Unique identifier of the checkpoint to restore. |
Output Schema
| Name | Required | Description |
|---|---|---|
| summary | No | |
| restored | No | |
| checkpoint_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide destructiveHint: true and readOnlyHint: false, but the description adds little beyond 'Restore'. It does not disclose side effects, whether the restore is additive or replacement, what gets destroyed, or error conditions. For a mutation tool, more behavioral context is needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no redundant words, front-loaded with the primary action. Efficient and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Core action is stated, but missing context such as prerequisites (e.g., checkpoint must exist), behavior on conflict, and effect on current session state. Output schema exists but does not fully compensate for the lack of behavioral details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already describes 2 of 3 parameters (checkpoint_id and session_id), but 'strict' lacks description. The tool description does not add any additional parameter semantics. Baseline is 3 due to high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies the verb 'Restore', the resource 'session state from a previous checkpoint', and the action 'updating session metadata'. It clearly distinguishes from sibling tools like ck_checkpoint_create and ck_checkpoint_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives, no prerequisites or conditions mentioned. The description only states what it does without context for decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_contextARead-onlyIdempotent
Fetch the full governed session state: mission, budget, active findings, proof summary, planning context, workspace snapshot, drift signals, recent transcript events, resume packet, and ControlKeel instruction hierarchy. Read-only. detail_level compact (default) returns a token-efficient summary; use full only when raw workspace, resume, or transcript payloads are required. session_id defaults to the active bound session; pass project_root to resolve it automatically. Call ck_context at the start of every task to reacquire state. Prefer ck_context_pack when you need a focused, citation-enriched bundle for a specific retrieval query rather than the full session snapshot.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | No | Task identifier within the session for scoped operations. | |
| session_id | No | Unique session identifier for correlating findings, proofs, budget, and audit trail. | |
| detail_level | No | Use compact by default to reduce token usage; request full only when raw workspace/resume/transcript payloads are needed. | |
| project_root | No | Absolute path to the project root directory on the local filesystem. |
Output Schema
| Name | Required | Description |
|---|---|---|
| precedent | No | |
| risk_tier | No | |
| session_id | No | |
| detail_hint | No | |
| memory_hits | No | |
| current_task | No | |
| detail_level | No | |
| project_root | No | |
| past_patterns | No | |
| proof_summary | No | |
| recent_events | No | |
| resume_packet | No | |
| session_title | No | |
| budget_summary | No | |
| active_findings | No | |
| attach_advisory | No | |
| outcome_profile | No | |
| provider_status | No | |
| autonomy_profile | No | |
| bootstrap_status | No | |
| boundary_summary | No | |
| improvement_loop | No | |
| planning_context | No | |
| task_augmentation | No | |
| workspace_context | No | |
| compliance_profile | No | |
| transcript_summary | No | |
| workspace_cache_key | No | |
| context_reacquisition | No | |
| instruction_hierarchy | No | |
| security_case_summary | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint true and idempotentHint true. The description reinforces 'Read-only' and adds behavioral details about detail_level behavior and token efficiency. No contradictions; adds value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is multi-sentence but every sentence adds value: purpose, components, parameter guidance, usage timing, sibling alternative. Efficient and front-loaded, though slightly verbose; still earns its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, rich input schema, and many sibling tools, this description is thorough. It lists return components, explains parameter trade-offs, gives usage context, and covers edge cases (e.g., automatic session resolution). No output schema needed for explanation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema documents all 4 parameters with 100% coverage. The description adds defaults (compact for detail_level, session_id defaults to active bound session, project_root for resolution), providing meaning beyond the schema's definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Fetch') and resource ('full governed session state'), enumerating the components (mission, budget, findings, etc.). It explicitly distinguishes from the sibling tool ck_context_pack by directing when to use each, making the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear guidance: 'Call ck_context at the start of every task to reacquire state' and specifically recommends ck_context_pack for focused retrieval. Also explains when to use compact vs full detail_level, giving explicit usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_context_packARead-onlyIdempotent
Build a compact, citation-enriched context bundle for the current session and task by combining task facts, proof state, resume highlights, and ranked memory excerpts. Read-only. query is an optional retrieval query; when omitted, ControlKeel synthesizes one from the current task title and session context. top_k controls how many memory hits to include (default 5). detail_level compact (default) keeps the bundle token-efficient. Prefer ck_context_pack over ck_context when you need a focused, query-driven bundle for a specific sub-task rather than the full session snapshot. Use ck_context at the start of a session for full mission state; use ck_context_pack mid-task to fetch targeted prior knowledge.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Optional explicit retrieval query. When omitted, ControlKeel synthesizes one from the current task and session. | |
| top_k | No | Maximum number of top-ranked results to return. | |
| task_id | No | Task identifier within the session for scoped operations. | |
| session_id | No | Unique session identifier for correlating findings, proofs, budget, and audit trail. | |
| detail_level | No | ||
| project_root | No | Absolute path to the project root directory on the local filesystem. |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | No | |
| task_id | No | |
| hit_count | No | |
| count_only | No | |
| session_id | No | |
| context_pack | No | |
| detail_level | No | |
| factual_only | No | |
| generated_at | No | |
| tag_distribution | No | |
| excluded_ids_count | No | |
| retrieval_strategy | No | |
| semantic_available | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description states 'Read-only' which aligns with annotations (readOnlyHint=true, destructiveHint=false). It also explains default behaviors for omitted query and detail_level. Adds value beyond annotations by clarifying synthesis of query and default detail_level.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences: first states purpose, second outlines parameters, third gives usage guidance. No redundant words. All information is front-loaded and critical for agent decision.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 6 parameters, output schema, and annotations, the description covers purpose, parameter behaviors, defaults, and usage context. It is complete and does not need to explain return values due to output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 83%, so baseline is 3. Description adds meaningful defaults and behavior for query (synthesized when omitted), top_k (default 5), and detail_level (compact default). This enriches understanding beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool builds a compact, citation-enriched context bundle. It uses specific verbs and resources ('Build a ... context bundle') and distinguishes itself from the sibling tool ck_context by specifying use cases (mid-task vs session start).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly guides when to use this tool over ck_context: 'Prefer ck_context_pack over ck_context when you need a focused, query-driven bundle for a specific sub-task rather than the full session snapshot. Use ck_context at the start of a session... use ck_context_pack mid-task.' This provides clear context and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_copilotA
Real-time collaborative channel where human actions stream to the agent. Build software for humans and agents to use together — agents can see when a human is viewing, editing, or approving. Modes: subscribe (receive events), publish (emit an event), presence (who is active), history (recent events).
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Operation mode. Defaults to history. | |
| actor | No | Actor identifier (e.g., 'human', 'agent'). | |
| limit | No | Max events to return in history mode. Default: 50. | |
| payload | No | Event payload. | |
| task_id | No | Task identifier for scoping the event. | |
| event_type | No | Event type for publish mode. | |
| session_id | Yes | Session identifier. |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | No | |
| events | No | |
| presence | No | |
| published | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false, destructiveHint=false, idempotentHint=false. The description adds behavioral context by describing real-time event streaming and the collaborative aspect, which aligns with the annotations. It does not contradict them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the primary purpose, and efficiently covers the key modes. No extraneous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (7 parameters, nested objects) and that an output schema exists, the description provides sufficient high-level context. It could be more explicit about parameter usage per mode, but the schema covers details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and parameters are already described. The description adds value by summarizing the modes but does not elaborate on other parameters like actor, event_type, limit, payload, session_id, task_id beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is a real-time collaborative channel for human actions streaming to the agent, explaining that agents can see human viewing, editing, approving. It distinguishes itself from siblings by specifying modes (subscribe, publish, presence, history) and the collaborative nature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the four modes and what each does (receive events, emit event, who is active, recent events), providing clear context for when to use. However, it does not explicitly state when not to use or contrast with alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_cost_optimizerARead-onlyIdempotent
Get cost optimization suggestions or compare AI provider/model prices for a task. Read-only — no budget records are written (use ck_budget to record actual spend). Two modes: suggest returns optimization tips based on recent session spending patterns; compare returns a side-by-side price breakdown for the given task. For suggest mode, pass session_id. For compare mode, pass task_description and estimated_tokens along with top_provider and top_model as the baseline. Use ck_cost_optimizer before choosing a model for expensive multi-agent work; use ck_budget to record and enforce spend limits.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | Operation mode that determines the tool behavior and return shape. | |
| spending | No | ||
| top_model | No | Primary model for cost comparison. | |
| session_id | No | Unique session identifier for correlating findings, proofs, budget, and audit trail. | |
| top_provider | No | Primary provider for cost comparison. | |
| estimated_tokens | No | ||
| task_description | No | Task description for cost estimation. |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | No | |
| comparisons | No | |
| suggestions | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description confirms 'Read-only — no budget records are written' and outlines two modes with their outputs (suggest: optimization tips; compare: price breakdown). This adds value beyond annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences: purpose and read-only status, mode definitions, and usage guidance with an alternative. It is front-loaded, efficient, and every sentence adds actionable value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 parameters and an output schema, the description covers the core logic (two modes, parameter requirements, return types) and provides a real-world usage scenario. While it omits the 'spending' parameter, the overall completeness is high for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 71% schema description coverage, the description clarifies the critical parameter 'mode' and maps other parameters to modes (e.g., session_id for suggest; task_description, estimated_tokens, top_provider, top_model for compare). However, the 'spending' parameter is not mentioned, leaving a small gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Get cost optimization suggestions or compare AI provider/model prices for a task.' It specifies two distinct modes (suggest, compare) and contrasts with sibling tool ck_budget for recording spend, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit usage guidance is provided: 'Use ck_cost_optimizer before choosing a model for expensive multi-agent work; use ck_budget to record and enforce spend limits.' The description details which parameters to pass for each mode (session_id for suggest, task_description/estimated_tokens/top_provider/top_model for compare), offering clear when-to-use and when-not-to-use information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_delegateA
Hand off a governed task or session to another AI agent, transferring governance context (findings, budget, proofs) to the target. Mutates session state to reflect the delegation. Four modes: auto (ControlKeel picks the best agent), embedded (inline sub-agent), handoff (transfer session ownership), runtime (delegate to a pre-configured runtime agent). agent is the target agent ID (e.g., claude, opencode, cursor). Call ck_route first to identify the best agent, then ck_delegate to transfer. Prefer ck_route when you only need a recommendation without transferring; prefer ck_delegate when you are ready to hand off execution.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Operation mode that determines the tool behavior and return shape. | |
| agent | No | Target agent identifier for delegation (e.g., claude, opencode). | |
| task_id | No | Task identifier within the session for scoped operations. | |
| session_id | No | Unique session identifier for correlating findings, proofs, budget, and audit trail. | |
| project_root | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | No | |
| agent | No | |
| status | No | |
| result_ref | No | |
| session_id | No | |
| package_root | No | |
| result_length | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states 'Mutates session state to reflect the delegation,' which aligns with annotations (readOnlyHint=false, destructiveHint=false). It also explains the four modes and their behaviors, providing transparency beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, front-loaded with the core purpose, and each sentence adds essential information without redundancy. It is a model of conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 parameters, output schema exists), the description covers purpose, usage, modes, and alternatives. It lacks explicit mention of error conditions or prerequisites but is otherwise complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80%, and the description adds meaning by explaining the four modes (e.g., 'auto: ControlKeel picks the best agent'), which is not in the schema. However, it does not elaborate on the purpose of task_id, session_id, or project_root beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Hand off a governed task or session to another AI agent, transferring governance context.' It specifies the verb 'hand off' and the resource, distinguishing it from siblings like ck_route.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is provided: 'Call ck_route first to identify the best agent, then ck_delegate to transfer. Prefer ck_route when you only need a recommendation without transferring; prefer ck_delegate when you are ready to hand off execution.' This clearly indicates when to use this tool vs the alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_deployment_advisorA
Analyze the project stack and suggest deployment platforms, or generate CI/CD and Docker configuration files. Three modes: analyze (read-only, returns platform recommendations based on detected stack); generate_files (write operation, creates Dockerfile and CI/CD configs in the project); dns_guide (read-only, returns DNS setup instructions for the recommended platform). project_root is required. Set dry_run: true with generate_files to preview what would be created without writing files. Use ck_deployment_advisor before deploying a new project or when setting up CI/CD for the first time. For budget and cost checks before deployment, use ck_budget.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | Operation mode that determines the tool behavior and return shape. | |
| dry_run | No | ||
| project_root | Yes | Absolute path to the project root directory on the local filesystem. |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | No | |
| platforms | No | |
| files_created | No | |
| dns_instructions | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that analyze and dns_guide are read-only, generate_files is a write operation (creates files). Mentions dry_run to preview writes. Annotations (readOnlyHint=false) are consistent; description adds detail beyond them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four concise sentences: main purpose, mode summary, required parameter note, usage guidance. Front-loaded and efficient with no extraneous content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all modes, their behaviors, and expected outcomes (recommendations, file generation, DNS instructions). With output schema present, no further return details needed. Complete for a multi-mode tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Adds meaning beyond schema: explains dry_run purpose ('preview what would be created without writing files') and when to use it (with generate_files). Clarifies project_root is required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states specific verb-resource pairs for three modes: analyze (analyze stack), generate_files (generate configs), dns_guide (return DNS instructions). Clearly distinguishes from sibling tool ck_budget.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'before deploying a new project or when setting up CI/CD for the first time'. Recommends alternative 'ck_budget' for cost checks. Also describes mode-specific usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_execute_codeA
Execute generated code only inside a configured non-local sandbox. Defaults to Docker, denies network/filesystem/secrets/shell/deploy, validates source first, and supports dry_run for planning.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Generated source code to validate and execute in the sandbox. | |
| dry_run | No | When true, validate and plan without executing the actual operation. | |
| sandbox | No | Execution sandbox. Local host execution is intentionally unsupported. | |
| task_id | No | ||
| language | No | Runtime language. Defaults to javascript. | |
| risk_tier | No | Security sensitivity of the task. Default: medium. | |
| session_id | No | Unique session identifier for correlating findings, proofs, budget, and audit trail. | |
| timeout_ms | No | Timeout in milliseconds. | |
| allowed_env_vars | No | List of environment variable names to expose from the host environment into the sandbox. Explicit env vars take precedence over host env vars. If empty, no host environment variables are exposed. | |
| max_output_bytes | No | Maximum size in bytes for captured output. | |
| network_allowlist | No | ||
| requested_capabilities | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| output | No | |
| policy | No | |
| allowed | No | |
| command | No | |
| dry_run | No | |
| sandbox | No | |
| language | No | |
| validation | No | |
| exit_status | No | |
| proof_artifacts | No | |
| output_truncated | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds value over annotations by detailing sandbox defaults, denial of capabilities, validation step, and dry_run support. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence efficiently conveys core purpose and key constraints without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (12 params, output schema exists), the description covers essential behavior. Could detail timeout/output handling but is sufficient with schema support.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, so baseline 3 is appropriate. Description mentions dry_run and sandbox but does not elaborate on other parameters beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool executes code in a non-local sandbox, specifying Docker as default, and lists restrictions. It distinguishes from siblings as no other tool performs code execution.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use (for code execution in a sandbox) and what it denies, but does not provide explicit alternatives or when-not-to-use scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_experience_indexARead-onlyIdempotent
List recent prior sessions in the same workspace and the read-only experience artifacts available for each run. Pass query for freeform keyword search across session titles, task titles, and finding descriptions — useful for questions like 'has this deployment pattern caused a blocked finding before?'
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Freeform keyword filter applied to session title, task titles, and finding descriptions. All tokens must match (AND logic). Omit to return all recent sessions. | |
| session_id | No | Unique session identifier for correlating findings, proofs, budget, and audit trail. | |
| project_root | No | Absolute path to the project root directory on the local filesystem. | |
| session_limit | No | Maximum number of sessions to analyze. | |
| same_domain_only | No | When true, restrict results to sessions in the same domain. |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | No | |
| sessions | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds that the tool lists read-only artifacts and supports keyword search, which is consistent but not significantly beyond annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with the main action. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists and schema coverage is complete, the description covers the core functionality. However, it could briefly mention how other parameters like session_id affect results. Still, it is largely complete for typical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are already described. The description adds a use case for the query parameter but does not explain others. This provides some additional meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists recent prior sessions and read-only experience artifacts, using a specific verb ('List') and resource. However, it does not explicitly differentiate from sibling tools like ck_experience_read or ck_experience_search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an example use case for the query parameter but does not specify when to use this tool versus alternatives, nor when not to use it. The usage is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_experience_readARead-onlyIdempotent
Read one prior-run artifact such as a session summary, audit log, trace packet, or proof summary from the workspace experience archive.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | No | Task identifier within the session for scoped operations. | |
| session_id | No | Unique session identifier for correlating findings, proofs, budget, and audit trail. | |
| project_root | No | Absolute path to the project root directory on the local filesystem. | |
| artifact_type | Yes | ||
| source_session_id | No | Session ID of the prior run to read artifacts from. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| artifact_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, idempotentHint, destructiveHint. Description adds archive context and artifact types, but no additional behavioral traits beyond what annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with main action, no superfluous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With output schema present and annotations covering safety, description sufficiently explains purpose and scope. Minor omission of source_session_id requirement, but still adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80% (4 of 5 parameters documented). Description does not add parameter-specific meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'read', resource 'prior-run artifact', and lists specific artifact types. Distinguishes from sibling tools like ck_experience_search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage for reading prior-run artifacts, but provides no explicit when-to-use or when-not-to-use guidance, nor mentions alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_experience_searchARead-onlyIdempotent
Freeform full-text search across findings and tasks within the current workspace. Returns ranked results with citations. Useful for questions like 'has this deployment pattern caused a blocked finding before?' or 'what did we do about the SQL performance issue?'
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return. Defaults to 10, maximum 20. | |
| query | Yes | Freeform search query. Supports natural language and keyword search. | |
| session_id | No | Unique session identifier for correlating findings, proofs, budget, and audit trail. | |
| project_root | No | Absolute path to the project root directory on the local filesystem. |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | No | |
| results | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint and idempotentHint, making safety clear. The description adds value by specifying it returns ranked results with citations, which is not obvious from annotations alone. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences plus two example questions, all front-loaded. Every sentence adds value without extraneous detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, description appropriately focuses on scope ('current workspace') and content type ('findings and tasks'). It is fully sufficient for a search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (all parameters described), so baseline is 3. The description does not add extra meaning beyond the schema; it merely restates 'freeform' for the query parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it performs freeform full-text search across findings and tasks, returning ranked results with citations. This distinguishes it from siblings like ck_experience_index (indexing) and ck_experience_read (reading specific entries).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides concrete examples of questions it answers (e.g., 'has this deployment pattern caused a blocked finding before?'), giving clear context for when to use it. However, it does not explicitly mention when not to use it or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_external_serviceA
Track and govern agent interactions with external SaaS APIs. Rate limits per service, cost attribution, and PII redaction. Modes: record (log an interaction with auto-redaction), summary (aggregated view per service), rate_limit_status (current rates against limits), top_services (ranked by volume and cost).
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Operation mode. Defaults to summary. | |
| limit | No | Max results for top_services mode. Default: 10. | |
| method | No | HTTP method (GET, POST, etc.). | |
| task_id | No | Task identifier for scoping the interaction. | |
| endpoint | No | Sanitized endpoint path. PII is auto-redacted. | |
| metadata | No | Additional metadata. | |
| cost_cents | No | Estimated cost in cents. | |
| latency_ms | No | Request latency in milliseconds. | |
| session_id | Yes | Session identifier. | |
| status_code | No | HTTP status code or result code. | |
| service_name | No | External service name (e.g., github, slack, jira). | |
| interaction_type | No | Type of interaction. Defaults to api_call. |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | No | |
| summary | No | |
| recorded | No | |
| services | No | |
| rate_limits | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already set readOnlyHint=false, destructiveHint=false, idempotentHint=false, indicating this tool can create or modify data. The description adds value by mentioning auto-redaction of PII and rate limit tracking, but does not fully specify side effects of each mode or authorization needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise—three short phrases covering purpose, features, and modes. Every sentence adds unique value without redundancy, and the core purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (12 parameters, output schema present, nested objects), the description provides sufficient high-level context for an agent to select the correct mode and understand the tool's role. The presence of an output schema reduces the need to describe return values. A bit more detail on mode-specific prerequisites would elevate completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
100% schema description coverage sets a baseline of 3. The description does not add parameter-level details beyond what the schema provides, though it contextually explains modes that influence parameter usage (e.g., 'limit' is relevant for top_services mode).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly defines the tool's purpose: 'Track and govern agent interactions with external SaaS APIs.' It lists specific capabilities (rate limits, cost attribution, PII redaction) and enumerates operational modes (record, summary, rate_limit_status, top_services), making it distinct from sibling tools that focus on other domains.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly names the four modes and their purposes, guiding the agent on when to use each (e.g., 'record (log an interaction with auto-redaction)'). However, it does not provide explicit 'when not to use' guidance or compare directly to siblings like ck_cost_optimizer or ck_observability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_failure_clustersARead-onlyIdempotent
Cluster recurring failure modes across recent session traces in the same workspace and return reusable eval candidates.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | No | Unique session identifier for correlating findings, proofs, budget, and audit trail. | |
| project_root | No | Absolute path to the project root directory on the local filesystem. | |
| session_limit | No | Maximum number of sessions to analyze. | |
| same_domain_only | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| clusters | No | |
| eval_candidates | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint. Description adds context about operating on 'recent session traces in the same workspace' and returning 'eval candidates', which supplements the annotations without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single, well-structured sentence with the verb front-loaded. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (4 parameters, output schema exists), the description effectively conveys core purpose and what it returns. It does not clarify 'recent' or clustering details, but output schema likely covers that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75%, so the burden on description is lower. The description does not add extra parameter meaning beyond the schema, resulting in baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses specific verb (cluster) and resource (failure modes from session traces) and mentions outcome (return reusable eval candidates). It clearly distinguishes from siblings like ck_observability or ck_validate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description implies usage for analyzing failures but does not explicitly state when to use vs alternatives or exclude other cases. No when-not or alternative tool suggestions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_findingA
Record or disposition a governed finding. mode=create (default) persists a finding with a ruling decision (allow, warn, block, escalate_to_human); findings are the durable audit trail in ControlKeel. mode=resolve|dismiss|escalate disposition EXISTING findings so the agent that created them can also clear them: pass finding_id for a single finding, or rule_id/category/status to bulk-disposition all matching active findings in the session (resolve->approved, dismiss->rejected, escalate->escalated). Write operation. For create, required fields are session_id, category, severity, rule_id, plain_message; decision defaults to warn, use allow for an approved exception (which also auto-resolves matching open/blocked findings). Returns finding_id + status for create, or disposed_count + disposed_finding_ids for disposition. Use ck_finding to record and clear policy findings; use ck_memory_record for general knowledge not tied to a policy rule.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | create (default) records a finding. resolve/dismiss/escalate disposition existing findings, by `finding_id` (single) or `rule_id`/`category`/`status` (bulk). | |
| title | No | Human-readable title for display and search. | |
| reason | No | Reason recorded on the finding(s) when dismissing. | |
| status | No | Bulk disposition filter: only findings currently in this status are dispositioned (e.g. blocked, open, escalated). | |
| rule_id | No | Policy rule identifier that triggered this finding. | |
| task_id | No | Task identifier within the session for scoped operations. | |
| category | No | Finding category (e.g., security, compliance, performance). | |
| decision | No | Governance decision: allow, warn, block, or escalate to human. | |
| metadata | No | ||
| severity | No | Severity level (e.g., critical, high, medium, low). | |
| finding_id | No | Target finding id for single disposition (resolve/dismiss/escalate modes). | |
| session_id | Yes | Unique session identifier for correlating findings, proofs, budget, and audit trail. | |
| plain_message | No | Human-readable finding description. |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | No | |
| status | No | |
| summary | No | |
| precedent | No | |
| finding_id | No | |
| disposed_count | No | |
| requires_human | No | |
| extends_finding_id | No | |
| disposed_finding_ids | No | |
| resolved_finding_ids | No | |
| contradicts_finding_id | No | |
| resolved_findings_count | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that 'mode=create' persists a finding and 'mode=resolve|dismiss|escalate' dispositions existing findings. It mentions that using 'allow' auto-resolves matching open/blocked findings, which provides behavioral insight beyond annotations. Annotations indicate a write operation (readOnlyHint=false), and the description confirms it without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately long but each sentence adds necessary information. It front-loads the main action and mode distinction, then details parameters and returns. Minor redundancy could be trimmed, but overall it is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers all relevant aspects: modes, required fields, default behaviors, return values, and sibling differentiation. With output schema present, the return structure is clarified. For a tool with 13 parameters and multiple modes, the description is thorough and leaves no critical ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 92% (high), so baseline is 3. The description adds value by explaining defaults (decision defaults to warn), special behavior (allow auto-resolves), and how bulk disposition works via rule_id/category/status, which is not fully detailed in the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Record or disposition a governed finding.' It explains both create and disposition modes, and distinguishes from sibling 'ck_memory_record' by specifying that ck_finding is for policy findings while the sibling is for general knowledge.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use each mode (create vs. disposition) and lists required fields for create. It directly recommends using ck_finding for policy findings and ck_memory_record for general knowledge, offering an alternative. It does not explicitly state when not to use the tool, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_fs_findARead-onlyIdempotent
Find files or directories whose path contains a given fragment, searching within the bound project root. Read-only — no files are modified. query is the path fragment or glob pattern to match against file and directory names. path scopes the search to a subdirectory (relative to project root); omit to search the entire project. limit caps the number of results (default 50). Use ck_fs_find to locate files by name or path. Use ck_fs_grep to search by file content. Use ck_fs_read to read a file at a known path.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | File or directory path relative to the project root. | |
| limit | No | ||
| query | Yes | Search query string for filtering or full-text search. | |
| session_id | No | Unique session identifier for correlating findings, proofs, budget, and audit trail. | |
| project_root | No | Absolute path to the project root directory on the local filesystem. |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | No | |
| results | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint and idempotentHint. The description adds context by clarifying that query is a path fragment or glob pattern and that the search is non-destructive. No contradictions; behavioral traits are well-explained beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (several sentences) and well-structured: purpose, read-only note, parameter explanations, usage guidelines. No redundant or filler text. Front-loaded with the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 5 parameters, an output schema, and rich annotations, the description covers all essential aspects: what it does, parameter semantics, scope, and when to use alternatives. It feels complete for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning for query ('path fragment or glob pattern'), path ('scopes search to subdirectory'), and limit ('default 50'), which go beyond the schema. Schema description coverage is 80%, so baseline 3 is elevated to 4 due to these clarifications.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb and resource: 'Find files or directories whose path contains a given fragment, searching within the bound project root.' It clearly distinguishes from sibling tools by naming ck_fs_grep and ck_fs_read for alternative use cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool ('Use ck_fs_find to locate files by name or path') and provides alternatives for content search (ck_fs_grep) and reading known files (ck_fs_read). It also declares the tool is read-only, indicating it should not be used for modifications.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_fs_grepARead-onlyIdempotent
Search file contents inside the bound project root using grep-style pattern matching. Read-only — no files are modified. query uses fixed-string search by default; set fixed_strings: false to treat it as a regex. Scope the search with path (a relative directory or glob); omit to search the entire project. Returns matching lines with file path and line numbers. limit caps results (default 50). Use ck_fs_grep to find code patterns or strings inside files. Use ck_fs_find to locate files by name fragment. Use ck_fs_read to read a specific file by path.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | File or directory path relative to the project root. | |
| limit | No | Maximum number of results to return. | |
| query | Yes | Search query string for filtering or full-text search. | |
| session_id | No | Unique session identifier for correlating findings, proofs, budget, and audit trail. | |
| ignore_case | No | When true, perform case-insensitive matching. | |
| project_root | No | Absolute path to the project root directory on the local filesystem. | |
| fixed_strings | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | No | |
| matches | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant context beyond annotations: it declares read-only behavior ('Read-only — no files are modified'), explains the fixed-string default with option to switch to regex, describes output format (matching lines with file path and line numbers), and notes the default limit (50). Annotations already indicate readOnlyHint and idempotentHint, and the description aligns perfectly without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with five sentences, each carrying essential information. It front-loads purpose, then covers behavior, parameter hints, output, and sibling differentiation. No redundant or extraneous text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the parameter count of 7, high schema coverage, and presence of an output schema, the description covers all key aspects: purpose, read-only safety, search modes, scope, result limits, output format, and alternatives. It is self-contained and leaves no critical gaps for agent decision-making.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high (86%), so baseline is 3. The description adds meaning beyond schema by explaining that query uses fixed-string search by default with the option fixed_strings: false for regex, that path can be a relative directory or glob, and that limit caps results with a default of 50. These clarifications help an agent select correct parameter values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Search file contents using grep-style pattern matching' with a specific verb and resource. It explicitly distinguishes from siblings by naming ck_fs_find and ck_fs_read for alternative tasks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: 'Use ck_fs_grep to find code patterns or strings inside files.' It also tells when not to use it by referencing sibling tools for name-based search or file reading. It explains default behavior (fixed-string) and how to change to regex.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_fs_lsARead-onlyIdempotent
List files and directories inside the bound project root. Read-only — no files are modified. path is a relative directory path to list; omit to list the project root. Use ck_fs_ls to browse directory structure. Use ck_fs_find to locate files by name fragment. Use ck_fs_read to read a specific file. Use ck_fs_grep to search file contents.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | ||
| session_id | No | Unique session identifier for correlating findings, proofs, budget, and audit trail. | |
| project_root | No | Absolute path to the project root directory on the local filesystem. |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | No | |
| entries | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description reinforces that it is read-only and states that no files are modified. It also clarifies the path parameter behavior (omit to list root). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences that cover purpose, read-only nature, path guidance, and sibling tool references. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, annotations provide safety and idempotency, and an output schema exists, the description is complete. It covers what, how, and when to use, plus alternatives. No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 3 parameters with 67% description coverage (path lacks description). The description adds meaning for 'path' by explaining it is a relative directory path and that omitting it lists the project root. This compensates for the missing schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (list), the resource (files and directories), and the scope (inside bound project root). It also distinguishes from sibling tools like ck_fs_find, ck_fs_read, and ck_fs_grep.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool ('browse directory structure') and provides direct alternatives for other tasks (ck_fs_find, ck_fs_read, ck_fs_grep). It also notes the read-only nature.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_fs_readARead-onlyIdempotent
Read a file from the bound project root. Read-only — no files are modified or created. path is required and must be relative to the project root (e.g., lib/my_module.ex). start_line (1-indexed) and max_lines enable windowed reads for large files. Omit both to read the entire file. Use ck_fs_read to inspect a file at a known path. Use ck_fs_find to locate a file by name fragment. Use ck_fs_grep to search inside files by content pattern. Use ck_fs_ls to list directory contents.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | File or directory path relative to the project root. | |
| max_lines | No | ||
| session_id | No | Unique session identifier for correlating findings, proofs, budget, and audit trail. | |
| start_line | No | 1-indexed starting line number for partial file reads. | |
| project_root | No | Absolute path to the project root directory on the local filesystem. |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | No | |
| content | No | |
| start_line | No | |
| total_lines | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint. The description reinforces with 'Read-only — no files are modified or created' and adds windowed read behavior. No contradiction. Adds context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with purpose, no redundant words. Each sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given output schema exists and annotations cover safety, the description covers usage, parameters, and alternatives well. Minor omission: no mention of error handling for missing paths or permissions, but overall complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 80%; description adds meaning: path must be relative to project root, start_line is 1-indexed, max_lines enables windowed reads, omit both for full file. The schema lacks description for max_lines, so description compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Read a file from the bound project root' with clear verb and resource, and explicitly distinguishes from sibling tools (ck_fs_find, ck_fs_grep, ck_fs_ls).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance: 'Use ck_fs_read to inspect a file at a known path' and lists alternatives for locating, searching, and listing. Also explains when to use start_line/max_lines for windowed reads vs. omitting for full file.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_git_commitADestructive
Validate a commit message against CK governance policy and execute git commit if validation passes and no findings are blocked. Write operation — creates a git commit in the repository when validation succeeds. Returns validation result, any blocked findings, and the commit SHA on success. If blocked findings exist, the commit is not created and the findings are returned for remediation. Use ck_git_status first to confirm governance state, then ck_git_commit to create the commit. Does not push to remote — use git push separately after commit.
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | Commit message text. | |
| session_id | No | ||
| project_root | No | Absolute path to the project root directory on the local filesystem. |
Output Schema
| Name | Required | Description |
|---|---|---|
| sha | No | |
| error | No | |
| message | No | |
| validation | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true. Description adds conditional behavior (blocked findings prevent commit), which adds value. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five sentences, front-loaded with main action. No redundant information. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers validation, conditional commit, output, prerequisite, and limitation. Output schema exists, so return values are covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67% but description does not clarify the undocumented 'session_id' parameter. Message and project_root are partially implied but not explicitly linked to schema fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it validates a commit message and executes git commit if validation passes. Distinguishes from siblings by specifying prerequisite (ck_git_status) and what it does not do (no push). Specific verb+resource+conditions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises to use ck_git_status first and notes that git push is separate. Provides clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_git_diffARead-onlyIdempotent
Generate a git diff and run CK validation on the resulting diff. Read-only — no commits are created. base_ref and head_ref are git refs (branch names, commit SHAs, or tags); omit both or pass empty strings to diff the working tree against HEAD. Returns the diff text and any CK validation findings raised against it. Use ck_git_diff to review changes before committing or submitting a review. Use ck_git_status for a summary without the full diff. Use ck_git_commit to create the commit after reviewing.
| Name | Required | Description | Default |
|---|---|---|---|
| base_ref | No | Base git ref (commit, branch, or tag) for the diff. | |
| head_ref | No | Head git ref (commit, branch, or tag) for the diff. | |
| session_id | No | ||
| project_root | No | Absolute path to the project root directory on the local filesystem. |
Output Schema
| Name | Required | Description |
|---|---|---|
| diff | No | |
| base_ref | No | |
| head_ref | No | |
| validation | No | |
| files_changed | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description reinforces read-only behavior and adds that it returns diff text and CK validation findings, which provides context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with three main sentences plus a usage triplet. It front-loads the core purpose and read-only nature, with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists and annotations cover safety, the description covers core usage, parameter behavior, and distinguishes alternatives. The only gap is the session_id parameter, but overall it is complete enough for correct tool invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, and the description adds meaning for base_ref and head_ref by explaining they are git refs and can be omitted. However, the session_id parameter lacks explanation in both schema and description, so the description only partially compensates for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool generates a git diff and runs CK validation. It explicitly says 'Read-only — no commits are created' and distinguishes from siblings like ck_git_status and ck_git_commit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: 'Use ck_git_diff to review changes before committing or submitting a review.' It also gives clear alternatives: 'Use ck_git_status for a summary without the full diff. Use ck_git_commit to create the commit after reviewing.' Additionally, it explains parameter usage for base_ref and head_ref.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_git_statusARead-onlyIdempotent
Get git working tree status correlated with CK governance findings for the current session. Returns staged, unstaged, and untracked files alongside any blocked or open findings from ck_validate or ck_review_submit. Read-only and side-effect free — no findings are created or modified. Use before ck_git_commit to verify governance state. Prefer ck_git_diff when you need the actual diff content; prefer ck_git_commit when ready to commit.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | No | ||
| project_root | No | Absolute path to the project root directory on the local filesystem. |
Output Schema
| Name | Required | Description |
|---|---|---|
| branch | No | |
| status | No | |
| findings_correlation | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description declares 'Read-only and side-effect free — no findings are created or modified', which aligns with annotations (readOnlyHint, idempotentHint, destructiveHint). Adds context about what the tool does not affect, enhancing transparency beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences: purpose/output, read-only declaration, usage guidance. Every sentence adds value; no fluff. Front-loaded with the primary function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, safety, usage guidelines, and alternatives. Output schema exists but is not shown; description adequately describes return types. Only minor gap is parameter documentation, but overall complete for a read-only tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%; only project_root has a description. Session_id is not described in schema or in the tool description. The description does not explain the role or format of session_id, leaving ambiguity. Parameter semantics are weak.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it retrieves git working tree status correlated with CK governance findings, listing specific outputs (staged/unstaged/untracked files, blocked/open findings). Differentiates from sibling tools ck_git_diff and ck_git_commit by mentioning alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use ('before ck_git_commit') and when to use alternatives ('prefer ck_git_diff for diff content; prefer ck_git_commit when ready to commit'). Provides clear context and exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_goalA
Record, list, or update durable governed goals so long-running intent stays explicit, citable, and reviewable across sessions. Three modes: record (write — creates a new goal); list (read-only — returns goals filtered by status and horizon); update_status (write — updates an existing goal's status or progress). Required: session_id and mode. For record: provide goal (the statement text) and optionally title, horizon (task/session/workspace), and tags. For update_status: provide goal_id and the new status. horizon controls scope: task for short-lived intent, session for the current session, workspace for persistent cross-session goals. Use ck_goal for structured multi-session intent that should be explicitly tracked and reviewed. Use ck_memory_record for general decisions or notes not requiring status tracking.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | Full content body with detailed information. | |
| goal | No | The goal statement text. | |
| mode | Yes | Operation mode that determines the tool behavior and return shape. | |
| tags | No | ||
| limit | No | Maximum number of results to return. | |
| title | No | Human-readable title for display and search. | |
| status | No | Current status for filtering or updating. | |
| goal_id | No | Unique identifier of an existing goal to update. | |
| horizon | No | Temporal scope of the goal: task, session, or workspace. | |
| summary | No | Brief human-readable summary of the record. | |
| task_id | No | Task identifier within the session for scoped operations. | |
| metadata | No | ||
| source_id | No | Unique identifier of the source system or record. | |
| session_id | Yes | Unique session identifier for correlating findings, proofs, budget, and audit trail. | |
| source_type | No | Origin category of the record (e.g., developer, tool_output, human_review). | |
| progress_note | No | Note about progress toward the goal. |
Output Schema
| Name | Required | Description |
|---|---|---|
| goal | No | |
| goals | No | |
| title | No | |
| status | No | |
| goal_id | No | |
| horizon | No | |
| progress_note | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes three modes with different read/write behaviors, explains horizon scope, and does not contradict annotations (readOnlyHint=false indicates writes are possible).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single paragraph is clear and front-loaded, but could use slight restructuring (e.g., bullet points) for easier scanning. No wasted sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given complexity (3 modes, many optional params) and presence of output schema, description covers all major behavioral aspects and usage context comprehensively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high (88%); description adds meaning by explaining mode-dependent required fields, horizon roles, and differentiation from sibling. Adds value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it records/lists/updates goals, specifies three modes, and distinguishes from sibling ck_memory_record by stating use case.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance for each mode, required parameters per mode, and compares with ck_memory_record for when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_load_resourcesARead-onlyIdempotent
Fallback for clients that do not support MCP resources or native bulk skill loading. Load one or more CK resource URIs such as skills://; pass multiple skills:// URIs to activate several skills in one governed CK call.
| Name | Required | Description | Default |
|---|---|---|---|
| uris | Yes | Resource URIs to load, for example skills://controlkeel-governance | |
| target | No | Distribution target (e.g., opencode, cursor, claude). | |
| session_id | No | ||
| project_root | No | Absolute path to the project root directory on the local filesystem. |
Output Schema
| Name | Required | Description |
|---|---|---|
| resources | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds that loading can be bulk and 'governed,' but does not disclose additional behaviors like authentication needs or rate limits. The annotation coverage reduces the burden, but the description adds moderate value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the fallback purpose, and every word adds value. No redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main purpose and bulk loading capability. With an output schema present and annotations covering safety, the description is adequate for an AI agent to understand the tool's primary use case, though it does not detail all parameters beyond uris.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, with session_id lacking a description. The description provides a URI format example (skills://<name>) that adds clarity to the 'uris' parameter, but it does not compensate for the missing description of session_id. Overall, the description adds some meaning but does not fully offset the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool loads CK resource URIs, especially skills, and explicitly positions it as a fallback for clients that do not support MCP resources or native bulk skill loading. This distinguishes it from sibling tools like ck_skill_load and provides a specific verb and resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool: 'Fallback for clients that do not support MCP resources or native bulk skill loading.' This provides clear context but does not name specific alternative tools, leaving some room for interpretation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_loopA
Create and govern a bounded iterative loop without executing worker code. The contract freezes verifier paths and hashes, separates mutable paths, classifies artifact longevity, and enforces metric, iteration, cost, duration, no-progress, blocked-finding, and lasting-code architecture stop conditions. Modes: create, record, status, stop, promote. Rejected iterations require an explicit audited rollback.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | ||
| reason | No | ||
| target | No | ||
| summary | No | ||
| task_id | Yes | ||
| direction | No | ||
| iteration | No | ||
| mechanism | No | ||
| review_id | No | ||
| call_graph | No | ||
| cost_cents | No | ||
| hypothesis | No | ||
| session_id | Yes | ||
| metric_name | No | ||
| review_risk | No | ||
| metric_value | No | ||
| project_root | No | ||
| changed_paths | No | ||
| mutable_paths | No | ||
| rollback_path | No | ||
| artifact_class | No | ||
| diagnosis_path | No | ||
| environment_id | No | ||
| max_cost_cents | No | ||
| max_iterations | No | ||
| verifier_paths | No | ||
| observed_effect | No | ||
| sandbox_adapter | No | ||
| verifier_passed | No | ||
| complexity_delta | No | ||
| invariant_effect | No | ||
| promotion_packet | No | Required when a lasting_code iteration reaches its target. Contains citable behavior, invariant, interface, deterministic command, rollback, and documentation evidence. | |
| semantic_changes | No | ||
| verifier_command | No | ||
| complexity_budget | No | ||
| no_progress_limit | No | ||
| invariant_evidence | No | ||
| local_defense_limit | No | ||
| documentation_impact | No | ||
| invariant_boundaries | No | ||
| max_duration_seconds | No | ||
| allowed_sandbox_adapters | No | ||
| allowed_semantic_changes | No | ||
| human_promotion_required | No | ||
| required_review_personas | No | ||
| maintenance_without_model | No | ||
| forbidden_semantic_changes | No | ||
| machine_independence_evidence | No | ||
| machine_independence_verified | No | ||
| require_ephemeral_environment | No | ||
| machine_independence_requirements | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | |
| task_id | Yes | |
| contract | Yes | |
| decision | No | |
| cost_cents | No | |
| iterations | Yes | |
| session_id | Yes | |
| best_metric | No | |
| contract_id | No | |
| stop_reason | No | |
| iteration_count | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide no safety profile (all false), so the description carries the full burden. It discloses behavioral traits: the tool modifies state (non-read-only), is not destructive, and not idempotent. It adds context about freezing verifier paths, separating mutable paths, enforcing stop conditions, and requiring audited rollbacks for rejected iterations, which goes beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the core purpose. It is dense but avoids verbosity. Minor improvement could be achieved with bullet points for modes, but overall it is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the tool's high complexity (51 parameters, many enums, nested objects, output schema), the description does not explain return values, mode-specific parameter requirements, or the relationships between parameters. It assumes significant domain knowledge about 'bounded iterative loops,' 'verifier paths,' and 'artifact longevity,' leaving the agent underinformed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 2% (one parameter documented). The description mentions the 'mode' parameter and its enum values but does not explain any other parameter's semantics, meaning for the remaining 49 parameters the agent must rely solely on names and types. The description should compensate for low coverage but does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Create and govern a bounded iterative loop without executing worker code.' It lists specific actions (freeze verifier paths, separate mutable paths, classify artifacts, enforce stop conditions) and modes (create, record, status, stop, promote), making the verb+resource distinct from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context (governing iterative loops) but does not explicitly state when to use this tool versus alternatives among the many sibling tools. No exclusion criteria or comparisons are provided, leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_mcp_discoverARead-onlyIdempotent
Auto-discover tools from an external MCP server by querying its tools/list endpoint. This enables progressive discovery of MCP capabilities without manual configuration.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | Request timeout in milliseconds. Default: 10000 | |
| transport | No | Transport type. Auto-detected from server_url if not specified. HTTP discovery uses Req with normal TLS verification. | |
| server_url | Yes | HTTP URL of the MCP server (e.g., 'http://localhost:3001/mcp'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| tools | No | |
| total | No | |
| server_url | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint, idempotentHint, and non-destructive. The description adds useful context: it queries an external endpoint and enables progressive discovery. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action, no redundant information. Every word serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for a discovery tool with a well-documented schema and output schema (not shown but present). Minor gap: does not mention error handling or output format, but output schema covers return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters. The description does not add extra meaning beyond what is in the schema, meeting the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it auto-discovers tools from an external MCP server by querying its tools/list endpoint. It uses a specific verb+resource, and the purpose is distinct from sibling tools like ck_skill_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when needing to discover tools from an external server, but does not explicitly state when to avoid it or compare with siblings (e.g., ck_external_service or ck_skill_load). No when-not or alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_memory_archiveA
Archive a memory record so it is excluded from future ck_memory_search results. Write operation — marks the record as archived in the database; it is not deleted. memory_id is the integer ID returned by ck_memory_record or ck_memory_search. Use when a record is stale, superseded by a newer decision, or contains information that should no longer guide future agents. To update a record's content instead of archiving it, call ck_memory_record again with the same source_id.
| Name | Required | Description | Default |
|---|---|---|---|
| memory_id | Yes | ||
| session_id | No | Unique session identifier for correlating findings, proofs, budget, and audit trail. | |
| project_root | No | Absolute path to the project root directory on the local filesystem. |
Output Schema
| Name | Required | Description |
|---|---|---|
| archived | No | |
| memory_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide safety info (not read-only, not idempotent, not destructive). Description adds behavioral context: marks as archived, not deleted, and is a write operation, enhancing transparency beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise (5 sentences), front-loaded with purpose, explains effect, input, usage, and alternative. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, usage, parameter details, and alternatives. With output schema present, return values are explained elsewhere. Missing error conditions or permissions, but sufficient for an archive tool given annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67%. Description adds meaning for memory_id (explains its origin). session_id and project_root rely on schema descriptions, but the description compensates for the missing memory_id description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it archives a memory record to exclude it from search results, specifies it's a write operation not deletion, and distinguishes from sibling tools like ck_memory_record and ck_memory_search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises when to use (stale, superseded, no longer guiding) and when to use alternative (update via ck_memory_record), providing clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_memory_recordA
Write a governed memory record so future agents can explicitly retrieve it via ck_memory_search. Write operation — persists to the database. Idempotent: re-submitting the same source_id updates the existing record rather than duplicating it. Pass memory as a plain string for quick notes, or as an object with body, title, summary, record_type, and tags for structured records. record_type controls retrieval filtering: use decision for architectural choices, finding for issues, proof for evidence, goal for intent, brief for task context. tags is a string or array of strings for categorization. source_id links the record to an external artifact (e.g., a review ID or commit SHA). Use ck_memory_record to persist knowledge that should survive session boundaries. Use ck_finding for policy violations with a ruling decision. Use ck_goal for durable multi-session intent.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | Full content body with detailed information. | |
| tags | No | ||
| title | No | Human-readable title for display and search. | |
| memory | Yes | ||
| summary | No | Brief human-readable summary of the record. | |
| task_id | No | Task identifier within the session for scoped operations. | |
| metadata | No | ||
| source_id | No | Unique identifier of the source system or record. | |
| session_id | No | Unique session identifier for correlating findings, proofs, budget, and audit trail. | |
| record_type | No | Record type classification. | |
| source_type | No | Origin category of the record (e.g., developer, tool_output, human_review). | |
| project_root | No | Absolute path to the project root directory on the local filesystem. |
Output Schema
| Name | Required | Description |
|---|---|---|
| title | No | |
| task_id | No | |
| recorded | No | |
| memory_id | No | |
| session_id | No | |
| record_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses idempotency behavior (re-submitting same source_id updates rather than duplicates) and write operation, adding context beyond annotations. No contradiction with annotations except idempotentHint discrepancy.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with core purpose. All sentences are informative without redundancy. Slightly long but justified due to number of parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers key parameters (memory, record_type, source_id, tags) but not all 12 parameters (e.g., task_id, session_id, project_root). However, schema descriptions fill some gaps. Adequate for complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Adds meaning by explaining memory parameter can be plain string or object with body, title, summary, etc. Also explains record_type enum values. Schema coverage is 75%, so description compensates moderately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Write a governed memory record' and explains persistence to database. It distinguishes from sibling tools like ck_memory_search (retrieval) and references ck_finding and ck_goal for alternative use cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance: 'Use ck_memory_record to persist knowledge that should survive session boundaries.' Also tells when to use alternatives: 'Use ck_finding for policy violations... Use ck_goal for durable multi-session intent.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_memory_searchARead-onlyIdempotent
Search governed typed memory for the current session to recover prior decisions, findings, proofs, and domain knowledge. Read-only. query is a freeform text search applied across record titles, bodies, and tags. record_type filters by type (decision, finding, proof, goal, brief, checkpoint); omit to search all types. top_k limits the number of ranked results (default 10). source_type and source_id filter by origin. Returns ranked records with citations and scores. Use ck_memory_search to retrieve what was recorded in prior steps or sessions. Use ck_memory_record to write new records. Use ck_experience_search for full-text search across findings and tasks workspace-wide.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query string for filtering or full-text search. | |
| top_k | No | Maximum number of top-ranked results to return. | |
| task_id | No | Task identifier within the session for scoped operations. | |
| source_id | No | ||
| session_id | No | Unique session identifier for correlating findings, proofs, budget, and audit trail. | |
| record_type | No | Record type classification. | |
| source_type | No | Origin category of the record (e.g., developer, tool_output, human_review). | |
| detail_level | No | compact (default) returns title/summary/tags per record; full additionally includes each record's body and metadata. Use compact to save tokens, full when you need the record contents. | |
| project_root | No | Absolute path to the project root directory on the local filesystem. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| query | No | |
| records | No | |
| detail_level | No | |
| semantic_available | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds context beyond annotations: it is read-only, performs freeform text search across titles/bodies/tags, returns ranked records with citations and scores. Annotations already declare readOnlyHint=true and idempotentHint=true; description reinforces and elaborates.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is front-loaded with main purpose, then parameter details, then usage guidance. Every sentence is informative with no wasted words. Structure is clear and logical.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 9 parameters, output schema present, and rich annotations, the description fully covers usage, parameters, and context. It explains when to use, what each parameter does, and the return format (ranked records with citations and scores). An agent can confidently select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 89% high, yet description adds meaning: explains query as freeform text search, record_type filters by type listing options, top_k limits results with default 10, source_type and source_id filter by origin, detail_level options compact vs full. This adds significant value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Search governed typed memory for the current session to recover prior decisions, findings, proofs, and domain knowledge.' It uses a specific verb and resource, and distinguishes from siblings like ck_memory_record and ck_experience_search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides when to use: 'Use ck_memory_search to retrieve what was recorded...' and when not: 'Use ck_memory_record to write new records. Use ck_experience_search for full-text search across findings and tasks workspace-wide.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_observabilityARead-onlyIdempotent
Read local observability reports for sessions, loop status, problems, memory, costs, trends, evals, generated benchmarks, history, and advisory promotion candidates. Read-only: no benchmark execution, draft approval, materialization, or promotion mutation.
| Name | Required | Description | Default |
|---|---|---|---|
| by | No | ||
| days | No | Number of days to look back for trend analysis. | |
| limit | No | Maximum number of results to return. | |
| report | No | Report to return; defaults to overview. | |
| surface | No | Compatibility alias for report. | |
| session_id | No | Unique session identifier for correlating findings, proofs, budget, and audit trail. | |
| stale_days | No | Threshold in days for marking entries as stale. | |
| project_root | No | Absolute path to the project root directory on the local filesystem. | |
| workspace_id | No | Workspace identifier for cross-session scope. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| report | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, idempotentHint, destructiveHint. The description reinforces read-only behavior and adds extra context by listing excluded operations (e.g., benchmark execution, promotion mutation). No contradictions, and adds value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, consisting of two sentences. The first sentence lists all report types, and the second clarifies read-only scope. No redundant information; every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of the tool (9 parameters, many enum values) and the presence of an output schema, the description adequately covers the core purpose and exclusions. It could be slightly more explicit about when to use specific report types, but overall sufficient for an agent to understand basic functionality.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high (89%), so the schema already documents most parameters. The description does not add parameter-level details but lists the report types, which overlap with the 'report' parameter enum. Baseline score of 3 is appropriate as the description does not significantly enhance parameter understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads local observability reports, listing specific report types (sessions, loop status, problems, memory, costs, trends, evals, etc.). It also explicitly states what it does not do (no benchmark execution, draft approval, etc.), which helps distinguish it from sibling tools that perform those mutations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit 'Read-only' statement and lists excluded operations, guiding agents not to use this tool for mutations. However, it does not explicitly contrast with specific sibling tools like ck_validate or ck_execute_code, leaving some implicit guidance. Clear context for read-only usage is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_outcome_trackerA
Record session outcomes or retrieve agent performance leaderboards to close the reinforcement-learning feedback loop. Three modes: record persists a session outcome (write operation); get_session reads a specific outcome by session_id (read-only); get_leaderboard returns ranked agent performance (read-only). For record mode: pass session_id, outcome (success/partial/failure), agent_id, and task_type. For get_leaderboard: pass workspace_id and optional window (days) and limit. Call after task completion before ending the session so ck_route and ck_cost_optimizer have fresh performance data for future routing decisions.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | Operation mode that determines the tool behavior and return shape. | |
| limit | No | Maximum number of results to return. | |
| window | No | ||
| outcome | No | Result classification of the operation. | |
| agent_id | No | ||
| task_type | No | ||
| session_id | No | Unique session identifier for correlating findings, proofs, budget, and audit trail. | |
| workspace_id | No | Workspace identifier for cross-session scope. |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | No | |
| entries | No | |
| outcomes | No | |
| recorded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses write vs read-only modes and mentions impact on other tools. Annotations lack behavioral details, so description adds value. Could further mention idempotency or side effects but is sufficient given output schema presence.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise and well-structured, breaking down modes with clear bullet points. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all essential aspects: three modes, required parameters per mode, usage timing, and integration with other tools. Output schema handles return values, so no further detail needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Adds significant meaning beyond schema by mapping parameters to specific modes (e.g., 'For record mode: pass...') and enumerating outcome values. Schema coverage is 63%, so description compensates well for undocumented parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly defines three distinct modes (record, get_session, get_leaderboard) with specific verbs and resources. Distinguishes itself from siblings by focusing on outcomes and leaderboards, as evidenced by mention of feeding data to ck_route and ck_cost_optimizer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage context: 'Call after task completion before ending the session' and explains downstream dependencies. However, does not directly contrast with alternatives among siblings or state when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_regression_resultA
Record external regression-test evidence from CI/CD systems (Bug0, Passmark, custom runners) so proof bundles and release-readiness checks account for external validation. Write operation — creates a DB record. Returns the recorded result ID. Required: session_id, engine (name of the test system), flow_name (test suite or flow identifier), outcome (passed/failed/flaky/skipped). Optional: commit_sha to link results to a specific revision, environment (ci/staging/production), external_run_id for cross-referencing the originating system, evidence for a structured payload. Use after an external test run to close the proof loop before calling ck_review_submit for a completion review. Retrieve past results with ck_memory_search using record_type: regression.
| Name | Required | Description | Default |
|---|---|---|---|
| engine | Yes | Name of the external regression test engine (e.g., Bug0, Passmark). | |
| outcome | Yes | Result classification of the operation. | |
| summary | No | Brief human-readable summary of the record. | |
| task_id | No | Task identifier within the session for scoped operations. | |
| evidence | No | Structured evidence payload from the external system. | |
| metadata | No | ||
| flow_name | Yes | Name of the regression test flow or test suite. | |
| commit_sha | No | Git commit SHA associated with the test run. | |
| session_id | Yes | Unique session identifier for correlating findings, proofs, budget, and audit trail. | |
| environment | No | Execution environment label (e.g., production, staging, ci). | |
| external_run_id | No | External system run identifier for cross-referencing. |
Output Schema
| Name | Required | Description |
|---|---|---|
| engine | No | |
| outcome | No | |
| recorded | No | |
| flow_name | No | |
| result_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate mutability (readOnlyHint=false). Description confirms write operation and return of an ID. No additional behavioral traits (e.g., side effects, permissions) are disclosed beyond what annotations imply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Approximately 7 sentences, front-loaded with purpose and usage. Each sentence adds value—purpose, return, parameters, usage context, retrieval alternative. No redundant phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 11 parameters, 4 required, nested objects, and an output schema, the description covers the core purpose, workflow integration, and retrieval. The output schema exists but its details are not described; however, the description mentions the return value.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 91%, so baseline is 3. Description lists required and some optional parameters with minimal elaboration (e.g., 'commit_sha to link results to a specific revision'). Does not add significant meaning beyond the schema's own descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool records external regression-test evidence and that it is a write operation creating a DB record, linking to proof bundles and release-readiness. It distinguishes its role by mentioning related tools (ck_review_submit, ck_memory_search) but does not explicitly differentiate from all 50+ siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance to use after an external test run and before ck_review_submit, plus retrieving past results via ck_memory_search. Does not specify when not to use, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_result_peekARead-onlyIdempotent
Peek at the full stdout of a previously completed ck_delegate embedded run without loading it all into context. Use result_ref and package_root returned by ck_delegate to locate the stored output. Supports byte-range reads: pass peek_bytes to limit how much to load, and offset to skip ahead. Use result_length (returned by ck_delegate) to decide whether to peek, pass the ref downstream, or skip loading entirely. This is the RLM variable-encapsulation pattern: treat large sub-agent outputs as named references, not inline blobs.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | Byte offset to start reading from (default 0). | |
| peek_bytes | No | How many bytes to read (default 2000, max 32000). | |
| package_root | Yes | package_root returned by ck_delegate for the completed embedded run. |
Output Schema
| Name | Required | Description |
|---|---|---|
| output | No | |
| truncated | No | |
| bytes_read | No | |
| total_bytes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint. Description adds byte-range support, limits, and that it works on completed runs only. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise but informative: 4 sentences that progressively build from purpose to parameters to decision logic. No redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With output schema present, description covers all necessary aspects: what it does, how to call it, what parameters mean, and when to use alternatives. Complete for its complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but description adds crucial context: package_root origin, default and max values for peek_bytes and offset, and usage of result_ref (even though not in schema).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool peeks at stdout from a ck_delegate run, distinguishes it from loading full context, and specifies the key inputs (result_ref, package_root).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use (after ck_delegate), how-to-use (use result_ref and package_root), and decision criteria (use result_length to decide peek, pass, or skip). Mentions the RLM pattern.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_review_feedbackA
Approve or deny a submitted review and attach feedback notes or structured annotations. Write operation — updates the review record and unblocks or halts the execution gate. review_id (required) is the ID returned by ck_review_submit. decision must be approved or denied. feedback_notes is freeform text for the reviewer's rationale. annotations is a key-value object for machine-readable metadata. This tool is human-facing: agents call ck_review_submit to create a review, then a human (or authorized agent) calls ck_review_feedback to record the decision. After approval, the submitting agent can proceed with execution; after denial, the plan should be revised and resubmitted.
| Name | Required | Description | Default |
|---|---|---|---|
| decision | Yes | Governance decision: allow, warn, block, or escalate to human. | |
| review_id | Yes | Unique identifier of the review to query or act on. | |
| annotations | No | Structured key-value annotations for machine-readable metadata. | |
| reviewed_by | No | ||
| feedback_notes | No | Freeform feedback notes from the reviewer. |
Output Schema
| Name | Required | Description |
|---|---|---|
| updated | No | |
| decision | No | |
| review_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that it is a write operation that updates the review record and unblocks or halts the execution gate. This adds behavioral context beyond the annotations, which correctly indicate it is not read-only, not idempotent, and not destructive. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is slightly long but well-structured, front-loading the core action and then providing parameter details and workflow context. Every sentence adds value, with no unnecessary repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 5 parameters (some nested) and an output schema, the description covers all aspects: purpose, parameters, workflow, and behavioral impact. It is comprehensive and does not leave gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explains each parameter's role and the relationship to ck_review_submit. However, the schema description for 'decision' mentions 'allow, warn, block, escalate' while the enum is 'approved/denied', creating a minor inconsistency that reduces clarity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool approves or denies a review, specifying the verb 'Approve or deny' and the resource 'submitted review'. It also distinguishes from siblings like ck_review_submit by noting it is called after submission.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: it is human-facing, agents should call ck_review_submit first, and after approval the agent proceeds, after denial the plan is revised. It clearly defines when to use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_review_statusARead-onlyIdempotent
Fetch the latest decision status (pending/approved/denied), reviewer notes, and browser review URL for a previously submitted review. Read-only. Provide review_id (returned by ck_review_submit) for a specific review, or task_id to get the latest review for that task. review_type (plan/diff/completion) filters when task_id is used without review_id. Poll this after ck_review_submit to check whether a human has approved or denied the submission before proceeding with execution.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | No | Task identifier within the session for scoped operations. | |
| review_id | No | Unique identifier of the review to query or act on. | |
| review_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | No | |
| decision | No | |
| review_id | No | |
| review_url | No | |
| reviewer_notes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint, idempotentHint, and destructiveHint, confirming safe read-only behavior. The description adds context about the polling pattern and the return of status, notes, and URL, which goes beyond annotations without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph that efficiently conveys purpose, usage, and behavioral context without redundancy. It is appropriately front-loaded with the main action (fetch status) and then details. Could be slightly more streamlined, but it is effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists (though not shown), the description covers the key return fields (status, notes, URL) and usage pattern (polling). For a relatively simple read-only tool, this is complete enough. It could mention error handling or not-found cases, but it is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 67% schema description coverage, the description adds meaning by explaining the interaction between review_id, task_id, and review_type, particularly that review_type filters when task_id is used without review_id. This clarifies parameter usage beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches the latest decision status, reviewer notes, and browser review URL, distinguishing it from sibling tools like ck_review_submit and ck_review_feedback. It specifies the resource and verb effectively.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use the tool: with review_id or task_id, and explains that review_type filters when task_id is used. It also advises polling after ck_review_submit to check approval before proceeding. While it lacks an explicit 'when not to use' statement, the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_review_submitA
Submit a governed plan, diff, or completion packet for human review and execution gating. Write operation — creates a review record and returns a review_id and browser URL. review_type controls what is being submitted: plan (before implementation), diff (before merging), or completion (task done). submission_body is the full content: plan text, diff, or completion description. For iterative plan refinement, pass previous_review_id and plan_phase (ticket → research_packet → design_options → narrowed_decision → implementation_plan → code_backed_plan). The plan-quality scorer evaluates structured fields, not just submission_body — populate research_summary, options_considered, selected_option, rejected_options, implementation_steps, validation_plan, code_snippets, alignment_context, consulted_roles, codebase_findings, prior_art_summary, agent_spec_id, task_spec_id, agent_role, task_scope, out_of_scope, business_rules, domain_terms, allowed_actions, prohibited_actions, robustness_requirements, linked_policy_packs, linked_benchmark_suites, promotion_gates, allowed_semantic_changes, forbidden_semantic_changes, invariant_boundaries, requires_reapproval_if, harness_quality_checks, and scope_estimate for a strong score. Returns review_id, status (pending), and a URL where the human reviewer can approve or deny. After submission, poll ck_review_status until the decision is approved or denied before proceeding. Use ck_review_feedback (human-facing) to record a decision on an existing review.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Human-readable title for display and search. | |
| task_id | No | Task identifier within the session for scoped operations. | |
| metadata | No | Arbitrary key-value metadata for extensibility and audit context. | |
| agent_role | No | Reviewed role label such as support agent, code reviewer, deployment agent, or sales assistant. | |
| plan_phase | No | Current phase of plan refinement. | |
| session_id | No | Unique session identifier for correlating findings, proofs, budget, and audit trail. | |
| task_scope | No | What the agent or task is expected to accomplish under this plan. | |
| annotations | No | Structured key-value annotations for machine-readable metadata. | |
| review_type | No | Type of review being submitted or queried (plan, diff, or completion). | |
| domain_terms | No | ||
| out_of_scope | No | ||
| submitted_by | No | Identity of the submitter for audit trail. | |
| task_spec_id | No | Stable identifier for the task-level behavior contract this plan is implementing. | |
| agent_spec_id | No | Stable identifier for the agent role or task contract this plan is implementing. | |
| code_snippets | No | ||
| business_rules | No | ||
| feedback_notes | No | Freeform feedback notes from the reviewer. | |
| scope_estimate | No | ||
| allowed_actions | No | ||
| consulted_roles | No | ||
| promotion_gates | No | ||
| selected_option | No | The chosen approach with rationale. | |
| submission_body | Yes | Full submission content: plan text, diff, or completion description. | |
| validation_plan | No | ||
| rejected_options | No | ||
| research_summary | No | Summary of research performed before this submission. | |
| alignment_context | No | ||
| codebase_findings | No | ||
| prior_art_summary | No | Summary of prior attempts or related work. | |
| options_considered | No | ||
| previous_review_id | No | Reference to a prior review for iterative refinement. | |
| prohibited_actions | No | ||
| linked_policy_packs | No | ||
| implementation_steps | No | ||
| invariant_boundaries | No | System invariants and boundaries that must remain true during execution. | |
| harness_quality_checks | No | Agent-harness quality checks such as context hygiene, proof completeness, rollback safety, and compaction fidelity. | |
| requires_reapproval_if | No | Conditions that require human re-approval before continuing. | |
| linked_benchmark_suites | No | ||
| robustness_requirements | No | ||
| allowed_semantic_changes | No | Semantic behavior changes explicitly approved for this plan. | |
| persona_or_actor_context | No | User role, customer tier, permission state, or operating context relevant to behavior. | |
| forbidden_semantic_changes | No | Semantic behavior changes the agent must not introduce without a new review. |
Output Schema
| Name | Required | Description |
|---|---|---|
| title | No | |
| status | No | |
| review_id | No | |
| review_url | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states 'Write operation — creates a review record and returns a review_id and browser URL,' which aligns with annotations (readOnlyHint=false). It goes beyond annotations by detailing the three review types, the iterative refinement mechanism, and that the plan-quality scorer evaluates structured fields. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively long but front-loaded with the core purpose and key details. Each sentence adds value: first sentence gives purpose and returns, then explains types, iteration, scorer fields, return values, polling instructions, and sibling tools. It could be slightly more terse, but the density is justified given the complexity (42 params).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (42 parameters, nested objects, multiple review types, iterative refinement, and an output schema), the description is thorough. It covers return values (review_id, status, URL), polling behavior, iteration pattern, and the importance of structured fields for scoring. The output schema handles return format, so no gap there. Complete for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers only 57% of parameters, but the description adds significant meaning to many: it explains the role of review_type, submission_body, previous_review_id, plan_phase, and lists numerous structured fields that influence the score (e.g., research_summary, options_considered). This compensates well for the schema coverage gap, providing context beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Submit a governed plan, diff, or completion packet for human review and execution gating.' It uses a specific verb ('submit') and identifies distinct resource types (plan, diff, completion), differentiating it from sibling tools like ck_review_status (polling) and ck_review_feedback (recording decisions).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: for iterative plan refinement, pass previous_review_id and plan_phase. It also tells the agent what to do after submission: 'After submission, poll ck_review_status until the decision is approved or denied before proceeding.' It explicitly names sibling tools (ck_review_feedback, ck_review_status) and their roles, offering clear context and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_rollbackADestructive
Execute a governed rollback of an agent's work. Records a git checkpoint before each task and provides a single action to revert. Safety-checked: refuses if downstream tasks depend on the changes. Creates an audit finding on every rollback. Modes: checkpoint (capture git HEAD before task), execute (revert agent's changes), status (check snapshot state), list (all snapshots for session).
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Operation mode. Defaults to status. | |
| reason | No | Reason for rollback. Recorded in audit finding. | |
| task_id | No | Task identifier. Required for checkpoint, execute, and status modes. | |
| session_id | Yes | Session identifier. | |
| project_root | No | Absolute path to the project root. |
Output Schema
| Name | Required | Description |
|---|---|---|
| sha | No | |
| mode | No | |
| status | No | |
| task_id | No | |
| reverted | No | |
| snapshots | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (destructiveHint=true), description adds that it creates an audit finding on every rollback and refuses if downstream tasks depend on changes. This provides critical behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is four sentences, front-loaded with the main purpose. Every sentence adds value without redundancy or verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 parameters, 4 modes, output schema exists), the description covers safety, audit, git checkpoint, all modes, and parameter requirements. The output schema handles return values, so no gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description adds defaults (mode defaults to status) and indicates conditional requirements (task_id required for certain modes). The reason parameter's purpose in audit finding is clarified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description starts with 'Execute a governed rollback of an agent's work,' clearly stating the verb and resource. It lists four modes (checkpoint, execute, status, list) which distinguish it from sibling checkpoint tools like ck_checkpoint_create and ck_checkpoint_restore.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description explains when to use: for rollback with safety check (refuses if downstream dependencies). It implicitly excludes other scenarios but lacks explicit alternatives or when-not-to-use. The safety check provides clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_routeARead-onlyIdempotent
Recommend the best available AI agent for a given task based on security tier, remaining budget, task type, and past performance data. Read-only — no session state is changed. task is a plain-language description of what needs to be done. risk_tier (low/medium/high/critical) filters out agents that are not cleared for the security level; defaults to medium. allowed_agents restricts routing to a specific subset of agent IDs; omit to allow all. Returns a ranked list of agent recommendations with rationale. Use ck_route to pick an agent, then ck_delegate to transfer the task. Use ck_cost_optimizer for a price-focused comparison without routing.
| Name | Required | Description | Default |
|---|---|---|---|
| task | Yes | Plain-language description of the task to be performed | |
| risk_tier | No | Security sensitivity of the task. Default: medium | |
| allowed_agents | No | Restrict routing to these agent IDs. Omit to allow all supported agents. | |
| budget_remaining_cents | No | Remaining session budget in cents |
Output Schema
| Name | Required | Description |
|---|---|---|
| task | No | |
| risk_tier | No | |
| recommended | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the description's 'Read-only — no session state is changed' aligns with them but adds verbal clarity. The description additionally reveals that the tool returns a ranked list with rationale, which goes beyond basic annotations. A 4 is appropriate since the annotation set is already strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four concise sentences that are front-loaded with purpose, then parameter guidance, then sibling differentiation. Every sentence adds value without redundancy. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists (noted in context), the description adequately covers return behavior ('Returns a ranked list of agent recommendations with rationale'). All four parameters are described both in schema and in text. Annotations cover safety. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, baseline 3. The description adds clarifying context: 'task is a plain-language description', 'risk_tier filters out agents... defaults to medium', and 'allowed_agents restricts routing... omit to allow all'. This improves understanding beyond schema types and descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the verb 'recommend' and the resource 'best available AI agent', and mentions criteria (security tier, budget, task type, past performance). It distinguishes from siblings like ck_delegate and ck_cost_optimizer by naming them and their purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool ('Use ck_route to pick an agent'), provides a follow-up action ('then ck_delegate to transfer the task'), and names an alternative ('Use ck_cost_optimizer for a price-focused comparison without routing'). This leaves no ambiguity about usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_sessionA
Enumerate and manage governed sessions. Three modes: list (enumerate sessions for the project); status (get current session details, resolves from project binding if session_id omitted); switch (change active session binding — REQUIRES confirm: true).
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Operation mode that determines the tool behavior and return shape. | |
| limit | No | Max sessions to return for list mode. Default: 20, max: 100. | |
| confirm | No | Must be true to authorize a session switch. | |
| session_id | No | Unique session identifier. Required for switch mode. Omit or pass nil to resolve from project binding. | |
| project_root | No | Absolute path to project root. Required for switch mode. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| title | No | |
| total | No | |
| sessions | No | |
| switched | No | |
| risk_tier | No | |
| project_root | No | |
| workspace_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (readOnlyHint=false, destructiveHint=false), so the description carries the burden. It discloses three different behaviors per mode and the authorization requirement for switch. It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the main purpose, then lists modes concisely. No extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the description covers essential usage and parameter nuances. It could mention error handling or prerequisites like project_root existence, but overall sufficient for invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds extra meaning, e.g., 'Omit or pass nil to resolve from project binding' for session_id, and the mode parameter's behavioral impact. This justifies above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it enumerates and manages governed sessions with three distinct modes (list, status, switch). This is specific and distinguishes it from sibling tools like ck_session_digest.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use each mode and notes that switch requires confirm: true. However, it lacks explicit guidance on when not to use this tool or comparisons to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_session_digestA
Generate a condensed, human-scannable digest of what happened in a session — tasks completed, findings raised, budget spent, reviews pending, and notable highlights. Three modes: generate (create a new digest), latest (return the most recent), list (paginated history). Designed for the forward-deployed engineer who needs an 'inbox that summarizes what happened' without reading raw event streams.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Operation mode. Defaults to generate. | |
| session_id | Yes | Session identifier. | |
| digest_type | No | Type of digest to generate. Defaults to session. |
Output Schema
| Name | Required | Description |
|---|---|---|
| highlights | No | |
| session_id | No | |
| digest_type | No | |
| findings_raised | No | |
| reviews_pending | No | |
| tasks_completed | No | |
| budget_spent_cents | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond annotations: it explains that generate creates a new digest, latest returns the most recent, and list provides paginated history. Annotations (readOnlyHint=false, destructiveHint=false) are consistent; no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. First sentence summarizes purpose and content; second sentence lists modes and use case. Efficient and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 parameters (2 with enums) and an output schema exists, the description provides sufficient context: it explains modes, output type (condensed digest), and mentions pagination for list mode. The presence of an output schema covers return value details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description adds value by explaining the three modes and their purposes (e.g., 'create a new digest', 'return the most recent', 'paginated history'). This supplements the enum descriptions in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it generates a condensed, human-scannable digest of session activity, listing specific components (tasks, findings, budget, etc.) and three modes. This distinguishes it from sibling tools like ck_session which likely provides raw session data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the tool is designed for a quick summary without reading raw event streams, implying when to use it. It does not explicitly mention alternatives or when not to use, but the context is clear enough for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_skill_evolutionARead-onlyIdempotent
Synthesize a deduplicated skill-evolution packet from recent traces and recurring failure clusters, including anti-patterns, reinforced practices, and a ready-to-merge skill draft. Set validate_only=true to run the Self-Harness validation stage (held-in/held-out + regression) without writing. Set install=true to validate and then materialize the draft into .agents/skills//SKILL.md under project_root, preserving the previous file as .bak.
| Name | Required | Description | Default |
|---|---|---|---|
| install | No | When true, validate the packet and, only if accepted, write the suggested skill document to .agents/skills/<name>/SKILL.md under project_root. The previous file is preserved as <path>.bak for rollback. Requires project_root. | |
| session_id | No | Unique session identifier for correlating findings, proofs, budget, and audit trail. | |
| project_root | No | Absolute path to the project root directory on the local filesystem. Required for install mode. | |
| session_limit | No | Maximum number of sessions to analyze. | |
| validate_only | No | When true, run the Self-Harness validation stage (static, held-in, held-out, regression) and return the verdict without writing any files. | |
| same_domain_only | No | When true, restrict results to sessions in the same domain. | |
| current_skill_name | No | Name of the existing skill to compare against for evolution. | |
| current_skill_content | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| install | No | |
| guidance | No | |
| validation | No | |
| anti_patterns | No | |
| merge_strategy | No | |
| reinforced_practices | No | |
| suggested_skill_document | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states the tool writes files when install=true, contradicting annotations (readOnlyHint=true). This is a serious inconsistency, so transparency is poor despite description being explicit about writing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficient sentences: first states purpose, second explains key parameters. No unnecessary words. Front-loaded and to the point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 8 parameters, an output schema, and annotations, the description covers core behavior and modes. Missing details on parameter interactions (e.g., both flags set) but schema covers individual params.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high (88%), so schema already documents most parameters. The description adds meaning for validate_only and install, but for other parameters it provides no additional semantics beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool synthesizes a deduplicated skill-evolution packet from traces and failure clusters, including anti-patterns and a draft. This distinguishes it from siblings like ck_skill_list, ck_skill_load, and ck_skill_validate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains two modes (validate_only and install) and when to set project_root. It provides clear context for using the tool, though it does not explicitly compare to alternatives like ck_skill_validate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_skill_listARead-onlyIdempotent
List all available AgentSkills for this project. Returns names, descriptions, and scopes. Call this to discover capabilities you can activate, then use ck_skill_load to load a skill's full instructions.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Response format. Use xml to receive an <available_skills> block for system prompt injection. | |
| target | No | Optional compatibility target filter, such as codex or claude-plugin. | |
| project_root | No | Absolute path to the project root. Omit to use global skills only. | |
| include_duplicate_copies | No | If true, surface diagnostics for identical duplicate skill copies that MCP hosts may load (token overhead). Defaults to false. |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | No | |
| skills | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, non-destructive, idempotent; description adds return value context; no contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With output schema present, description provides adequate context; mentions return fields and usage flow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage 100% and param descriptions are good; main description does not add extra parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it lists all available AgentSkills for the project, returns names, descriptions, and scopes, and distinguishes from sibling ck_skill_load.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says call this to discover capabilities then use ck_skill_load, providing clear usage context; could mention when not to use (e.g., if already know skills).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_skill_loadARead-onlyIdempotent
Load the full instructions for a named AgentSkill. Returns the SKILL.md body wrapped in tags plus a list of bundled resource files. Call after ck_skill_list to activate a specific skill.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The skill name as returned by ck_skill_list. In MCP stdio mode, call ck_skill_list first; the enum is omitted so this handshake stays fast. | |
| target | No | Optional render target such as codex, claude, copilot, or cursor. | |
| task_id | No | ||
| session_id | No | Unique session identifier for correlating findings, proofs, budget, and audit trail. | |
| project_root | No | Absolute path to the project root. Omit to search global skills only. |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | No | |
| content | No | |
| resources | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds value by detailing the output structure (wrapped in XML tags, list of resources) and the prerequisite workflow, confirming it is a safe read operation with no destructive side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The first sentence states purpose and result, the second gives usage instruction. Efficiently structured for quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and annotations are present, the description adequately covers the tool's behavior. It explains the return format and the dependency on ck_skill_list. Optional parameters are documented in the schema, so no critical gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80% with good parameter descriptions. The description adds context for the 'name' parameter (from ck_skill_list) but does not significantly enhance understanding of other parameters. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Load' and the resource 'AgentSkill', specifies the output format (SKILL.md body in <skill_content> tags plus bundled resources), and differentiates from sibling ck_skill_list by explicitly noting it should be called after listing skills.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises 'Call after ck_skill_list to activate a specific skill', providing clear sequential usage guidance. While alternatives are implied (ck_skill_list first), there is no explicit when-not-to-use, but context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_skill_validateARead-onlyIdempotent
Validate skill output against a JSON Schema defined in the skill's result-schema frontmatter field. Skills can define a result_schema in their frontmatter; agents call this tool after running a skill to enforce typed, structured output. Accepts output + schema directly, or output + skill_name to validate against the skill's built-in schema.
| Name | Required | Description | Default |
|---|---|---|---|
| output | Yes | The skill output to validate. Can be a JSON string or plain text, up to 100KB. | |
| schema | No | JSON Schema as a string to validate against. Required if skill_name is not provided. | |
| skill_name | No | Optional skill name to use the skill's built-in result_schema. If provided, schema is not required. | |
| project_root | No | Absolute path to the project root. Only used when skill_name is provided. |
Output Schema
| Name | Required | Description |
|---|---|---|
| valid | No | |
| errors | No | |
| skill_name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnly, idempotent, non-destructive. Description adds behavioral details: output size limit (100KB), that validation uses the skill's frontmatter field, and the two validation paths. No contradictions; description complements annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two well-structured sentences. First sentence states the core purpose and mechanism. Second sentence covers both invocation patterns. No redundant or unclear phrasing. Front-loaded with actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters (1 required), full annotations, and presence of an output schema, the description covers the key behavioral aspects: validation origin, size limit, two modes. Lacks explicit mention of return value, but output schema likely covers that. Sufficient for an agent to select and call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, baseline 3. Description adds semantic value: explains that 'output' can be JSON string or plain text (not in schema), clarifies that 'skill_name' makes 'schema' optional, and ties 'project_root' to usage with skill_name. This goes beyond what the schema alone tells the agent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the action ('Validate skill output against a JSON Schema'), specifies the resource (skill output), and distinguishes two modes (direct schema vs. built-in schema). The verb 'validate' is specific and distinguishes it from sibling tools like ck_validate, which may validate other things.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use: after running a skill to enforce typed output. Describes two invocation modes (output+schema or output+skill_name). Does not explicitly state when not to use, but context is clear. No mention of alternatives, but sibling names suggest other validation tools (e.g., ck_validate) exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_taskA
Manage governed tasks within a session. Six modes: status (return task details for a given task_id); claim (claim an available task for execution); complete (mark a task as done, blocked if unresolved findings exist); heartbeat (signal the agent is alive and working on a task); checks (record task quality check results); report (submit a task report with output and metadata).
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Operation mode that determines the tool behavior and return shape. | |
| note | No | Freeform note for heartbeat mode. | |
| checks | No | Array of check result objects for checks mode. | |
| output | No | Structured output payload for report mode. | |
| status | No | Target status for report mode (e.g., done, failed, blocked). | |
| task_id | No | Task identifier within the session for scoped operations. | |
| metadata | No | Arbitrary key-value metadata for report mode. | |
| progress | No | Progress indicator for heartbeat mode. | |
| session_id | Yes | Unique session identifier for correlating findings, proofs, budget, and audit trail. | |
| project_root | No | Absolute path to project root. | |
| execution_mode | No | Execution mode for claim (e.g., local, external). |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| title | No | |
| run_id | No | |
| status | No | |
| claimed | No | |
| results | No | |
| task_id | No | |
| recorded | No | |
| reported | No | |
| completed | No | |
| risk_tier | No | |
| session_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint=false, etc.) are basic; description adds meaningful context: 'complete' mode is blocked if unresolved findings exist, and each mode has distinct behavior. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences efficiently convey purpose and mode overview. No superfluous content; front-loaded with the core function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given complexity (11 params, 6 modes, output schema), the description covers main behaviors. Missing some edge-case details (e.g., error conditions beyond blocked complete) but adequate with schema and annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters with descriptions, so baseline is 3. The description adds value by linking parameters to specific modes (e.g., task_id for status/claim/complete, output for report), providing additional semantic grouping.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool manages governed tasks within a session and lists six specific modes (status, claim, complete, heartbeat, checks, report) with brief explanations. This distinguishes it from sibling tools like ck_session or ck_finding.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through mode enumeration but lacks explicit guidance on when to use this tool vs alternatives, no 'when not to use' statements, and no mention of prerequisites or context for mode selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_token_auditARead-onlyIdempotent
Audit project rule files (AGENTS.md, CLAUDE.md, etc.) and skills for token overhead. Returns word counts, token estimates, duplicate detection, and optimization recommendations.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Audit mode: 'full' (rules + skills), 'skills' (skills only), 'rules' (rules only), 'tools' (CK MCP tool schemas). Defaults to 'full'. | |
| project_root | No | Absolute path to the project root. Omit to use current working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | No | |
| duplicates | No | |
| word_counts | No | |
| recommendations | No | |
| token_estimates | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only and idempotent. The description adds behavioral context: it analyzes specific files and returns detailed reports, which is useful and consistent with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single, focused sentence front-loading the purpose. No wasted words, every part adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the description does not need to detail returns, but it summarises them well. With annotations and schema, the description is adequately complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline 3. The description does not add meaningful detail beyond the schema for the parameters 'mode' and 'project_root'. It only mentions them in context but not semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool audits project rule files and skills for token overhead, specifying the files (AGENTS.md, CLAUDE.md) and outputs (word counts, token estimates, duplicate detection, optimization recommendations). This distinguishes it from siblings as a token overhead auditor.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for auditing token overhead but does not explicitly state when to use versus alternatives like ck_validate or ck_skill_evolution. No when-not or alternative guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_tool_healthARead-onlyIdempotent
Analyze governance coverage across recent sessions in the workspace — which CK governance tools (ck_validate, ck_review_submit, ck_budget, ck_memory_record, ck_goal) are load-bearing, active, low-usage, or unused — and return actionable recommendations for gaps.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | No | Unique session identifier for correlating findings, proofs, budget, and audit trail. | |
| project_root | No | Absolute path to the project root directory on the local filesystem. | |
| session_limit | No | Number of recent sessions to analyze. Defaults to 10. |
Output Schema
| Name | Required | Description |
|---|---|---|
| coverage | No | |
| recommendations | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds value by specifying the scope of analysis (specific tools) and the output categories (load-bearing, active, etc.). It does not contradict annotations and provides useful behavioral context beyond what annotations offer.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the primary action and then specifies details. It is efficient, though slightly dense. Every phrase adds value, but it could be split for improved readability. Still, it is concise and structurally sound.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 optional parameters and an output schema, the description adequately explains what the tool does, the scope of analysis, and the type of output. It does not elaborate on the output schema's details, but that is acceptable since the output schema exists. Minor gap: 'governance coverage' is not explicitly defined, but context is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed descriptions for all three parameters. The description does not add additional meaning beyond the schema, so baseline score of 3 applies. No extra parameter guidance provided in the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool analyzes governance coverage across recent sessions, enumerates specific CK governance tools (ck_validate, ck_review_submit, etc.), and categorizes them as load-bearing, active, low-usage, or unused. It returns actionable recommendations for gaps, which is highly specific and distinguishes it from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states the tool is for analyzing governance coverage and identifying gaps. While it doesn't mention when to not use it or list alternatives, the context is clear and the tool's purpose is well-defined among many sibling tools. A slight deduction for lacking explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_trace_packetBRead-onlyIdempotent
Export a structured session or task trace packet with failure patterns and eval candidates for trace-centered improvement loops.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | No | Task identifier within the session for scoped operations. | |
| session_id | No | Unique session identifier for correlating findings, proofs, budget, and audit trail. | |
| events_limit | No | ||
| project_root | No | Absolute path to the project root directory on the local filesystem. |
Output Schema
| Name | Required | Description |
|---|---|---|
| events | No | |
| task_id | No | |
| session_id | No | |
| eval_candidates | No | |
| failure_patterns | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds context beyond annotations by specifying the output contains failure patterns and eval candidates. Annotations already indicate read-only and idempotent behavior. The description does not contradict annotations. However, it omits details like whether the export is a file download or inline data, which would enrich transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is concise and front-loaded. Every word adds value: it names the action (export), the resource (trace packet), and key contents (failure patterns, eval candidates). No redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and clear annotations, the description is fairly complete. It explains the tool's purpose and output. Minor missing details about the format of the exported data or how parameters affect the result, but overall sufficient for an export-oriented tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75%, so the schema already documents most parameters. The tool description does not add new meaning or usage tips for parameters beyond what is in the schema. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool exports a structured session or task trace packet with failure patterns and eval candidates. The verb 'export' and noun 'trace packet' are specific. However, it does not explicitly differentiate from sibling tools like ck_context or ck_observability, which may also deal with trace data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. The description implies it is for trace-centered improvement loops, but lacks explicit when-not or comparative context. No usage prerequisites or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_validateARead-onlyIdempotent
Validate proposed code, config, shell commands, or text against CK policy before execution. Read-only — no changes are applied to the project. Returns a validation result with any policy violations as findings. content is required. kind classifies the artifact (code/config/shell/text) for policy routing. source_type identifies the content's origin (developer, tool_output, human_review, issue, pull_request, web) for trust-boundary checks; untrusted sources receive stricter scrutiny. domain_pack applies a domain-specific policy pack (e.g., hipaa, owasp). requested_capabilities declares what the content needs (network, filesystem, shell, deploy) so the trust boundary can evaluate the request. Call ck_validate before writing files, running shell commands, or executing generated code. If validation returns blocked findings, do not proceed — use ck_finding to record them.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Artifact kind classification for validation routing. | |
| path | No | File or directory path relative to the project root. | |
| content | Yes | The content to validate or process: source code, config text, shell command, or freeform text. | |
| task_id | No | Task identifier within the session for scoped operations. | |
| session_id | No | Unique session identifier for correlating findings, proofs, budget, and audit trail. | |
| domain_pack | No | Domain-specific policy pack to apply during validation. | |
| source_type | No | Origin category of the record (e.g., developer, tool_output, human_review). | |
| trust_level | No | ||
| intended_use | No | How the validated content will be used after validation. | |
| policy_packs | No | Additional explicit policy packs to apply. Currently supports ai_tools for AI tool configuration review. | |
| target_scope | No | Deployment scope of the artifact being validated. | |
| artifact_type | No | Canonical artifact type. Compatibility aliases `instruction` and `text` are accepted and normalized to `source`. | |
| requested_capabilities | No | ||
| security_workflow_phase | No | Canonical workflow phase. Compatibility aliases such as `preflight`, `analysis`, and `pre_edit` are accepted and normalized. |
Output Schema
| Name | Required | Description |
|---|---|---|
| allowed | No | |
| summary | No | |
| advisory | No | |
| decision | No | |
| findings | No | |
| precedent | No | |
| scanned_at | No | |
| fix_prompts | No | |
| trust_policy_advisory | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already readOnlyHint=true, destructiveHint=false. Description confirms 'Read-only — no changes are applied to the project.' Adds context on return structure (validation result with findings) and trust-boundary logic. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is 6-7 sentences, front-loaded with purpose and read-only status. Efficient structure: main action, then safety, then return type, then parameter explanations, then usage. No unnecessary sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 14 parameters (1 required) and high schema coverage, description covers key behavioral aspects, usage context, and return type. Output schema existence reduces need to explain returns. Provides complete guidance for agent to use tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 86% (high), so baseline is 3. Description adds meaning for key parameters: content (required), kind (policy routing), source_type (trust-boundary checks), domain_pack, requested_capabilities. Not all parameters described, but enough added value to exceed baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description starts with 'Validate proposed code, config, shell commands, or text against CK policy before execution.' Clearly identifies verb (validate) and resource (content against policy). Differentiates from execution siblings like ck_execute_code by stating to call before those actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'Call ck_validate before writing files, running shell commands, or executing generated code.' Also provides alternative: 'If validation returns blocked findings, do not proceed — use ck_finding to record them.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_workspace_agentA
Manage workspace agent roles: one primary 'super-agent' per workspace maintained by a forward-deployed engineer, specialized agents for specific domains, and ephemeral agents for short-lived tasks. Modes: register (create agent, only one primary per workspace), update (change scope/budget/status), list (all agents for workspace), health (aggregated health indicator), retire (deactivate agent).
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Operation mode. Defaults to list. | |
| name | No | Human-readable agent name. | |
| role | No | Agent role. Only one primary per workspace. | |
| scope | No | Scoped capabilities and policies for this agent. | |
| status | No | Agent status. | |
| agent_id | No | Agent identifier. Required for update, health, and retire modes. | |
| agent_type | No | Agent adapter type (e.g., claude-code, cursor, opencode). | |
| budget_cents | No | Budget allocation in cents. | |
| workspace_id | No | Workspace identifier. | |
| maintainer_id | No | User ID of the human who maintains this agent. | |
| policy_overrides | No | Policy overrides for this agent. |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | No | |
| name | No | |
| role | No | |
| agents | No | |
| health | No | |
| status | No | |
| agent_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals key behaviors: the existence of a primary agent restriction, modes that modify state (register, update, retire), and the notion of ephemeral agents. It adds context beyond annotations, such as the super-agent concept, and does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph that efficiently conveys the modes and constraints. It is reasonably concise but could be improved by using bullet points or shorter sentences for easier scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (11 parameters, nested objects, output schema), the description adequately covers the modes and role constraints. It does not explain return values, but an output schema exists. It provides sufficient context for an AI agent to understand the tool's scope.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds value by explaining the mode semantics and role constraints but does not delve into parameter details beyond what schema already provides. The schema already describes each parameter adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: managing workspace agent roles with specific modes (register, update, list, health, retire). It identifies the resource (workspace agents) and differentiates from sibling tools by focusing on agent lifecycle management.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides some usage guidance by explaining when to use each mode (e.g., 'only one primary per workspace') but does not explicitly contrast with alternatives among the many sibling tools. It implies when to use certain modes but lacks explicit when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_worktree_listBRead-onlyIdempotent
List all git worktrees in the current repository with their branch, HEAD, and status information.
| Name | Required | Description | Default |
|---|---|---|---|
| project_root | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| worktrees | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so description is adequate. It adds that it returns branch, HEAD, status but no extra behavioral context like error handling or definition of 'current repository'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with action, no redundant words. Highly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool is simple with output schema, but description lacks clarity on parameter role and default behavior. Adequate but incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
One optional parameter project_root with 0% schema description coverage. Description does not explain the parameter's purpose or effect. Falls short of compensating for missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it lists all git worktrees with branch, HEAD, and status. Verb 'list' and resource 'git worktrees' are specific. Distinguishes from sibling git tools like ck_git_diff and ck_worktree_switch.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives (e.g., ck_git_status). No mention of prerequisites or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ck_worktree_switchBDestructive
Switch the current session to a different git worktree and update session metadata accordingly.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | No | Unique session identifier for correlating findings, proofs, budget, and audit trail. | |
| worktree_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| branch | No | |
| switched | No | |
| worktree_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive nature. Description adds that session metadata is updated, but does not detail what is destroyed or irreversible effects. Could elaborate on side effects like detaching from current worktree.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no unnecessary words, perfectly front-loaded with the action and result.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with low schema coverage, the description is minimal. With output schema present, return values are covered, but behavioral context (e.g., impact on other sessions) is omitted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50% (only session_id described). The description does not explain worktree_path or how the parameters interact. Lacks compensation for missing parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the action ('Switch'), the resource ('different git worktree'), and the side effect ('update session metadata'). It is distinct from sibling tools like ck_worktree_list, which only lists worktrees.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives (e.g., ck_worktree_list or ck_checkpoint_create). No prerequisites or conditions mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool targets a distinct aspect of governance (validation, filesystem, git, memory, reviews, budget, etc.). Even where names are similar (e.g., ck_memory_search vs ck_memory_record), descriptions clearly differentiate purpose and behavior. No two tools have overlapping responsibilities.
All tools use the 'ck_' prefix followed by descriptive snake_case names. However, there is minor inconsistency: some names start with a verb (ck_validate, ck_delegate) while others start with a noun (ck_memory_search, ck_fs_read). The pattern is not perfectly uniform but remains readable and predictable.
With 55 tools, the surface is very large. While the scope of ControlKeel governance is broad, this many tools risks overwhelming agents. A more focused set (e.g., consolidating related operations) would be typical for coherent MCP servers. The count is at the high end of 'too many.'
The tool set covers the full lifecycle of governed development: validation, execution, file operations, git, memory, reviews, budget, routing, delegation, deployment, outcome tracking, loops, skills, and more. There are no obvious missing operations for the intended domain of AI governance and session management.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Control plane for autonomous software labor. Agents claim objectives over MCP with audit trail.
Pre-execution governance for AI agents. Deterministic PASS/FAIL/REVIEW verdicts, replayable proof.
Governance runtime for compliance: verified, human-approved writes to a tamper-evident record.
Governance layer for AI coding agents: knowledge-graph grounding, session audit, policy controls.
Related MCP Servers
FlicenseAqualityDmaintenanceGovernance circuit-breaker MCP server that enables AI agents to request risk-based decisions, approve or deny actions, and finalize outcomes with full audit receipts.4- AlicenseNot gradedqualityAmaintenanceLocal governance layer for AI-assisted development, providing human authorization gates, policy enforcement, change approval workflow, and rollback capabilities through a universal MCP server.MIT
- FlicenseNot gradedqualityCmaintenanceMCP server that enforces governance on agentic decisions with auditable evidence records, providing tools for understanding, calibrating confidence, and navigating handoffs based on policy.1
- FlicenseNot gradedqualityAmaintenanceAgent orchestration system that runs coding-agent sessions (Claude Code, Codex) with policy mediation and exposes tools via MCP.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/aryaminus/controlkeel'
If you have feedback or need assistance with the MCP directory API, please join our Discord server