codapult-guard
Official@codapult/guard
Architecture guardrails for AI coding agents
@codapult/guard is local-first, model-agnostic architecture guardrail software for AI coding
agents. Use it to detect architectural drift, enforce approved software architecture rules, and
check code changes in JavaScript and TypeScript projects.
Guard learns how your codebase is structured, records project architecture as reviewable memory, and checks future changes against the rules your team approves. It connects AI coding agents to those rules and returns deterministic evidence when a change introduces a covered architecture regression. Run the same project-specific checks locally and in CI.
See the value in one change
Suppose a SaaS project has an established boundary:
Client → Server Action → Service → Repository → DatabaseAn AI agent can still produce code that is valid TypeScript but crosses that boundary:
Client → DatabaseAfter the project has explicitly approved a matching import rule or deterministic contract, Guard checks the changed files and reports matching violations deterministically:
Codapult Guard (changed files)
Scanned 1 source file(s); suppressed 12 baseline finding(s).
src/app/settings/page.tsx:1 [client-no-persistence-import]
Client modules should not import persistence-layer modules.
import: @/lib/db/client
✗ 1 issue(s) found
Exit code: 1The file path, rule ID, message, and counts depend on the project. This is the actual CLI output
shape: Guard does not infer that every Client → Database edge is forbidden, and it does not
activate proposals silently. The team approves the relevant policy first; then existing findings
can be baselined while newly matching violations fail the gate and give the agent bounded evidence
to repair.
Guard does not tell every project to use the same architecture. It discovers the architecture that is already there, then lets the team decide what becomes policy.
The core is universal. The strongest first-class scenarios are Next.js SaaS and AI-assisted development, including server/client boundaries, routes, persistence, authentication, billing, background jobs, environment configuration, and AI integrations.
Related MCP server: Agentguard47
Why Guard exists
AI agents can produce syntactically valid code that still violates the architecture of a real project: a client component imports server-only code, a new action bypasses the established auth boundary, a route writes to the database directly, or a change duplicates a service that already exists.
Existing tools remain essential, but they solve different problems:
Tool category | Primary question | Guard’s relationship |
TypeScript | Is the code type-correct? | Uses the project’s typecheck as an optional gate. |
ESLint / Biome | Does code follow language and style rules? | Does not duplicate their lint rules. |
Tests | Does behavior match executable expectations? | Runs configured checks when enabled; does not replace tests. |
SAST / dependency scanners | Is there a known security or dependency risk? | Can connect adapters; focuses on architecture and change impact. |
PR review services | What semantic concerns should a reviewer consider? | Produces a bounded, redacted review packet for the selected AI host. |
Guard | Is the project becoming architecturally worse? | Maintains project-specific architectural memory and regression gates. |
Install
Requirements: Node.js >=20.19 and a JavaScript or TypeScript project.
pnpm add -D @codapult/guard
# or
npm install --save-dev @codapult/guardThe package exposes the codapult-guard binary:
pnpm exec codapult-guard initThe npm package is scoped as @codapult/guard; the executable intentionally remains
codapult-guard for discoverability and consistency with the standalone product name.
60-second quick start
Run from the project root:
# 1. Build the initial project model and baseline
pnpm exec codapult-guard init
# 2. Inspect only new and changed architecture findings
pnpm exec codapult-guard check --changed
# 3. Prepare deterministic context for an AI review
pnpm exec codapult-guard review --requirement docs/acceptance.md
# 4. Run the configured completion gate
pnpm exec codapult-guard verify --jsoninit is protected and refuses to overwrite an existing baseline. Use init --force only when
deliberately replacing the project memory. Use analyze to refresh discovered facts without
resetting the baseline.
The operating model
Guard separates facts, policy, verification, and decision:
Layer | Contains | How it is produced |
Facts | AST, files, imports, dependencies, routes, calls, capabilities, graph, Git history | Deterministic local discovery |
Policy | Rules, contracts, conventions, baseline | Observed proposals plus explicit team approval |
Verification | Changed-file checks, impact analysis, contracts, project checks, review packet | Local CLI, MCP, CI, and existing project tools |
Decision | Pass, fail, warning, needs-review, not-configured | Developer or AI host using Guard evidence |
Guard does not assume a fixed UI → actions → services → repositories → database architecture.
It can discover that shape when the project exhibits it, but observed patterns become enforceable
only after explicit approval.
Policy paths are validated as project-relative paths. Guard rejects traversal, absolute paths, and symlinks escaping the project root; import-boundary checks include imports, re-exports, and literal dynamic imports.
Policy scope and state changes
Guard stores policy at the project level, while each policy item can target a narrower boundary:
Policy item | Scope controls |
Rule |
|
Contract |
|
Budget |
|
Baseline | Exact finding fingerprints already accepted as legacy debt |
Waiver | One active finding fingerprint, with owner, reason, and expiry |
Routine checks do not change source code, rules, contracts, baseline, or waivers. Commands that
change policy are explicit: init, rules approve, contracts approve|reject, baseline accept|remove, and
waiver add|renew|remove. analyze refreshes derived project facts, while verify may run the
project's configured commands and records a local run manifest; neither changes approved policy.
For the complete mutation contract and host/CI controls, see Policy mutation control.
What Guard discovers
The model is framework-aware without being framework-dependent:
Area | Examples of discovered evidence |
JavaScript / TypeScript | AST modules, declarations, calls, directives, aliases, re-exports, dynamic imports |
Next.js / React | App Router routes, route methods, Server Actions, client/server boundaries |
API boundaries | Route handlers, API modules, entrypoints, impact paths |
Data | ORM packages, schemas, migrations, repositories, persistence boundaries |
Capabilities | Auth, payments, email, AI/RAG, queues, storage, cache, search, analytics, content |
Operations | Environment references, configs, deployment, observability, webhooks |
Repository shape | Workspaces, package scripts, dependencies, cycles, import hotspots, Git history |
Testing | Test files, test scripts, workspace checks, changed files |
Capabilities are evidence, not requirements. A Vite app, Express service, Hono project, Node package, monorepo, or Next.js SaaS can all use the same Guard core.
What Guard is — and is not
Guard is an architecture control plane for AI-assisted development. It protects project-specific boundaries and change impact using local facts, approved policy, and deterministic verification.
Guard is not a replacement for ESLint, TypeScript, tests, SAST, or a general-purpose PR bot. Those tools answer different questions; Guard connects their results with the architectural memory that an AI coding agent needs before and after changing a repository.
The normal loop
init once → edit → check --changed → review → verify → commit / merge
↘ analyze after structural changesinitbuilds project memory and establishes the initial baseline.checkscans the current project;check --changedis the fast change-scoped architecture gate.reviewprepares a bounded and redacted diff packet for an AI host; it does not call an LLM.verifyruns Guard policy, configured project checks, adapters, runtime diagnostics, and contract validation.auditinspects the complete current state, including findings accepted by the baseline.
For a focused change explanation, use codapult-guard impact <file...> or the equivalent
codapult_guard_impact MCP tool. It reports both directions of the dependency graph: what the
changed module uses and which transitive callers may be affected. review includes the same
impact packet plus typed Git changes (added, modified, deleted, and renamed) for the AI
host.
Guard state is stored in .codapult/guard/:
.codapult/guard/
├── project.json discovered project model
├── architecture.json observed architecture and capabilities
├── conventions.json recurring project conventions
├── rules.json active and proposed deterministic rules
├── contracts.json project-specific boundaries and required calls
├── proposals.json evidence and approval history
├── baseline.json accepted pre-existing findings
├── agent.json AI-host completion-gate configuration
├── waivers.json time-bounded exceptions to active findings
└── history/ project snapshots and local verification run manifestsCommit policy and baseline files when the team wants shared guardrails. Treat cache artifacts as disposable according to the project’s policy, and never commit secrets.
Baseline fingerprints do not include line numbers, so formatting and line movement do not recreate the same finding. They do include the rule and affected file/import identity, so a rename or module move can produce a new fingerprint and should be reviewed explicitly before accepting it into the baseline.
Temporary waivers
Baseline records legacy findings that existed when Guard was introduced. A waiver is different: it temporarily suppresses one active finding and must have an owner, reason, and expiry date.
codapult-guard waiver add <fingerprint> \
--owner platform-team \
--reason "Migration in progress" \
--expires 2026-12-28
codapult-guard waiver list
codapult-guard waiver renew <id> --expires 2027-01-31 --reason "Migration continues"
codapult-guard waiver remove <id> --reason "Migration completed"Guard warns when a waiver is within the configured warning window (14 days by default). Once it expires, the original finding is active again. Protected policy can forbid waiver changes through MCP so an agent can propose a waiver but cannot approve it itself. Waivers are intentionally fingerprint-specific; changing the violating code invalidates the waiver.
Teams can optionally cap each new waiver or renewal with waiverPolicy.maxDays in rules.json:
"waiverPolicy": { "warningDays": 14, "maxDays": 90 }The cap applies to the requested grant from the current operation; it does not silently delete or
rewrite existing waivers. Boundary findings with severity error fail check; warning findings
and waiver-expiry reminders remain advisory.
Run codapult-guard doctor to detect an explicitly downgraded client or package boundary. Doctor
reports it as a warning and leaves the project policy unchanged.
Optional scoped budgets
Budgets are policy, not a universal style rule. Add them only for a named risk boundary such as a service, route handler, or dependency-heavy module:
{
"id": "service-lines",
"description": "Services must remain reviewable.",
"metric": "lines",
"scope": ["src/services"],
"limit": 300,
"severity": "warning",
"reason": "Keep service changes reviewable by one owner.",
"status": "active"
}Place budgets in the budgets array in .codapult/guard/rules.json. Supported metrics are
lines, bytes, and imports. Generated files, schemas, migrations, and other paths are not
checked unless they are explicitly included in scope; a wildcard such as * can intentionally
cover the project root. Invalid, absolute, parent-directory, or nonexistent scopes fail the Guard
gate. Changing a budget is a policy decision:
review the diff and update its written reason rather than silently increasing the limit.
AI agents and MCP
Guard is deliberately model-agnostic. It does not send source code to a remote LLM and does not edit source files by itself. The AI host owns the model call, permissions, repair loop, and final decision.
Start the standalone MCP server over stdio:
pnpm exec codapult-guard mcp-serverRegister that command in the MCP client from the project root. For example, Cursor can use
.cursor/mcp.json:
{
"mcpServers": {
"codapult-guard": {
"type": "stdio",
"command": "pnpm",
"args": ["exec", "codapult-guard", "mcp-server"],
"cwd": "${workspaceFolder}"
}
}
}For clients that accept a generic stdio server, use the same command and set its working
directory to the project root. Guard reads local files only; no API key or model provider is
required. Host-specific examples are in docs/integrations/.
Recommended agent loop:
task finished
→ codapult_guard_next_action
→ codapult_guard_context
→ codapult_guard_review(requirement, diff)
→ codapult_guard_verify
→ repair reported failures
→ repeat until pass or bounded iteration limitcodapult_guard_context keeps the project state explicit for the host: observations are
discovered facts only, proposals.pendingRules and proposals.pendingContracts are unapproved
policy suggestions, policy contains only active rules/contracts plus baseline and waiver state,
and verification reports whether a check has actually run. A context response with
verification.status: "not-run" and findings: null is not a passing check.
For Cursor, Claude Code, Codex, Gemini CLI, GitHub Copilot, and generic hosts, see
docs/integrations/.
MCP Registry
Guard is published in the official MCP Registry
under the server name io.github.codapult/guard. The Registry is the discovery layer for the
published @codapult/guard npm package and its stdio MCP server; it does not replace npm
installation or the host-specific configuration above. For deterministic setup, install the npm
package directly and use the MCP configuration shown below.
For workflows where the authoring agent must not approve its own policy proposals, set Guard to
protected mode in rules.json:
{
"approval": {
"mode": "protected",
"allowMcpApproval": false,
"requireDistinctActor": true
}
}MCP can then read and propose policy, while approval happens through the CLI or a protected CI/PR
process. With requireDistinctActor, CLI and permitted MCP approvals require GUARD_APPROVER,
and Guard rejects the same declared actor when a proposal was generated with GUARD_PROPOSER.
These variables provide declared provenance only; external branch protection or signed identity
remains responsible for proving who approved the change.
Verifying against protected policy
In CI, verify pull requests against the policy from the protected base commit rather than the copy carried by the branch:
codapult-guard verify --policy-base "$BASE_SHA" --jsonGuard then evaluates the changed source with the base commit's rules, contracts, baseline, waivers,
and completion-gate configuration. The result reports policy.source, policy.ref,
policy.revision, policy.fingerprint, and whether the checked-out policy differs from that
base. A branch cannot relax its policy or disable the gate and use that relaxed copy for the same
verification run.
The supplied docs/guard-ci.yml fetches the full Git history and passes the
pull request base SHA automatically. Protect .codapult/guard/ with CODEOWNERS or the equivalent
review control when policy changes require a separate approval. For example, a repository can add
.codapult/guard/* @architecture-owners to CODEOWNERS. Guard reports the policy change; the
hosting platform enforces reviewer authorization.
To make policy changes fail this invocation explicitly, add:
codapult-guard verify --policy-base "$BASE_SHA" --fail-on-policy-changeThis is useful for a dedicated policy-review gate. It is intentionally separate from using the base policy for source verification, so teams can choose how their protected review workflow handles an approved policy update.
See the extension map for the supported AI-host, CI/PR, policy-pack, tool adapter, approval-governance, and observability integrations.
CI
Copy the consumer workflow into a project that has installed and initialized Guard:
cp node_modules/@codapult/guard/docs/guard-ci.yml .github/workflows/guard.ymlOr copy it from docs/guard-ci.yml. It runs project verification and exports
Guard findings as SARIF for GitHub code scanning. Pull requests install dependencies without
lifecycle scripts and use deterministic Guard checks without executing PR-owned scripts; trusted
pushes may run the configured project checks.
The package repository separately runs its own unit, typecheck, build, and packaging checks in
.github/workflows/ci.yml, while the fixture workflow tests Guard on
real project shapes.
CLI surface
Command | Purpose |
| Create project memory and the initial baseline. |
| Refresh facts without changing policy or baseline. |
| Generate evidence-based rule and contract proposals. |
| Enforce active policy; |
| Scan the complete current project, including baseline findings. |
| Create a bounded semantic-review packet for an AI host. |
| Run the configured completion gate. |
| Audit declared proposal/approval provenance and decision-to-run reachability. |
| Diagnose invalid or missing Guard artifacts. |
| Inspect project model, module graph, and architecture-edge evolution. |
| Explain dependencies, transitive dependents, capabilities, and contracts affected by files. |
| Explain a policy item, its evidence, and approval history. |
| Approve rules; approve or reject contracts. |
| Review or intentionally accept existing findings. |
| Manage owner-attributed, time-bounded exceptions to exact findings. |
Use analyze --refresh after a structural change. doctor --fix-cache removes only the disposable
discovery cache; it does not change rules, contracts, baseline, or source files.
Guard state is safe for concurrent CLI/MCP readers and writers: derived facts are published as an
atomic generation, policy updates use revisions, and short write contention is waited out. A
process that dies while holding the state lock is detected by its local PID and the lock is
recovered; use --no-wait when an integration needs immediate contention feedback.
Run pnpm exec codapult-guard <command> --help for command-specific options.
Every verify run also writes a local manifest under
.codapult/guard/history/runs/<run-id>.json. It records stage durations, the outcome, and the
policy gate that decided the result. It also records the effective policy revision and fingerprint;
when a base ref was supplied, it records the ref and whether the working-tree policy differed.
When an approved policy decision caused the current policy, the manifest also retains its decision
ID, making the relationship traversable from approval to verification. The governance command
audits this metadata and reports missing or overlapping declared actors. It contains no source code
or external telemetry. These manifests make a failed run explainable without turning Guard into a
production tracing system or an identity/signature ledger.
The manifest also contains a verification-receipt object. It is a compact, machine-readable
record of the commit, policy base and fingerprint, decision IDs, check statuses, finding counts,
contract issues, waiver state, and Guard version. It intentionally excludes command output and
source code. The receipt describes what Guard decided; it is not a cryptographic signature or proof
of CI identity. When a policy base is supplied, it separates the base diff from dirty working-tree
files so local verification cannot silently present an incomplete change set.
Security and data handling
Deterministic discovery and checks run locally.
Review packets are bounded and redact common secrets before they are returned to an AI host.
Guard does not invoke an LLM or require a provider API key.
Project commands and external adapters run only when enabled by the project configuration.
Existing findings can be baselined, but new regressions remain visible.
Verification and proof
The repository validates the product through multiple layers:
unit and integration tests for discovery, policy, baseline, verification, MCP, and output;
AST adversarial cases for aliases, re-exports, dynamic imports, and route boundaries;
golden end-to-end flow from violation to repair;
mutation regression checks across real Next.js, React/Vite, Node, Hono, monorepo, and Express repositories;
npm pack checks to ensure the published artifact contains only the intended build output.
Run the maintainer checks locally:
pnpm test
pnpm test:guard:golden
pnpm test:guard:fixtures
pnpm test:guard:fixtures:regression
pnpm release:checkDocumentation
More from Codapult
Starting a SaaS from scratch? Codapult is a production-ready Next.js SaaS foundation built for AI-assisted development — with MCP context, built-in AI, modular architecture, and the source code under your control.
License
MIT. See LICENSE.
Available Tools
14 toolscodapult_guard_analyzeRefresh Guard ModelB
Refresh persisted project facts and snapshots without changing rules, contracts, or baseline.
| Name | Required | Description | Default |
|---|---|---|---|
| root | No | Project path or workspace root. | |
| confirm | No | Required before writing refreshed Guard state. | |
| no_wait | No | ||
| wait_ms | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full disclosure burden. It does usefully signal that this writes persisted state while preserving rules and baseline, and the schema's confirm field implies a write gate, but the description never mentions that confirm requirement, what happens on a dry run, or what 'refreshed Guard state' actually contains.
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?
A single tightly written sentence with the scope constraint front-loaded and no filler. Every clause (refresh, persisted facts, no rule/contract/baseline change) carries distinct 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?
This is a state-mutating tool with no annotations, no output schema, and half its parameters undocumented. The description omits the confirm-before-write flow, what the refresh result looks like, and whether the operation is reversible or incremental, leaving meaningful gaps for a no-annotation mutation 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 only 50%: root and confirm are documented in the schema, while no_wait and wait_ms have no descriptions anywhere. The description adds no parameter-level meaning at all, so the two undocumented timing parameters remain opaque to 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?
The description names a specific verb (refresh) and resource (persisted project facts and snapshots) and clarifies the scope boundary by excluding rules, contracts, and baseline changes. That exclusion implicitly separates it from sibling mutation tools like codapult_guard_propose and codapult_guard_init, though it never names any of them.
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 conveys the negative case (it does not modify rules, contracts, or baseline) but never states the positive trigger, such as 'use when Guard state is stale or after external changes.' With 13 sibling tools, an agent has no explicit routing cue to prefer this over codapult_guard_check, codapult_guard_verify, or codapult_guard_context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codapult_guard_auditGuard AuditA
Run a full Guard audit, ignoring baseline suppression and validating contracts.
| Name | Required | Description | Default |
|---|---|---|---|
| root | No | Project path or workspace root. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose two meaningful behaviors — baseline suppression is bypassed and contracts are validated — which is real beyond-schema value, but it omits whether the audit is read-only, whether it writes reports, cost/runtime expectations, and permission 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?
A single dense sentence with zero filler, front-loading the action and then the two behavioral qualifiers that actually differentiate the tool.
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 one-optional-param, no-output-schema tool the description covers what it does and two notable behavior traits, which is close to sufficient. The main remaining gap is routing guidance against the many guard siblings; return-value details are less critical since there is no output schema to lean on, though a hint would help.
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% and the single `root` parameter already documents "Project path or workspace root." The description adds nothing about the parameter, but per the coverage rule the schema baseline of 3 applies.
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?
States a specific verb and resource ("Run a full Guard audit") plus two distinguishing modifiers: ignoring baseline suppression and validating contracts. It does not explicitly contrast with close siblings like codapult_guard_check, codapult_guard_verify, or codapult_guard_analyze, so an agent must infer the difference from the modifiers alone.
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?
"Full" audit and "ignoring baseline suppression" imply this is the exhaustive, un-suppressed variant, but the description never states when to pick it over codapult_guard_check or codapult_guard_verify, nor any prerequisites such as an initialized workspace.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codapult_guard_checkGuard CheckC
Check project architecture rules and return structured new violations.
| Name | Required | Description | Default |
|---|---|---|---|
| root | No | Project path or workspace root. | |
| changed_only | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden and does not meet it. It never says whether the check is read-only or records state, what 'new' means (relative to a baseline? prior runs?), what permissions/paths are needed, or how results are shaped beyond the phrase 'structured new violations'.
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?
A single front-loaded sentence with no filler. It is efficient, though brevity here shades into under-specification rather than crispness.
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 no annotations, no output schema, an undocumented parameter, and a dense sibling family, the definition leaves an agent guessing about prerequisites, side effects, and the semantics of 'new'. It is not sufficient for correct invocation in this tool family.
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 only 50%: 'root' is documented but 'changed_only' has no description, and the tool description does not compensate by explaining that it scopes the scan to changed files. It adds no meaning beyond the schema text.
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?
States a specific verb ('Check') and resource ('project architecture rules') plus a distinctive output nuance ('structured new violations'), so an agent knows this is a rules-evaluation tool rather than a governance/waiver management tool. It does not explicitly name how it differs from close siblings like codapult_guard_verify or codapult_guard_analyze, which keeps it below a 5.
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?
There is no guidance on when to call this versus the 13 sibling guard tools (verify, analyze, audit, review, impact), several of which sound near-identical. No prerequisites (e.g., whether codapult_guard_init must run first) or exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codapult_guard_contextGuard ContextA
Read the discovered project model, architecture insights, and local rules used by Codapult Guard. Works before init by discovering the project on demand.
| Name | Required | Description | Default |
|---|---|---|---|
| root | No | Project path or workspace root. | |
| refresh | No | Rediscover the working tree instead of reading the persisted snapshot. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden; it does disclose that the tool reads a persisted snapshot by default and can rediscover the working tree, plus that it functions before init. It does not clarify whether on-demand discovery writes/persists a snapshot (a possible side effect), nor anything about cost, caching, or failure modes when no project is found.
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 short sentences, zero filler, with the core capability front-loaded and the pre-init capability as a secondary clause. Everything present 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?
There is no output schema and no annotations, so the description is the only source of behavioral detail; it covers what is read and the pre-init case but omits return structure, any write/persist side effects of discovery, and error behavior. Adequate to start, but not complete for an agent deciding whether calling it is safe or expensive.
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 both parameters are documented in-schema, so the baseline is 3. The description only echoes the refresh behavior (rediscover vs persisted snapshot) without adding format, cost, or default-related nuance beyond the schema's own 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?
States a specific verb (read) and concrete resources (project model, architecture insights, local rules) scoped to Codapult Guard. It is clear what comes back, though it doesn't explicitly contrast itself with close siblings like guard_analyze or guard_explain, which also surface project understanding.
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?
"Works before init by discovering the project on demand" gives one useful usage condition (callable pre-init, no prior setup). However there is no guidance on when to prefer this over siblings such as guard_init (which presumably persists context) or guard_analyze, leaving selection largely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codapult_guard_explainExplain Guard PolicyC
Explain a Guard rule or contract with its evidence and applicable scope.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| root | No | Project path or workspace root. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden and does not meet it: it does not say whether the operation is read-only, whether it requires an initialized workspace or specific permissions, or what happens when the id is unknown. It hints at return content ('evidence and applicable scope') but nothing about failure modes or cost.
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?
A single sentence with no filler, and the verb/resource leads. Its brevity is a virtue structurally, though it borders on under-specification rather than crispness.
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 no annotations, no output schema, and half the parameters undocumented, a one-sentence description leaves too much unknown for an agent to call this confidently in a crowded sibling namespace. At minimum it should state the read-only nature and how it differs from guard_context/guard_audit.
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%: 'root' is documented in the schema while 'id' has no description. The phrase 'a Guard rule or contract' does implicitly map 'id' to a rule/contract identifier, which adds modest value, but no format, prefix, or lookup guidance is given.
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 pairs a specific verb ('Explain') with a specific resource ('a Guard rule or contract') and adds what the answer contains (evidence and applicable scope). That is clear on its own, but it never distinguishes this tool from close siblings like codapult_guard_context, codapult_guard_audit, or codapult_guard_analyze.
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?
There is no statement of when to reach for this tool versus the thirteen sibling guard tools, nor any prerequisites (e.g., whether the project must be initialized or a rule must already exist). The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codapult_guard_governanceGuard Governance AuditB
Audit declared proposal and approval provenance, policy bindings, and retained verification reachability. This reports metadata; it does not prove identity or signatures.
| Name | Required | Description | Default |
|---|---|---|---|
| root | No | Project path or workspace root. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose an important behavioral trait beyond the schema: the output is declared metadata only and does not establish identity or cryptographic signatures, which sets the right expectations about result trustworthiness. It omits whether the operation is read-only, whether it can fail on missing config, and what the report contains.
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 audited scope and closed with the key caveat. Every clause carries information and nothing is repeated from the schema or title.
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 no annotations and no output schema, the description should say more about the shape of the report (sections, pass/fail verdicts) so an agent knows what it will receive. The trust caveat is valuable, but return-value expectations remain underspecified.
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?
There is a single optional parameter ('root') whose schema description already covers it at 100%, so the schema does the work. The description never mentions the root or what happens when it is omitted, but the high coverage makes baseline 3 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 verb 'Audit' is paired with a specific scope (proposal/approval provenance, policy bindings, verification reachability), which is more than a restatement of the title. However, the sibling list contains both codapult_guard_audit and codapult_guard_verify/codapult_guard_check, and nothing in the description explains how 'governance' audit differs from plain audit. An agent cannot reliably choose between them from this text alone.
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?
There is no when-to-use guidance, no preconditions, and no named alternative. The second sentence is a scope disclaimer about what the results mean, not an instruction about when to pick this tool over codapult_guard_audit or codapult_guard_verify.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codapult_guard_impactGuard Impact AnalysisC
Explain the project impact of one or more changed files using the discovered dependency graph, routes, capabilities, and contracts.
| Name | Required | Description | Default |
|---|---|---|---|
| root | No | Project path or workspace root. | |
| files | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does not state whether this is read-only or mutating, whether it requires a prior codapult_guard_init/discovery pass, whether it touches the filesystem, or what the response contains. For an analysis tool with zero annotation coverage, that is a significant gap.
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?
A single well-formed sentence with the action front-loaded and no filler. It earns its space, though brevity here comes partly at the cost of the missing usage and behavioral information rather than from efficiency alone.
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 no output schema, no annotations, and a required parameter undocumented in both schema and description, the definition is under-specified. An agent cannot tell what 'impact' looks like in the response — affected routes, capabilities, contracts? — or whether this is a safe repeated call.
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%: 'root' is documented in the schema but the required 'files' array has no description at all. The description mentions 'one or more changed files' but does not say whether paths are absolute, repo-relative, or workspace-relative to root — the one ambiguity an agent would most need resolved.
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?
States a specific verb ('Explain') and resource ('project impact of changed files'), and enumerates the evidence sources it draws on (dependency graph, routes, capabilities, contracts). This is clearly distinct from siblings like init or proposal_decide, though it does not distinguish itself from codapult_guard_analyze or codapult_guard_check, which likely occupy adjacent territory.
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 when-to-use guidance, no exclusions, and no alternatives named despite 13 sibling tools in the same guard family. The phrase 'using the discovered dependency graph' hints that discovery/init must have run first, but this prerequisite is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codapult_guard_initInitialize GuardB
Create Guard artifacts after explicit confirmation; existing baselines are protected by default.
| Name | Required | Description | Default |
|---|---|---|---|
| root | No | Project path or workspace root. | |
| force | No | Replace existing Guard state; requires confirm. | |
| confirm | No | Required before writing Guard artifacts. | |
| no_wait | No | ||
| wait_ms | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral burden; it does disclose two useful traits (confirmation required, existing state protected by default). It omits what artifacts are written, where, and whether non-force re-runs are idempotent or fail.
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?
A single front-loaded sentence with no filler; the safety trait comes early. Brevity is appropriate, though it verges on under-specification for a 5-parameter init tool.
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?
No annotations, no output schema, and two parameters (no_wait, wait_ms) are unexplained anywhere. For an initializing write tool the description leaves the agent without enough to call it correctly or anticipate results.
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 60% and the description adds no detail on any parameter: no_wait and wait_ms are undocumented in both schema and description, and 'explicit confirmation' only restates the existing confirm field 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?
States a specific verb ('Create') and resource ('Guard artifacts'), plus a scope trait that separates it from verification/review siblings. However, 'Guard artifacts' is unexplained jargon, so an agent still doesn't know concretely what gets written.
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 phrasing 'after explicit confirmation' and 'existing baselines are protected by default' implies initialization is a guarded, deliberate step, but no alternatives are named and no explicit condition selects this tool over codapult_guard_propose or codapult_guard_next_action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codapult_guard_next_actionGuard Next ActionC
Return the next bounded action for an AI coding-agent loop without modifying project files.
| Name | Required | Description | Default |
|---|---|---|---|
| root | No | Project path or workspace root. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. The 'without modifying project files' clause is a useful safety signal, but nothing is said about whether it reads or writes guard state, how the 'bounded' constraint is enforced, or what form the returned action takes.
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?
One sentence, front-loaded with the verb and result. Nothing is padded, though the terseness crosses into underspecification rather than efficiency.
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?
There is no output schema, so the description should explain what a 'bounded action' contains and how the agent should consume it. The nature of the return value is left entirely undefined, which is a real gap for a tool whose whole purpose is producing a next-step payload.
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?
Single optional `root` parameter is fully described in the schema (100% coverage), so the schema already does the work. The description adds nothing about path semantics or defaults, which is the expected baseline for full 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?
Names a specific verb ('Return') and object ('next bounded action for an AI coding-agent loop'), and adds a non-mutation qualifier. However, 'bounded action' is unexplained jargon, and it doesn't distinguish itself from siblings like codapult_guard_propose or codapult_guard_check, which plausibly also return 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?
No indication of when this tool should be chosen over codapult_guard_propose, codapult_guard_check, codapult_guard_verify, or the other nine siblings. The agent must guess at the loop-step position this tool occupies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codapult_guard_proposal_decideDecide Guard ProposalsB
Approve or reject current evidence-backed proposals; stale proposals cannot be activated.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | ||
| root | No | Project path or workspace root. | |
| confirm | No | Required before changing Guard state. | |
| decision | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses one important constraint (stale proposals cannot be activated), but omits state-change effects, the need for confirmation before changing Guard state, reversibility, and error behavior for a mutation tool.
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?
A single tightly written sentence with the core action and the key staleness constraint front-loaded. No filler or 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?
For a mutation tool with four parameters, no annotations, and no output schema, the description is too thin. It leaves out confirmation requirements, state-change semantics, permission expectations, and what happens after approval or rejection.
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 50%, so the description should compensate. It implies that ids refer to proposals and that decision is approve/reject, but it says nothing about the confirm parameter, root scoping, or the format of ids beyond what the schema already conveys.
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 a clear verb pair (approve/reject) and resource (current evidence-backed proposals), and adds a validity constraint (stale proposals cannot be activated). It does not explicitly differentiate itself from siblings like codapult_guard_propose or codapult_guard_review, but the scope is specific enough for an agent to identify the action.
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?
Usage is implied: this tool applies decisions to current proposals, and stale ones are excluded. However, the description never states when to use this tool versus alternatives such as review, verify, or propose, nor does it list prerequisites like confirmation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codapult_guard_proposeGuard ProposalsB
Generate evidence-based rule and contract proposals for an AI agent. Proposals are never activated automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| root | No | Project path or workspace root. | |
| confirm | No | Required when persist is true. | |
| persist | No | Persist proposals.json in the project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses one genuinely important behavioral trait – proposals are never activated automatically, so this is non-destructive – but says nothing about what 'evidence-based' means, whether the tool reads the repository, whether persist triggers filesystem writes, or whether it requires review by proposal_decide.
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 purpose and followed by the key safety constraint; no filler. It is arguably too terse for a tool with no annotations, but every sentence present 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?
For a 3-parameter governance tool with no annotations and no output schema, and 13 closely related siblings, the description is far too thin. It omits prerequisites, what evidence is generated, the role of persist/confirm in the workflow, and how output proposals are consumed by proposal_decide.
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 root, confirm and persist are already documented, including the dependency that confirm is required when persist is true. The description adds no parameter-level meaning beyond the schema, so the baseline of 3 applies.
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?
States a specific verb and resource: 'Generate evidence-based rule and contract proposals for an AI agent.' That is clear and identifiable, but the description never distinguishes it from the numerous sibling governance tools (proposal_decide, verify, analyze, check) that also touch rules and proposals.
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?
There is no when-to-use or when-not-to-use guidance. It never says whether to call this before proposal_decide, whether init must run first, or what prerequisites (e.g., project root, evidence sources) exist. Only the implicit reading of the name suggests its place in the workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codapult_guard_reviewPrepare Guard ReviewC
Prepare a bounded semantic-review packet containing the current diff, project model, contracts, and deterministic findings for an AI reviewer.
| Name | Required | Description | Default |
|---|---|---|---|
| base | No | Git base ref for PR review, e.g. origin/main. | |
| root | No | Project path or workspace root. | |
| requirement | No | ||
| changed_only | No | ||
| max_diff_chars | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden. It says the packet is 'bounded' (consistent with the max_diff_chars cap) but never says whether the call is read-only, whether it writes a packet to disk, whether it invokes a model, whether it requires an initialized guard state, or what happens on a dirty/empty diff.
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?
A single front-loaded sentence with no filler. It is dense with undefined domain jargon ('project model', 'contracts', 'deterministic findings'), but nothing is redundant.
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 5-parameter tool with no output schema, no annotations, and 40% schema coverage, the description should say what the packet looks like when returned (structured object? file path? text blob?) and how it feeds the reviewer. That return-shape information is entirely absent.
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 only 40%, so the description must compensate: 'current diff' loosely points at base/max_diff_chars and 'project model' at root, and 'bounded' hints at the size cap. The 'requirement', 'changed_only', and all defaults/bounds remain unexplained, so the compensation is partial.
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?
States a specific verb ('Prepare') and artifact ('bounded semantic-review packet') plus an enumeration of its contents, so an agent knows what it produces. It never distinguishes itself from close siblings such as codapult_guard_context, codapult_guard_analyze, or codapult_guard_check, which likely also assemble diff/model 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 only usage hint is the trailing phrase 'for an AI reviewer,' which vaguely implies a preparatory workflow step. There is no statement of when to call this versus the 13 sibling guard tools, no prerequisites (e.g. must guard_init have run first), and no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codapult_guard_verifyGuard VerifyC
Run project checks, production build, and architecture regression checks as one verification gate.
| Name | Required | Description | Default |
|---|---|---|---|
| root | No | Project path or workspace root. | |
| tools | No | External tools mode; defaults to agent.json. | |
| checks | No | Checks to run; defaults to lint, typecheck, test, and build. | |
| strict | No | ||
| iteration | No | ||
| policy_base | No | Git ref whose Guard policy should be used for this verification. | |
| requirement | No | ||
| changed_only | No | ||
| project_checks | No | Override completionGate.projectChecks for this invocation. | |
| fail_on_policy_change | No | Fail when the checked-out policy differs from policy_base. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It reveals only that several checks are aggregated into one gate; it says nothing about whether builds mutate the workspace, whether the call is read-only, what a failure returns, timeouts, or how policy_base/fail_on_policy_change alter behavior.
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?
A single front-loaded sentence with zero filler; the action and scope come first. It is as concise as a one-line description can be.
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 10-parameter tool with no annotations and no output schema, one sentence is insufficient. Critical context is missing: what 'architecture regression checks' entail, whether the gate is read-only or modifies artifacts, and what the result/failure surface looks like.
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 60%, leaving strict, iteration, requirement, and changed_only undocumented. The description mentions checks and build but adds no meaning to any of the 10 parameters, so it fails to compensate 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?
States a specific verb ('Run') and concrete resources (project checks, production build, architecture regression checks) framed as a single verification gate. An agent can tell what the tool does, but it is not distinguished from the many sibling guard tools, notably codapult_guard_check, which likely overlaps.
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 phrase 'as one verification gate' hints at a use case, but there is no explicit when-to-use, when-not-to-use, or routing to alternatives such as guard_check or guard_audit. With 14 sibling tools, this omission forces the agent to guess.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codapult_guard_waiversGuard WaiversC
List and manage time-bounded, project-approved exceptions to active Guard findings.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| root | No | Project path or workspace root. | |
| issue | No | ||
| owner | No | ||
| action | No | list | |
| reason | No | ||
| confirm | No | ||
| expires_at | No | ||
| fingerprint | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral burden, yet it never states that add/remove/renew are mutations, that confirm=true is required, whether removal is reversible, or what approval/authorization is needed. 'Time-bounded' and 'project-approved' hint at expiry and approval semantics, which is the only real disclosure.
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?
A single front-loaded sentence with no filler and the core resource stated immediately. It is arguably too terse for a 9-parameter mutation tool, but nothing in it is wasted or buried.
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 9-parameter tool with zero annotations, no output schema, and 11% schema coverage, one sentence is not enough. The agent cannot tell what a list result contains, what happens on remove, or how confirm and expires_at interact with the action enum.
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 11% (only 'root' documented) across 9 parameters, so the description must compensate and largely fails. 'Time-bounded' loosely maps to expires_at and 'project-approved' to root/owner, but action, confirm, reason, id, fingerprint, and issue get no explanation at all.
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 names a specific resource (time-bounded, project-approved exceptions) and the verb set (list and manage), and it usefully glosses the tool name 'waivers' as exceptions to active Guard findings. It does not, however, distinguish this from close siblings like codapult_guard_governance or codapult_guard_review, leaving the agent to infer boundaries.
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?
There is no guidance on when to use this tool versus the many sibling Guard tools, and no mention of the list/add/remove/renew action modes or which mode a given request implies. No prerequisites, exclusions, or workflow position are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
14 tool updates
- First observed
codapult_guard_analyze - First observed
codapult_guard_audit - First observed
codapult_guard_check - First observed
codapult_guard_context - First observed
codapult_guard_explain - First observed
codapult_guard_governance - First observed
codapult_guard_impact - First observed
codapult_guard_init - First observed
codapult_guard_next_action - First observed
codapult_guard_proposal_decide - First observed
codapult_guard_propose - First observed
codapult_guard_review - First observed
codapult_guard_verify - First observed
codapult_guard_waivers
TDQS
Scored across 14 tools
Most tools have distinct purposes (init, propose, proposal_decide, waivers, impact, explain), but the verification cluster—verify, check, and audit—overlaps significantly, with descriptions distinguishing them only subtly (build gate vs architecture rules vs full audit). Similarly, next_action, review, and analyze all produce or refresh bounded agent-facing context, creating some boundary confusion.
All 14 tools share a uniform lowercase snake_case `codapult_guard_` prefix, which is highly predictable. Slight inconsistency arises from mixing bare verbs (init, verify, propose, audit, check, review, explain, analyze) with noun forms (context, governance, waivers, impact, next_action, proposal_decide), but the pattern remains readable.
14 tools sits comfortably in the well-scoped 3-15 range and maps to discernible workflow stages (discover, init, propose, decide, verify, audit, review, manage waivers). No tool appears redundant enough to trim, and none of the surface feels padded.
The lifecycle is largely covered: discovery (context), initialization (init), rule proposal and approval (propose/proposal_decide), enforcement (verify/check/audit), review (review), exceptions (waivers), and introspection (impact, explain, governance, analyze). Minor gaps exist—no explicit reset/teardown of Guard artifacts and waiver management is a single bundled tool rather than discrete list/create/remove operations.
Maintenance
Related MCP Connectors
Guardrails for LLM output: pass / fail / review verdicts and one recommended action. Hosted or npm.
Enforces architectural invariants and code quality rules inside your AI agent's edit loop.
AgentGuard — 20-tool AI safety MCP: policy preflight, risk scoring, audit logging, rate limits.
Guardian agent for AI coding: four frontier models review risky diffs and commits before they ship.
Related MCP Servers
- AlicenseCqualityDmaintenanceArchitectural Gatekeeper for AI coding. Prevents "tunnel vision" bugs by forcing the AI to verify dependencies (via AST parsing) before editing files. Supports JavaScript & TypeScript. Blocks unsafe edits until the AI proves it understands the impact3Apache 2.0
- AlicenseAqualityAmaintenanceAgentGuard47 is runtime safety infrastructure for AI agents. It adds budget caps, loop detection, retry limits, timeouts, local traces, and incident reports so agents can stop bad runs while they are happening, not just explain them afterward.74MIT
- AlicenseNot gradedqualityCmaintenanceReal-time architecture governance tool that enforces Clean Architecture, DDD, SOLID, TDD, and Security rules across 8 languages using 11 specialized agents.1 npmMIT
- AlicenseAqualityDmaintenanceGuardrails for AI coding agents that enforces rules via compliance receipts, blocking destructive actions and syncing rules across all AI tools.2483 npm1MIT