delimit
OfficialDelimit is a comprehensive API governance, project management, and AI assistant toolkit that unifies Claude Code, Codex, Cursor, and Gemini CLI with persistent context, multi-model deliberation, and broad developer tooling.
API Governance & Contract Management (Free)
Lint OpenAPI/Swagger specs for breaking changes and policy violations (
delimit_lint)Diff two specs, classify semver bumps (MAJOR/MINOR/PATCH/NONE), and generate migration guides in 7 templates (developer, changelog, PR comment, Slack, etc.)
Enforce custom governance policies with configurable severity levels
Extract OpenAPI specs from FastAPI, Express, or NestJS source code
Ledger & Task Tracking (Free)
Append-only, hash-chained ledger for tracking tasks, bugs, features, and strategy items across sessions
Filter by status, priority, or type; get quick project context summaries
List all registered projects/ventures
Security & Scanning
Scan for vulnerabilities, hardcoded secrets, dangerous patterns, and
.envfiles in gitAudit dependencies for known CVEs
Project discovery: detect frameworks, OpenAPI specs, security issues, and test coverage
Multi-Model Deliberation (Pro)
Orchestrate real AI-to-AI debate (Grok 4, Gemini, Codex) until unanimous consensus
Manage model configurations and credentials
Memory & Vault (Pro)
Store and semantically search conversation memory across sessions
Encrypted vault for secrets and persistent context with health/snapshot tools
Deployment & Release Management (Pro)
Governed pipeline: plan, build (Docker), publish, rollback, and check status
Automate site deployments (Vercel) and npm package publishing with version bumping and git tagging
Generate release plans from git history, audit/sync public surfaces (GitHub, npm, site meta)
Governance Workflow (Pro)
Create, run, and verify governed tasks with risk levels and gate checks
Collect and verify compliance evidence bundles; analyze downstream API change impact
Observability & Cost Management (Pro)
Query live metrics (CPU, memory, disk via /proc or Prometheus), search logs (journalctl, Elasticsearch, Loki), and check system health
Analyze project costs, find optimization opportunities, and manage spending alerts
Code & Project Generation
Generate code templates (component, page, API) and scaffold new projects (Next.js, API, library)
Design & UI
Extract design tokens from CSS/SCSS/Tailwind/Figma; generate React/Next.js components and Tailwind configs
Validate responsive design patterns; catalog component libraries; generate Storybook stories
Run visual regression tests (Playwright) and WCAG accessibility checks
Testing & Documentation
Generate test skeletons (Jest/Pytest/Vitest), run smoke tests
Generate API reference docs from docstrings/JSDoc and validate documentation quality
Data Management
Validate JSON/CSV/SQLite files, check migration status (Alembic, Django, Prisma, Knex), back up data with timestamps
Intel / Research
Register, freeze, and query datasets and research snapshots with provenance metadata
Utilities
Monitor GitHub issues, diagnose setup issues, manage Pro license activation, and get tool-specific help
Supported formats: OpenAPI 3.0/3.1, Swagger 2.0 (YAML/JSON), GitHub Actions CI/CD integration, MCP (Model Context Protocol) for AI assistants.
Allows for zero-spec extraction to generate OpenAPI specifications directly from Express.js source code.
Allows for zero-spec extraction to generate OpenAPI specifications directly from FastAPI source code.
Integrates with GitHub Actions to monitor pull requests for breaking API changes, automatically posting comments with migration guides and severity ratings.
Allows for zero-spec extraction to generate OpenAPI specifications directly from NestJS source code.
Performs automatic Semantic Versioning classification (Major, Minor, Patch) based on detected breaking changes in API specifications.
Provides API governance tools including linting and diffing for Swagger 2.0 specifications.
Supports API governance, linting, and policy enforcement for OpenAPI specifications and custom governance rules defined in YAML format.
</> Delimit
The merge gate for AI-written code, with signed, replayable attestation.
Wrap any AI coding assistant (Claude Code, Codex, Cursor, Gemini CLI) with a governance chain that runs your gates, records what changed, and signs a replayable receipt for every merge.
$ delimit wrap -- claude "fix the flaky test in tests/api.spec.ts"
✓ repo_diagnose
✓ security_audit 0 critical · 0 secrets
✓ test_smoke 165/165
✓ changed_files 1
✓ attestation signed att_a05050eb8e13277e
delimit.attestation.v1 · HMAC-SHA256
replay → https://delimit.ai/att/att_a05050eb8e13277eEvery wrapped run emits a delimit.attestation.v1 bundle: repo head before/after, changed files, gate results, HMAC-SHA256 signature, and a replay URL. Advisory by default; flip to enforcing when you're ready.
Fastest path to value: delimit check
Zero-config PR safety gate. No init, no setup, no account, no keys — run it on any repo and it applies deterministic checks (breaking API changes + leaked secrets) to your staged or modified files.
npx delimit-cli check$ delimit check
Delimit Check
Policy: default | Base: HEAD | Specs: 1
+ api/openapi.yaml — clean
PASSED — no breaking changes, no leaked secretsWhen a check finds a breaking change or a leaked secret, it prints the offending file and the issue and exits non-zero — so it drops straight into a pre-commit hook or CI step.
Common options:
delimit check --staged # only check staged files
delimit check --base main # compare against a git ref (default HEAD)
delimit check --fix # show migration guidance for violations
delimit check --record # write a content-pinned record of this check--record writes a content-pinned record of the check to .delimit/records/check-<ts>.json (or a path you name). That record is the precursor to the signed, replayable Seal attestation — the same evidence shape, pinned to the exact content you checked.
Related MCP server: EX MCP Server
Worked examples
Real, reproducible merge-gate runs against public API specs:
OpenAI OpenAPI: a year of AI frontier evolution under a cross-vendor merge gate — OpenAI (openai/openai-openapi)
Stripe v1 OpenAPI: 57 days under a merge gate — Stripe (stripe/openapi)
Anthropic API: 76 days under a cross-vendor merge gate — Anthropic (anthropics/anthropic-sdk-python)
Twilio v2010 OpenAPI: 55 days under a merge gate — Twilio (twilio/twilio-oai)
Docusign eSignature v2.1 OpenAPI: 46 days under a merge gate — Docusign (docusign/OpenAPI-Specifications)
Supabase Auth OpenAPI: 57 days under a merge gate — Supabase Auth (supabase/auth)
cal.com v2 OpenAPI: 60 days under a merge gate — cal.com (calcom/cal.com)
EU TED v3 procurement API: $ref'd component-schema drift under a merge gate — European Commission (TED v3 Public API)
Cross-agent handoff: one artifact, four CLIs — Cross-CLI session handoff (worked example)
delimit-mcp-server (self-attestation): same merge gate, third artifact class — delimit-mcp-server (self-attestation)
See the full index at delimit.ai/reports. For the schema and signing methodology behind every report, see delimit.ai/methodology/mcp-attestation.
Golden Path — your first 10 minutes
The merge gate for AI-written code, end to end: lint a spec, see exactly what breaks, classify the bump, settle the hard calls with multiple models, and walk away with a signed, replayable attestation. Then keep the context that survives across sessions and models.
1. Install
npx delimit-cli scan # discovery: finds your OpenAPI specs, frameworks, security issues, tests
npx delimit-cli init # wire up the merge-gate config (--preset strict | default | relaxed)scan (delimit_scan) reports what Delimit can do for this repo. init (delimit_init) drops in the policy preset and merge-gate config. No account, no keys.
2. The merge gate, end to end
Lint the spec change (the gate). Baseline vs. proposed, with policy applied — one pass/fail verdict.
npx delimit-cli lint old.yaml new.yaml # tool: delimit_lintSee exactly what breaks. Pure structural diff — added/removed/modified endpoints, schemas, params, no policy.
npx delimit-cli diff old.yaml new.yaml # tool: delimit_diffClassify the bump. Deterministic MAJOR/MINOR/PATCH/NONE — same input, same answer, every time.
delimit_semver → MAJOR/MINOR/PATCH/NONE + next version string
delimit_impact → blast radius: scans your dependency manifest for downstream callers (informational)Settle the hard calls. When the gate verdict is a judgment call, put it to multiple models and let them debate to consensus.
npx delimit-cli deliberate "Is dropping the deprecated v1 /users field a safe MINOR?"
# tool: delimit_deliberate — 3 hosted runs after `delimit signin` (free account), then bring your own keysCapture the signed, replayable attestation. After a gate event (deploy / security / test / audit), record the evidence bundle and verify it any time.
delimit_evidence_collect → signed evidence bundle for the audit trail (Pro)
delimit_evidence_verify → confirm a bundle hasn't been tampered with (Pro)
delimit_seal_verify → check a Delimit Seal receipt against its bundled (Free)
Layer-0 constitution — offline-verifiableEvery receipt is offline-verifiable: npx delimit-cli seal-verify <receipt.json>, or open its delimit.ai/att/<id> replay URL.
3. Context that survives sessions and models
Decisions, constraints, and tasks persist across sessions and across AI assistants — switch from Claude Code to Codex, Cursor, or Gemini CLI without losing the thread.
Memory — persist and recall the why, not just the diff.
npx delimit-cli remember "v1 /users field is frozen until Q3 — downstream billing depends on it"
# tool: delimit_memory_store
npx delimit-cli recall billing # local recall over your saved memories (Free)For semantic recall by meaning across sessions, the assistant calls delimit_memory_search (Pro) directly.
Ledger — one task list, shared across every assistant and session.
delimit_ledger_add → record a task/bug/feature/strategic item
delimit_ledger_context → session-start: top open items by priority (what's queued)
delimit_ledger_done → close with a note (auto-captures a PR URL as ship proof)That's the loop: gate the change, sign the proof, keep the context. Run it once on a real spec and you've used the whole merge gate.
Think and Build
Beyond the merge gate, Delimit orchestrates multi-model deliberation and autonomous builds. delimit think dispatches a strategic question to Claude, Codex, Gemini, and Grok; delimit build activates a background daemon that executes ledger tasks through the gate chain. delimit vault manages local secrets (AES-256).
Works across any configuration, from a single model on a budget to a full panel.
Try it in 2 minutes
npx delimit-cli doctor # 14 prescriptive checks — tells you exactly what to fix
npx delimit-cli status # Visual dashboard of your entire governance setup
npx delimit-cli simulate # Dry-run: see what would be blocked before you commit
npx delimit-cli scan # Instant health grade for your API spec
npx delimit-cli try owner/repo # Try governance on any GitHub repoNo API keys. No account. No config files.
Pick your first win
Protect my API — catch breaking changes before merge:
npx delimit-cli try
# Creates a sample API, introduces breaking changes, shows what gets blocked.
# Saves a governance report to delimit-report.mdWatch for drift — detect spec changes without review:
npx delimit-cli init # Sets up governance + drift baseline
# Weekly drift checks run automatically via GitHub ActionRun PR copilot — governance gates on every pull request:
# .github/workflows/api-governance.yml
- uses: delimit-ai/delimit-action@v1
with:
spec: api/openapi.yaml
# Posts gate status, violations, and remediation in PR commentsWhat's New
Gate every AI-assisted invocation. Ship the receipts.
delimit wrap— pipeclaude -p,cursor,aider,codex, or any AI-assisted CLI through a signed governance gate. Snapshots the git diff before/after, runs lint + tests, HMAC-signs anatt_*attestation, emits a public replay URL. Advisory by default;--enforceblocks CI on policy violations;--max-time <s>is a kill switch that tags the attestation as aliability_incidentand prints a cross-model handoff command.delimit trust-page— renders a directory of attestations into a static HTML trust page + JSON Feed 1.1 feed. Single file, no framework, offline-renderable. Deploy anywhere.delimit ai-sbom— aggregates attestations into a CycloneDX 1.6 bill-of-materials with AI-specific fields (detected models per vendor, tool-call surface, policy gate counts). Pipe straight into procurement.Cross-model by construction —
wrapis agnostic to the producer. Same attestation schema whether the pipe upstream is Claude Code, Cursor, Aider, Codex, or Gemini CLI. Switch producers without losing the audit chain.
# Gate any AI-assisted CLI
delimit wrap -- claude -p "add tests for payments"
# → att_7d556843c84fb881 signed, replay: https://delimit.ai/att/att_7d556843c84fb881
# Kill switch + handoff after 60s wall-clock
delimit wrap --max-time 60 -- cursor edit "refactor auth middleware"
# → if killed: kind=liability_incident
# → suggested: delimit wrap -- claude -p "refactor auth middleware"
# Render accumulated attestations as a public trust page
delimit trust-page -o ./trust
# → ./trust/index.html (+ feed.json)
# Build a CycloneDX-AI bill of materials
delimit ai-sbom -o ./ai-sbom.json
# → components: 4 models detected, 187 gates runEarlier releases
The highest state of AI governance — earlier features still active.
delimit doctor-- 14 prescriptive diagnostics. Every failure prints the exact command to fix it.--cifor pipelines,--fixfor auto-repair.delimit simulate-- policy dry-run. See what would be blocked before you commit. Theterraform planfor API governance.delimit status-- visual terminal dashboard. Policy, specs, hooks, CI, MCP, models, memory, ledger, evidence, git branch.--watchfor live refresh.delimit report-- governance report.--since 7d --format md|html|json. Audit-friendly output for PRs and compliance.Memory hardening -- SHA-256 integrity hash + source model tag on every
remember. Cross-model trust, verified on everyrecall.Tag-based publishing -- automated gateway sync, no more version drift between source and npm bundle.
Multi-Model Deliberation
Run your question through 4 AI models simultaneously. They debate each other until unanimous agreement.
delimit deliberate "Should we build rate limiting in-house or use a managed service?" Round 1 (independent):
Claude: Build in-house. Redis sliding window is 50 lines.
Gemini: Build. You already have Redis.
Codex: Agree — but add circuit breaker for Redis failures.
Grok: Build. Managed service costs $200/mo for 50 lines of code.
Round 2 (deliberation):
All models: AGREE
UNANIMOUS CONSENSUS (2 rounds, confidence 94/100)
Build rate limiting in-house with Redis + circuit breaker.3 free deliberations, then BYOK for unlimited. Works with Grok, Gemini, Claude, GPT-4o.
v4.18
MCP Registry record published on every release -- the official registry entry now tracks the npm version automatically. Publisher pinned and checksum-verified; the tag gate asserts that both
server.jsonversion fields match the package version.Tool descriptions -- 16 previously undocumented parameters documented from their signatures; 26 Pro-gated tools state the prerequisite and the unlicensed-call response.
Release guards -- bundle-classification guard no longer flakes on SIGPIPE.
v4.17
Cross-model continuity on fresh installs --
delimit_soul_capture/delimit_revivework without any internal modules via the publicsession_continuitymodule; captured souls carry deterministic provenance (venture, transcript identity, capture key) for reliable resume across model switches. Existing soul files load unchanged.Security audit -- fewer false positives on test fixtures and documentation dummies; suppressed findings are reported, never silently dropped.
v4.16
Fail-closed bundle allowlist -- the npm package ships only explicitly reviewed gateway files; two CI guards block any unclassified or non-allowlisted file from entering the tarball.
Session-end auto-capture installs in the settings shape Claude Code expects, so end-of-session handoff fires instead of being silently dropped.
Always-on commit-author audit workflow catches identity drift on the repo.
v4.1
TUI -- terminal-native Ventures panel, real
delimit thinkanddelimit buildcommandsSecurity hardening -- notify.py stubbed in npm, axios pinned against supply chain attacks
Free tier restructure -- deliberations use Gemini Flash + GPT-4o-mini (cost: <$20/mo)
Zero-config onboarding -- auto-detect framework, scan, and first evidence in one command
Auto-approve tools --
delimit setupconfigures permissions for Claude Code, Codex, and Gemini CLI
v4.0
Toolcard Delta Cache -- SHA256 schema hashing, delta-only transmission, saves tokens
Session Phoenix -- cross-model session resurrection with soul capture
Handoff Receipts -- structured acknowledgment protocol between agents
Cross-Model Audit -- 3 lenses (security, correctness, governance) with deterministic synthesis
4-model deliberation -- Claude + Grok + Gemini + Codex debate until consensus
Universal Swarm Triggers -- "Think and Build", "Keep building", "Ask Delimit"
Full governance toolkit -- lint, diff, policy, evidence, drift, attestation, and swarm orchestration exposed as MCP tools and CLI subcommands
GitHub Action
Zero-config -- auto-detects your OpenAPI spec:
- uses: delimit-ai/delimit-action@v1Or with full configuration:
name: API Contract Check
on: pull_request
jobs:
delimit:
runs-on: ubuntu-latest
permissions:
pull-requests: write
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: delimit-ai/delimit-action@v1
with:
spec: api/openapi.yamlThat's it. Delimit auto-fetches the base branch spec, diffs it, and posts a PR comment with breaking changes, semver classification, migration guides, and governance gate results.
View on GitHub Marketplace | See a live demo (23 breaking changes)
Example PR comment
Breaking Changes Detected
Change
Path
Severity
endpoint_removed
DELETE /pets/{petId}error
type_changed
/pets:GET:200[].id(string -> integer)warning
enum_value_removed
/pets:GET:200[].statuswarning
Semver: MAJOR (1.0.0 -> 2.0.0)
Migration Guide: 3 steps to update your integration
Governance Gates
Gate
Status
Chain
API Lint
Pass/Fail
lint -> semver -> gov_evaluate
Policy Compliance
Pass/Fail
policy -> evidence_collect
Security Audit
Pass
security_audit -> evidence_collect
Deploy Readiness
Ready/Blocked
deploy_plan -> security_audit
Adopt with minimum privilege
You don't have to trust a large tool surface on day one. The safe on-ramp:
Phase 1 — read-only governance (free, no account). Start with the tools that
only read your repo and write reports: delimit_lint, delimit_diff,
delimit_semver, delimit_policy, delimit_explain, delimit_scan, and
delimit_seal_verify. If your MCP client supports per-tool allowlists, grant
exactly those. Nothing in this set executes, deploys, or posts anywhere.
Phase 2 — opt into side effects deliberately. Tools that write evidence
bundles, open PR comments, or run deploys (delimit_security_audit,
delimit_deploy_*, agent orchestration) are tier-gated; enable them once
phase 1 has earned its keep in your CI.
Pin the Action to a commit SHA. @v1 is a floating tag. For
supply-chain-sensitive pipelines, pin the exact commit and bump on review:
- uses: delimit-ai/delimit-action@<commit-sha> # gh api repos/delimit-ai/delimit-action/git/refs/tags/v1Keep BYOK keys out of plaintext config. If you bring your own model keys
for deliberation, store them with delimit_secret_store (encrypted vault,
access-logged via delimit_secret_access_log) rather than in dotfiles.
Our own releases ship under the same discipline: every release carries a
signed, replayable Seal receipt (see the latest
release assets —
verify with npx delimit-cli seal-verify <receipt.json> or at its
delimit.ai/att/<id> replay URL), plus SLSA provenance on npm.
CLI commands
npx delimit-cli scan # Instant spec health grade + recommendations
npx delimit-cli pr owner/repo#123 # Review any GitHub PR for breaking changes
npx delimit-cli quickstart # Clone demo project + guided walkthrough
npx delimit-cli try # Zero-risk demo — saves governance report
npx delimit-cli demo # Self-contained governance demo
npx delimit-cli init # Guided wizard with compliance templates
npx delimit-cli init --preset strict # Initialize with strict policy
npx delimit-cli setup # Install into all AI assistants
npx delimit-cli setup --dry-run # Preview changes first
npx delimit-cli lint api/openapi.yaml # Check for breaking changes
npx delimit-cli diff old.yaml new.yaml # Compare two specs
npx delimit-cli explain old.yaml new.yaml # Generate migration guide
npx delimit-cli check # Pre-commit governance check
npx delimit-cli check --staged --fix # Check staged files + show guidance
npx delimit-cli hooks install # Install git pre-commit hook
npx delimit-cli hooks install --pre-push # Also add pre-push hook
npx delimit-cli ci # Generate GitHub Action workflow
npx delimit-cli ci --strict --dry-run # Preview strict workflow
npx delimit-cli remember "Redis uses JWT 15min" # Save a persistent memory
npx delimit-cli recall redis # Search memories
npx delimit-cli recall # Show recent memories
npx delimit-cli recall --tag deploy --all # Filter by tag, show all
npx delimit-cli recall --export # Export as markdown
npx delimit-cli forget abc123 # Delete a memory by ID
npx delimit-cli models # Configure deliberation API keys (BYOK wizard)
npx delimit-cli models --status # Show current model config
npx delimit-cli status # Compact dashboard of your Delimit setup
npx delimit-cli doctor # Check setup health
npx delimit-cli uninstall --dry-run # Preview removal
npx delimit-cli wrap -- claude -p "..." # Gate any AI-assisted CLI + signed attestation
npx delimit-cli wrap --max-time 60 -- codex "..."# With kill switch + handoff on timeout
npx delimit-cli trust-page -o ./trust # Render attestations into a static trust page
npx delimit-cli ai-sbom -o ./ai-sbom.json # Build a CycloneDX-AI bill of materialsWhat the MCP toolkit adds
When installed into your AI coding assistant, Delimit provides tools across two tiers:
Free (no account needed)
API governance -- lint, diff, policy enforcement, semver classification
Persistent ledger -- track tasks across sessions, shared between all AI assistants
Zero-spec extraction -- generate OpenAPI specs from FastAPI, Express, or NestJS source
Project scan -- auto-detect specs, frameworks, security issues, and tests
Quickstart -- guided first-run that proves value in 60 seconds
Pro
Multi-model deliberation -- AI models debate until they agree (free: Gemini Flash + GPT-4o-mini; BYOK: any models)
Security audit -- dependency scanning, secret detection, SAST analysis
Test verification -- confirms tests ran, measures coverage, generates new tests
Memory & vault -- persistent context and encrypted secrets across sessions
Evidence collection -- governance audit trail for compliance
Deploy pipeline -- governed build, publish, and rollback
OS layer -- agent identity, execution plans, approval gates
What It Detects
28 change types (17 breaking, 11 non-breaking) -- deterministic rules, not AI inference. Same input always produces the same result.
Breaking Changes
# | Change Type | Example |
1 |
|
|
2 |
|
|
3 |
| New required header on |
4 |
|
|
5 |
|
|
6 |
| Request body now requires |
7 |
|
|
8 |
|
|
9 |
|
|
10 |
|
|
11 |
| Query param |
12 |
|
|
13 |
| Response |
14 |
| OAuth2 security scheme removed |
15 |
|
|
16 |
|
|
17 |
|
|
Non-Breaking Changes
# | Change Type | Example |
18 |
| New |
19 |
|
|
20 |
| Optional |
21 |
|
|
22 |
| Optional |
23 |
|
|
24 |
| Updated description for |
25 |
| API key security scheme added |
26 |
|
|
27 |
| Default value for |
28 |
| Required field |
Policy presets
npx delimit-cli init --preset strict # All violations are errors
npx delimit-cli init --preset default # Balanced (default)
npx delimit-cli init --preset relaxed # All violations are warningsOr write custom rules in .delimit/policies.yml:
rules:
- id: freeze_v1
name: Freeze V1 API
change_types: [endpoint_removed, method_removed, field_removed]
severity: error
action: forbid
conditions:
path_pattern: "^/v1/.*"
message: "V1 API is frozen. Changes must be made in V2."Supported formats
OpenAPI 3.0 and 3.1
Swagger 2.0
YAML and JSON
FAQ
How does this compare to Obsidian Mind?
Obsidian Mind is a great Obsidian vault template for Claude Code users who want persistent memory via markdown files. Delimit takes a different approach: it's an MCP server that works across Claude Code, Codex, Gemini CLI, and Cursor. Your memory, ledger, and governance travel with you when you switch models. Delimit also adds API governance (28-type breaking change detection), CI gates, git hooks, and policy enforcement that Obsidian Mind doesn't cover. Use Obsidian Mind if you're all-in on Claude + Obsidian. Use Delimit if you switch between models or need governance.
Does this work without Claude Code?
Yes. Delimit works with Claude Code, Codex (OpenAI), Gemini CLI (Google), and Cursor. The remember/recall commands work standalone with zero config. The MCP server integrates with any client that supports the Model Context Protocol.
Is this free?
The free tier includes API governance, persistent memory, zero-spec extraction, project scanning, and 3 multi-model deliberations. Pro ($10/mo) adds unlimited deliberation, security audit, test verification, deploy pipeline, and agent orchestration. Premium ($50-100/mo) adds priority support and team features. Enterprise is custom: see delimit.ai/pricing.
Telemetry & cloud sync
Short version: none by default. Nothing leaves your machine unless you explicitly configure it.
What's always local (source of truth):
~/.delimit/events/events-YYYY-MM-DD.jsonl— per-tool-call events (tool name, timestamp, status, model id, session id, trace id). No source code, no prompts, no responses.~/.delimit/ledger/— your ledger items, work orders, deliberation transcripts.~/.delimit/attestations/—delimit wrapoutput bundles.
What's OPT-IN (requires you to provide your own Supabase project credentials):
gateway/ai/supabase_sync.pymirrors the local event + ledger + work-order + deliberation rows into a Supabase project you own so you can view them inapp.delimit.ai. It only activates if you setSUPABASE_URL+SUPABASE_SERVICE_ROLE_KEYenvironment variables OR provide~/.delimit/secrets/supabase.jsonwith those credentials. No URL or key is hardcoded in the published package (verify withgrep -r aqbdqxnhzqzswdxifksc $(npm root -g)/delimit-cli/— zero hits).Data scope when enabled: metadata only (tool names, timestamps, IDs, statuses, venture tags). Never source code, prompts, or model responses.
Kill switch:
Set DELIMIT_DISABLE_CLOUD_SYNC=1 in your environment to force all sync operations to no-op even if credentials are present. Local files continue to work normally.
# Disable cloud sync for a single invocation
DELIMIT_DISABLE_CLOUD_SYNC=1 delimit lint api/openapi.yaml
# Disable for the shell session
export DELIMIT_DISABLE_CLOUD_SYNC=1Webhook notifications:
gateway/ai/notify.py emits governance events to a webhook endpoint only if you configure DELIMIT_WEBHOOK_URL explicitly. Unset by default.
If you spot another code path that could phone home without disclosure, file an issue. This section is maintained as ship-truth, not aspirational.
Links
delimit.ai -- homepage
Dashboard -- governance console
Docs -- full documentation
GitHub Action -- Marketplace listing
Quickstart -- try it in 2 minutes
npm -- CLI package
Pricing -- free tier + Pro
MIT License
Available Tools
210 toolsdelimit_activateDelimit ActivateA
Activate Delimit and run a readiness checklist.
When to use: as the post-install confirmation that everything is wired up — license, MCP, governance, tests, permissions, premium. When NOT to use: for diagnostic-style debugging of an already activated install (use delimit_diagnose) or first-run discovery (delimit_quickstart).
Sibling contrast: delimit_diagnose investigates issues; delimit_quickstart is the 60-second guided first run; this is the activation + readiness checklist.
Side effects: applies the license key when provided; auto-configures AI-assistant permissions when auto_permissions=True (writes .claude/settings.json). Skipped checks (premium on free tier, no test framework) do not count against the score.
| Name | Required | Description | Default |
|---|---|---|---|
| license_key | No | Optional license key (e.g. DELIMIT-XXXX-XXXX-XXXX). Empty = free-tier readiness only. | |
| project_path | No | Project directory to check. Default "." (cwd). | . |
| auto_permissions | No | Auto-configure AI assistant permissions (default True). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations (readOnlyHint=false, destructiveHint=false) by disclosing concrete side effects: it applies the license key when provided, and when auto_permissions=True it writes .claude/settings.json. It also explains scoring semantics — skipped checks (premium on free tier, no test framework) don't count against the score — which is critical behavioral context an agent could not infer from the schema or annotations. This file-write disclosure is especially valuable since destructiveHint=false might otherwise imply no state changes.
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 compact and superbly organized with labeled sections: core purpose first, then When to use, When NOT to use, Sibling contrast, and Side effects. Every sentence earns its place — there is no filler, and the labeled structure makes it trivially scannable for an agent. The length is justified by the tool's complexity (side effects, multiple checks, sibling ambiguity).
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 mutation tool with real side effects and scoring behavior, and the description covers every angle an agent needs: purpose, usage conditions, exclusions, sibling differentiation, side effects, parameter effects, and handling of edge cases (skipped checks). The output schema exists, so return values need no explanation. Nothing material is missing for correct selection and 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%, so the baseline is 3 — the schema already documents all three parameters with types, defaults, and individual descriptions. The tool description adds genuine semantic value beyond the schema by explaining the behavioral effect of key parameters: license_key 'applies the license key when provided' and auto_permissions triggers the .claude/settings.json write. This links parameters to consequences rather than just formats, earning a 4.
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 first sentence states a specific verb and resource with a concrete outcome: 'Activate Delimit and run a readiness checklist.' The scope is further pinned down by naming the exact areas checked (license, MCP, governance, tests, permissions, premium), which distinguishes it from the vast sibling list. The explicit sibling contrast against delimit_diagnose and delimit_quickstart makes the tool's identity 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?
The description has an explicit 'When to use' section (post-install confirmation that everything is wired up) and a 'When NOT to use' section that names the correct alternatives: delimit_diagnose for diagnostic debugging and delimit_quickstart for first-run discovery. This is the clearest possible routing guidance — an agent knows exactly when to pick this tool and when to pick a sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_agent_checkDelimit Agent CheckA
Check if a model is allowed to perform an action under agent policy.
When to use: as a per-action gate before executing sensitive operations from a non-orchestrator model — verify it has the required permission. When NOT to use: to set / inspect policies overall (use delimit_agent_policy) or for runtime governance evaluation (delimit_gov_evaluate).
Sibling contrast: delimit_agent_policy manages the policy; delimit_gov_evaluate is the runtime governance gate; this is a per-action permission check.
Side effects: read-only on the policy store. Calls ai.agent_policy.check_agent_permission.
| Name | Required | Description | Default |
|---|---|---|---|
| model | Yes | AI model name — "claude", "codex", "gemini", "cursor". Required. | |
| action | Yes | Action to check (e.g. "ledger_write", "deploy"). Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses side-effect scope ('read-only on the policy store') and names the underlying API call (ai.agent_policy.check_agent_permission), adding value beyond the annotations. Annotations set readOnlyHint=false, but the description clarifies that the policy store itself is not mutated; it could still have other side effects, which is a minor ambiguity.
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?
Well-structured with front-loaded purpose, explicit usage sections, sibling contrast, and side effects. Every sentence earns its place, and the description is concise without sacrificing necessary guidance.
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, when to use, when not to use, sibling differentiation, side effects, and the underlying call. With full parameter schema coverage and an output schema present, an agent has essentially everything needed to invoke this 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 description coverage is 100%, with model and action already clearly described in the input schema. The description reinforces the permission-check context but does not add new parameter-level semantics, so the 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?
States a specific verb and resource: 'Check if a model is allowed to perform an action under agent policy.' The sibling contrast explicitly distinguishes this from delimit_agent_policy and delimit_gov_evaluate, so an agent can identify the tool's unique role.
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' and 'When NOT to use' guidance, naming the exact alternatives (delimit_agent_policy and delimit_gov_evaluate). This fully routes an agent to the appropriate tool with no inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_agent_completeDelimit Agent CompleteA
Close a dispatched agent task by recording the outcome.
When to use: at the end of an engineering subagent's work, to record the result summary and the files touched on the dispatch record. This is the closing step of the dispatch lifecycle (delimit_agent_dispatch -> [subagent runs] -> this). Without calling this, the task remains "dispatched" in the ledger and dashboards will count it as in-flight. When NOT to use: to hand off ownership to a different model (use delimit_agent_handoff), to dispatch a fresh task (delimit_agent_dispatch), or to read task status without closing (delimit_agent_status). Also: do not call repeatedly on the same task_id — the backend treats a second complete as an error.
Sibling contrast: delimit_agent_handoff transfers active ownership to another model (task stays open); this closes ownership entirely. delimit_agent_status is the read-only sibling.
Side effects: writes a completion record via
ai.agent_dispatch.complete_task — the task's status flips from
"dispatched" to "completed", result and files_changed are
persisted, and an audit log entry is appended. files_changed
is coerced from a comma string to a list. No license gate on
this lifecycle surface. No notification — pair
with delimit_notify if the operator needs to be told.
| Name | Required | Description | Default |
|---|---|---|---|
| result | No | Summary of what was done. | |
| task_id | Yes | Task id from delimit_agent_dispatch. Required. | |
| files_changed | No | Comma-separated paths of modified files. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing the full side-effect profile: writes a completion record, flips task status from 'dispatched' to 'completed', persists result and files_changed, appends an audit log entry, coerces files_changed from a comma string to a list, and confirms no license gate or notification. This level of behavioral disclosure is exemplary.
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 structured into clear labeled sections: purpose, when to use, when not to use, sibling contrast, and side effects. Every sentence carries actionable information with no filler, and the core purpose is front-loaded before the details.
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 fully covers the tool's place in the dispatch lifecycle, its mutation semantics, its exclusions, and its behavioral caveats. Even with an output schema present, nothing needed for correct invocation is missing.
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 already covers all three parameters (100% coverage), so the baseline is 3. The description adds useful extra semantics by explaining that task_id originates from delimit_agent_dispatch and that files_changed is coerced from a comma string to a list, which the schema does not state.
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 opens with a specific verb and resource: 'Close a dispatched agent task by recording the outcome.' It clearly distinguishes itself from the sibling tools by explicitly contrasting with delimit_agent_dispatch, delimit_agent_handoff, and delimit_agent_status.
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 an explicit 'When to use' section with a concrete lifecycle position, and a 'When NOT to use' section naming the exact alternative tools. It also warns against repeated calls on the same task_id, which is exactly the kind of disambiguation an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_agent_dashboardDelimit Agent DashboardARead-onlyIdempotent
View the multi-agent orchestration dashboard.
When to use: as a one-shot read of all agent activity grouped by assignee/status — useful for orchestrator status reporting. When NOT to use: for a single task's status (use delimit_agent_status) or to dispatch new work (delimit_agent_dispatch).
Sibling contrast: delimit_agent_status returns raw records; this returns an aggregated dashboard view.
Side effects: read-only. Calls ai.agent_dispatch.get_agent_dashboard.
Args: None.
Returns: Dict with grouped tasks, handoff history, linked ledger items, recent audit trail, next_steps.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds useful behavioral context by stating 'Side effects: read-only', naming the underlying call (ai.agent_dispatch.get_agent_dashboard), and clarifying the aggregated nature of the view. This goes beyond the 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 well-structured with clear labeled sections: when to use, when not to use, sibling contrast, side effects, args, and returns. It is compact, front-loaded with the core purpose, and every sentence adds value without unnecessary filler.
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 zero-parameter, read-only dashboard tool with an output schema, the description is complete: it explains the purpose, usage boundaries, sibling differences, side effects, underlying function, and a summary of the return value. Nothing needed to correctly select and invoke this tool is missing.
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 tool has zero parameters, so the baseline is 4. The description explicitly states 'Args: None', which removes any ambiguity for the agent even though the schema already shows an empty object. There is no parameter semantics to add beyond this.
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 specific verb and resource ('View the multi-agent orchestration dashboard') and explicitly distinguishes this tool from siblings: it returns an aggregated dashboard view while delimit_agent_status returns raw records. This makes the tool's purpose unambiguous even among a large sibling 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 gives explicit when-to-use guidance ('one-shot read of all agent activity grouped by assignee/status') and when-not-to-use guidance with named alternatives (delimit_agent_status for single task status, delimit_agent_dispatch for dispatching work). This fully routes an agent to the correct tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_agent_dispatchDelimit Agent DispatchA
Record an engineering-task dispatch with full audit trail.
When to use: as the PLANNING + AUDIT surface when the orchestrator decides to delegate parallelizable engineering work to a subagent. Per the operating model (2026-05-01 revision), actual execution is performed by the Agent tool with subagent_type=engineering; this tool records the intent, assignee, constraints, and eventual outcome so the dispatch is replayable from the ledger. When NOT to use: as an autonomous queue processor expecting auto-execution — this records dispatch but does NOT run the work. Real autonomous queue execution is deferred to a future capability (LED-193 daemon) with strict sandboxing + founder- approval semantics. Also do not use for conversational tasks, sub-5-minute work, or work where no function exists yet.
Sibling contrast: delimit_agent_status reads dispatched task state; delimit_agent_handoff transfers a recorded task to a different model; delimit_agent_complete closes the task with results. Compared to delimit_ledger_add, this is the engineering- work surface with assignee, tools_needed, and constraints schema; ledger items are free-form.
Side effects: writes a new task record to disk via
ai.agent_dispatch.dispatch_task (a JSON record in the agent
tasks file plus an audit log entry). String list inputs
(tools_needed, constraints) are coerced from comma strings
to lists. NO subagent is spawned by this call — the caller is
responsible for invoking the Agent tool separately. This lifecycle
surface is not license-gated in the current build.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Short task title. Required. | |
| context | No | Background info to seed the executor. | |
| assignee | No | Target model — "claude", "codex", "gemini", or "any". Default "any". | any |
| priority | No | One of "P0" (immediate), "P1" (default), "P2". | P1 |
| constraints | No | Comma-separated constraints (e.g. "no force push"). | |
| description | No | Longer task description. | |
| tools_needed | No | Comma-separated MCP tools the work will need. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description thoroughly discloses side effects: it writes a JSON record to disk, adds an audit log entry, coerces comma-separated strings to lists, and does NOT spawn a subagent. It even states that the caller is responsible for invoking the Agent tool separately and notes that this surface is not license-gated. The write behavior is consistent with readOnlyHint=false and destructiveHint=false, so there is 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 long, but every section earns its place: purpose, usage boundaries, sibling differentiation, and side effects are all critical for a tool that could easily be mistaken for an execution tool. Key information is front-loaded with clear headings and the most important caveat ('records dispatch but does NOT run the work') appears early.
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 7 parameters, false read-only/destructive hints, and an important non-execution caveat, the description is complete. It covers the dispatch lifecycle, side effects, sibling alternatives, coercion behavior, and what the caller must do next. An output schema exists, so return-value documentation is not required.
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 already has 100% description coverage for all 7 parameters, so the baseline is 3. The tool description adds meaningful semantic value by explaining that tools_needed and constraints are coerced from comma strings to lists, and by framing the parameter set as the engineering-work surface with assignee, tools_needed, and constraints. This goes slightly 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 opens with a concrete verb and resource: 'Record an engineering-task dispatch with full audit trail.' It explicitly distinguishes the tool from actual execution by stating it records intent rather than running the work, and it names sibling tools it is not (status, handoff, complete). An agent can immediately understand what this tool does and how it differs from nearby 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 provides dedicated 'When to use' and 'When NOT to use' sections with specific conditions: use as the planning/audit surface when delegating parallelizable engineering work, and avoid for auto-execution, conversational tasks, sub-5-minute work, or missing functions. It also names alternative tools explicitly (delimit_agent_status, delimit_agent_handoff, delimit_agent_complete), leaving no ambiguity about selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_agent_handoffDelimit Agent HandoffA
Hand off an agent task to a different AI model.
When to use: when an executor is blocked or when cross-model review is required and the next model needs the task's context. When NOT to use: to close out the task (delimit_agent_complete) or create a new one (delimit_agent_dispatch).
Sibling contrast: delimit_agent_complete ends the task; this transfers it to another model.
Side effects: writes a handoff record via ai.agent_dispatch.handoff_task; updates assignee on the task.
| Name | Required | Description | Default |
|---|---|---|---|
| context | No | Notes for the next model. | |
| task_id | Yes | Existing task id from delimit_agent_dispatch. Required. | |
| to_model | Yes | Target model — "claude", "codex", "gemini", etc. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, destructiveHint=false), the description discloses concrete side effects: writes a handoff record via ai.agent_dispatch.handoff_task and updates the assignee on the task. This tells the agent exactly what state changes will occur and confirms the operation is a non-destructive but persistent mutation.
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 compact and well-structured, with short labeled sections for usage, exclusions, sibling contrast, and side effects. Every sentence carries distinct information, and the essential purpose is front-loaded in the first line.
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 three-parameter tool with a full input schema, annotations, and an output schema, this description covers when, when-not, how it differs from siblings, and its side effects. Nothing an agent needs to decide whether to call it is missing.
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 clearly. The description adds no new parameter-level details, but it reinforces the context by explaining the handoff scenario and the role of the next model. Baseline 3 is appropriate given the full 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 opening sentence uses a specific verb and resource: 'Hand off an agent task to a different AI model.' It also names the exact sibling it is not (delimit_agent_complete) and clarifies that this transfers, rather than ends, the task. An agent can immediately distinguish it from close-out and dispatch tools without opening schemas.
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 both when to use ('when an executor is blocked or when cross-model review is required') and when NOT to use ('to close out the task... or create a new one'), naming the alternative tools. This gives an agent clear, decision-ready routing guidance with no inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
_delimit_agent_implDelimit Agent ImplA
Manage the agent-task lifecycle — dispatches to one of four actions.
When to use: as the single MCP-registered agent surface (delimit_agent) when the caller wants to pick the lifecycle action by name in one call rather than choosing a specific delimit_agent_* alias. The lifecycle is dispatch (record intent) -> status (read) -> handoff (transfer to another model) -> complete (close). When NOT to use: from internal code paths — prefer the specific alias (delimit_agent_dispatch, delimit_agent_status, delimit_agent_complete, delimit_agent_handoff) so the action's docstring and arg schema show up at the right call site. Do NOT use action="dispatch" expecting a subagent to run — it RECORDS the dispatch, it does not execute it (see Side effects). The related delimit_agent_link / _policy / _check / _dashboard tools share the prefix but are SEPARATE tools, not actions here — passing their names as action= returns an "Unknown action" error.
Sibling contrast: delimit_agent_dispatch / _status / _complete / _handoff are thin aliases that call straight into this implementation with a fixed action; they exist so each action's docstring lives at the right name. This is the dispatch core for those four. Versus delimit_ledger_add: the ledger holds free-form work items; this surface carries engineering-dispatch schema (assignee, tools_needed, constraints) and a per-task audit trail.
Side effects: action="status" is READ-ONLY (loads the task store, no writes). action="dispatch" / "complete" / "handoff" WRITE to the agent task store and append to its audit log. CRITICAL: action="dispatch" records intent only — it persists a task plus a formatted agent_prompt and does NOT spawn or run a subagent. Per the operating model, actual execution is the caller's responsibility via the Agent tool (subagent_type=engineering); this is the planning + audit surface. Dispatch additionally enforces deterministic guards before writing: a kill switch (refuses if ~/.delimit/pause_dispatch exists), a dead- letter circuit breaker (auto-pauses once too many tasks remain un-acknowledged), a ghost-title reject, and a shipped-LED anti- duplicate gate (refuses + auto-closes a task whose LED is already merged to main). assignee="any" is resolved to a concrete model via the task-type router. Every return is wrapped via _with_next_steps. Errors are deterministic ({"error": ...}): an unknown action short- circuits before any backend call.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Task title (action="dispatch" only). Required — the backend rejects empty titles. | |
| action | No | Which lifecycle operation to perform. One of "dispatch", "status", "complete", "handoff". Default "status". Any other value returns a deterministic {"error": "Unknown action ..."}. | status |
| result | No | Summary of what was done (action="complete" only). | |
| context | No | Background to seed the executor (action="dispatch") OR notes for the next model (action="handoff"). Unused by status/complete. | |
| task_id | No | Task id, e.g. "AGT-A1B2C3D4". Used by status, complete, handoff. Optional for status (empty lists all active tasks); required and validated for complete/handoff. | |
| assignee | No | Target model "claude"/"codex"/"gemini"/"any" (action="dispatch" only). Default "any", resolved to a concrete model by the router. Invalid values are rejected. | any |
| priority | No | "P0"/"P1"/"P2" (action="dispatch" only). Default "P1"; invalid values are rejected. | P1 |
| to_model | No | Target model for the transfer (action="handoff" only). Required; validated against the allowed models. | |
| constraints | No | Comma-separated constraints, e.g. "no force push" (action="dispatch" only). Coerced to a list. | |
| description | No | Longer task description (action="dispatch" only). | |
| tools_needed | No | Comma-separated MCP tools the work will need (action="dispatch" only). Coerced to a list. | |
| files_changed | No | Comma-separated modified file paths (action="complete" only). Coerced to a list. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the minimal readOnlyHint/destructiveHint annotations, the description discloses exactly which actions read vs write, that dispatch only records intent and never runs a subagent, the deterministic guards (kill switch, circuit breaker, ghost-title reject, anti-duplicate), and the consistent error shape. This fully covers the behavioral profile an agent 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 long, but it is organized into clear sections and front-loaded with the most important usage facts. It loses a point for a couple of deliberate redundancies, such as the repeated warning that dispatch records rather than executes, but overall the density is justified by the tool's four-action complexity.
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 multi-action dispatcher with a large sibling family and 12 parameters, the description covers when to use it, what each action does, side effects, guards, errors, and relationship to aliases and adjacent tools. An output schema exists, so return-value detail is not the description's burden.
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 input schema already documents each parameter's action-specific meaning and defaults. The description adds context around dispatch's effect (persisting agent_prompt) but does not materially add parameter-level detail beyond the schema, so the high-coverage 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?
The description opens with a specific verb and resource ('Manage the agent-task lifecycle') and immediately names the four actions: dispatch, status, handoff, complete. It also distinguishes the tool from the delimit_agent_* aliases and from delimit_ledger_add, so an agent can tell exactly what this surface is for.
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 'When to use' and 'When NOT to use' sections tell the agent to select this combined surface for name-based action selection and to prefer the specific delimit_agent_* aliases from internal code paths. It even warns against expecting dispatch to execute a subagent and names the separate prefix-sharing tools that are not actions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_agent_linkDelimit Agent LinkA
Link an agent task to a ledger item so the dashboard shows the relationship.
When to use: after delimit_agent_dispatch creates a task and you want the dashboard to show which ledger item it's working on. When NOT to use: to dispatch a new task (delimit_agent_dispatch) or close out a task (delimit_agent_complete).
Sibling contrast: delimit_agent_dispatch creates; delimit_ledger_link links between two ledger items; this links a task to a ledger item.
Side effects: writes the link via ai.agent_dispatch.link_ledger_item.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | Agent task id (AGT-xxx). Required. | |
| ledger_item_id | Yes | Ledger item id (LED-xxx or STR-xxx). Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is not read-only and not destructive. The description adds value by stating the exact side effect: 'writes the link via ai.agent_dispatch.link_ledger_item.' This tells the agent the operation mutates state and reveals the underlying write path, which is useful behavioral context 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 longer than the bare minimum but every section earns its place: purpose, when to use, when not to use, sibling contrast, and side effects. It is well-structured and front-loaded with the core purpose, though it is slightly more verbose than strictly necessary.
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 simple two-parameter tool with an output schema and annotations, the description covers the essential context completely: what the link does, when to create it, when to avoid it, how it differs from related tools, and what side effect it performs. Nothing critical is missing.
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 both parameters have descriptive names plus format hints (AGT-xxx, LED-xxx/STR-xxx). The description itself does not add parameter-level detail, but the schema already carries that burden, so a 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 opens with a specific verb and resource: 'Link an agent task to a ledger item' and explains the purpose (dashboard relationship). It also distinguishes itself from delimit_agent_dispatch and delimit_ledger_link, so an agent can quickly tell what this tool does versus its most similar 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?
The 'When to use' section gives a clear precondition: after delimit_agent_dispatch creates a task and the dashboard should show the ledger item. The 'When NOT to use' section explicitly names the alternative tools for dispatching and completing tasks, and the sibling contrast further disambiguates from delimit_ledger_link.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_agent_policyDelimit Agent PolicyA
Set or view per-model governance permissions.
When to use: to inspect or modify the access policy that gates each AI model's operations on the ledger, memory, evidence, deploy, and secrets. When NOT to use: for runtime governance evaluation (use delimit_gov_evaluate) or session policy (delimit_project_config).
Sibling contrast: delimit_gov_evaluate evaluates one action; this configures the per-model policy that those evaluations use.
Side effects: providing any of ledger/memory/deploy/evidence/ secrets/custom_constraints writes via ai.agent_policy.set_agent_policy. Empty/no-changes is read-only.
Access levels for ledger/memory/evidence: "read-only", "read-write", "none". Boolean flags for deploy/secrets: "true" or "false".
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | AI model name — "claude", "codex", "gemini", "cursor". Empty = list all. | |
| deploy | No | Allow deploys ("true"/"false"). | |
| ledger | No | Ledger access level. | |
| memory | No | Memory access level. | |
| secrets | No | Allow secret access ("true"/"false"). | |
| evidence | No | Evidence access level. | |
| custom_constraints | No | Comma-separated constraints, e.g. "no-deploy,no-publish". |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses the conditional write side effect: providing any of ledger/memory/deploy/evidence/secrets/custom_constraints writes via ai.agent_policy.set_agent_policy, while empty/no-changes is read-only. This goes well beyond the readOnlyHint: false annotation and gives the agent a precise mental model of when state changes occur.
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?
Organized with labeled sections for purpose, usage, side effects, and value formats. Every sentence contributes meaningful selection or invocation guidance, and the most decision-relevant content 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?
The description covers purpose, alternatives, side effects, allowed values, and write-versus-read behavior. With an output schema present, no return-format detail is needed; the description fully equips an agent to 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 100%, so the baseline is 3, but the description adds real value by enumerating allowed access levels ('read-only', 'read-write', 'none') and boolean flags for deploy/secrets. It also provides a concrete custom_constraints example, compensating for the absence of enums 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?
Opens with a clear verb-resource statement: 'Set or view per-model governance permissions.' It then names the exact resources governed (ledger, memory, evidence, deploy, secrets) and contrasts itself with delimit_gov_evaluate, so an agent can distinguish it without opening the schema.
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' and 'When NOT to use' guidance, naming delimit_gov_evaluate for runtime evaluation and delimit_project_config for session policy. The sibling contrast further clarifies that this tool configures the policy those evaluations consume.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_agent_statusDelimit Agent StatusARead-onlyIdempotent
Check status of dispatched agent tasks.
When to use: to monitor open/closed agent tasks, either a single task_id or all tasks when task_id is empty. When NOT to use: to dispatch a new task (delimit_agent_dispatch) or to mark one done (delimit_agent_complete).
Sibling contrast: delimit_agent_dashboard surfaces an aggregate view; this returns raw status records.
Side effects: read-only. Calls ai.agent_dispatch.get_agent_status.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | No | Specific task id (e.g. "AGT-A1B2C3D4") or empty to list all. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the description consistently reinforces 'read-only' while adding context beyond annotations: it discloses the underlying backend call (ai.agent_dispatch.get_agent_status), states it returns raw status records rather than aggregates, and clarifies open/closed task semantics. 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?
Every line earns its place: purpose sentence, when-to-use, when-not-to-use, sibling contrast, and side effects are cleanly separated into labeled sections. The most decision-relevant information (purpose) is front-loaded, and the structure makes the guidance scannable for an agent.
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 one optional parameter, a present output schema, and safety annotations, the description covers everything needed for correct selection and invocation: purpose, scoping behavior, exclusions, sibling differentiation, and side effects. Nothing material is missing.
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 the schema already documents task_id with an example and the 'empty to list all' behavior. The description restates this same information ('either a single task_id or all tasks when task_id is empty') without adding new parameter-level meaning. Baseline 3 is appropriate since the schema carries the semantic load.
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?
Opens with a specific verb+resource statement ('Check status of dispatched agent tasks') that immediately conveys the operation. It also distinguishes itself from siblings by naming delimit_agent_dashboard as the aggregate-view alternative and clarifying this tool returns raw status records, so an agent can disambiguate without inspecting other 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?
Provides explicit 'When to use' and 'When NOT to use' sections that name exact alternatives (delimit_agent_dispatch, delimit_agent_complete) and the precise condition for choosing each. The sibling contrast with delimit_agent_dashboard further sharpens the decision boundary. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_auditDelimit AuditA
Cross-model code audit — 3 models, 3 lenses, synthesized (Pro).
When to use: for high-confidence review of a code change, where agreement across models is the signal and disagreements surface tradeoffs. When NOT to use: for raw multi-model debate (use delimit_deliberate) or single-model review (delimit_review).
Sibling contrast: delimit_review is single-prompt multi-model; delimit_deliberate is full debate; this is structured cross-lens audit (security / correctness / governance).
Side effects: gated by require_premium. Calls models via ai.cross_model_audit.audit. No ledger write — caller decides what to do with findings.
| Name | Required | Description | Default |
|---|---|---|---|
| lenses | No | Comma-separated lenses — "security", "correctness", "governance". Empty = all three. | |
| target | No | File path, git diff output, or code snippet to audit. Required. | |
| target_type | No | "file" (default — reads file), "diff" (git diff text), or "snippet" (inline code). | file |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses side effects beyond annotations: it is gated by require_premium, calls models via ai.cross_model_audit.audit, and performs no ledger write. This gives the agent important context about cost, availability, and persistence behavior that the annotations do not 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?
The description is well-structured with clear headings and front-loaded purpose. Every sentence adds value—usage context, sibling contrast, or side effects—without unnecessary 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 definition is complete for selecting and invoking the tool correctly: purpose, routing, side effects, and sibling relationships are all covered. An output schema exists, so the lack of return-value detail in the description is acceptable.
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?
Parameter schema coverage is 100%, so the schema already documents all parameters with defaults and allowed values. The description reinforces the lenses but adds no substantially new parameter semantics 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 performs a cross-model code audit across three lenses with synthesized output. It explicitly distinguishes itself from sibling tools delimit_review and delimit_deliberate, making selection 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?
The description gives explicit when-to-use and when-NOT-to-use guidance, naming the exact alternatives (delimit_deliberate, delimit_review). The sibling contrast further clarifies how this tool differs from those alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_build_loopDelimit Build LoopA
Execute one iteration of a governed continuous loop (LED-239).
When to use: to advance the autonomous build / social / deploy loop one step, either interactively or from a daemon. When NOT to use: for status only (use delimit_loop_status) or to configure (delimit_loop_config).
Sibling contrast: delimit_loop_status reads; delimit_loop_config sets policy; this drives one iteration.
Side effects: depends on loop_type. cycle/build dispatches swarm work; social drafts replies; deploy runs gates and publishes. All loops write to the loop_engine's session record.
Loop types:
cycle (recommended): unified think -> build -> deploy in one call.
build: picks feat/fix/task items from ledger, dispatches via swarm.
social (think): scans Reddit/X/HN, drafts replies.
deploy: runs deploy gates, publishes, verifies.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | "init" to start a session, "run" (default) to execute one iteration. | run |
| loop_type | No | "cycle", "build" (default), "social", or "deploy". | build |
| cycle_mode | No | For loop_type="cycle" — "sense" (think+strategy), "execute" (build+deploy), or "full" (all). Default "full". | full |
| session_id | No | Optional session id to continue. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate readOnlyHint=false and destructiveHint=false. The description goes well beyond this by detailing side effects per loop_type: 'cycle/build dispatches swarm work; social drafts replies; deploy runs gates and publishes.' It also discloses that 'All loops write to the loop_engine's session record.' No contradiction with annotations exists.
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 well-structured with clear labeled sections: primary statement, when to use, when not to use, sibling contrast, side effects, and loop types. Every section earns its place and the critical scoping information is front-loaded. The ticket reference 'LED-239' is minor noise but does not undermine clarity.
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 complex loop-driving tool with an output schema, the description is highly complete: it explains the loop variants, side effects, exclusions, and alternative tools. The agent has enough context to invoke it correctly without needing additional inference.
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 four parameters. The description adds behavioral context for loop_type values (cycle/build/social/deploy) but does not meaningfully expand on action or cycle_mode beyond what the schema provides. This is adequate but not exceptional.
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 opens with a specific verb and resource: 'Execute one iteration of a governed continuous loop.' It also explicitly contrasts itself with sibling tools, stating 'delimit_loop_status reads; delimit_loop_config sets policy; this drives one iteration.' This makes the tool's unique role 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?
The description provides an explicit 'When to use' section and an explicit 'When NOT to use' section, naming the exact alternative tools (delimit_loop_status, delimit_loop_config) for those cases. This gives an agent clear branching guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_build_loop_daemonDelimit Build Loop DaemonA
Background auto-pull daemon for governed build/social/deploy loops (Pro).
When to use: to spawn a long-running daemon that ticks the governed loop every N seconds — the orchestrating Claude session tails ~/.delimit/logs/loop_daemon_.jsonl for triage. When NOT to use: for one-shot iteration (use delimit_build_loop) or to read loop metrics (delimit_loop_status).
Sibling contrast: delimit_build_loop is one iteration; this is the long-running daemon.
Side effects: action="start" spawns a daemon thread that calls run_governed_iteration / run_social_iteration on a cadence. action="stop" halts. Each tick logs returned task_id to a JSONL. Respects delimit_loop_config safeguards (cost_cap, error_threshold, max_iterations, status=paused/stopped) via loop_status before each tick. Gated by require_premium.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | "start", "stop", or "status" (default). | status |
| loop_type | No | "build" (default), "social", or "deploy". Used on start. | build |
| session_id | No | Session to run. Required for all actions. | |
| interval_seconds | No | Tick interval. Default 900 (15 min). Used on start. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though annotations only say readOnly=false/destructive=false, the description discloses significant side effects: start spawns a daemon thread, stop halts, each tick writes task_id to JSONL, and safeguards are consulted before each tick. It also mentions the log path for triage. This is exactly the behavioral context annotations don't 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?
Structured into headers, front-loaded with the core statement, and every section contributes either selection rules or behavioral cautions. Minor redundancy between 'When NOT to use' and 'Sibling contrast' does not hurt readability.
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 the annotations are minimal, the description supplies selection rules, side effects, logging behavior, safeguards, and premium gating. Nothing critical for invoking the tool correctly seems missing.
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 the baseline applies. The description mostly reiterates which params are used on start and does not substantially extend the schema's per-parameter descriptions; it provides action-level side effects more than new parameter 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 lead sentence names the resource ('daemon') and function ('background auto-pull,' 'ticks governed loop'), and the sibling contrast explicitly separates it from delimit_build_loop and delimit_loop_status. An agent can tell what it does without inspecting the schema.
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?
Includes an explicit 'When to use' block, a 'When NOT to use' block with named alternatives (delimit_build_loop for one-shot iteration, delimit_loop_status for metrics), and a sibling-contrast line. Also notes premium gating, which is a real selection constraint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_changelogDelimit ChangelogA
Generate a changelog from git + ledger (git mode) or spec diff (spec mode).
When to use: as part of the deploy gate chain to produce a release note, or to prepend a CHANGELOG.md entry for a tagged release. When NOT to use: for ad-hoc human prose explanation of a spec change (use delimit_explain) or release planning (delimit_release_plan).
Sibling contrast: delimit_explain renders human prose for one diff; delimit_release_plan plans services and versions; this generates a formal changelog entry.
Two modes:
Git mode (pass repo_path): reads git log since last tag, categorizes commits (feat/fix/refactor/docs/test/ci), pulls completed ledger items, formats as Markdown. Works for ANY repo.
Spec mode (pass old_spec + new_spec): compares two OpenAPI specs and produces an API changelog.
Side effects: read-only on git/spec inputs. Writes to output_file when provided. If output_file is "CHANGELOG.md", PREPENDS the entry rather than overwriting — preserving prior history.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | "markdown" (default), "json", "keepachangelog", "github-release". | markdown |
| version | No | Version label (e.g. "4.1.0"). | |
| new_spec | No | New OpenAPI spec path (spec mode). | |
| old_spec | No | Old OpenAPI spec path (spec mode). | |
| repo_path | No | Repo path (git mode). | |
| since_tag | No | Git tag to diff from. Empty = auto-detect latest tag. | |
| output_file | No | Write the rendered changelog here. If "CHANGELOG.md", prepends the entry. | |
| include_ledger | No | Include completed ledger items (git mode). Default True. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations by detailing side effects: read-only on git/spec inputs, writes only when output_file is provided, and prepends rather than overwrites CHANGELOG.md, preserving history. This is consistent with readOnlyHint=false and destructiveHint=false and gives practical safety-relevant 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?
The description is well organized with labeled sections, bullets, and a front-loaded summary. Every section earns its place, and the side-effects paragraph is a valuable safety emphasis rather than filler.
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 (two modes, 8 optional parameters, output behavior), the description is complete enough: it covers when to use it, when not to, what each mode does, and side effects. The schema already documents all parameters and an output schema exists, so no critical return-value or parameter detail is missing.
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 the baseline is 3, and the description adds meaningful conceptual structure by mapping repo_path to git mode and old_spec + new_spec to spec mode. It also clarifies what git mode does (reads git log, categorizes commits, pulls completed ledger items) and that spec mode produces an API changelog, which helps an agent select the right parameter group.
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 opens with a specific verb and resource: 'Generate a changelog from git + ledger (git mode) or spec diff (spec mode).' It also names the two sibling tools it is not (delimit_explain, delimit_release_plan), making the tool's unique output 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?
The description has explicit 'When to use' and 'When NOT to use' sections, naming exact alternatives and the conditions that route to them. The sibling contrast reinforces these decision boundaries, so an agent knows precisely when to select this tool over delimit_explain or delimit_release_plan.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_collision_checkDelimit Collision CheckARead-onlyIdempotent
Detect / prevent multi-model file edit collisions (LED-129).
When to use: in cross-model workflows — claim a file before editing, release after committing — to prevent simultaneous conflicting edits between Claude / Codex / Gemini. When NOT to use: for single-model sessions or general filesystem locking outside the multi-model swarm.
Sibling contrast: delimit_swarm tracks ventures and personas; this tracks per-file edit ownership.
Side effects: action="claim" / "release" mutate the lock state. action="check" is read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | AI model name — "claude", "codex", "gemini". | |
| action | No | "check" (default), "claim", or "release". | check |
| task_id | No | Optional task id for tracking. | |
| file_path | No | File to claim/release (required for claim/release). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description itself clearly discloses that action='claim'/'release' mutate lock state and action='check' is read-only. However, the annotations declare readOnlyHint=true and idempotentHint=true for the whole tool, directly contradicting the mutating actions. Per the rubric, this contradiction forces a score of 1.
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 well-structured with scannable labeled sections: purpose, when to use, when not to use, sibling contrast, and side effects. Every sentence carries distinct information, and there is no filler.
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 largely complete for a 4-parameter tool: it covers use cases, exclusions, sibling differentiation, side effects, and action-specific parameter requirements, and an output schema exists. The only deduction is due to the contradictory annotations, which force an agent to reconcile conflicting signals about whether the tool is read-only.
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 the baseline is 3. The description adds valuable operational meaning beyond the schema: claim before editing, release after committing, and file_path being required for claim/release. It also clarifies which actions are read-only versus mutating, helping the agent choose valid parameter combinations.
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 specific verb-resource pair: 'Detect / prevent multi-model file edit collisions' and explains it tracks per-file edit ownership. It also contrasts with delimit_swarm, so an agent can distinguish it from siblings without opening schemas.
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 provides 'When to use' and 'When NOT to use' guidance, naming the exact cross-model workflow and rejecting single-model or general filesystem locking. It also gives a sibling contrast, making the selection criteria unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_config_exportDelimit Config ExportA
Export the current governance config as a shareable JSON bundle.
When to use: to package a project's delimit.yml + GitHub Action workflow into a portable JSON config for sharing or import. When NOT to use: to read live policy (use delimit_gov_policy) or initialize a new project (delimit_init).
Sibling contrast: delimit_config_import is the round-trip counterpart; this exports.
Side effects: read-only on the project. Sanitizes project_path via _sanitize_path. Returns the bundle in the response — no file write.
| Name | Required | Description | Default |
|---|---|---|---|
| project_path | No | Path to project root. Default "." (cwd). | . |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states 'Side effects: read-only on the project' and 'no file write,' but the annotations declare readOnlyHint=false. These directly contradict each other: one says the operation is read-only, the other says it is not. Per the rubric, this contradiction forces a score of 1.
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 well-structured with short labeled sections: purpose, when to use, when not to use, sibling contrast, and side effects. Every sentence earns its place, and the most important information 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?
For a simple one-optional-parameter tool with an output schema, the description covers purpose, exclusions, alternatives, side effects, and response behavior. It is nearly complete, but the direct contradiction between the stated read-only behavior and readOnlyHint=false prevents full marks.
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 baseline is 3. The description adds meaningful parameter-related context by stating that project_path is sanitized via _sanitize_path, which is not present in the input schema. This exceeds the 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 opens with a specific verb and resource: 'Export the current governance config as a shareable JSON bundle.' It clearly identifies the output format and distinguishes this tool from its round-trip counterpart, delimit_config_import, making sibling differentiation immediate and clear.
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 the tool ('to package a project's delimit.yml + GitHub Action workflow'), when NOT to use it, and names the alternatives (delimit_gov_policy and delimit_init). This is ideal routing guidance for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_config_importDelimit Config ImportA
Import a governance config from a JSON bundle into a project.
When to use: to apply a previously-exported config bundle from another project — the round-trip counterpart to delimit_config_export. When NOT to use: to initialize a fresh project (use delimit_init) or load an existing config (delimit_project_config action="load").
Sibling contrast: delimit_config_export produces; this consumes.
Side effects: writes the policy file under project_path. With write_workflow=True, also writes the GitHub Action workflow file if present in the bundle. Sanitizes project_path via _sanitize_path.
| Name | Required | Description | Default |
|---|---|---|---|
| config_json | Yes | The JSON config bundle string (from delimit_config_export). Required. | |
| project_path | No | Target project root. Default "." (cwd). | . |
| write_workflow | No | Also write the GitHub Action workflow if present. Default False. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, destructiveHint=false), the description discloses concrete side effects: writes the policy file under project_path, conditionally writes a GitHub Action workflow when write_workflow=True, and sanitizes project_path via _sanitize_path. This is exactly the behavioral context an agent needs 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?
The description is front-loaded with the core purpose, then organized into clearly labeled sections (When to use, When NOT to use, Sibling contrast, Side effects). Every sentence earns its place—no filler or repetition of schema 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?
For a 3-parameter mutation tool with a full output schema and annotations, the description covers purpose, usage boundaries, side effects, and path sanitization. There are no gaps an agent would need to resolve before invoking 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 description coverage is 100%, so the baseline is 3. The description adds value by explaining behavioral consequences of write_workflow=True (writes workflow file if present in bundle) and clarifying that config_json is the output of a prior export from another project. These enrich parameter meaning beyond the schema, though the schema already does most of the work.
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 opening sentence states a specific verb (import), resource (governance config from a JSON bundle), and destination (into a project). The sibling contrast 'delimit_config_export produces; this consumes' further differentiates it from its closest counterpart, so an agent can distinguish it without inspecting schemas.
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 (apply a previously-exported bundle, round-trip counterpart to delimit_config_export) and when NOT to use (initialize a fresh project via delimit_init, or load existing config via delimit_project_config action="load"). Alternatives are named with conditions, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_content_publishDelimit Content PublishA
Manually trigger a content publish (tweet, YouTube video, or report) (Pro).
When to use: to fire off the next queued tweet or video on demand, or to STAGE distribution of the next mature report across owned broadcast surfaces (README / GitHub Release note / minimal X mirror). When NOT to use: to inspect the queue (use delimit_content_schedule) or modify it (delimit_content_queue).
Sibling contrast: delimit_content_schedule reads; delimit_content_queue mutates queue; this performs a single publish step.
Side effects: for tweet, posts the next queued tweet; for youtube, generates and uploads. For "report" (LED-3729) it is COMPOSE + STAGE ONLY — it writes composed distribution artifacts to a local staging queue and posts NOTHING to X and creates NO live GitHub Release.
| Name | Required | Description | Default |
|---|---|---|---|
| content_type | No | "tweet" (default) to post next queued tweet, "youtube" to generate + upload the next video, or "report" to STAGE (compose, not post) distribution for the next report. | tweet |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description clearly discloses side effects for each content type, including the non-obvious report behavior: COMPOSE + STAGE ONLY, posts nothing to X, and creates no live GitHub Release. This goes far beyond the minimal readOnlyHint/destructiveHint annotations and prevents the agent from assuming all three types actually publish externally.
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?
Structured with clear labeled sections (When to use, When NOT to use, Sibling contrast, Side effects), each sentence adds information. The core action is stated upfront, and the detail is proportionate to the tool's branching behavior.
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 three content types that behave very differently, the description covers when, when not, sibling alternatives, side effects, and the critical report staging caveat. An agent has enough context to invoke it correctly and interpret the outcome.
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 input schema already fully documents the single content_type parameter at 100% coverage, so the baseline is 3. The description adds value by mapping each allowed value to its concrete behavior (post, generate+upload, or stage-only), which is meaningful 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?
The description uses a specific verb ('trigger', 'publish') and names the exact resources: tweet, YouTube video, or report. It also distinguishes itself from the sibling tools delimit_content_schedule and delimit_content_queue by stating this performs a single publish step.
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 'When to use' and 'When NOT to use' sections name the exact conditions and the alternative tools to use instead. The sibling contrast further clarifies the division of labor: schedule reads, queue mutates, this publishes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_content_queueDelimit Content QueueA
Manage the tweet, video, and report content queues.
When to use: to view, seed, or add to the autonomous content queues that delimit_content_publish drains, or to STAGE a report for distribution (LED-3729). When NOT to use: to publish (use delimit_content_publish) or read upcoming schedule (delimit_content_schedule).
Sibling contrast: delimit_content_publish drains; delimit_content_schedule reads; this mutates the queue.
Side effects: action="seed" populates queue with defaults; action="add" appends tweet items; action="add_report" composes and STAGES report-distribution artifacts (README block / Release note / minimal X mirror) — compose-only, posts NOTHING. action="status" is read-only and now also reports the staged reports-distribution queue.
| Name | Required | Description | Default |
|---|---|---|---|
| items | No | For "add" — newline-separated tweet texts. For "add_report" — one or more report slugs (newline- or comma-separated). | |
| action | No | "status" (default), "seed", "add", or "add_report". | status |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though annotations already mark readOnlyHint=false and destructiveHint=false, the description goes further by detailing per-action side effects: seed populates defaults, add appends, add_report stages without posting, and status is read-only. This is exactly the behavioral nuance an agent 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 longer than average but well-organized with labeled sections and front-loaded scope. Each section earns its place given the multi-action, side-effect-bearing nature of the tool, though a couple of phrases could be tightened.
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 two optional parameters and no required ones, the description is complete: it covers purpose, action semantics, side effects, sibling routing, and read-only behavior. An output schema exists, so the lack of return-value detail in the description is not a 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?
Input schema covers both parameters 100%, so the bar is baseline 3. The description adds meaning by attaching behavioral outcomes to each action value ('seed' populates defaults, 'add' appends tweet items, 'add_report' composes/stages) and clarifies that status is read-only, enriching the bare action enum.
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 opens with a specific verb and resource ('Manage the tweet, video, and report content queues') and then enumerates exactly what actions are possible. It explicitly contrasts with delimit_content_publish and delimit_content_schedule, making the tool's distinct role 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?
Provides a dedicated 'When to use' section, a 'When NOT to use' section naming the correct alternatives, and a direct sibling contrast. An agent can confidently decide between this tool, publish, and schedule without inferring from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_content_scheduleDelimit Content ScheduleA
View the upcoming content schedule (queued + pending + recent).
When to use: to inspect what's queued (tweets, videos) and what has shipped recently before adding more or triggering a publish. When NOT to use: to actually publish (use delimit_content_publish) or to manage the content queue (delimit_content_queue).
Sibling contrast: delimit_content_queue mutates queue state; this reads the resulting schedule.
Side effects: read-only. Calls ai.content_engine.get_content_schedule.
Args: None.
Returns: Dict with queued tweets, pending videos, recent activity, the staged reports-distribution queue (LED-3729), and next_steps.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states 'Side effects: read-only' and names the underlying call, which would otherwise be strong transparency. However, the annotations declare readOnlyHint: false, directly contradicting the 'read-only' claim. Per the contradiction rule, this dimension must score 1.
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 structured with clear labeled sections, and every section serves a purpose: purpose, usage boundaries, sibling contrast, side effects, args, and returns. Although longer than a one-liner, none of it is filler and the key scoping information 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 has zero parameters and an output schema exists, the description still adds a preview of the returned dict and the underlying API. It covers when to use, when not to use, side effects, and invocation shape, so an agent has everything needed to call it correctly — apart from the read-only annotation mismatch already penalized.
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 input schema has zero parameters and schema description coverage is 100%, so there is no parameter detail for the description to add. The description explicitly confirms 'Args: None', eliminating any ambiguity about invocation.
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 opens with 'View the upcoming content schedule' — a specific verb and resource — and explicitly scopes it to queued, pending, and recent items. It also differentiates itself from sibling tools by noting that delimit_content_queue mutates queue state while this reads the resulting schedule.
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?
It provides explicit 'When to use' and 'When NOT to use' sections, naming delimit_content_publish and delimit_content_queue as the correct alternatives for publishing and queue management. The sibling contrast reinforces the read-vs-mutate boundary, so an agent is unlikely to select the wrong tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_context_branchDelimit Context BranchA
Manage mutable working branches of a venture's context (STR-048).
When to use: when exploring an alternative direction for a venture — a "what if we pivoted?" thread — and you want a write-isolated branch of the venture context rather than mutating the main line. Sub-actions: "list" inventories branches, "create" mints a new branch, "merge" folds a branch back into main. When NOT to use: for immutable point-in-time evidence (use delimit_context_snapshot — that creates a frozen capture; this is for mutable working areas), to read context data (use delimit_context_read), or for git branch operations on a code repo (use git directly).
Sibling contrast: delimit_context_snapshot is read-only history capture; this manages active, writeable branches. Compared to git branches, this operates on the venture context filesystem (ai.context_fs), not the code repo.
Side effects: depends on action. "list" is read-only. "create" writes a new branch namespace under the venture in ai.context_fs. "merge" mutates the venture's main namespace with the branch's contents, then closes the branch. None of these touch the code repository or any git state. No license gate, no notification, no ledger write.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | Branch sub-action, one of "list", "create", "merge". Default "list". | list |
| venture | Yes | Venture namespace key. Required. | |
| branch_name | No | Branch name (required for create / merge). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite sparse annotations, the description discloses per-action side effects: 'list' is read-only, 'create' writes a new branch namespace, and 'merge' mutates the main namespace and closes the branch. It also explicitly states what the tool does NOT touch: code repository, git state, license gate, notification, or ledger. This goes well beyond the annotation fields and gives the agent a reliable behavioral model.
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 well organized with clear sections and front-loaded purpose. There is minor redundancy between the 'When NOT to use' section and the 'Sibling contrast' section, both covering delimit_context_snapshot, but overall every section earns its place and no filler exists.
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 multi-action complexity and mutable-vs-immutable semantics, the description is thorough. It covers when to use it, when not to use it, side effects, exclusions, and the filesystem target. The output schema is present, so return-value detail is not required here.
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 input schema already documents all three parameters at 100% coverage, so the baseline is 3. The description adds useful semantic context by explaining what each action means ('list' inventories branches, 'create' mints a new branch, 'merge' folds a branch back into main), which enriches the action parameter meaning beyond the schema alone.
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 specific verb and resource: 'Manage mutable working branches of a venture's context.' It immediately distinguishes itself from related tools like delimit_context_snapshot and delimit_context_read, and from git branch operations. An agent can clearly identify what this tool does and what it does not do.
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 explicit 'When to use' section with a concrete scenario ('what if we pivoted?'), a 'When NOT to use' section naming alternative tools, and a sibling contrast section. This is exemplary routing guidance that leaves little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
_delimit_context_implDelimit Context ImplADestructiveIdempotent
Unified context-filesystem entry point — dispatches to one of six actions.
Manages a venture-scoped, versioned context filesystem under ~/.delimit/context// so plans, decisions, and artifacts survive across sessions and across models. This is the cross-model- continuity store: write once, read from any later session or any other assistant.
When to use: as the single MCP-registered context surface (delimit_context) when the caller wants to pick the action by name in one call rather than choosing a specific delimit_context_* alias. When NOT to use: from internal code paths — prefer the specific alias (delimit_context_read, delimit_context_write, delimit_context_snapshot, etc.) so each action's docstring, args, and side-effect notes show up at the right call site. For ephemeral, conversation-scoped memory use delimit_memory_store / delimit_memory_search instead — those are NOT venture-namespaced or versioned.
Sibling contrast: each delimit_context_ wrapper below is a thin alias over this implementation; they exist so the action's docstring lives at the right name. This is the dispatch core. The context FS is venture-scoped and versioned (snapshot/branch); delimit_memory_* is conversation-scoped and unversioned. Snapshot vs branch: snapshot is an immutable point-in-time copy (history/ rollback), branch is a mutable write-isolated fork that can be merged back into main. Neither touches git or any code repository.
Side effects: all six actions are free-tier (no require_premium gate in this dispatcher). Each routes to a distinct context-FS backend function and is wrapped via _with_next_steps for orchestrator hints. Per action:
"list" — read-only enumeration of /artifacts/*. Returns [] (no error) if the venture or artifacts dir does not exist.
"read" — read-only load of one artifact. Returns {"error": ...} if the named artifact is absent.
"init" — WRITES. Creates the venture directory, the memory/plans/artifacts/snapshots/branches subdirs, and manifest.json if absent. Idempotent.
"write" — WRITES/overwrites /artifacts/.json and bumps the manifest version counter. Overwrites silently if the artifact name already exists.
"snapshot" — WRITES. Copies the venture's artifacts/ and memory/ into a timestamped (optionally labeled) snapshot dir plus a snapshot manifest. Does NOT bump the version counter.
"branch" — depends on branch_action. "list" is read-only. "create" WRITES a new branch fork (copy of artifacts/ + memory/) and errors if the branch already exists. "merge" MUTATES the venture's main artifacts/ and memory/ with the branch's files, then DELETES the branch dir and bumps the version counter; errors if the branch is not found. Errors are deterministic ({"error": "..."}): an unknown top-level action, an unknown branch_action, or a missing branch_name on create/merge all short-circuit before the backend call.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Artifact name, used as the <name>.json file key. Required for action="read" and action="write". Ignored by other actions. | |
| label | No | Optional human-readable snapshot label, appended to the timestamp in the snapshot dir name. Used only when action="snapshot". | |
| action | No | Which context operation to perform. One of "init", "read", "write", "list", "snapshot", "branch". Default "list". Other values return a deterministic error. | list |
| content | No | Artifact text body. Used only when action="write". | |
| venture | No | Venture/project namespace key — selects the ~/.delimit/context/<venture>/ tree. Used by every action. Default "default". | default |
| branch_name | No | Branch name. Required when action="branch" with branch_action="create" or "merge"; ignored for "list". | |
| artifact_type | No | Type hint stored on the artifact — "text", "json", "code", or "plan". Used only when action="write". Default "text". Affects the stored type hint, not the storage format. | text |
| branch_action | No | Branch sub-action — "list", "create", or "merge". Used only when action="branch". Default "list". | list |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description itself is highly transparent, enumerating per-action side effects, deterministic errors, and which actions write vs read. However, it directly contradicts the idempotentHint:true annotation: write bumps a version counter, snapshot creates new timestamped directories, branch create errors when the branch already exists, and branch merge deletes the branch after mutating it. These are not idempotent behaviors.
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 long but justifiably so: 8 parameters and 6 distinct actions require this level of detail. It is organized into scannable sections, front-loaded with the core purpose, and every sentence contributes operational knowledge rather than padding.
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 a six-action dispatcher with mixed read/write/destructive behavior, the description is essentially complete: it covers storage namespace, cross-session persistence, per-action side effects, error format, and exclusions. An output schema exists to carry exact return shapes, so no critical gap remains for correct 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%, so the baseline is 3. The description adds meaningful action-conditioned semantics: name is required only for read/write, label only for snapshot, content and artifact_type only for write, branch_name required for branch create/merge, and invalid action or branch_action values short-circuit before the backend call. This is selection guidance 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?
The opening sentence states a precise verb and resource: 'Unified context-filesystem entry point — dispatches to one of six actions.' It immediately describes the venture-scoped, versioned storage at ~/.delimit/context/<venture>/ and distinguishes itself from the delimit_context_* aliases and delimit_memory_* tools, so an agent knows exactly what this tool is and is not.
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 has explicit 'When to use' and 'When NOT to use' sections that name concrete alternatives: the specific delimit_context_<action> aliases, delimit_memory_store, and delimit_memory_search. It also explains the snapshot vs branch distinction and notes that this tool never touches git or a code repository.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_context_initDelimit Context InitAIdempotent
Initialize a context filesystem namespace for a venture (STR-048).
When to use: once per venture, the first time you want to persist cross-session/cross-model context (plans, decisions, code snippets). When NOT to use: for single-session memory (use delimit_memory_store) or to read existing artifacts (use delimit_context_read).
Sibling contrast: delimit_memory_* is conversation-scoped; the context FS is venture-scoped and versioned (snapshot/branch).
Side effects: creates the venture directory and metadata files via ai.context_fs.init_context. Idempotent — safe to call repeatedly.
| Name | Required | Description | Default |
|---|---|---|---|
| venture | No | Venture/project namespace key. Default "default". | default |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true, destructiveHint=false, and readOnlyHint=false, so the description does not need to re-cover those. It adds useful context beyond annotations by specifying side effects: creates the venture directory and metadata files via ai.context_fs.init_context, and explicitly states it is safe to call repeatedly. This is meaningful additional behavioral 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?
The description is compact, organized with clear headings, and front-loads the core purpose before usage guidance and side effects. Every sentence contributes useful information, with no filler or repetition of schema details.
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 one optional parameter, existing output schema, and annotations covering idempotency and non-destructiveness, the description is complete. It explains when to use it, when not to use it, the side effects, the versioning model, and the fact that it is safe to rerun. Nothing needed for correct invocation is missing.
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 input schema covers 100% of the single parameter with a default value and its own description ('Venture/project namespace key'). The tool description reinforces the venture context but does not add new semantic detail beyond the schema. Baseline 3 is appropriate because the schema already carries the full parameter documentation burden.
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 specific action: 'Initialize a context filesystem namespace for a venture,' which clearly identifies the verb, resource, and scope. It also distinguishes this tool from delimit_memory_* and delimit_context_read, so an agent can tell it apart from siblings without additional investigation.
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 guidance is explicit: 'once per venture, the first time you want to persist cross-session/cross-model context.' It also gives clear when-not-to-use conditions with named alternatives (delimit_memory_store for single-session memory, delimit_context_read for reading artifacts), plus a sibling contrast explaining the venture-scoped and versioned nature.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_context_listDelimit Context ListARead-onlyIdempotent
List all artifacts in a venture's context filesystem (STR-048).
When to use: to inventory what artifacts have been written for a venture before reading or branching. When NOT to use: to read an artifact's content (use delimit_context_read) or to scan memories (delimit_memory_recent).
Sibling contrast: delimit_context_read returns one artifact's content; this returns metadata for all of them.
Side effects: read-only. Calls ai.context_fs to enumerate artifacts.
| Name | Required | Description | Default |
|---|---|---|---|
| venture | Yes | Venture namespace key. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 explicitly stating 'Side effects: read-only' and revealing the internal call to ai.context_fs. This gives the agent behavioral context beyond the structured 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 well-structured with clear labeled sections: purpose, when to use, when not to use, sibling contrast, and side effects. Every sentence earns its place and the information is front-loaded with the core 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?
For a single-parameter, read-only listing tool with full schema coverage and an output schema present, the description covers purpose, usage boundaries, sibling distinction, and side effects. Nothing essential for an agent to call it correctly is missing.
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%, with the single 'venture' parameter documented as 'Venture namespace key. Required.' The description reinforces that the venture is the scope of the listing but does not add substantial new meaning 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 states a specific verb and resource: 'List all artifacts in a venture's context filesystem.' It clearly distinguishes itself from the sibling by noting it returns metadata for all artifacts rather than a single artifact's content. An agent can immediately understand what the tool does and how it differs from related context 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 provides explicit 'When to use' and 'When NOT to use' guidance, naming specific alternatives: delimit_context_read for artifact content and delimit_memory_recent for memory scans. It also includes a sibling contrast that reinforces the correct selection decision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_context_readDelimit Context ReadARead-onlyIdempotent
Read an artifact from a venture's context filesystem (STR-048).
When to use: to fetch a specific previously-written artifact by name within a venture namespace. When NOT to use: for venture-wide listing (use delimit_context_list) or memory search (delimit_memory_search).
Sibling contrast: delimit_context_list returns names only; this returns a single artifact's content.
Side effects: read-only. Calls ai.context_fs to load the artifact.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Artifact name. Required. | |
| venture | Yes | Venture namespace key. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds 'Side effects: read-only' and 'Calls ai.context_fs,' but the read-only statement duplicates the annotation and the implementation detail adds limited behavioral context beyond what is already structured.
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 well-organized with clear sections for usage, exclusions, sibling contrast, and side effects. It is mostly efficient, though the 'STR-048' reference and the redundant read-only statement add minor noise.
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 simple read operation with only two fully documented parameters, an output schema, and annotations covering side-effect safety, the description covers purpose, usage boundaries, sibling contrast, and behavior. Nothing important is missing for an agent to 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 description coverage is 100% and both parameters are documented in the schema with 'Artifact name. Required.' and 'Venture namespace key. Required.' The description's mention of 'by name within a venture namespace' reinforces the schema but does not add significant meaning beyond it, so the 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?
The description opens with a specific verb and resource: 'Read an artifact from a venture's context filesystem.' It clearly distinguishes this tool from delimit_context_list by noting that list returns names only while this returns a single artifact's content, so an agent can differentiate it from close 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?
The description explicitly provides 'When to use' and 'When NOT to use' guidance, naming delimit_context_list and delimit_memory_search as alternatives. This gives an agent clear routing logic without requiring it to infer intent from tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_context_snapshotDelimit Context SnapshotA
Capture a point-in-time snapshot of a venture's context (STR-048).
When to use: before a risky model handoff, doctrine edit, or refactor — so you can roll back the context if it goes sideways. When NOT to use: for individual artifact persistence (use delimit_context_write) or one-time conversation memory (delimit_memory_store).
Sibling contrast: delimit_context_branch creates a divergent line of work; this captures the current state as an immutable point.
Side effects: writes a snapshot record under the venture namespace via ai.context_fs.
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | Optional human-readable label for the snapshot. | |
| venture | Yes | Venture namespace key. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false and destructiveHint=false. The description adds meaningful behavioral context by disclosing that the tool 'writes a snapshot record under the venture namespace via ai.context_fs' and that the snapshot is 'immutable.' This goes beyond the structured 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 well-structured with clear labeled sections: when to use, when not to use, sibling contrast, and side effects. Every section adds distinct value and the opening line is front-loaded with the core purpose. 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?
The description covers purpose, usage context, exclusions, alternatives, side effects, and storage behavior. An output schema is present, so return-value documentation is not needed. For a tool with this complexity, the description is complete and actionable.
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 both parameters adequately. The description does not add parameter-specific details beyond schema, but given full coverage, no extra compensation is needed. This meets the baseline for schema-heavy 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 opens with a specific verb-resource pair: 'Capture a point-in-time snapshot of a venture's context.' It also differentiates itself from sibling tools by explicitly contrasting with delimit_context_branch, which creates a divergent line of work. This makes the tool's purpose immediately clear and distinguishable.
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 explicit 'When to use' guidance (before a risky model handoff, doctrine edit, or refactor) and explicit 'When NOT to use' guidance with named alternatives (delimit_context_write, delimit_memory_store). It also adds a sibling contrast with delimit_context_branch. This is exemplary routing information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_context_writeDelimit Context WriteA
Write an artifact to a venture's context filesystem (STR-048).
When to use: to persist a plan, decision record, or code artifact that other models or future sessions will need. When NOT to use: for ephemeral conversation context (use delimit_memory_store) or to snapshot all artifacts at once (use delimit_context_snapshot).
Sibling contrast: delimit_context_read fetches one artifact; delimit_context_list inventories the venture; this writes one.
Side effects: writes the artifact under the venture namespace via ai.context_fs (file creation under ~/.delimit/context//).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Artifact name (used as the file key). Required. | |
| content | Yes | Artifact text. Required. | |
| venture | Yes | Venture namespace key. Required. | |
| artifact_type | No | Type hint, one of "text", "json", "code", "plan". Default "text". Affects render hints, not storage format. | text |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already indicate readOnlyHint=false and destructiveHint=false, and the description adds meaningful behavioral context by disclosing the side effect: the artifact is written under the venture namespace via ai.context_fs, with file creation under ~/.delimit/context/<venture>/. It does not address overwrite behavior on an existing artifact name, but it provides solid 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 well-structured with clear sections: primary purpose, when to use, when not to use, sibling contrast, and side effects. It is front-loaded and every sentence earns its place 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?
For a tool with 4 well-documented parameters and an output schema, the description covers selection criteria, exclusions, sibling differentiation, and side effects. Nothing essential is missing for an agent to decide when to invoke it and what to expect.
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 four parameters. The description adds usage context like persisting plans, decision records, or code artifacts, but it does not add significant parameter-level meaning 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 opens with a specific verb and resource: 'Write an artifact to a venture's context filesystem (STR-048).' It distinguishes itself from the closest siblings by stating that delimit_context_read fetches one artifact, delimit_context_list inventories the venture, and this one writes one. The scope and intent are 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?
The description provides explicit 'When to use' and 'When NOT to use' guidance, naming delimit_memory_store for ephemeral context and delimit_context_snapshot for snapshotting all artifacts. It also adds a sibling contrast for read and list, making the selection criteria clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_controlDelimit ControlAIdempotent
Aggregate all governance lanes into one queue; approve/reject approvals (LED-1709).
When to use: as the shared queue the CLI and web dashboard both render — attestations, approvals, sensing (STR-), ops (LED-) — and to approve/reject founder-approval items from that same surface. When NOT to use: to act on attestation/sensing/ops items; approve/reject are approval-class only in Phase 1 (mutate those via their owning tool).
Sibling contrast: delimit_agent_dashboard is dispatch-only, delimit_ledger_context is one-venture-only, delimit_notify_inbox is inbox-only; this unifies all four into one lane-aware view.
Side effects: list/get are READ-ONLY. approve/reject append the same
founder_directive_completed ack the email "ship it" loop writes to the
EXISTING store (~/.delimit/inbox_routing.jsonl); reject stamps
disposition="rejected". No new store; idempotent re-approve no-ops.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Optional note recorded as the ack result for action="approve"/"reject". | |
| limit | No | Max items for action="list" (default 100). | |
| action | No | "list" (default), "get", "approve", or "reject". list/get are read-only; approve/reject act ONLY on approval-class items and mirror the email "ship it" ack loop. | list |
| item_id | No | Required for "get", "approve", "reject": the normalized item id (e.g. "att_…", "STR-437", "LED-1709", "WO-…", "DIR-…"). | |
| class_filter | No | Lane filter: "" (all), "attestation", "approval", "sensing", or "ops". | |
| state_filter | No | State filter, e.g. "open", "pending", "awaiting_approval", "done". "" = all. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, the description clearly discloses that list/get are READ-ONLY, approve/reject append to the existing ~/.delimit/inbox_routing.jsonl store, reject stamps disposition="rejected", no new store is created, and idempotent re-approve no-ops. This aligns with and enriches the idempotentHint and destructiveHint 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 structured into clear labelled sections: purpose, when to use, when not to use, sibling contrast, and side effects. Every sentence adds information, and the core purpose is front-loaded in the first sentence.
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 multi-action tool with mixed read/write behavior, the description covers the shared-queue scope, action restrictions, side effects, sibling differentiation, and idempotency. An output schema exists, so return-value documentation is already handled; nothing essential is missing for an agent to invoke this 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 100%, so the schema already documents all six parameters. The description adds operational meaning by clarifying which actions apply to which item classes, listing example item id forms (att_…, STR-437, LED-1709, WO-…, DIR-…), and reinforcing that approve/reject only act on approval-class items.
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 opens with a specific verb-resource pair: 'Aggregate all governance lanes into one queue' and 'approve/reject approvals (LED-1709).' It also names the exact item classes (attestations, approvals, sensing STR-*, ops LED-*) and contrasts against four sibling tools, so an agent can distinguish it without ambiguity.
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' and 'When NOT to use' guidance, including the Phase 1 restriction that approve/reject are approval-class only. It also gives sibling contrast naming delimit_agent_dashboard, delimit_ledger_context, and delimit_notify_inbox, telling the agent exactly when this tool is the right choice versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_corp_dashboardDelimit Corp DashboardARead-onlyIdempotent
One-call corp status — replaces the 6-call session-start ritual (LED-189).
When to use: at session start as the unified status snapshot — daemons, self-repair, social/inbox activity, ledger pending, agent queue, latest session, plus a synthesized one-line summary. When NOT to use: for a single subsystem's status (use delimit_daemon_status, delimit_obs_status, etc.) — those are finer-grained.
Sibling contrast: delimit_obs_status is system health; delimit_gov_health is governance engine; this is the corp-wide rollup that composes all of them.
Side effects: read-only across all subsystems. Each sub-section is failure-isolated — a partial failure returns {"error": "..."} for that key only and never crashes the whole call. Gateway-only — not shipped in the npm bundle.
Args: None.
Returns: Dict with daemon status, self_repair status, social/inbox activity, ledger_pending, agent_queue, latest_session, plus a synthesized one-line summary and next_steps. On npm-bundle installs returns {"status": "not_available", "error": ..., "hint": ...} instead.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it read-only and idempotent, and the description reinforces this with 'read-only across all subsystems.' It adds valuable behavior beyond annotations: failure isolation per sub-section, gateway-only availability, and the npm-bundle fallback response shape. This is exactly the kind of contextual behavior an agent 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 organized into clear labeled sections with no wasted sentences. Each section adds value: use cases, alternatives, side effects, return behavior, and deployment constraints. It is longer than average, but every sentence 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?
Covers the complete decision surface: what the tool returns, when to use it, when not to use it, how it behaves on partial failure, where it is available, and what happens on unsupported installs. An agent has everything needed to correctly select and invoke this 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?
The tool has zero parameters, the schema already reflects that, and the description explicitly states 'Args: None.' There is no parameter semantic burden to carry, so a baseline of 4 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 opens with a clear, specific purpose: 'One-call corp status' and a full list of included subsystems. It explicitly differentiates itself from finer-grained single-subsystem tools and names sibling rollups, so an agent can immediately tell what this tool is and is not.
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?
Contains explicit 'When to use' and 'When NOT to use' sections, including named alternatives such as delimit_daemon_status and delimit_obs_status. This gives an agent direct, actionable routing guidance with no ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_cost_alertDelimit Cost AlertADestructive
Manage cost alert rules (CRUD on spending thresholds) (Pro).
When to use: to configure ongoing spend thresholds and notifications that fire when costs exceed a configured ceiling. When NOT to use: for one-shot cost analysis (use delimit_cost_analyze) or finding optimisations (delimit_cost_optimize).
Sibling contrast: delimit_cost_analyze finds drivers; delimit_cost_optimize finds reductions; this manages the alerting layer.
Side effects: action="create"/"delete"/"toggle" write to the file-based alert store. action="list" is read-only.
Prerequisite: requires Delimit Pro. An unlicensed call returns {"error": ..., "upgrade": "https://delimit.ai/pricing"} without running.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Alert name. Required for create. | |
| action | No | One of "list" (default), "create", "delete", "toggle". | list |
| alert_id | No | Existing alert id. Required for delete/toggle. | |
| threshold | No | Cost threshold in USD. Required for create. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description clearly discloses that create/delete/toggle actions write to a file-based alert store while list is read-only, which adds meaningful behavioral detail beyond the write/destructive annotations. It also states the Pro license prerequisite and the unlicensed error response, giving the agent an accurate expectation of side effects and failures.
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 well-structured with clear headings, front-loaded purpose, and no filler. Each section earns its place: usage guidance, sibling contrast, side effects, and prerequisite are all present without unnecessary elaboration.
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 key contextual aspects: what the tool does, when to use it, how it differs from siblings, side effects, and licensing requirements. An output schema exists, so the description does not need to explain return values, and nothing essential is missing for an agent to invoke it 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?
The input schema already provides 100% description coverage for all four parameters, including which are required for which action, so the description does not need to repeat those details. The description adds useful action-level context (list/create/delete/toggle and their side effects) but no deeper per-parameter semantics 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 states a specific verb ('Manage') and a precise resource ('cost alert rules'), explicitly covering CRUD on spending thresholds. It distinguishes itself from the sibling tools delimit_cost_analyze and delimit_cost_optimize by defining what it does versus what they do.
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 explicit 'When to use' and 'When NOT to use' guidance, naming the correct alternatives for one-shot cost analysis and optimization. The sibling contrast section further clarifies the decision boundary, leaving no ambiguity about when this tool is the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_cost_analyzeDelimit Cost AnalyzeARead-onlyIdempotent
Analyze a project for cost drivers (Dockerfile, deps, cloud) (Pro).
When to use: when investigating spend on a project — scans Dockerfile, dependency manifests, and cloud configs for cost signals. When NOT to use: to enact cost reductions (use delimit_cost_optimize) or to manage alert rules (delimit_cost_alert).
Sibling contrast: delimit_cost_optimize finds reduction opportunities; this surfaces drivers (where the cost is).
Side effects: read-only on the target. Gated by require_premium. Calls backends.tools_data.cost_analyze.
Prerequisite: requires Delimit Pro. An unlicensed call returns {"error": ..., "upgrade": "https://delimit.ai/pricing"} without running.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | Project or infrastructure path to analyze. Default "." (cwd). | . |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent/destructive annotations, the description states the target is scanned read-only, that the tool is gated by require_premium, that it calls a specific backend function, and that an unlicensed call returns an upgrade payload without executing. This gives the agent a clear model of side effects and failure 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?
The description is more verbose than minimal but remains well structured with labeled sections and a front-loaded summary. There is minor redundancy between 'Gated by require_premium' and the later 'Prerequisite' sentence, so it is not perfectly 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?
For a simple one-parameter, read-only analysis tool with an output schema, the description covers purpose, usage boundaries, prerequisites, side effects, and unlicensed behavior. Nothing essential for calling it correctly is missing.
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 100% schema description coverage, the schema already documents target and its default. The description adds some context about what the scan looks for (Dockerfile, dependency manifests, cloud configs), but it does not introduce substantial new parameter semantics 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 opens with a specific verb and resource: 'Analyze a project for cost drivers (Dockerfile, deps, cloud)'. It later contrasts with delimit_cost_optimize and delimit_cost_alert, making it easy to distinguish this tool from the most relevant 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?
The 'When to use' section gives a concrete investigation scenario, and 'When NOT to use' explicitly routes to delimit_cost_optimize and delimit_cost_alert. This is unambiguous selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_cost_controlsDelimit Cost ControlsARead-onlyIdempotent
Manage MCP rate limits and session cost controls.
When to use: to inspect or adjust per-tool hourly rate limits and the session cost cap that throttle Delimit's call surface. When NOT to use: for project-cost analysis (use delimit_cost_analyze) or alert configuration (delimit_cost_alert).
Sibling contrast: delimit_cost_analyze inspects spend in your project; this manages our own per-session call quotas.
Side effects: action="set" / "reset" mutate the rate-limiter state. action="status" / "quota" are read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | New hourly call limit (used with action="set"). | |
| action | No | One of "status" (default), "quota", "set", "reset". | status |
| cost_cap | No | New session cost cap in USD (used with action="set"). | |
| tool_name | No | Tool name. Required for "quota" and "set" with limit. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description clearly discloses side effects ('action="set" / "reset" mutate the rate-limiter state'), which is excellent transparency in isolation. However, this directly contradicts the annotation readOnlyHint=true, which claims the tool makes no modifications. This is the same pattern as the create_record calibration example: a description claiming write operations while annotations declare read-only. The conflicting signals leave the agent unsure whether invoking this tool is safe.
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?
Well-structured with labeled sections (When to use, When NOT to use, Sibling contrast, Side effects) that make it easily scannable. Every sentence earns its place, and the most decision-relevant information is front-loaded. The format is exemplary for an agent-facing definition.
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 purpose, usage boundaries, sibling differentiation, and per-action side effects. An output schema exists, so return values don't need describing. Minor gaps: it doesn't distinguish what 'status' vs 'quota' actions each return, and the annotation contradiction undermines the otherwise complete safety picture. Still, nearly everything needed to call it correctly is present.
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 baseline is 3. The description's phrases ('per-tool hourly rate limits', 'session cost cap') reinforce the mapping to limit/cost_cap, and the side-effects section adds action-level semantics (which actions mutate vs read). But this largely restates what the schema already documents rather than adding meaningful new 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?
The opening line 'Manage MCP rate limits and session cost controls' uses a specific verb and resource, and the scope is unmistakable. It also distinguishes itself from siblings by explaining that delimit_cost_analyze inspects project spend while this manages per-session call quotas. An agent can clearly tell what this tool is for.
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', 'When NOT to use', and names the alternative tools (delimit_cost_analyze for project-cost analysis, delimit_cost_alert for alert configuration). The sibling contrast section further reinforces the decision boundary. No inference is required to choose correctly between this and related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_cost_optimizeDelimit Cost OptimizeARead-onlyIdempotent
Find cost optimization opportunities in a project (Pro).
When to use: after delimit_cost_analyze surfaces drivers, to get concrete suggestions: unused deps, oversized images, uncompressed assets. When NOT to use: to inventory current spend (delimit_cost_analyze) or manage threshold alerts (delimit_cost_alert).
Sibling contrast: delimit_cost_analyze identifies sources of cost; this proposes reductions.
Side effects: read-only on the target. Gated by require_premium. Calls backends.tools_data.cost_optimize.
Prerequisite: requires Delimit Pro. An unlicensed call returns {"error": ..., "upgrade": "https://delimit.ai/pricing"} without running.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | Project or infrastructure path to analyze. Default "." (cwd). | . |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/destructiveHint, and the description reinforces this in operational terms ('Side effects: read-only on the target'). It adds genuinely new behavioral context beyond annotations: the premium gating ('Gated by require_premium'), the exact unlicensed failure mode with the upgrade URL, that the call fails without running, and the internal backend routing ('Calls backends.tools_data.cost_optimize').
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?
Organized into labeled, scannable sections (When to use / When NOT to use / Sibling contrast / Side effects / Prerequisite) with the core purpose front-loaded. Every line carries distinct information; there is no filler or restatement of the 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?
Complete for a single-optional-parameter tool: purpose, use cases, exclusions, sibling differentiation, safety profile, licensing prerequisite, failure behavior, and backend identity are all covered. Return values are handled by the output schema, so no gap remains for an agent to invoke this 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%, so the schema fully documents the single 'target' parameter (path, default '.'). The description adds no parameter-level detail beyond the schema's own description, so the baseline 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?
Opens with a specific verb+resource: 'Find cost optimization opportunities in a project (Pro).' The sibling contrast line ('delimit_cost_analyze identifies sources of cost; this proposes reductions') explicitly differentiates it from the nearest sibling, so an agent can distinguish it without opening schemas.
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 delimit_cost_analyze surfaces drivers, to get concrete suggestions'), when-NOT-to-use ('to inventory current spend... or manage threshold alerts'), and names the alternatives (delimit_cost_analyze, delimit_cost_alert). The sequencing guidance ('after... surfaces drivers') is especially actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_daemon_classifyDelimit Daemon ClassifyARead-onlyIdempotent
Classify a ledger item's risk tier and suggested automation tool.
When to use: to preview what the autonomous daemon would do with a given ledger item (or the next automatable one). When NOT to use: to actually run an iteration (use delimit_daemon_run) or check daemon health (delimit_daemon_status).
Sibling contrast: delimit_daemon_status reads health; delimit_daemon_run executes; this previews the classification.
Side effects: read-only. Calls ai.daemon.classify_item / get_next_automatable_item / get_open_ledger_items.
| Name | Required | Description | Default |
|---|---|---|---|
| item_id | No | Specific ledger item id to classify. Empty = pick the next automatable item from the open ledger. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool read-only, idempotent, and non-destructive. The description adds further context by explicitly stating 'Side effects: read-only' and naming the internal functions it calls (ai.daemon.classify_item / get_next_automatable_item / get_open_ledger_items), which is valuable 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 tightly structured with clear sections: purpose, when to use, when not to use, sibling contrast, and side effects. Every sentence earns its place and key classification behavior 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?
With annotations covering safety, an output schema present, and a single fully-documented parameter, the description covers all essential guidance. The agent has enough information to select, invoke, and interpret this 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 description coverage is 100%, and the schema fully documents item_id including the empty-string behavior. The description reinforces this by mentioning 'next automatable one' but does not add meaning beyond what the schema already provides. 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 opens with a specific action and resource: 'Classify a ledger item's risk tier and suggested automation tool.' It also distinguishes itself from daemon_run and daemon_status, so an agent can tell exactly what this tool does relative to its closest 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?
The description provides explicit when-to-use and when-not-to-use guidance, naming delimit_daemon_run for executing and delimit_daemon_status for health checks. Sibling contrast is also stated clearly, leaving no ambiguity about selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_daemon_runDelimit Daemon RunA
Advance the autonomous daemon by N iterations (Pro).
When to use: to manually advance the daemon loop one or more iterations, e.g. for testing or scheduled cron-style execution. When NOT to use: for inspection only (use delimit_daemon_status) or to classify an item (delimit_daemon_classify).
Sibling contrast: delimit_daemon_status reads; delimit_daemon_classify decides; this drives the loop.
Side effects: in dry_run mode, logs actions without executing them. In live mode, executes the daemon's automatable actions. Calls ai.daemon.run_loop with a 5-second interval between iterations.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | If True (default), log actions but do not execute. | |
| iterations | No | Number of iterations. 0 = infinite. Default 1. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses the dry_run vs live mode side effects, that it calls ai.daemon.run_loop, and the 5-second interval between iterations. This gives the agent a clear picture of what executing the tool actually does.
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 well-structured with labeled sections, front-loads the core behavior, and avoids filler. Every sentence contributes either usage guidance, sibling differentiation, or behavioral transparency.
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 tool carries a safety-relevant readOnlyHint=false and destructiveHint=false, and the description explains the side-effectful behavior in both modes. An output schema exists so return-value documentation is not required here. The description is sufficient for correct selection and 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 description coverage is 100%, so both parameters are already fully documented in the schema. The description adds narrative context around dry_run and iterations but does not meaningfully extend the parameter semantics beyond what the schema provides; baseline 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?
The description opens with a specific verb and resource: 'Advance the autonomous daemon by N iterations.' It also explicitly contrasts itself with delimit_daemon_status and delimit_daemon_classify, so an agent can distinguish it from closely related 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?
It has a dedicated 'When to use' section with concrete examples like testing and cron-style execution, plus a 'When NOT to use' section naming delimit_daemon_status and delimit_daemon_classify as alternatives. The sibling contrast further clarifies the decision boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_daemon_statusDelimit Daemon StatusARead-onlyIdempotent
Report the autonomous daemon's status (loops, items, actions).
When to use: to inspect what the autonomous daemon has been doing recently and whether it's healthy. When NOT to use: to start a run (use delimit_daemon_run) or classify a pending item (delimit_daemon_classify).
Sibling contrast: delimit_daemon_run advances iterations; this reads runtime state.
Side effects: read-only. Calls ai.daemon.get_daemon_status.
Args: None.
Returns: Dict with loop counts, items processed, recent actions, next_steps.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though annotations already declare readOnlyHint and idempotentHint, the description adds meaningful behavioral detail: it states 'Side effects: read-only', explicitly reveals the underlying backend call ai.daemon.get_daemon_status, and clarifies that it reads runtime state. These details go beyond what annotations alone provide and leave no hidden 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?
The description is tightly structured with clear, scannable sections: purpose, when to use, when not to use, sibling contrast, side effects, args, and returns. Every sentence adds information, and the most critical usage guidance 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?
For a zero-parameter, read-only status tool with annotations covering safety and an output schema available, the description is fully adequate. It even enumerates the returned fields (loop counts, items processed, recent actions, next_steps), giving the agent a complete mental model with no missing context.
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 tool takes zero parameters and the input schema confirms this, so there is no parameter semantics burden. The description additionally states 'Args: None', removing any ambiguity for 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 begins with a specific verb and resource: 'Report the autonomous daemon's status', and lists the exact observed dimensions (loops, items, actions). It also explicitly differentiates itself from siblings like delimit_daemon_run, which advances iterations, making the tool's 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?
The description provides a dedicated 'When to use' section, a 'When NOT to use' section with named alternative tools, and a sibling contrast note. This is exemplary routing guidance: an agent knows exactly when to call this tool and when to call delimit_daemon_run or delimit_daemon_classify instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_data_backupDelimit Data BackupA
Back up SQLite and JSON data files to ~/.delimit/backups/.
When to use: before a risky migration or refactor that touches SQLite or JSON data, to capture a timestamped restore point. When NOT to use: to validate data integrity (use delimit_data_validate) or apply migrations (delimit_data_migrate).
Sibling contrast: delimit_data_validate inspects integrity; delimit_data_migrate runs migrations; this captures a backup.
Side effects: writes timestamped copies of SQLite + JSON files under ~/.delimit/backups/ via backends.tools_data.data_backup.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | Directory or file to back up. Default "." (cwd). | . |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses side effects beyond the annotations: writes timestamped copies to a specific location, captures a restore point, and does not claim to modify original files. The annotations destructiveHint=false and readOnlyHint=false are consistent with this behavior; 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 well-structured and front-loaded: purpose, when to use, when not to use, sibling contrast, and side effects are each given their own concise labeled section. Every sentence carries useful routing or safety information with no filler.
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 simple one-parameter tool with an output schema and safety annotations, the description covers purpose, trigger conditions, exclusions, alternatives, side effects, and destination. Nothing an agent needs to decide whether to call it or to call it safely is missing.
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 schema already documents target as the directory or file to back up and the default '.'. The description adds domain context about backing up SQLite and JSON data, but it does not materially expand parameter-level semantics 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?
Opens with a specific verb and resource: 'Back up SQLite and JSON data files to ~/.delimit/backups/.' It also explicitly contrasts itself with delimit_data_validate and delimit_data_migrate, so an agent can distinguish it from the most similar 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?
Provides explicit when-to-use guidance ('before a risky migration or refactor'), when-not-to-use guidance ('to validate data integrity... apply migrations'), and names the exact alternatives. This leaves no ambiguity about tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_data_migrateDelimit Data MigrateARead-onlyIdempotent
Inspect migration files (alembic / Django / Prisma / Knex) for status.
When to use: to audit pending and applied migrations before a deploy, or as a CI gate. When NOT to use: to actually apply migrations (this tool only inspects status) or back up data first (delimit_data_backup).
Sibling contrast: delimit_data_validate exercises data files; delimit_data_backup captures restore points; this reads migration status only.
Side effects: read-only inspection. Calls backends.tools_data.data_migrate.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | Project path to scan for migration files. Default "." (cwd). | . |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only and non-destructive, and the description reinforces this with 'read-only inspection' and 'this tool only inspects status.' It adds useful behavioral context that the tool does not apply migrations and names the backend call, going slightly 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 organized into clear, front-loaded sections: purpose, when to use, when not to use, sibling contrast, and side effects. Every sentence earns its place; the backend call detail is minor but does not bloat the description.
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 simple read-only tool with one optional parameter, an output schema, and strong annotations, the description is complete. It covers use cases, exclusions, safety profile, and scope without needing to explain return values since an output schema exists.
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 the single optional 'target' parameter is fully documented in the input schema. The description adds no additional parameter-level detail, but none is needed given the schema already explains the default and purpose.
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 opens with a specific verb and resource: 'Inspect migration files (alembic / Django / Prisma / Knex) for status.' It clearly distinguishes itself from siblings by naming delimit_data_validate and delimit_data_backup and stating what this tool does not do.
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 the tool ('to audit pending and applied migrations before a deploy, or as a CI gate') and when not to use it ('to actually apply migrations... or back up data first'). It also provides sibling contrast, leaving no ambiguity about which tool to select.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_data_validateDelimit Data ValidateARead-onlyIdempotent
Validate data files: JSON parse, CSV shape, SQLite integrity.
When to use: as a smoke check before relying on data files (CI pipelines, before migrations) to catch corruption early. When NOT to use: for migration status (use delimit_data_migrate) or backups (delimit_data_backup).
Sibling contrast: delimit_data_migrate inspects migration files; this exercises the data files themselves.
Side effects: read-only on the target. Calls backends.tools_data.data_validate.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | Directory or file path with data files. Default "." (cwd). | . |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds useful behavioral context by specifying the validation dimensions (JSON parse, CSV shape, SQLite integrity), stating the side effect is read-only, and noting it calls backends.tools_data.data_validate. It does not detail failure handling or output behavior, but output schema and annotations reduce that 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?
The description is compact, well-organized, and front-loaded with the primary purpose. Every section earns its place: what it validates, when to use it, when not to use it, sibling contrast, and side effects. No filler or redundant elaboration.
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 simple read-only validation tool with one optional parameter, an output schema, and full annotation coverage, the description is complete. It gives the agent sufficient context to decide when to call it, what it checks, and which siblings to use instead.
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 only parameter, target, is already documented as a directory or file path with data files and a default of '.'. The description does not add significant new meaning beyond the schema, so the 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?
The description opens with a specific verb and resource: 'Validate data files: JSON parse, CSV shape, SQLite integrity.' It clearly states what the tool operates on and what checks it performs, and it distinguishes itself from sibling delimit_data_migrate by noting that this tool exercises the data files themselves rather than migration files.
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 provides 'When to use' (smoke checks before relying on data files, CI pipelines, before migrations), 'When NOT to use' (migration status, backups), and names the alternative tools delimit_data_migrate and delimit_data_backup. It also adds a sibling contrast sentence, so an agent knows exactly when this tool is appropriate versus its siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_deliberateDelimit DeliberateA
Run multi-model consensus via AI-to-AI deliberation (Pro).
When to use: for foundational decisions (pricing, naming, public-facing copy framing, doctrine edits), external PR diffs, or any decision where cross-model contradiction-detection adds value. When NOT to use: for routine implementation choices (orchestrate in-thread or via subagent dispatch) — deliberation is for cross-checked confabulation, not capability.
Sibling contrast: delimit_models manages which providers can be called; this runs the actual panel. delimit_security_deliberate is the security-class variant.
Side effects: writes transcripts under save_path when provided. Models are called via configured providers; Free tier uses 3 builtin slots, Pro/Premium uses BYOK from ~/.delimit/models.json. Strategic / social scopes enforce a 3-model minimum and may invoke Grok as a tiebreaker.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | "dialogue" (short turns) or "debate" (long essays). Default "dialogue". | dialogue |
| scope | No | Optional scope override — "strategic", "social", or "operational". Empty = engine classifies from keywords. | |
| context | No | Background context shared to all models. | |
| question | Yes | The question to reach consensus on. Required. | |
| save_path | No | Optional file path to save the full transcript. | |
| max_rounds | No | Max rounds. Default 3 for debate, 6 for dialogue. | |
| context_files | No | Optional list of file paths whose contents are read server-side, redacted (secrets/PII), size-capped, and injected as a "Referenced Files" block so the panel can reason over real source (panelists have no filesystem access). Fails closed per file. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide readOnlyHint=false and destructiveHint=false, so the description carries most of the behavioral burden. It discloses side effects (transcript writes under save_path), external model calls through configured providers, tier-dependent model availability, and special constraints for strategic/social scopes including a 3-model minimum and possible Grok tiebreaker. This goes well beyond the bare 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 well-structured with clear headers for use cases, exclusions, sibling contrast, and side effects. It front-loads the core purpose and every sentence contributes distinct decision-relevant information, making the length justified rather than padded.
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, the description plus full input schema and output schema provide everything an agent needs: required parameter, supported modes, scope behavior, provider configuration, side effects, and when to avoid this tool. No critical information is missing.
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 7 parameters. The description adds no new parameter-level syntax or format details beyond what the schema provides, and therefore remains at the baseline 3 rather than needing to compensate.
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 opens with a specific verb phrase, 'Run multi-model consensus via AI-to-AI deliberation,' and names the exact resource. It explicitly differentiates from delimit_models and delimit_security_deliberate, so an agent can distinguish this tool from its siblings without opening their schemas.
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 an explicit 'When to use' list with concrete decision types such as pricing, naming, copy framing, doctrine edits, and external PR diffs. It also gives a clear 'When NOT to use' exclusion for routine implementation choices and names alternatives like in-thread orchestration or subagent dispatch.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_deliberation_statusDelimit Deliberation StatusARead-onlyIdempotent
Check deliberation usage and mode (hosted free tier vs BYOK).
When to use: before invoking delimit_deliberate, to confirm whether you are still inside the hosted free-tier quota or running BYOK (bring-your-own-keys), and to read the signed-in OAuth state. When NOT to use: to run an actual panel (use delimit_deliberate) or to manage provider keys (delimit_models).
Sibling contrast: delimit_deliberate runs the panel; delimit_models manages provider keys; this is the lightweight pre-flight status check.
Side effects: read-only. Calls ai.deliberation.get_deliberation_status which reads ~/.delimit state.
LED-2092: hosted access now requires a delimit.ai account.
Args: None.
Returns: Dict with: oauth_required, oauth_signed_in, lifetime_used, lifetime_remaining, daily_cap_remaining, signin_url, plus the legacy hosted_used / hosted_remaining / hosted_limit fields retained for backward compatibility with scripted callers.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive; the description adds that it reads ~/.delimit state, exposes OAuth signed-in status, retains legacy fields, and notes the LED-2092 account requirement. 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?
Purpose is front-loaded in the first sentence, with clearly labeled When/When-not/Sibling contrast/Side effects/Returns sections. Although detailed, every section adds actionable context rather than filler.
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 zero-parameter, read-only status check with an output schema, the description covers invocation timing, return fields, legacy compatibility, and backend state. Nothing an agent needs to select and call it correctly is missing.
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 are zero parameters, so there is little to explain; the description explicitly states 'Args: None' and the schema confirms empty properties. This is the appropriate baseline for a no-parameter tool.
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?
Opens with 'Check deliberation usage and mode', a specific verb plus resource, and explicitly contrasts itself with delimit_deliberate and delimit_models. An agent can distinguish this from all siblings without inspecting schemas.
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 (before delimit_deliberate to confirm quota/BYOK/OAuth state) and 'When NOT to use' with named alternatives. This is strong routing guidance that leaves no ambiguity about invocation context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_deploy_buildDelimit Deploy BuildA
Build container images for an app at a specific git ref (Pro).
When to use: as the second step of the deploy chain after delimit_deploy_plan has succeeded and you need SHA-tagged container images locally before delimit_deploy_publish pushes them to the registry. The full chain is plan -> build -> publish -> verify -> (rollback on failure). When NOT to use: to push existing images to a registry (use delimit_deploy_publish), to deploy a site (delimit_deploy_site), to publish an npm package (delimit_deploy_npm), or to start the full chain (delimit_deploy_plan).
Sibling contrast: deploy_plan plans, this builds local images, deploy_publish pushes to the registry, deploy_verify checks rollout health, deploy_rollback reverts. Compared to delimit_deploy_site (static-site deploy) and delimit_deploy_npm (npm publish), this is the container path.
Side effects: gated by require_premium — unlicensed callers receive a license payload and no build runs. On a licensed call, invokes backends.deploy_bridge.build which shells out to the local container builder (e.g. docker buildx) — this consumes local disk for image layers and CPU for the build. No network push at this step (that is delivery_publish). The response is routed through _with_next_steps.
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | Application name (project key in the deploy backend). | |
| git_ref | No | Git ref (branch/tag/SHA). Default None = backend HEAD. | |
| repo_path | No | Explicit Git worktree root. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations. It discloses the premium gating behavior ('require_premium — unlicensed callers receive a license payload and no build runs'), the internal backend invocation, the local resource consumption (disk and CPU), that no network push happens at this step, and that the response is routed through _with_next_steps. This is rich behavioral context that annotations do not provide.
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 detailed but relevant, with clear section headers and front-loaded purpose. The 'Sibling contrast' section is somewhat redundant with the 'When NOT to use' section, repeating similar routing guidance. Still, it earns a 4 because every section serves a clear decision-making purpose and the organization 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 tool has an output schema, a complete set of 3 parameters, and rich context about the deploy chain, prerequisites, side effects, and alternatives, nothing critical is missing. The description covers licensing gate, resource impact, chain position, and routing behavior. An agent has enough to decide when and how to invoke it 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%, so each parameter (app, git_ref, repo_path) is already documented in the schema. The description adds context around the git_ref default ('Default None = backend HEAD') but mostly relies on the schema. A baseline of 3 is appropriate since the schema covers parameter meaning 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 states a specific verb+resource ('Build container images for an app at a specific git ref') and distinguishes itself from siblings by naming the deploy chain step. It clearly identifies this as the build step producing local SHA-tagged images, not the plan or publish step.
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', 'When NOT to use', and a full chain (plan -> build -> publish -> verify -> rollback). It names the alternative tools (delimit_deploy_publish, delimit_deploy_site, delimit_deploy_npm) and explains when they are appropriate instead. The sibling contrast section reinforces the routing decision clearly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
_delimit_deploy_implDelimit Deploy ImplADestructive
Unified deployment entry point — dispatches to one of eight actions (Pro).
When to use: as the single MCP-registered deploy surface (delimit_deploy) when the caller wants to pick the deploy operation by name in one call rather than choosing a specific delimit_deploy_* alias. Covers the full container chain (plan -> build -> publish -> verify -> rollback), the deploy-state read (status), and the two non-container ship paths (site / npm). When NOT to use: from internal code paths or when you want the operation's behavior and gate to surface at the right name — prefer the specific alias (delimit_deploy_plan, delimit_deploy_build, delimit_deploy_publish, delimit_deploy_verify, delimit_deploy_rollback, delimit_deploy_status, delimit_deploy_site, delimit_deploy_npm). For a pure runtime health check use delimit_obs_status; for a pre-deploy smoke test use delimit_test_smoke; for release-tracking metadata use delimit_release_status.
Sibling contrast: each delimit_deploy_ wrapper is a thin alias over this implementation (they exist so the action's docstring lives at the right name). This is the dispatch core. The "plan" action additionally shares logic with delimit_deploy_plan via the internal _deploy_plan_chain helper.
Side effects: ALL actions are gated by require_premium — unlicensed callers receive a license payload and no backend call is made. Errors are deterministic: an unrecognized action returns {"error": "Unknown action ''. Valid: ..."} before any gate or backend call. Per action:
"plan": delegates to _deploy_plan_chain (gate key "deploy_plan"). Read-mostly but ORCHESTRATES a chain: a worktree-sanity precheck, then delimit_security_audit (FAIL-CLOSED — halts with status="blocked" on audit error or any critical finding without producing a plan), then the deploy-bridge plan, then a best-effort delimit_gov_evaluate. Produces no deploy artifact itself.
"build": gate "deploy_build". WRITES locally — shells out to the container builder (consumes local disk/CPU for image layers). No network push at this step.
"publish": gate "deploy_publish". NETWORK WRITE — pushes previously built images to the configured container registry.
"verify": gate "deploy_verify". Read-only network PROBES (HTTP health checks, container/dependency inspection) of a deployed revision. May return partial results on backends without health endpoints.
"rollback": gate "deploy_rollback". MUTATES the running environment to point at to_sha (reversal-only).
"status": gate "deploy_status". READ-ONLY query of the deploy state store. No write, no probe.
"site": repo_path is required and project_path resolves inside it. gate "deploy_site". LOCAL scoped git ops + a NETWORK Vercel build. The default uses only pre-staged changes; explicit paths are the only way the tool stages files. A post-push Vercel timeout returns pending with continuation identifiers instead of closing the transport.
"npm": gate "deploy_npm". A PRODUCTION DEPLOY — bumps package.json (LOCAL write), runs prepublishOnly, npm pack, then npm publish (a publicly-visible NETWORK write, effectively not undoable). dry_run=True suppresses only the final publish; the bump and pack still run. Every result is wrapped via _with_next_steps for orchestrator hints.
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | Application name / project key in the deploy backend. Used by "plan", "build", "publish", "verify", "rollback", "status". Required for a real container operation. (Ignored by "site" and "npm".) | |
| env | No | Target environment, typically "staging" or "production". Used by "plan", "verify", "rollback", "status". | |
| tag | No | npm dist-tag. Used by "npm" only. Default "latest"; use "next" or a custom tag to avoid auto-installing the new version for existing users. | latest |
| bump | No | Semver bump "patch" (default) / "minor" / "major". Used by "npm" only. | patch |
| paths | No | ||
| action | No | Which deploy operation to perform. One of "plan", "build", "npm", "publish", "site", "status", "verify", "rollback". Default "status". Case/space-insensitive (lowered + stripped). Other values return a deterministic {"error": ...}. | status |
| to_sha | No | SHA to roll back to. Used by "rollback" only. None lets the backend select the previous deployed SHA. | |
| dry_run | No | If True, run the npm chain without the final publish. Used by "npm" only. Default False. | |
| git_ref | No | Git ref (branch/tag/SHA). Used by "plan", "build", "publish", "verify". Default None = backend HEAD; drives the image tag for "build". | |
| message | No | Git commit message. Used by "site" only. | |
| venture | No | ||
| repo_path | No | Required Git worktree root for every deploy action. | |
| staged_only | No | ||
| target_urls | No | ||
| project_path | No | Repository-relative site/package directory. It must remain inside repo_path. | . |
| vercel_timeout | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description richly discloses behavior far beyond the readOnlyHint=false/destructiveHint=true annotations: all actions are gated by require_premium, unrecognized actions return a deterministic error before any gate/backend call, plan is fail-closed, build writes locally, publish is a network write, rollback mutates the environment, status is read-only, and npm includes a non-undoable public publish. This is exemplary behavioral 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?
The description is long but every section earns its place: when to use, when not to use, sibling contrast, side effects, and per-action breakdown. It is front-loaded with the core purpose and uses structured bullets for the eight actions, making a complex dispatch surface navigable rather than bloated.
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 high complexity (16 params, 8 actions, multiple side-effect profiles), the description is complete: it covers action selection, per-action gates, side effects, error behavior, parameter relevance, and even continuation behavior on Vercel timeout. The output schema is present, so return-value details do not need to be re-explained.
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 69%, so the description carries meaningful weight. It adds semantics beyond the schema: dry_run suppresses only the final publish while bump and pack still run, repo_path is required for every deploy action, site defaults to pre-staged changes with explicit paths as the only staging mechanism, and Vercel timeout yields pending continuation identifiers. A few parameters (venture, target_urls) get no extra explanation, but the schema covers the main ones.
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 opens with a specific verb and resource: 'Unified deployment entry point — dispatches to one of eight actions (Pro).' It clearly names the exact operations covered and explicitly contrasts itself with the thin aliases delimit_deploy_plan/build/publish/etc., making the dispatch-core role 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?
The description has explicit 'When to use' and 'When NOT to use' sections. It names the preferred aliases for action-specific behavior, and routes health checks to delimit_obs_status, smoke tests to delimit_test_smoke, and release metadata to delimit_release_status. No inference is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_deploy_npmDelimit Deploy NpmA
Publish an npm package: version bump, pack, and push to registry (Pro).
When to use: to ship a new version of an npm-published package
(delimit-cli, a venture SDK, etc.). This is a PRODUCTION DEPLOY
— every successful publish reaches real users, so it must be
preceded by the deploy gate chain (delimit_security_audit ->
delimit_test_smoke -> delimit_changelog -> delimit_deploy_plan)
and explicit founder approval per the customer-protection rule.
When NOT to use: to deploy a site (use delimit_deploy_site), to
push container images (delimit_deploy_publish), to dry-run
locally (npm pack --dry-run is faster), or to test the chain
without publishing — for that, pass dry_run=True here.
Sibling contrast: delimit_deploy_site ships UI / static; this
ships npm tarballs to the registry. Compared to running npm publish by hand, this wraps the chain with a bump,
governance gate, and is the auditable surface that other tools
can chain against.
Side effects: gated by require_premium — unlicensed callers
receive a license payload and no publish runs. On a licensed
call, invokes backends.tools_infra.deploy_npm which runs the
npm publish chain: (1) bumps the version in package.json
(LOCAL write to the source tree), (2) runs the project's
prepublishOnly hook if present (which may build or sync
artifacts — note the 2026-05-08 v4.5.12 prepublish regression),
(3) runs npm pack and (4) npm publish to the configured
registry — a NETWORK write that is publicly visible and
NOT undoable except by an unpublish (heavily restricted by
npm). dry_run=True suppresses step (4) only — the version
bump and pack still happen so the chain can be exercised.
Prerequisite: requires Delimit Pro. An unlicensed call returns {"error": ..., "upgrade": "https://delimit.ai/pricing"} without running.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | npm dist-tag for the publish. Default "latest". | latest |
| bump | No | Semver bump — "patch" (default), "minor", or "major". | patch |
| dry_run | No | If True, run the chain without publishing. Default False. | |
| repo_path | No | Required explicit Git worktree/package root; never derived from cwd. | |
| project_path | No | Deprecated compatibility field; repo_path is authoritative. | . |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond readOnlyHint=false, the description discloses step-by-step side effects: local package.json bump, prepublishOnly hook execution (including a known regression), npm pack, and npm publish as a publicly visible network write that is not undoable. It also covers dry_run's exact scope (suppresses step 4 only) and the unlicensed-caller behavior, giving the agent a precise model of consequences. This does not contradict destructiveHint=false because publishing is not deleting data, but it correctly labels the side effect as irreversible.
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 long but every paragraph earns its place: purpose, routing guidance, sibling contrast, side effects, and prerequisites are each one dense block with no filler. It front-loads the core action and immediately follows with deployment-safety context.
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 production deploy tool, the description fully covers what will happen, what won't happen in dry run, what must precede it, who can call it, and which sibling tools handle other cases. The output schema exists, so return-value documentation is not the description's job; nothing needed for correct invocation is missing.
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?
Input schema already covers all five parameters (100%), so baseline is 3; the description earns extra by adding one important behavioral nuance: dry_run=True still performs the version bump and pack, not just a no-op, so the chain can be exercised. It also clarifies that this is a Pro-gated operation, which indirectly prepares the agent for a license-related response. No per-parameter details beyond what the schema already provides are added, so 4 rather than 5.
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 opens with a precise action and resource: 'Publish an npm package: version bump, pack, and push to registry (Pro).' It distinguishes itself from delimit_deploy_site and delimit_deploy_publish by naming exactly what it ships (npm tarballs) versus sites or container images, so an agent can disambiguate immediately.
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 'When to use' and 'When NOT to use' sections are explicit, naming the correct alternative for each excluded case (delimit_deploy_site, delimit_deploy_publish, local npm pack --dry-run) and even pointing to dry_run=True for testing the chain without publishing. It also states the required preceding chain and founder approval, leaving no ambiguity about when invoking it is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_deploy_planDelimit Deploy PlanA
Generate a deploy plan with security preflight (Pro).
When to use: as the first step in the deploy chain. The plan enumerates build steps and bakes in a security audit + governance evaluation before any artifact is produced. When NOT to use: to actually build images (use delimit_deploy_build) or to ship code (use delimit_deploy_publish).
Sibling contrast: this is the planning gate; delimit_deploy_build and delimit_deploy_publish are the execution steps that follow.
Side effects: auto-chains delimit_security_audit (fail-closed on critical findings), then delimit_gov_evaluate, then the underlying deploy_plan handler. Halts and returns status="blocked" on any critical security finding without producing a plan.
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | Application identity (not a filesystem path). Required. | |
| env | No | Target environment, typically "staging" or "production". | |
| git_ref | No | Git ref (branch/tag/SHA). Optional; defaults to HEAD. | |
| venture | No | Optional ledger venture identity; repository context remains authoritative. | |
| repo_path | No | Explicit Git worktree root used for health, security, governance, evidence, and attribution. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, destructiveHint=false), the description discloses side effects in detail: it auto-chains delimit_security_audit and delimit_gov_evaluate before the underlying deploy_plan handler, halts on critical findings, and returns status="blocked" without producing a plan. This is substantial behavioral context that the annotations do not provide.
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 organized into clear labeled sections: purpose, when to use, when not to use, sibling contrast, and side effects. Every section adds distinct value, and the key purpose is front-loaded before any secondary details.
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 tool's role in the deploy chain, exclusions, side effects, and failure behavior. An output schema exists, so return-value documentation is not required here. The only minor gap is that it doesn't explain what happens if the tool is invoked without Pro access or how auth is handled, but this is not essential for correct 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 description coverage is 100%, so the schema already documents all five parameters. The description does not add parameter-level meaning, but it doesn't need to because the schema handles it. This matches the baseline for 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 opens with a specific verb and resource: 'Generate a deploy plan with security preflight.' It clearly distinguishes itself from delimit_deploy_build and delimit_deploy_publish by framing itself as the planning gate, so an agent can immediately tell what this tool does relative to its 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?
The description gives explicit 'When to use' and 'When NOT to use' guidance, names the exact alternative tools, and explains the positioning in the deploy chain. This removes ambiguity about when the agent should select this tool versus the build or publish steps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_deploy_publishDelimit Deploy PublishA
Publish previously built images to the registry (Pro).
When to use: after delimit_deploy_build has produced images locally. When NOT to use: to build images (delimit_deploy_build) or to start the deploy chain (delimit_deploy_plan).
Sibling contrast: deploy_build produces local images; this pushes them to the registry; deploy_verify confirms rollout health.
Side effects: gated by require_premium. Calls backends.deploy_bridge.publish, which performs network writes to the configured container registry.
Prerequisite: requires Delimit Pro. An unlicensed call returns {"error": ..., "upgrade": "https://delimit.ai/pricing"} without running.
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | Application name (project key in the deploy backend). | |
| git_ref | No | Git ref the images were built at. Default None. | |
| repo_path | No | Explicit Git worktree root. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations only set readOnlyHint=false and destructiveHint=false, so the description carries the transparency burden. It discloses that publish is gated by require_premium, calls backends.deploy_bridge.publish, performs network writes to the registry, and returns a specific unlicensed response without running. This is valuable behavioral context an agent cannot infer from annotations alone.
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 organized into labeled, scannable sections and front-loads the core action before caveats. Every section serves a purpose: what it does, when to use it, when not to, side effects, and prerequisite. Minor redundancy around the Pro requirement is acceptable and does not reduce clarity.
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 mutating publish operation with an output schema, the description covers the essential context: position in the deploy flow, side effects, licensing failure mode, and sibling roles. Parameters are fully covered by the input schema and return values by the output schema. No material gap remains for correct 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?
Input schema coverage is 100%, with descriptive comments for app, git_ref, and repo_path. The description does not add parameter-specific detail beyond what the schema already provides. A baseline of 3 is appropriate when the schema fully documents the 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?
The opening sentence uses a specific action and resource: 'Publish previously built images to the registry (Pro)'. It distinguishes this tool from siblings by naming delimit_deploy_build as the local-image producer and delimit_deploy_verify as the rollout-health checker. This goes well beyond restating the title.
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 has explicit 'When to use' and 'When NOT to use' guidance, directing the agent to use this after delimit_deploy_build has produced local images. It names the alternatives for building and starting the deploy chain, and contrasts with delimit_deploy_verify. Tool selection is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_deploy_rollbackDelimit Deploy RollbackADestructive
Roll back an environment to a previous SHA (Pro).
When to use: when delimit_deploy_verify shows a regression and you need to revert the running deployment to a known-good revision. When NOT to use: to deploy a new version forward (delimit_deploy_plan -> _build -> _publish) — rollback is reversal-only.
Sibling contrast: delimit_deploy_publish moves an env forward; this moves it back to a prior to_sha.
Side effects: gated by require_premium. Calls backends.deploy_bridge.rollback which mutates the running environment to point at to_sha.
Prerequisite: requires Delimit Pro. An unlicensed call returns {"error": ..., "upgrade": "https://delimit.ai/pricing"} without running.
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | Application name. | |
| env | No | Target environment. | |
| to_sha | No | Target SHA to roll back to. If None, the backend selects the previous deployed SHA. | |
| repo_path | No | Explicit Git worktree root. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, but the description adds substantial behavioral detail: the call is gated by require_premium, invokes backends.deploy_bridge.rollback, mutates the running environment, and returns a specific error payload with an upgrade URL when unlicensed. This goes well beyond the annotation hints and clearly sets expectations for side effects and failure 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?
The description is well structured with clear labeled sections: purpose, when to use, when not to use, sibling contrast, side effects, and prerequisite. Every sentence adds necessary information, and the most important scoping details are 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 and the presence of both input and output schemas, the description covers all essential operational guidance: trigger condition, exclusion criteria, reversal-only behavior, side effects, licensing prerequisite, and failure mode. No critical information needed to invoke it correctly is missing.
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 each parameter already has its own description. The tool description adds only minimal extra insight by referencing 'prior to_sha,' while the schema already explains that null selects the previous deployed SHA. The schema carries the semantic weight, so 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 opens with a clear verb and resource: 'Roll back an environment to a previous SHA.' It also distinguishes the tool from delimit_deploy_publish by stating that publish moves forward while this moves backward, so an agent can identify the correct tool without ambiguity.
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 'When to use' and 'When NOT to use' sections define the exact scenario (delimit_deploy_verify shows a regression) and explicitly rule out forward deploys. It also names the sibling tool and the condition that selects it, leaving no inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_deploy_siteDelimit Deploy SiteADestructive
Ship a static / Next.js site via git push to the Vercel pipeline (Pro).
When to use: to deploy UI / site changes (typically delimit-ui or a venture marketing site) — this performs the commit, push, and triggers the Vercel build that produces the production deployment. Pair with delimit_deploy_verify on the resulting deploy URL to confirm rollout health. When NOT to use: to publish an npm package (use delimit_deploy_npm), to push container images (delimit_deploy_publish / delimit_deploy_build), or to roll back (delimit_deploy_rollback).
Sibling contrast: delimit_deploy_publish ships container
images; delimit_deploy_npm publishes packages; this is the
static-site / Vercel flavour. Compared to running git push
by hand, this wraps the push with sanitisation, governance
hooks, and (for delimit-ui) automatic ChatOps env-var
injection from CHATOPS_AUTH_TOKEN.
Side effects: requires repo_path and is gated by require_premium. project_path must remain inside repo_path. The safe default commits only the existing index; staged_only=false requires explicit repo-relative paths and never uses git add -A. Vercel binding is pulled/validated before Git mutation. A timeout after push returns status=pending, commit SHA, and a delimit_deploy_verify continuation rather than raising. On success this performs LOCAL git operations and triggers a NETWORK deploy (Vercel build webhook). For the delimit-ui project, automatically injects ChatOps env vars from the CHATOPS_AUTH_TOKEN environment variable into the build context. No rollback — use delimit_deploy_rollback if the deploy regresses.
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | Deployment application identity, separate from filesystem context. | |
| paths | No | Explicit repo-relative paths to stage; set staged_only=false when used. | |
| message | No | Git commit message for the deploy commit. | |
| repo_path | No | Required explicit Git worktree root; never derived from MCP server cwd. | |
| staged_only | No | Deploy only the existing index. Safe default: true. | |
| project_path | No | Site directory inside repo_path, or an absolute path inside it. | . |
| vercel_timeout | No | Seconds to wait for Vercel after push before returning pending (10-600). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by disclosing local git mutation plus a network Vercel deploy, pre-validation of the Vercel binding, timeout behavior returning status=pending with an SHA, the absence of rollback, and the staged_only safety semantics. It also correctly aligns with destructiveHint=true and readOnlyHint=false, so there is 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 well-organized with clear sections and front-loaded purpose, but it repeats the ChatOps env-var injection detail in two separate paragraphs and is somewhat longer than necessary. Minor trimming would make it more concise while preserving all the valuable context.
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, network-triggering 7-parameter tool, the description covers prerequisites, when-not-to-use, side effects, timeout fallback behavior, and the rollback alternative. Since an output schema exists, the return-value details do not need to be restated here, making this description complete for safe and correct 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 already 100%, so the baseline is 3, but the description adds meaningful constraints: repo_path must be an explicit worktree root, project_path must remain inside repo_path, and staged_only=false requires explicit paths and never uses git add -A. This adds value beyond the schema, though some parameter-specific details are still left to 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 first sentence names a concrete action ('Ship a static / Next.js site via git push to the Vercel pipeline') and the sibling contrast explicitly distinguishes it from delimit_deploy_publish and delimit_deploy_npm. This gives the agent an unambiguous model of what the tool does and how it differs from nearby deploy 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 contains explicit 'When to use' and 'When NOT to use' sections, names the correct siblings for npm, container, and rollback flows, and tells the agent to pair with delimit_deploy_verify on the resulting URL. This leaves no ambiguity about when this tool is the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_deploy_statusDelimit Deploy StatusA
Read the current rollout metadata for an app/env (Pro).
When to use: to inspect the currently deployed SHA, rollout state, and any in-progress deploy without actually probing the running app. Useful for "what is live right now?" questions and for the deploy dashboard. When NOT to use: for active runtime health probes (use delimit_deploy_verify), for steady-state observability metrics (delimit_obs_metrics / delimit_obs_status), or to deploy a change (delimit_deploy_plan / delimit_deploy_build).
Sibling contrast: delimit_deploy_verify exercises the running app via probes; this reads deploy-system metadata only. delimit_release_status is the sibling on the release-tracking side (versions, history). Compared to a registry inspection, this reports rollout state, not just image presence.
Side effects: read-only against the deploy backend and gated by require_premium — unlicensed callers receive a license payload and no query runs. On a licensed call, invokes backends.deploy_bridge.status which queries the deploy state store. No write, no probe, no notification. Response routed through _with_next_steps.
Prerequisite: requires Delimit Pro. An unlicensed call returns {"error": ..., "upgrade": "https://delimit.ai/pricing"} without running.
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | Application name. | |
| env | No | Target environment. | |
| repo_path | No | Explicit Git worktree root. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is behaviorally rich, stating read-only behavior, no write/probe/notification, Pro licensing gating, and the internal backend call. However, the annotations declare readOnlyHint=false, which directly contradicts the description's explicit read-only claim. Per the rubric, a description that contradicts annotations receives a score of 1, and this is an annotation 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 well-structured and front-loaded, with clear sections for purpose, usage, non-usage, sibling contrast, side effects, and prerequisites. It is longer than minimal, but most content earns its place. Minor redundancy exists: Pro licensing is mentioned both as a gating side effect and as a prerequisite, and the registry-inspection contrast is somewhat peripheral.
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 use cases, exclusions, licensing prerequisites, side effects, internal behavior, and response routing, while the output schema accounts for return values. It is nearly complete, but the conflicting readOnlyHint annotation leaves the safety profile unreliable, and the optional parameter behavior (especially repo_path) is not elaborated beyond the 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 100%, so the input schema already documents all three parameters. The tool description does not add parameter-level detail beyond the schema, but it does not need to compensate for a coverage gap. 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 opens with a specific verb and resource: 'Read the current rollout metadata for an app/env.' It then concretely lists what is inspected (deployed SHA, rollout state, in-progress deploy) and contrasts with delimit_deploy_verify and delimit_release_status, making sibling differentiation explicit.
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 an explicit 'When to use' section and an equally explicit 'When NOT to use' section, naming exact sibling alternatives such as delimit_deploy_verify, delimit_obs_metrics, delimit_obs_status, delimit_deploy_plan, and delimit_release_status. An agent can determine routing without inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_deploy_verifyDelimit Deploy VerifyA
Probe a freshly-deployed revision's health — experimental (Pro).
When to use: immediately after delimit_deploy_publish has rolled out a new revision, to confirm the new SHA is actually healthy before declaring the deploy done and closing out the chain (delimit_deploy_verify -> delimit_evidence_collect -> delimit_ledger_done -> delimit_notify). If this returns unhealthy, the next step is delimit_deploy_rollback. When NOT to use: for steady-state runtime health checks (use delimit_obs_status / delimit_obs_metrics), to read deploy-system metadata only (delimit_deploy_status), or for a smoke test before deploy (delimit_test_smoke).
Sibling contrast: delimit_deploy_status reads deploy-system metadata only; this actively probes the running deployment. delimit_obs_status is the steady-state observability surface; this is post-deploy-only.
Side effects: gated by require_premium — unlicensed callers receive a license payload and no probe runs. On a licensed call, invokes backends.deploy_bridge.verify which performs network health checks against the deployed app (HTTP probes, container inspection, dependency reachability). No write. Marked EXPERIMENTAL — health logic may return partial results on backends without health endpoints; do not treat as authoritative for runtime SLOs.
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | Application identity; selects only this app's targets. | |
| env | No | Target environment ("staging" or "production"). | |
| git_ref | No | Optional git ref the deploy targets. | |
| repo_path | No | Explicit Git worktree root containing deploy target configuration. | |
| target_urls | No | Optional app-specific HTTPS targets; never expands to the global fleet. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by disclosing license gating via require_premium, the backend invocation, the network checks performed, the absence of writes, and the experimental nature with possible partial results. The readOnlyHint=false is consistent with the side-effecting license gating and backend probe, while 'No write' adds useful precision about state mutation.
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 longer than average but well-organized with labeled sections and a front-loaded purpose. Some redundancy exists—'experimental' appears twice and the sibling contrast partially repeats the when-not guidance—but the structure makes it easy for an agent to extract the relevant decision information quickly.
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 input parameters are fully covered by the schema, the description supplies the missing operational context: workflow position, rollback path, license gating, backend behavior, and experimental caveats. Nothing an agent needs to decide when and how to invoke this tool is 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 100%, so the schema already documents all five parameters. The description adds no parameter-specific meaning beyond naming the verification context, and does not clarify which optional parameters are typically expected for a verification call. Baseline 3 is appropriate because the schema carries the parameter burden.
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 opens with a specific verb and resource: 'Probe a freshly-deployed revision's health.' It clearly distinguishes this tool from delimit_deploy_status, delimit_obs_status, and delimit_test_smoke, and places it within the deploy workflow. An agent can immediately understand what this tool does and how it differs from close 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?
The description gives explicit when-to-use guidance ('immediately after delimit_deploy_publish'), names the downstream chain, and specifies the rollback path if health is unhealthy. It also provides a dedicated 'When NOT to use' section with concrete alternatives for steady-state checks, metadata reads, and pre-deploy smoke tests.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_design_component_libraryDelimit Design Component LibraryA
Scan a project for React/Vue/Svelte components and emit a catalog.
When to use: to inventory a project's UI components for review, docs, or design-system curation. When NOT to use: to generate a single component (delimit_design_generate_component) or stories (delimit_story_generate).
Sibling contrast: delimit_design_generate_component creates one; this lists what already exists.
Side effects: read-only scan via backends.ui_bridge.design_component_library. Writes nothing.
| Name | Required | Description | Default |
|---|---|---|---|
| project_path | Yes | Project path to scan. Required. | |
| output_format | No | One of "json" (default) or "markdown". | json |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description explicitly discloses side effects: 'read-only scan' and 'Writes nothing.' Since readOnlyHint is false, this goes beyond the annotations and gives the agent concrete safety information that the structured metadata does not provide.
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?
Every section earns its place: purpose, when to use, when not to use, sibling contrast, and side effects. The structure is scannable and free of filler.
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 only two simple parameters, a present output schema, and clear side-effect disclosure, the description is fully complete for an agent to select and invoke the tool correctly. No critical context is missing.
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 fully documents project_path and output_format. The description adds no parameter-level detail, but none is needed; 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?
Description opens with a specific verb and resource: 'Scan a project for React/Vue/Svelte components and emit a catalog.' It clearly differentiates from sibling tools by stating it lists existing components rather than generating new ones.
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 'When to use' and 'When NOT to use' sections name the alternative tools delimit_design_generate_component and delimit_story_generate. The sibling contrast sentence reinforces the selection boundary, leaving no ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_design_extract_tokensDelimit Design Extract TokensA
Extract design tokens from a project's CSS/SCSS/Tailwind config.
When to use: to inventory or generate design tokens before creating a Tailwind config or component scaffold. When NOT to use: to scaffold a component (use delimit_design_generate_component) or generate tailwind config (delimit_design_generate_tailwind).
Sibling contrast: delimit_design_generate_tailwind builds a config from these tokens; this extracts them.
Side effects: read-only scan of local CSS/Tailwind. Figma API integration auto-activates when a Figma token is found in FIGMA_TOKEN env var, ~/.delimit/secrets/figma.json, or via delimit_secret_store. Calls backends.ui_bridge.design_extract_tokens. Coerces token_types via _coerce_list_arg.
| Name | Required | Description | Default |
|---|---|---|---|
| token_types | No | Token types — "colors", "typography", "spacing", "breakpoints". Comma string or list. None = all. | |
| project_path | No | Project directory to scan. Default = cwd. | |
| figma_file_key | No | Optional Figma file key (uses Figma API if a token is available). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses useful behavior such as Figma API auto-activation, secret lookup paths, backend calls, and token_types coercion. However, it states the operation is a 'read-only scan,' while the annotation readOnlyHint is false. Because readOnlyHint=false signals that the tool may modify state, this is an annotation contradiction, so the score is 1 per the rubric.
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 well organized: purpose, usage guidance, sibling contrast, then side effects. Some internal identifiers like backends.ui_bridge.design_extract_tokens add noise, but the structure is clear 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?
The description covers what the tool does, when to use it, when not to, sibling contrast, side effects, and Figma credential discovery. With an output schema present, return values need no explanation; the only completeness concern is the safety contradiction noted above.
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?
Input schema coverage is 100% and each parameter already has a description, default, and token_types values. The description's mention of _coerce_list_arg adds a minor implementation detail but does not materially improve 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 opens with a specific verb and resource: 'Extract design tokens from a project's CSS/SCSS/Tailwind config.' It also names sibling tools it is not, so an agent can distinguish it from delimit_design_generate_tailwind and delimit_design_generate_component.
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?
It explicitly provides 'When to use,' 'When NOT to use,' and names the alternative tools for the excluded cases. This is exactly the routing guidance an agent needs and leaves no ambiguity about when to select this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_design_generate_componentDelimit Design Generate ComponentA
Generate a React/Next.js component skeleton with Tailwind support.
When to use: to scaffold a new component (.tsx) with props interface and Tailwind class structure. When NOT to use: to generate stories for an existing component (use delimit_story_generate) or extract design tokens (delimit_design_extract_tokens).
Sibling contrast: delimit_story_generate adds stories to a component; this creates the component itself.
Side effects: writes a new component file (.tsx) under output_path or components//.tsx via backends.ui_bridge.design_generate_component. Detects Tailwind config inside project_path.
| Name | Required | Description | Default |
|---|---|---|---|
| output_path | No | Output file path. Default = components/<Name>/<Name>.tsx. | |
| project_path | No | Project root for Tailwind detection. | |
| figma_node_id | No | Optional Figma node ID (reserved for future use). | |
| component_name | Yes | Component name (PascalCase). Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag readOnlyHint=false and destructiveHint=false; the description adds meaningful side-effect detail by stating it writes a new .tsx file to a specific location via a named backend and detects Tailwind config. This clarifies the mutation behavior beyond what the annotations alone 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?
The description is well-structured with labeled sections, front-loads the core purpose, and every sentence serves a distinct function: purpose, usage, exclusions, sibling contrast, and side effects. There is no filler or redundant elaboration.
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 tool has an output schema, full parameter coverage, annotations, and a description that covers purpose, usage boundaries, alternatives, and side effects. Nothing essential for correct invocation is missing.
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 four parameters. The description mostly restates output_path and project_path behavior already present in the schema, adding little new parameter-level meaning beyond the implementation detail of the backend call.
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 opens with a specific verb and resource: 'Generate a React/Next.js component skeleton with Tailwind support.' It also differentiates from siblings by explicitly naming delimit_story_generate and delimit_design_extract_tokens, so an agent can disambiguate without inspecting other schemas.
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 'When to use' and 'When NOT to use' sections are explicit and actionable, naming the exact alternative tools for the excluded cases. The sibling contrast reinforces the routing decision, so no inference is required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_design_generate_tailwindDelimit Design Generate TailwindA
Read an existing tailwind.config or generate one from detected CSS tokens.
When to use: to bootstrap a Tailwind config from existing CSS tokens, or to inspect an existing config in a project. When NOT to use: to extract general design tokens (use delimit_design_extract_tokens) or generate a component (delimit_design_generate_component).
Sibling contrast: delimit_design_extract_tokens scans CSS; this writes a tailwind config from those tokens.
Side effects: writes tailwind.config.js if missing, otherwise reads the existing one. Calls backends.ui_bridge.design_generate_tailwind.
| Name | Required | Description | Default |
|---|---|---|---|
| output_path | No | Output file path for generated config. | |
| project_path | No | Project root to scan for existing config or CSS tokens. | |
| figma_file_key | No | Optional Figma file key (reserved for future use). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say readOnlyHint=false and destructiveHint=false. The description goes further by disclosing the precise side effect: 'writes tailwind.config.js if missing, otherwise reads the existing one.' It also mentions the backend call, giving the agent a concrete model of what happens when invoked.
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 well-organized with labeled sections and front-loads the core purpose. Minor redundancy exists between the opening sentence, 'When to use', and 'Sibling contrast', and the backend call line is implementation detail, but overall every meaningful behavioral fact is included without excessive prose.
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 complete parameter schema, output schema, and annotations, the description covers the essential behavior: when to use, when not to use, and side effects. It could have added error cases or behavior when no CSS tokens are detected, but for this tool's complexity the current description is largely 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 description coverage is 100%, so the baseline is 3. The description does not add parameter-level detail beyond the schema, but the schema already documents output_path, project_path, and figma_file_key, including the note that figma_file_key is reserved for future use. There is no gap requiring description compensation.
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 opens with a specific action: 'Read an existing tailwind.config or generate one from detected CSS tokens.' It names the resource and the two behavioral paths, and the 'Sibling contrast' line explicitly distinguishes it from delimit_design_extract_tokens, saying 'this writes a tailwind config from those tokens.' This fully separates it from related 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 provides explicit 'When to use' and 'When NOT to use' sections, naming the exact alternative tools: delimit_design_extract_tokens for general token extraction and delimit_design_generate_component for component generation. This gives an agent clear routing guidance with no ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_design_validate_responsiveDelimit Design Validate ResponsiveARead-onlyIdempotent
Validate responsive design patterns via static CSS analysis and optional dynamic Playwright testing.
When to use: as a CI check after editing UI/CSS, to flag missing media queries, fixed widths, or non-mobile-first patterns. When NOT to use: for accessibility audits (use delimit_story_accessibility) or component scaffolding (delimit_design_generate_component).
Sibling contrast: delimit_story_accessibility checks WCAG; this checks responsive patterns.
Side effects: read-only static analysis of CSS files and dynamic browser check if URL is provided. Calls backends.ui_bridge.design_validate_responsive. Coerces check_types from comma string to list via _coerce_list_arg.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Optional URL or HTML file path for dynamic Playwright testing. | |
| check_types | No | Specific checks ("breakpoints", "containers", "fluid-type", etc.) as comma string or list. None = all. | |
| project_path | Yes | Project path to validate. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds meaningful behavioral context beyond those: it performs read-only static CSS analysis, may run a dynamic browser check if URL is provided, calls a backend bridge, and coerces check_types. 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 well-structured with clear sections: purpose, when to use, when not to use, sibling contrast, and side effects. Every sentence contributes useful guidance, 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?
For a 3-parameter tool with a full output schema and read-only annotations, the description covers the use case, exclusions, side effects, and a parameter conversion nuance. Nothing critical is missing for an agent to decide whether and how to invoke the 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 100%, so the baseline is 3. The description adds value by disclosing that check_types is coerced from a comma string to a list via _coerce_list_arg, which affects how the agent can pass parameters. It reinforces the url-based dynamic testing behavior but does not enumerate all valid check_type 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 opens with a specific verb and resource: 'Validate responsive design patterns via static CSS analysis and optional dynamic Playwright testing.' The sibling contrast explicitly distinguishes it from delimit_story_accessibility, so an agent can tell what this tool does without opening schemas.
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 states exactly when to use it ('as a CI check after editing UI/CSS'), when NOT to use it ('for accessibility audits' or 'component scaffolding'), and names the alternative tools. This is explicit routing guidance with no ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_diagnoseDelimit DiagnoseA
Comprehensive health check of the Delimit installation (delimit doctor).
When to use: as the universal first-step diagnostic when something isn't working — covers MCP connectivity, deps, governance state, AI assistants, permissions, API keys, network, version, daemons, disk. When NOT to use: for repo-level health (use delimit_repo_diagnose) or first-run discovery (delimit_quickstart).
Sibling contrast: delimit_repo_diagnose checks one repo; this checks the Delimit installation as a whole.
Side effects: in normal mode, fixes some configuration drift (writes a doctor-manifest.json so later --undo can revert). dry_run=True is read-only and previews changes. undo=True reverts changes from the last doctor run using the saved manifest.
| Name | Required | Description | Default |
|---|---|---|---|
| undo | No | If True, revert changes from the last run. | |
| dry_run | No | If True, preview changes without executing. | |
| project_path | No | Project to diagnose. Default "." (cwd). | . |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by disclosing side effects: normal mode can fix configuration drift, writes a doctor-manifest.json for reversibility, dry_run=True is read-only, and undo=True reverts the last run. This is exactly the behavioral context an agent needs for a mutating diagnostic 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?
The description is well-structured with clear labeled sections: purpose, when to use, when not to use, sibling contrast, and side effects. Every sentence carries information, and the most important purpose statement 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?
For a tool with multiple modes and side effects, the description covers scope, alternatives, behavior, reversibility, and read-only mode. An output schema exists, so return-value documentation is not the description's responsibility. Nothing critical is missing for correct 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%, so the baseline is 3. The description adds useful meaning by explaining that dry_run is read-only and previews changes, and that undo uses the saved manifest to revert. It does not add detail about project_path beyond the schema, but the schema already documents it clearly.
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 opens with a specific verb-resource pair: 'Comprehensive health check of the Delimit installation (delimit doctor).' It also explicitly distinguishes itself from delimit_repo_diagnose, which checks one repo, so an agent can tell them apart immediately.
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?
It provides an explicit 'When to use' section naming the universal first-step diagnostic context, plus a 'When NOT to use' section naming two alternatives (delimit_repo_diagnose and delimit_quickstart). This gives clear decision rules with no ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_diffDelimit DiffARead-onlyIdempotent
Diff two OpenAPI specs and list all changes (pure diff, no policy).
When to use: when you only need the structural change set (added / removed / modified endpoints, schemas, parameters) without any policy verdict. When NOT to use: as a CI gate — for pass/fail use delimit_lint, for a shareable HTML report use delimit_diff_report.
Sibling contrast: delimit_lint adds policy + governance; this is the underlying change list. delimit_diff_report wraps both in a presentable report.
Side effects: read-only. Calls backends.gateway_core.run_diff.
| Name | Required | Description | Default |
|---|---|---|---|
| new_spec | Yes | Path to the proposed OpenAPI spec file. Required. | |
| old_spec | Yes | Path to the baseline OpenAPI spec file. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 beyond those by stating the operation is read-only, is a pure structural diff without policy, and specifically calls backends.gateway_core.run_diff. 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 front-loaded with the core purpose and organized into brief, scannable guidance sections. Every sentence contributes either to selecting the tool or understanding its behavior; there is no filler.
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 read-only annotations, an output schema, 100% parameter documentation, and clear routing to neighboring tools, nothing essential is missing. An agent can correctly decide when to call it and what inputs to provide.
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?
Input schema covers 100% of parameters with descriptions for old_spec and new_spec, so the baseline is 3. The description adds general context about the change set but does not need to repeat the parameter-level details the schema already 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 first sentence names the exact action ('Diff two OpenAPI specs'), the resource ('OpenAPI specs'), and the output ('list all changes'), and immediately distinguishes it as 'pure diff, no policy.' It also contrasts with delimit_lint and delimit_diff_report, so an agent can tell it apart from its closest 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?
Provides an explicit 'When to use' section, a 'When NOT to use' section that names the CI alternative (delimit_lint) and reporting alternative (delimit_diff_report), plus a sibling contrast. This is unambiguous decision guidance, not merely implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_diff_reportDelimit Diff ReportA
Generate a shareable API diff report with full analysis.
When to use: when a team needs a shareable artifact (API review, PR comment, compliance record) — runs diff + policy + semver + spec health + migration guide. When NOT to use: for a CI gate verdict (use delimit_lint) or raw diff data (delimit_diff).
Sibling contrast: delimit_lint enforces; delimit_diff is raw; this is the presentable composite report.
Side effects: read-only on inputs. When output_file is provided, writes the rendered HTML/JSON to disk. The HTML has inline CSS — no external dependencies, opens in any browser.
| Name | Required | Description | Default |
|---|---|---|---|
| new_spec | Yes | Proposed OpenAPI spec path. | |
| old_spec | Yes | Baseline OpenAPI spec path. | |
| output_file | No | Optional path to write the report to disk. | |
| policy_file | No | Optional .delimit/policies.yml path. | |
| output_format | No | "html" (default) or "json". | html |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the minimal annotations, it discloses that the tool is read-only on inputs but writes a rendered HTML/JSON file when output_file is provided, plus a useful detail about inline CSS/no external dependencies. This is meaningful behavioral context that the annotations do not provide.
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 well structured with labelled sections, front-loaded purpose, and every sentence adds value. The when-to-use, contrast, and side-effect notes are compact and easy to scan.
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 the annotations mark safety, the description covers the remaining operational context: use cases, alternatives, side effects, and output characteristics. Nothing needed for correct selection or invocation is missing.
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 five parameters. The description adds report-composition context (diff, policy, semver, spec health, migration guide) but does not materially enrich parameter-level semantics beyond that 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 starts with a specific verb and resource: 'Generate a shareable API diff report with full analysis.' It then distinguishes this tool from delimit_lint and delimit_diff, so an agent can select it correctly.
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?
Gives explicit when-to-use scenarios (API review, PR comment, compliance record), a clear when-not-to-use section with named alternatives, and a sibling contrast line. An agent knows exactly when to choose this tool instead of delimit_lint or delimit_diff.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_digestDelimit DigestA
Generate a structured daily digest of loop activity (LED-966).
When to use: for the founder daily summary — signals, deliberations, ledger movement, swarm dispatch, health. When NOT to use: for raw notifications (use delimit_notify) or inbox routing (delimit_notify_inbox).
Sibling contrast: delimit_notify is per-event; this is a windowed rollup digest.
Side effects: action="run" always writes markdown + json to ~/.delimit/digest/ (the founder can read directly, no email dependency). When send_email=True, emails via the notify pipeline, BUT delivery requires DELIMIT_DIGEST_EMAIL=true in the env (pipeline gate). action="latest" is read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Email recipient. Empty = DELIMIT_SMTP_TO. | |
| action | No | "run" (default) or "latest". | run |
| send_email | No | If True, attempt to email the digest. Requires DELIMIT_DIGEST_EMAIL=true env to actually send. | |
| window_hours | No | Lookback window. Default 24. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses concrete side effects: action='run' writes markdown and JSON to ~/.delimit/digest/, email requires DELIMIT_DIGEST_EMAIL=true as a pipeline gate, and action='latest' is read-only. This is exactly the behavioral context an agent 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 organized with clear sections: purpose, when to use, when not to use, sibling contrast, and side effects. Every sentence carries useful information, and the most important 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?
For a tool with four optional parameters, a full input schema, an output schema, and rich annotations, the description covers all non-obvious runtime behavior: file writes, email gating, read-only actions, and route selection against sibling tools. Nothing essential is missing.
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 input schema already covers all four parameters at 100%, so the baseline is 3. The description adds meaningful semantics by explaining the action='run' vs 'latest' behavior, the email env gate, and the windowed-rollup nature that relates to window_hours. This pushes it 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 states a specific verb and resource ('Generate a structured daily digest of loop activity') and explicitly contrasts it with delimit_notify and delimit_notify_inbox. This makes the tool's identity unmistakable even among a very large sibling set.
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?
Includes explicit 'When to use' and 'When NOT to use' guidance, names the exact alternative tools, and adds a sibling contrast sentence. An agent can reliably select this tool versus delimit_notify without further inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_docs_generateDelimit Docs GenerateA
Generate a markdown API reference from source docstrings/JSDoc.
When to use: to produce a starter API reference doc from existing in-source documentation, organized per source file. When NOT to use: for doc-quality validation (use delimit_docs_validate) — generation does not validate.
Sibling contrast: delimit_docs_validate inspects existing docs; this writes a fresh API reference.
Side effects: writes a markdown reference file via backends.ui_bridge.docs_generate.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | Project path. Default "." (cwd). | . |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the side effect of writing a markdown reference file via backends.ui_bridge.docs_generate, beyond the annotations. It also clarifies a behavioral limitation: generation does not validate docs. This goes well beyond the structured annotation fields.
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 well-structured with labeled sections and front-loaded purpose. There is slight redundancy between the 'When NOT to use' and 'Sibling contrast' sections, both covering the validation distinction, but overall it is compact and scannable.
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 one optional parameter, an output schema, and clear annotations, the description covers purpose, usage, alternative, and side effects. Nothing essential is missing for an agent to select and invoke this 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 description coverage is 100%, with the single 'target' parameter fully documented in the schema including its default '.'. The description adds project-level context but does not need to compensate for schema gaps. 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 states a specific action ('Generate a markdown API reference') and resource ('from source docstrings/JSDoc'), and clearly distinguishes itself from delimit_docs_validate, which inspects existing docs. An agent immediately knows what this tool produces and how it differs from its sibling.
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' and 'When NOT to use' guidance, names the alternative tool delimit_docs_validate, and explains the key distinction: generation does not validate. This leaves no ambiguity about when to choose this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_docs_validateDelimit Docs ValidateARead-onlyIdempotent
Validate documentation quality and completeness.
When to use: as a CI gate to surface missing READMEs, undocumented public functions, and broken internal markdown links. When NOT to use: to generate fresh API reference (use delimit_docs_generate).
Sibling contrast: delimit_docs_generate writes; this validates existing docs.
Side effects: read-only inspection. Calls backends.ui_bridge.docs_validate.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | Project path. Default "." (cwd). | . |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the bar for additional disclosure is lower. The description adds useful context by stating 'Side effects: read-only inspection' and naming the underlying backend call, which goes beyond the structured metadata.
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 short, front-loaded with the core purpose, and organized by use case, exclusions, sibling contrast, and side effects. Every section serves a clear decision-making purpose for an agent.
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 simple one-optional-parameter validation tool with an output schema and strong annotations, the description covers why, when, when not, and what side effects to expect. Nothing essential is missing.
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 single optional 'target' parameter is fully documented in the schema. The description does not add parameter-level detail, but the baseline of 3 is appropriate since the schema already carries the semantic load.
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 opens with a specific verb and resource: 'Validate documentation quality and completeness.' It explicitly contrasts with delimit_docs_generate, making the tool's purpose unambiguous and distinguished from its sibling.
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 ('as a CI gate to surface missing READMEs, undocumented public functions, and broken internal markdown links') and when-not-to-use guidance with a named alternative. The sibling contrast further clarifies the division of labor.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_drift_checkDelimit Drift CheckARead-onlyIdempotent
Check for API spec drift since last governance review.
When to use: as a scheduled (cron) compliance monitor — detects spec changes without lint, stale baseline, or missing policy. When NOT to use: for one-shot lint (use delimit_lint) or to read historical drift (delimit_drift_history).
Sibling contrast: delimit_lint is enforcement; delimit_drift_history reads past drift records; this is the periodic monitor.
Side effects: read-only on spec + governance state. Calls ai.drift_monitor.check_drift.
| Name | Required | Description | Default |
|---|---|---|---|
| spec_path | No | OpenAPI spec path. Empty = auto-detect. | |
| project_path | No | Project root. Default "." (cwd). | . |
| staleness_days | No | Alert if baseline older than this. Default 7. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description reinforces this with 'Side effects: read-only on spec + governance state.' It also adds transparency about the underlying call to ai.drift_monitor.check_drift, which is useful behavioral context 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 well-structured with clear sections: primary purpose, when to use, when not to use, sibling contrast, and side effects. Every section adds distinct value, and the core statement 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?
For a tool with optional parameters, full schema coverage, an output schema, and read-only annotations, the description provides all necessary operational context: trigger context, exclusions, sibling relationships, and side effects. Nothing critical is missing for an agent to invoke it 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?
Input schema has 100% description coverage for all three parameters, so the description is not required to repeat parameter meanings. It adds some contextual value by mentioning 'stale baseline,' which relates to staleness_days, but does not meaningfully expand on the schema's 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 tool's purpose: 'Check for API spec drift since last governance review.' It identifies the specific resource (API spec drift) and distinguishes itself from siblings delimit_lint and delimit_drift_history, making selection 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?
Provides explicit when-to-use guidance ('scheduled (cron) compliance monitor') and when-not-to-use guidance ('one-shot lint' and 'historical drift'), naming the exact alternative tools. This fully orients an agent for correct tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_drift_historyDelimit Drift HistoryARead-onlyIdempotent
List recent drift-check results from the drift monitor.
When to use: to investigate when API spec drift was last detected and what changed. When NOT to use: to perform a fresh drift check (use delimit_drift_check).
Sibling contrast: delimit_drift_check runs a check; this reads historical results.
Side effects: read-only. Calls ai.drift_monitor.get_drift_history.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max entries to return. Default 20. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds useful behavioral context by stating "Side effects: read-only" and revealing the underlying call ai.drift_monitor.get_drift_history, which goes beyond the structured data.
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 well-structured and front-loaded with the core purpose. There is mild redundancy between the "When NOT to use" section and the "Sibling contrast" section, both making the same delimit_drift_check comparison, but overall the content is tightly written and scannable.
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 read-only list operation with one optional parameter and an output schema available, the description is complete: it explains the purpose, the use case, the alternative, and the underlying side-effect behavior. Nothing essential for correctly selecting or invoking the tool is missing.
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 only parameter, limit, is fully documented in the input schema with default and meaning, so the description does not need to carry that burden. However, the description itself adds no extra semantic detail about the limit parameter beyond what the schema already states, making the 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 description opens with a specific verb and resource: "List recent drift-check results from the drift monitor." It also explicitly contrasts itself with delimit_drift_check, making the tool's role 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?
The description gives clear when-to-use context (investigate when API spec drift was last detected) and an explicit when-not-to-use instruction with the named alternative delimit_drift_check. The sibling contrast reinforces the decision with no ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_evidence_collectDelimit Evidence CollectA
Collect evidence artifacts for governance (Pro).
When to use: after a deploy, security audit, test run, or other gate event — to capture an evidence bundle that delimit_evidence_verify can later attest. When NOT to use: to verify an existing bundle (use delimit_evidence_verify) or query the contract ledger (delimit_ledger).
Sibling contrast: delimit_evidence_verify verifies; delimit_ledger queries the chain; this collects new evidence.
Side effects: gated by require_premium. Writes a new evidence bundle via backends.repo_bridge.evidence_collect.
Prerequisite: requires Delimit Pro. An unlicensed call returns {"error": ..., "upgrade": "https://delimit.ai/pricing"} without running.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | Repository or task path. Default "." (cwd). | . |
| asset_meta | No | Optional JSON string with asset provenance metadata (for evidence_type='asset'). | |
| evidence_type | No | Type of evidence — e.g. "deploy", "security", "test", "audit". Stored in bundle metadata. Empty = generic. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only carry readOnlyHint=false and destructiveHint=false, so the description carries the behavioral burden and meets it: it discloses the write side effect ('Writes a new evidence bundle via backends.repo_bridge.evidence_collect'), the licensing gate (require_premium / Delimit Pro), and the unlicensed failure mode (returns an error with an upgrade URL without running). No annotation contradiction — readOnlyHint=false is consistent with the write 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?
Well-structured with labeled sections (When to use, When NOT to use, Sibling contrast, Side effects, Prerequisite) and a front-loaded purpose. Slightly repetitive — the sibling contrast largely restates the when-NOT-to-use section — but every section still earns its place given the licensing and side-effect nuances.
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 an existing output schema and 100% schema parameter coverage, this description is complete: it covers trigger conditions, exclusions, named alternatives, side effects, prerequisite licensing, and the exact unlicensed failure behavior. There are no meaningful gaps for an agent deciding whether and how to call it.
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 baseline is 3 and the schema already documents all three parameters. The description adds indirect contextual value by linking gate events (deploy, security audit, test run) to the evidence_type examples, but it does not materially explain parameter semantics 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?
Opens with a specific verb+resource: 'Collect evidence artifacts for governance (Pro).' The sibling contrast section explicitly differentiates it from delimit_evidence_verify (verifies) and delimit_ledger (queries the chain), so an agent can distinguish it from nearby tools without opening schemas.
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 conditions ('after a deploy, security audit, test run, or other gate event'), an explicit when-NOT-to-use with named alternatives (delimit_evidence_verify, delimit_ledger), and a sibling contrast. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_evidence_verifyDelimit Evidence VerifyA
Verify the integrity of an evidence bundle (Pro).
When to use: to attest that a previously-collected evidence bundle has not been tampered with — typical use is during replay or audit. When NOT to use: to capture new evidence (use delimit_evidence_collect) or to query the contract ledger (delimit_ledger).
Sibling contrast: delimit_evidence_collect captures; this verifies a captured bundle's hash chain integrity.
Side effects: read-only on the evidence store; gated by require_premium. Calls backends.repo_bridge.evidence_verify.
Prerequisite: requires Delimit Pro. An unlicensed call returns {"error": ..., "upgrade": "https://delimit.ai/pricing"} without running.
| Name | Required | Description | Default |
|---|---|---|---|
| bundle_id | No | Evidence bundle id. Either this or bundle_path must be provided. | |
| bundle_path | No | Path to a bundle file on disk. Either this or bundle_id must be provided. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description provides unusually rich behavioral detail: read-only side effects, gating by require_premium, the backend call target, and the unlicensed error payload. However, it directly contradicts the annotations, which set readOnlyHint to false while the description claims the tool is read-only; per rubric this is a contradiction, so score 1.
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 compact yet sectioned: purpose, when/when-not, sibling contrast, side effects, and prerequisite. The implementation detail about backends.repo_bridge.evidence_verify is slightly superfluous but does not hurt. Front-loading is excellent.
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 the input schema covers both parameters, the description supplies all selection and invocation context: use case, exclusions, preconditions, side effects, and failure mode. An agent can correctly decide when to call and what to expect from an unlicensed 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?
Both parameters are fully described in the schema (100% coverage), so the description does not need to add much. It adds the context that the bundle was previously collected, but the schema already covers the mutual exclusivity of bundle_id and bundle_path. 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 opens with a specific verb and resource: 'Verify the integrity of an evidence bundle (Pro).' It explains what verification means (attesting the bundle has not been tampered with) and distinguishes itself from delimit_evidence_collect in the sibling contrast. This is a clear, unambiguous purpose.
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?
It explicitly states when to use (replay or audit) and when NOT to use, naming both delimit_evidence_collect and delimit_ledger as alternatives. The sibling contrast reinforces the boundary, leaving no ambiguity about tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_executorDelimit ExecutorA
Run approved work orders from the dashboard inbox (Pro) (Worker Pool v2).
When to use: as the autonomous executor for human-approved work orders, or to inspect/pause the executor. When NOT to use: to dispatch new agent work (use delimit_agent_dispatch) or close out a work order (delimit_work_orders complete).
Sibling contrast: delimit_work_orders reads/closes the work order artifact; this is the run surface that turns approved orders into real GitHub side effects.
Side effects: action="run" / "poll" with live=True fire whitelisted state-changing actions: gh_issue_create, gh_pr_comment, gh_issue_comment. Every invocation is logged to ~/.delimit/workers/audit/executor.jsonl. Touch ~/.delimit/pause_executor to halt the autonomous path at the next tick.
Prerequisite: requires Delimit Pro. An unlicensed call returns {"error": ..., "upgrade": "https://delimit.ai/pricing"} without running.
| Name | Required | Description | Default |
|---|---|---|---|
| live | No | When False (default), dry-run — describe what would happen without firing. | |
| wo_id | No | Work order id. Required for action="run". | |
| action | No | "run" (one), "poll" (scan + run all approved), "status" (default), "pause", "resume". | status |
| executed_by | No | Identifier for the audit log (e.g. "dashboard", "cron"). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite readOnlyHint=false and destructiveHint=false, the description adds substantial behavioral context: it reveals that live run/poll actions fire whitelisted GitHub side effects, that every invocation is logged, that touching a pause file halts execution, and that unlicensed calls return an error without running. This goes well 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 densely organized with labeled sections, front-loads the core purpose, and every sentence adds operational value. It is longer than average, but the length is justified by the critical side-effect, logging, pause, and licensing details.
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 4 parameters and no required fields, the description covers invocation conditions, exclusions, side effects, audit trail, pause mechanism, and licensing prerequisite. The presence of an output schema means return values need no further explanation, so nothing essential is missing.
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 the baseline is 3. The description adds value by clarifying the live/action interaction ('run'/'poll' with live=True fire side effects) and noting that wo_id is required for action='run', which enriches the otherwise already-documented parameter meanings.
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 opens with a specific verb+resource: 'Run approved work orders from the dashboard inbox.' It also differentiates from sibling tools by naming delimit_agent_dispatch and delimit_work_orders, making the executor's role 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?
Explicit 'When to use' and 'When NOT to use' sections define the invocation context and point to the correct alternatives. The sibling contrast further clarifies the boundary between reading/closing work orders and executing them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_explainDelimit ExplainARead-onlyIdempotent
Render a human-readable explanation of API changes (7 templates).
When to use: to produce migration notes, PR comments, changelog entries, or Slack-friendly summaries from a spec diff. When NOT to use: for raw change data (use delimit_diff) or a shareable HTML report (delimit_diff_report).
Sibling contrast: delimit_diff returns structured change data; delimit_diff_report renders an HTML report; this renders a template-driven text explanation.
Side effects: read-only. Calls backends.gateway_core.run_explain.
| Name | Required | Description | Default |
|---|---|---|---|
| api_name | No | API/service name for context. | |
| new_spec | Yes | Path to the proposed OpenAPI spec file. Required. | |
| old_spec | Yes | Path to the baseline OpenAPI spec file. Required. | |
| template | No | One of "developer" (default), "team_lead", "product", "migration", "changelog", "pr_comment", "slack". | developer |
| new_version | No | New version string for context. | |
| old_version | No | Previous version string for context. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is well covered. The description adds 'Side effects: read-only' and the internal backend call 'backends.gateway_core.run_explain', which provides useful implementation transparency consistent with 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 compact and well-structured, front-loading purpose before usage guidance and side effects. Every section earns its place, and the sibling contrast avoids redundant repetition while adding clarity.
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 tool has an output schema, so return-value explanation is unnecessary. The description covers purpose, use cases, exclusions, sibling alternatives, side effects, and an internal call reference, leaving no meaningful gaps for an agent to select and invoke it 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%, so the baseline is 3. The description adds value by mapping template-oriented outputs to use cases like migration notes, PR comments, changelog entries, and Slack summaries, enriching the meaning of the template parameter beyond the schema's enum-like list.
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 opens with a specific verb and object: 'Render a human-readable explanation of API changes (7 templates).' It clearly identifies the tool's deliverable and explicitly contrasts it with delimit_diff and delimit_diff_report, making it easy to distinguish from the closest 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?
The description provides an explicit 'When to use' section listing concrete use cases, a 'When NOT to use' section naming sibling alternatives, and a 'Sibling contrast' section. This gives an agent complete routing guidance for when to select this tool over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_external_pr_checkDelimit External Pr CheckARead-onlyIdempotent
Pre-PR duplicate guard for external repos — call BEFORE drafting.
When to use: as the first step before drafting any PR against a repo you don't own. Fail-closed by design. When NOT to use: for internal repos or to evaluate a non-PR action (use delimit_gov_evaluate).
Sibling contrast: delimit_gov_evaluate(action="external_pr") wraps this with policy evaluation; this is the underlying duplicate check.
Side effects: read-only network call. Calls backends.governance_bridge.external_pr_check which shells out to gh CLI. Any open PR or PR merged in the last 30 days yields verdict="duplicate" — caller stops drafting.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | Yes | External GitHub repo, e.g. "goharbor/harbor". Required. | |
| state | No | "open", "closed", "merged", or "all" (default). | all |
| author | No | GitHub username to filter by (recommended). Empty = all. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive. The description adds valuable behavioral context beyond that: it is fail-closed, makes a network call, shells out to gh CLI via a named backend, and defines the exact duplicate condition (open PR or PR merged in last 30 days). This is far richer than the annotations alone.
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 well-structured with clear labels, front-loaded with the key instruction, and every sentence earns its place. It is detailed but not bloated, and the sibling contrast is tight.
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 annotations and output schema, the description covers the trigger conditions, exclusions, side effects, backend implementation, fail-closed behavior, and the verdict threshold. An agent has enough context to decide to call this tool and to interpret its outcome 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%, so the schema already documents all three parameters with defaults and examples. The description does not add much parameter-specific meaning, though it gives useful context about repo ownership and the duplicate verdict condition.
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 specific verb and resource: a pre-PR duplicate guard for external repos. It also explicitly distinguishes itself from delimit_gov_evaluate, so an agent can tell them apart without inspecting schemas.
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 explicit when-to-use guidance ('as the first step before drafting any PR against a repo you don't own'), explicit when-not-to-use guidance (internal repos or non-PR actions), and names the alternative tool to use instead (delimit_gov_evaluate).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_generate_scaffoldDelimit Generate ScaffoldA
Lay out a fresh project tree with framework-conformant skeleton.
When to use: at project zero, when starting a new Next.js app, API service, or library and you want the standard directory tree, package.json/pyproject.toml, lint config, and entry-point files all written in one call. Typical follow-up is delimit_init to set up governance scaffolding in the new project root. When NOT to use: to add files to an existing project (use delimit_generate_template for single-file scaffolds), to duplicate an existing project (use the shell), or to add a package to an existing project (use the project's own package manager directly).
Sibling contrast: delimit_generate_template writes a single
file into an existing project; this writes a NEW project tree.
Compared to create-next-app / cookiecutter, this routes the
scaffold through the Delimit bridge so the resulting project
can later be wired into delimit_init governance with no manual
cleanup.
Side effects: writes MANY new files and directories under a new
name/ root via backends.generate_bridge.scaffold. packages
is coerced from a comma string to a list via _coerce_list_arg
(malformed values short-circuit). No license gate. No ledger
write, no notification. The backend determines collision
behaviour if name/ already exists — call against a fresh
target.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Project name (becomes the root directory). Required. | |
| packages | No | Packages to include — either a comma string or list. | |
| project_type | Yes | Project flavour, e.g. "nextjs", "api", "library". Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say readOnlyHint=false and destructiveHint=false, so the description carries the burden of explaining mutation behavior. It does this thoroughly: writes MANY files, uses backends.generate_bridge.scaffold, coerces packages via _coerce_list_arg with short-circuit on malformed values, has no license gate, no ledger write, no notification, and leaves collision behavior to the backend. This is exactly the operational context an agent needs 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 long but every section earns its place: purpose, when to use, when not to use, sibling contrast, and side effects. The labeled sections make it easy to scan, and the critical caveat about collision behavior is placed at the end as a warning. No filler or repetition of schema fields.
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 that writes many files and has minimal annotations, the description is fully complete: it specifies target state, exact non-uses, sibling alternative, side effects, follow-up step, and collision caveat. Since an output schema is present, the lack of return-value documentation is acceptable. The agent can safely decide whether and how to invoke this 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?
The schema already provides 100% parameter descriptions, so the baseline is 3. The description adds genuine extra meaning: packages is coerced from a comma string into a list and malformed values short-circuit, which is not stated in the schema. It also reinforces that name becomes the root directory and gives concrete example values for project_type.
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 opens with a specific verb and resource: 'Lay out a fresh project tree with framework-conformant skeleton.' It clearly distinguishes this tool from its closest sibling, delimit_generate_template, by contrasting 'writes a NEW project tree' with 'writes a single file into an existing project.' The intended project types (Next.js app, API service, library) are named explicitly.
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 has explicit 'When to use' and 'When NOT to use' sections. It names alternative tools and strategies: delimit_generate_template for single-file scaffolds, the shell for duplicating projects, and the project's own package manager for adding packages. It also identifies the typical follow-up tool, delimit_init, so an agent knows the surrounding workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_generate_templateDelimit Generate TemplateADestructive
Write a single file from a code template into an existing project.
When to use: when an existing project needs one more piece — a component, a page, an API handler — and you want the framework-conformant skeleton (imports, exports, default structure) rather than hand-writing the boilerplate. Pair with delimit_test_generate to scaffold the matching test file. When NOT to use: to lay out a fresh project (use delimit_generate_scaffold), to design a UI component with tokens (delimit_design_generate_component), or to bulk-generate many files (call this once per file, or write a custom script).
Sibling contrast: delimit_generate_scaffold lays out a complete project tree; this writes a single file. Compared to delimit_design_generate_component, this is framework-only and does not consume design tokens. Compared to delimit_test_generate, this writes source, not tests.
Side effects: writes ONE file to disk under target/ via
backends.generate_bridge.template. target is sanitised via
_sanitize_path — paths escaping the workspace short-circuit
with an error. features is coerced from a comma string to a
list via _coerce_list_arg. No license gate, no ledger write, no
notification. If a file with the same name already exists, the
backend determines overwrite vs. error — call with care on
populated directories.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name for the generated code (file stem). Required. | |
| target | No | Output directory. Default "." (cwd). Sanitized to remain inside the workspace. | . |
| features | No | Optional feature flags as a comma string or list. | |
| framework | No | Target framework key, e.g. "react", "nextjs", "fastapi". | nextjs |
| template_type | Yes | Template flavour, e.g. "component", "page", "api". Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the destructiveHint annotation by disclosing precise side effects: writes exactly ONE file under target/, path sanitization that short-circuits on escape, feature-string coercion, absence of license/ledger/notification side effects, and the critical overwrite-or-error ambiguity on existing files. For a destructive tool, this is exactly the behavioral disclosure an agent needs before calling.
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 well-structured with labeled sections (When to use, When NOT to use, Sibling contrast, Side effects) and front-loads the core purpose. It is verbose, and the sibling contrast section partially restates the when-not-to-use routing, but for a destructive multi-parameter tool the density of information justifies the 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?
Everything an agent needs before invoking a 5-parameter file-writing tool is present: purpose, routing conditions, side effects, overwrite risk, internal behavior details, and what it does NOT do. The output schema covers return values, so no description burden there. The only conceivable addition would be an example, which is not required for correctness.
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 the baseline is 3 with the schema doing the heavy lifting. The description adds genuine value by revealing two parameters' runtime behavior: target undergoes _sanitize_path with workspace-escape errors, and features is coerced from comma string to list. This is non-obvious information an agent couldn't infer from the schema alone.
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 opening line states a specific verb-resource pair ('Write a single file from a code template into an existing project') that immediately distinguishes it from bulk-generation or design-token tools. The sibling contrast confirms the exact boundaries: scaffold writes a full tree, design consumes tokens, test writes tests — leaving no ambiguity about what this tool is for.
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 'When to use' and 'When NOT to use' sections name the exact alternatives (delimit_generate_scaffold, delimit_design_generate_component, delimit_test_generate) and the conditions that select them. It even handles the bulk-generation edge case by instructing one call per file. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_github_scanDelimit Github ScanA
Scan GitHub for adoption leads, competitive intel, repo health (Pro).
When to use: at the configured cadence — pulse (own repo health), hunter (engagement signals, hourly), deep (full ecosystem, daily). When NOT to use: to monitor one issue (use delimit_sensor_github_issue) or pull issues (delimit_tracker_sync).
Sibling contrast: delimit_sensor_github_issue is single-issue; delimit_tracker_sync ingests issues to ledger; this is the broad GitHub corpus scanner.
Side effects: read-only network. With chain rule below, the orchestrator should call delimit_ledger_add for high-score findings and delimit_notify for pain threads.
IMPORTANT -- TOOL CHAINING RULE: After scanning, the AI MUST process high-score findings:
Auto-ledger high-score findings via delimit_ledger_add
Pain threads with existing_feature relevance via delimit_notify Never just return findings and stop. Always chain to the next action.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results per search query. Default 20. Max 30. | |
| cadence | No | "pulse" (default), "hunter", or "deep". | pulse |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses side effects ('read-only network') and, importantly, the mandatory chaining behavior: high-score findings must be auto-ledgered via delimit_ledger_add and pain threads notified via delimit_notify. It even warns 'Never just return findings and stop.' This goes well beyond the sparse annotations and gives the agent critical operational context. While readOnlyHint is false in annotations, the description's 'read-only network' refers to network side effects, and the chain rule clarifies downstream mutations happen via separate tools, so there is no direct 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 longer than average but well-structured with clear headers and front-loaded purpose. Every section earns its place: cadence usage, sibling contrast, side effects, and chaining rule. Minor redundancy exists in the chain rule section ('Never just return findings and stop' restates the earlier rule), but overall it remains efficient and scannable.
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 only 2 parameters with 100% schema coverage, an existing output schema, and a detailed description covering cadences, sibling distinctions, side effects, and mandatory downstream actions, nothing essential is missing. An agent has enough information to select, invoke, and follow up on this 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 100%, so the baseline is 3. The description adds real semantic value beyond the schema by explaining each cadence option: 'pulse (own repo health), hunter (engagement signals, hourly), deep (full ecosystem, daily).' It does not restate limit, but the schema already documents the default and max, so the description does not need to.
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: 'Scan GitHub for adoption leads, competitive intel, repo health (Pro).' It clearly states what the tool does and distinguishes itself from siblings: 'delimit_sensor_github_issue is single-issue; delimit_tracker_sync ingests issues to ledger; this is the broad GitHub corpus scanner.' An agent can immediately tell this apart from nearby 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 gives explicit when-to-use guidance by cadence: 'pulse (own repo health), hunter (engagement signals, hourly), deep (full ecosystem, daily).' It also provides a direct when-NOT-to-use section with named alternatives: 'use delimit_sensor_github_issue or delimit_tracker_sync.' This leaves no ambiguity about tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_gov_evaluateDelimit Gov EvaluateA
Evaluate whether a proposed action triggers governance gating (Pro).
When to use: BEFORE performing any action whose policy class is uncertain — deploy, external PR submission, schema change, npm publish, force-push, force-update of a floating tag, account switch, ruleset edit. This is the canonical pre-action check the orchestrator and CI hooks call; the response is the gate verdict. When NOT to use: to read the policy rules themselves (use delimit_gov_policy), to materialize a tracked task from a "gating required" verdict (delimit_gov_new_task), or to check engine health (delimit_gov_health). Also: do not call after starting the action — the verdict is decision-time and a retroactive call has no gating effect.
Sibling contrast: delimit_gov_policy returns the rules; this evaluates a candidate action against them. delimit_external_pr_check handles the specialised external-PR duplicate path; this is the general action evaluator. delimit_gov_new_task is what you call AFTER this returns "gating required" to mint a tracked task.
Side effects: read-only on policy storage and gated by
require_premium — unlicensed callers receive a license payload
and no evaluation runs. On a licensed call, invokes
backends.governance_bridge.evaluate_trigger which loads the
active policy and returns a verdict; no task is created, no
ledger write, no evidence file. Inputs are coerced before the
backend call: a string context is wrapped as {"text": ...}
via _coerce_dict_arg; a malformed context short-circuits with
an error response.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | No | Filesystem path to the repository. Default "." (cwd). | . |
| action | No | Proposed action name to evaluate (e.g. "external_pr", "deploy"). Empty string returns an error. | |
| context | No | Optional dict with action-specific context (e.g. target repo, author). Strings are auto-coerced to {"text": ...} via _coerce_dict_arg. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotation Contradiction: the description claims 'read-only on policy storage' and says no task, ledger write, or evidence file is created, while the annotations set readOnlyHint to false. This directly conflicts with the structured read-only signal and makes the safety profile ambiguous despite otherwise rich behavioral 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?
The description is long but tightly organized with clear sections: purpose, when to use, when not to use, sibling contrast, and side effects. Every sentence carries routing or behavioral information, and the core purpose is front-loaded before the alternatives.
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 timing, alternatives, licensing, side effects, and input coercion, and an output schema exists so return-value documentation is not required. However, the readOnlyHint false contradiction leaves unresolved ambiguity about whether the tool mutates state, preventing a perfect completeness score.
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 baseline is 3. The description adds useful behavior beyond the schema by specifying that a string context is coerced to {'text': ...} via _coerce_dict_arg and that a malformed context short-circuits with an error response.
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 opening sentence states the exact verb and resource: 'Evaluate whether a proposed action triggers governance gating.' The sibling-contrast section explicitly distinguishes it from delimit_gov_policy, delimit_external_pr_check, and delimit_gov_new_task, so an agent can reliably tell this tool apart from its closest 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?
Provides an explicit 'When to use' list with concrete scenarios, a 'When NOT to use' list naming the correct alternatives, and a critical timing constraint: the verdict is decision-time and a retroactive call has no gating effect. This is unambiguous routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_gov_healthDelimit Gov HealthA
Report whether the governance kernel and policy are reachable.
When to use: at session start as part of the standard orchestrator ritual (delimit_revive + delimit_ledger_context + this + inbox daemon), or as a CI smoke check before a gated deploy. Confirms the governance backend is reachable and the policy kernel is loaded so downstream gates will fail-closed correctly rather than silently no-op. When NOT to use: to evaluate whether a specific candidate action requires gating (use delimit_gov_evaluate), to read the rules themselves (delimit_gov_policy), or to check per-repo task state (delimit_gov_status).
Sibling contrast: delimit_gov_status reports per-repo workload (open tasks, recent decisions); this reports the engine layer itself (kernel boot status, policy load, backend integration). If a deploy gate is failing, run this first to rule out "engine down" before debugging policy logic.
Side effects: read-only and not license-gated. Invokes backends.governance_bridge.health and wraps the response through _with_next_steps. No ledger write, no notification, no evidence file. Safe to call on every session start without rate concern.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | No | Filesystem path to the repository. Default "." (cwd). | . |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description claims 'read-only' and 'No ledger write, no notification, no evidence file,' but the annotation readOnlyHint is false. This is a direct annotation contradiction, which per the rubric forces a score of 1 regardless of the otherwise rich behavioral 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?
The description is long but tightly organized with labeled sections: purpose, when to use, when not to use, sibling contrast, and side effects. Each section adds distinct value, and the core purpose is front-loaded in the first sentence.
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 session-start and CI use cases, fail-closed behavior, explicit sibling distinctions, implementation details, and side-effect profile. The output schema exists, so the description does not need to document return values, and nothing necessary for correct invocation is missing.
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%: the only parameter, repo, is fully documented in the input schema with a type, default, and description. The tool description adds no parameter-specific detail, but with full schema coverage it does not need to, so 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 first sentence states a specific verb and resource: 'Report whether the governance kernel and policy are reachable.' The sibling contrast explicitly distinguishes this from delimit_gov_status, which reports per-repo workload, so an agent can tell it apart from similar 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 gives explicit when-to-use context: session start orchestrator ritual and CI smoke check before a gated deploy. It also provides a when-NOT-to-use list with named alternatives (delimit_gov_evaluate, delimit_gov_policy, delimit_gov_status), which is exemplary routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
_delimit_gov_implDelimit Gov ImplARead-onlyIdempotent
Unified governance entry point — dispatches to one of seven actions.
When to use: as the single MCP-registered governance surface (delimit_gov) when the caller wants to pick the action by name in one call rather than choosing a specific delimit_gov_* alias. When NOT to use: from internal code paths — prefer the specific alias (delimit_gov_health, delimit_gov_evaluate, etc.) for clarity and so docstrings and license gates show up at the right call site.
Sibling contrast: each delimit_gov_ wrapper above is a thin alias over this implementation; they exist so the action's docstring lives at the right name. This is the dispatch core.
Side effects: action="health" / "status" are read-only and not
gated. action="policy" / "evaluate" / "new_task" / "run" / "verify"
are gated by require_premium — unlicensed callers receive a
license payload and no backend call is made. Each gated action
routes to a distinct backends.governance_bridge function (health,
status, policy, evaluate_trigger, new_task, run_task, verify) and
the result is wrapped via _with_next_steps for orchestrator hints.
Errors are deterministic ({"error": ...}); inputs that cannot be
coerced (e.g. malformed context for evaluate) short-circuit
before the backend call.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | No | Repository path. Default "." (cwd). | . |
| scope | No | Task scope (used only when action="new_task"). Required for new_task. | |
| title | No | Task title (used only when action="new_task"). Required for new_task. | |
| action | No | Which governance operation to perform. One of "health", "status", "policy", "evaluate", "new_task", "run", "verify". Default "health". Other values return a deterministic error. | health |
| context | No | Additional context (used only when action="evaluate"). Strings are auto-coerced to {"text": ...} via _coerce_dict_arg; dicts are passed through. None is allowed. | |
| task_id | No | Task ID (used only when action="run" or action="verify"). Required for those actions. | |
| risk_level | No | Risk level low/medium/high/critical (used only when action="new_task"). Default "medium". | medium |
| eval_action | No | The proposed action name to evaluate (used only when action="evaluate"). Empty string is rejected by the backend. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The prose is rich, disclosing gating, per-action backend routing, deterministic errors, and _with_next_steps wrapping. However, it directly contradicts the readOnlyHint:true annotation by explicitly stating that only action='health' and action='status' are read-only, implying the other actions are not. Per the rubric, a description that contradicts annotations must receive a score of 1 and be flagged as an annotation 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 long but well-structured with clear headings for usage, non-usage, sibling contrast, and side effects. It is front-loaded with the core purpose and each section carries meaningful information for a seven-action dispatcher. Minor redundancy exists between the sibling contrast section and the when-to-use/when-not-to-use paragraphs, preventing a perfect score.
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 seven actions, eight parameters, and nontrivial routing, the description covers selection criteria, exclusions, per-action side effects, license gating, error behavior, and coercion short-circuiting. An output schema exists, so return-value detail is not required. The only completeness gap is the incoherence introduced by the readOnlyHint annotation contradicting the description's explicit read-only scoping.
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%, with every parameter already documented for requiredness, defaults, and action-specific usage. The description adds general action dispatch and gating behavior, but those are behavioral, not parameter-semantic, details. Coercion of context and rejection of empty eval_action are already present in the schema descriptions, so the description adds little beyond the baseline for fully covered schemas.
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 is a unified governance entry point that dispatches to one of seven actions by name. It explicitly contrasts with the delimit_gov_* alias siblings, explaining that this is the implementation core while the aliases are thin wrappers. The verb and resource are specific, and the purpose is not a tautology.
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 contains an explicit 'When to use' and 'When NOT to use' section. It names the exact condition for selecting this tool (picking action by name in one call) and directs internal code paths to prefer specific aliases like delimit_gov_health or delimit_gov_evaluate. Sibling contrast is also provided, making routing unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_gov_new_taskDelimit Gov New TaskA
Create a governance-classed task with risk tier and scope (Pro).
When to use: immediately after delimit_gov_evaluate returns a "gating required" verdict and you need a tracked, audit-bearing record before performing the gated work. The three-step pipeline is delimit_gov_new_task -> delimit_gov_run -> delimit_gov_verify; this is step one. When NOT to use: for free-form work tracking (use delimit_ledger_add), to perform the work itself (delimit_gov_run), or to verify a completed task (delimit_gov_verify).
Sibling contrast: delimit_ledger_add tracks general work items with no policy gating; this creates a governance-classed task with a risk tier and scope record that the run/verify steps operate on. delimit_gov_evaluate returns a verdict only; this materializes that verdict into a tracked task.
Side effects: gated by require_premium — unlicensed callers receive a license payload, no task created. On a licensed call, invokes backends.governance_bridge.new_task which writes a new task record keyed by a generated task_id into the governance task store; the record carries title, scope, risk_level, repo path, and creation timestamp. The response is routed through _with_next_steps so the returned dict carries orchestrator hints.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | No | Filesystem path to the repository. Default "." (cwd). | . |
| scope | No | Description of what the task covers. Required. | |
| title | No | Short task title. Required (empty string is rejected). | |
| risk_level | No | One of "low", "medium", "high", "critical". Default "medium". Drives later approval requirements. | medium |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (not read-only, not destructive), so the description carries the burden and delivers richly: licensing gating with unlicensed callers receiving a license payload and no task creation, backend write to backends.governance_bridge.new_task, persisted fields, and routing through _with_next_steps. This goes well beyond what annotations provide and 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 organized into clear labeled sections: purpose, when to use, when not to use, sibling contrast, and side effects. It is longer than average but every section adds decision-relevant information, 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?
For a governance task-creation tool with an output schema present, the description covers the trigger condition, pipeline position, license gating, persistence side effects, and response routing. Nothing an agent needs to decide whether and how to invoke this tool correctly is missing.
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 the baseline is 3. The description adds meaningful context beyond the schema: risk_level drives approval requirements, and title/scope are semantically required despite empty defaults being rejected. This extra behavioral meaning 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?
Description states a specific verb and resource: 'Create a governance-classed task with risk tier and scope'. It distinguishes itself from delimit_ledger_add, delimit_gov_evaluate, delimit_gov_run, and delimit_gov_verify, so an agent can immediately tell what this tool does relative to 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?
Explicitly says when to use ('immediately after delimit_gov_evaluate returns a gating required verdict'), when NOT to use, and names the alternative tools for each excluded case. It also places the tool as step one of a three-step pipeline, leaving no ambiguity about placement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_gov_policyDelimit Gov PolicyARead-onlyIdempotent
Read the active governance policy for a repository (Pro).
When to use: when an agent or operator needs to inspect the live policy rules being enforced for a repo (risk thresholds, gates). When NOT to use: to mutate policy — this tool is read-only.
Sibling contrast: delimit_gov_evaluate runs an action against the policy; this returns the policy itself.
Side effects: read-only on policy storage; gated by require_premium (returns a license payload if the caller is unlicensed).
Prerequisite: requires Delimit Pro. An unlicensed call returns {"error": ..., "upgrade": "https://delimit.ai/pricing"} without running.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | No | Filesystem path to the repository. Default "." (cwd). | . |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 valuable behavior beyond those: read-only side effects on policy storage, license gating via require_premium, and the exact unlicensed-call response shape including an upgrade link. This is the kind of contextual behavior an agent needs to predict outcomes.
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 front-loaded with the core purpose and uses structured labeled sections for when-to-use, when-not-to-use, side effects, and prerequisites, making it highly scannable. There is minor redundancy between the side-effects note about an unlicensed license payload and the prerequisite section repeating the unlicensed-call behavior, but overall the content is tight and purposeful.
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 simple read-only tool with one optional parameter and an output schema, the description covers everything needed: purpose, selection criteria, sibling differentiation, side effects, and licensing behavior. The presence of an output schema means return-value details need not be repeated in the description, so nothing essential is missing.
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 parameter repo is clearly documented with a default value and description. The tool description does not add parameter-specific meaning beyond the schema, so the baseline of 3 applies. No additional semantic detail is required, but none is provided either.
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 opens with a clear, specific statement: 'Read the active governance policy for a repository (Pro).' It names the exact resource (governance policy) and the verb (read), and immediately distinguishes itself from delimit_gov_evaluate, which runs an action against the policy rather than returning the policy itself.
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 'When to use' and 'When NOT to use' sections tell the agent exactly when to invoke this tool and when to avoid it. The sibling contrast with delimit_gov_evaluate provides a concrete alternative and differentiates the two tools, so an agent can select the correct one without guesswork.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_gov_runDelimit Gov RunA
Execute a previously created governance task under policy (Pro).
When to use: as step two of the three-step governance pipeline, after delimit_gov_new_task has minted a task_id and before delimit_gov_verify closes it out. Call when you are ready to perform the gated work and want the policy engine to record the execution. When NOT to use: to evaluate a candidate action (use delimit_gov_evaluate), to mint a task (delimit_gov_new_task), or to attest a completed task (delimit_gov_verify).
Sibling contrast: delimit_gov_new_task creates the task record but does no work; this records the execution against an existing task_id; delimit_gov_verify attests the run output afterwards. The full pipeline is new_task -> run -> verify.
Side effects: gated by require_premium — unlicensed callers receive a license payload, no execution recorded. On a licensed call, invokes backends.governance_bridge.run_task which appends a run record to the task identified by task_id (status transition, timestamp, repo). The response is routed through _with_next_steps so the returned dict carries orchestrator hints. Note this tool records the run event; it does NOT itself perform the underlying work — the caller is expected to do that.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | No | Filesystem path to the repository. Default "." (cwd). | . |
| task_id | No | Identifier returned by delimit_gov_new_task. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it discloses require_premium gating with unlicensed behavior, the backend invocation, the run record side effect, routing through _with_next_steps, and explicitly notes the tool records execution rather than performing work. This is substantial behavioral context that annotations do not provide.
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 longer than average but highly structured with labeled sections: when to use, when NOT to use, sibling contrast, and side effects. Every section adds decision-relevant information with minimal redundancy. The key purpose is front-loaded in the first sentence.
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, the description does not need to explain return values, yet it still mentions the orchestrator hints in the response. It covers licensing, side effects, pipeline ordering, and the limitation that no underlying work is performed. Nothing essential is missing for correct 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 description coverage is 100%, so the schema already documents both repo and task_id. The narrative adds useful context such as task_id being required despite not being marked required in the schema, but it does not add much meaning beyond what the schema descriptions already convey. 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 first sentence states a specific verb and resource: 'Execute a previously created governance task under policy (Pro).' It clearly differentiates from siblings by naming the pipeline step and contrasts with delimit_gov_evaluate, new_task, and verify. The purpose is unambiguous even without opening the schema.
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 says when to use it (step two, after new_task, before verify), when NOT to use it (evaluate, new_task, verify), and provides a sibling contrast plus the full pipeline: new_task -> run -> verify. This gives the agent complete routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_gov_statusDelimit Gov StatusARead-onlyIdempotent
Report governance state (open tasks, decisions) for a repo.
When to use: when you need a snapshot of governance activity for a given repo — what tasks are open, what was recently decided. When NOT to use: for engine-level health (use delimit_gov_health) or to evaluate a new action (use delimit_gov_evaluate).
Sibling contrast: delimit_gov_health reports the engine; this reports the workload (per-repo task and decision state).
Side effects: read-only. Calls backends.governance_bridge.status.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | No | Filesystem path to the repository. Default "." (cwd). | . |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 explicitly stating 'Side effects: read-only' and naming the underlying backend call 'backends.governance_bridge.status', giving the agent extra implementation context 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 tightly structured: purpose first, then usage guidance, sibling contrast, and side effects. Every section earns its place with 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?
With one simple parameter, an output schema present, rich safety annotations, and explicit usage/contrast guidance, the description fully equips an agent to 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 description coverage is 100%, so the schema already documents the repo parameter fully. The description reinforces the per-repo scope but adds no material parameter semantics 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 states a specific verb and resource: 'Report governance state (open tasks, decisions) for a repo.' It clearly distinguishes itself from delimit_gov_health and delimit_gov_evaluate via the sibling contrast, so an agent can tell them apart without inspecting schemas.
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?
Includes explicit 'When to use' and 'When NOT to use' sections, naming the exact alternative tools and the conditions that route to them. This leaves no ambiguity about selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_gov_verifyDelimit Gov VerifyA
Attest that a governance task completed under policy (Pro).
When to use: as step three (closing step) of the governance pipeline, immediately after delimit_gov_run has recorded the execution. This is the call that flips a task from "ran" to "verified" and produces the attestation entry used by downstream audit consumers. When NOT to use: to mint a task (delimit_gov_new_task) or to record the execution itself (delimit_gov_run). Verify is closing only — it does not run work and does not create tasks.
Sibling contrast: delimit_gov_new_task creates; delimit_gov_run records execution; this attests the outputs satisfy policy. Compared to delimit_evidence_verify (which checks an evidence file), this attests against the policy engine, not a static file.
Side effects: gated by require_premium — unlicensed callers receive a license payload, no verification recorded. On a licensed call, invokes backends.governance_bridge.verify which writes a verification record against the task_id (verdict, timestamp, repo, policy snapshot). The response is routed through _with_next_steps. Does not perform additional work — only validates and records the verdict.
Prerequisite: requires Delimit Pro. An unlicensed call returns {"error": ..., "upgrade": "https://delimit.ai/pricing"} without running.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | No | Filesystem path to the repository. Default "." (cwd). | . |
| task_id | No | Identifier from delimit_gov_new_task / delimit_gov_run. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the sparse annotations by disclosing side effects: it writes a verification record, is gated by require_premium, behaves differently for unlicensed callers, invokes a specific backend method, and does not perform additional work. It also explains the unlicensed response shape and prerequisite, giving full transparency about what happens when the tool is called.
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 long but well-structured with clear sections for when to use, when not to use, sibling contrast, side effects, and prerequisites. Every section provides actionable information, and the most important usage guidance 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?
The description covers the tool's role in the pipeline, prerequisites, licensing behavior, side effects, backend invocation, and relationship to sibling tools. With an output schema already present, the description does not need to explain return values, and nothing essential is missing for an agent to invoke this 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 100%, so the baseline is 3, but the description adds meaningful context by clarifying that task_id is required despite having a default empty string, and that it comes from delimit_gov_new_task / delimit_gov_run. This resolves a potential ambiguity in the input schema where no parameters are marked 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?
The description opens with a specific verb and resource: 'Attest that a governance task completed under policy.' It clearly defines the tool's role as the closing verification step in the governance pipeline and distinguishes it from related siblings by explaining that it flips a task from 'ran' to 'verified' and produces an attestation entry.
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 the tool ('step three, immediately after delimit_gov_run'), when NOT to use it (for minting tasks or recording execution), and names the exact alternatives (delimit_gov_new_task, delimit_gov_run, delimit_evidence_verify). This gives an agent clear routing guidance with no inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_handoff_acknowledgeDelimit Handoff AcknowledgeA
Acknowledge a pending handoff receipt before starting work.
When to use: at session start when delimit_handoff_list shows a pending receipt — the receiving agent must acknowledge before starting work. When NOT to use: to create a handoff (use delimit_handoff_create) or list receipts (delimit_handoff_list).
Sibling contrast: delimit_handoff_create writes; delimit_handoff_list reads; this closes the loop on a specific receipt.
Side effects: writes an acknowledgement record via ai.handoff_receipts.acknowledge_receipt; flips the receipt status from pending to acknowledged.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | Optional notes from the receiving agent. | |
| receipt_id | No | Receipt id to acknowledge. Required (empty string returns an error payload). | |
| project_path | No | Optional exact project namespace. Blank searches all namespaces; an explicit path never writes outside that namespace. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses concrete side effects beyond the annotations: writes an acknowledgement record via ai.handoff_receipts.acknowledge_receipt and flips receipt status from pending to acknowledged. This adds meaningful behavioral context and does not contradict readOnlyHint=false or destructiveHint=false.
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 well-structured with purpose, usage, sibling contrast, and side effects. Every section earns its place, and the key operational guidance is front-loaded before the longer side-effect 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?
Complete for a handoff-acknowledgement tool: it explains when to use it, when not to, how it differs from siblings, and what state changes it causes. Since an output schema exists, the description does not need to explain 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 baseline is 3; the schema already documents notes, receipt_id, and project_path. The description reinforces that a specific receipt is targeted but does not add new parameter-level meaning beyond what is already 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?
States a specific verb and resource: 'Acknowledge a pending handoff receipt before starting work.' It also distinguishes itself from sibling tools by noting delimit_handoff_create writes, delimit_handoff_list reads, and this tool 'closes the loop on a specific receipt.'
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 a when-to-use condition ('at session start when delimit_handoff_list shows a pending receipt') and a when-NOT-to-use section that names the alternatives (delimit_handoff_create and delimit_handoff_list). This fully routes an agent to the correct tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_handoff_createDelimit Handoff CreateA
Create a handoff receipt when transitioning between agents.
When to use: at the end of a session or before passing work to another model — documents what was done, what's pending, and what the next agent should do first. When NOT to use: for general session summary (use delimit_session_handoff) or to acknowledge a receipt (delimit_handoff_acknowledge).
Sibling contrast: delimit_session_handoff is venture-scoped summary; delimit_soul_capture is richer cross-model state; this is the structured per-agent handoff with explicit completed/ not-completed/blockers/scope fields.
Side effects: writes a new handoff receipt via ai.handoff_receipts.create_receipt. The receiving agent should later call delimit_handoff_acknowledge.
| Name | Required | Description | Default |
|---|---|---|---|
| blockers | No | Comma-separated blockers encountered. | |
| in_scope | No | Comma-separated in-scope items. | |
| priority | No | P0 / P1 (default) / P2. | P1 |
| to_model | No | Target model name or "any" (default). | any |
| completed | No | Comma-separated completed items. | |
| assumptions | No | Comma-separated assumptions made. | |
| next_action | No | First thing the receiving agent should do. | |
| out_of_scope | No | Comma-separated explicitly excluded items. | |
| not_completed | No | Comma-separated items not completed (with reasons). | |
| files_modified | No | JSON list of {path, change_type, summary} dicts, or empty to auto-detect. | |
| task_description | No | What the task was (one line). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations by disclosing the concrete side effect: 'writes a new handoff receipt via ai.handoff_receipts.create_receipt.' It also documents the expected lifecycle next step, stating 'The receiving agent should later call delimit_handoff_acknowledge.' This is consistent with readOnlyHint=false and destructiveHint=false.
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 well-structured with labeled sections: purpose, when to use, when not to use, sibling contrast, and side effects. Every sentence earns its place, and the core purpose is front-loaded before the usage guidance.
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 the description covers purpose, usage boundaries, sibling differentiation, side effects, and follow-up action, nothing essential is missing for an agent to invoke this tool correctly. It is complete for a write-oriented handoff tool with many optional fields.
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 already provides 100% description coverage for all 11 parameters, so the baseline is 3. The description adds only modest context by noting the 'explicit completed/not-completed/blockers/scope fields,' which is helpful but does not materially deepen 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 opens with a specific verb-resource pair: 'Create a handoff receipt when transitioning between agents.' It clearly differentiates itself from sibling tools by naming delimit_session_handoff, delimit_soul_capture, and delimit_handoff_acknowledge in the sibling contrast.
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?
It explicitly states when to use ('at the end of a session or before passing work to another model'), when not to use ('for general session summary' or 'to acknowledge a receipt'), and names the exact alternative tools. This leaves no ambiguity for an agent deciding between related handoff tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_handoff_listDelimit Handoff ListARead-onlyIdempotent
List session handoff receipts.
When to use: at session start to see what previous sessions left pending, or to audit acknowledged handoffs. When NOT to use: to create a handoff (use delimit_handoff_create) or acknowledge one (delimit_handoff_acknowledge).
Sibling contrast: delimit_handoff_create writes; delimit_handoff_acknowledge closes; this reads the receipt list.
Side effects: read-only. Calls ai.handoff_receipts.get_receipts.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum receipts to return, 1-200. Default 50. | |
| status | No | "pending" (default), "acknowledged", or "all". | pending |
| project_path | No | Optional exact project namespace. Blank aggregates all namespaces. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds a clear 'Side effects: read-only' statement and names the underlying function call, which provides useful implementation context without contradicting 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 compact and well-structured, with each section earning its place: purpose, usage, exclusions, sibling contrast, and side effects. Key information is front-loaded and scannable.
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 read-only list tool with full schema coverage, an output schema, and clear sibling differentiation, the description covers when to use, when not to use, alternatives, side effects, and the backing implementation. Nothing material is missing.
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%, with each parameter already documented including defaults and allowed values. The description adds no extra parameter-level meaning, but the schema fully carries the burden, so the 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?
The description opens with a specific verb and resource: 'List session handoff receipts.' It immediately distinguishes itself from sibling write/acknowledge tools, so an agent can tell exactly what this tool does and does not do.
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?
It provides explicit when-to-use scenarios ('at session start...', 'to audit acknowledged handoffs') and explicit when-not-to-use guidance with named alternatives (delimit_handoff_create, delimit_handoff_acknowledge). The sibling contrast makes routing unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_handoff_preflightDelimit Handoff PreflightA
Validate cross-agent handoff invariants before switching coding agents (LED-1710).
When to use: before a session hands off to a different coding agent
(claude -> antigravity -> codex -> gemini) or an Auto-Phoenix revive,
to confirm the next agent will NOT inherit corrupted state — a
core.bare=true repo, a junk test@*/empty git identity, leaked
GIT_* env vars that misdirect git subprocesses, a stale
<gitdir>/index.lock, or a missing/stale ~/.delimit/.last_capture
stamp (next agent starts blind). When NOT to use: to capture or
restore session context (use delimit_soul_capture / delimit_revive —
this only INSPECTS), or for general repo health (delimit_repo_diagnose).
Sibling contrast: delimit_revive restores prior context (read+write); delimit_gov_health reports the policy-kernel layer; this is a narrow read-only pre-handoff gate over git + env + capture stamp returning a fail-closed verdict. Phase-1 VALIDATOR only: NOT wired into any live handoff path; auto-remediation is held for a later phase.
Side effects: READ-ONLY — inspects git config + the process env + the
.last_capture file via a hermetic git env. NO writes, env mutation,
git config changes, network, ledger, or notification; it cannot itself
corrupt the state it checks.
Verdict: ok=False if ANY critical check fails (fail-closed).
Critical: git_identity, not_bare. Warn: no_git_env_leak,
no_stale_index_lock, handoff_freshness. Each check is
{name, ok, severity, detail, remediation}.
| Name | Required | Description | Default |
|---|---|---|---|
| project_path | No | Repository path to inspect. Empty resolves via the gateway resolver, then cwd. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description itself is exemplary — 'READ-ONLY', 'NO writes, env mutation, git config changes, network, ledger, or notification', fail-closed verdict semantics, and an explicit phase-1 not-wired-into-live-path disclosure. However, the annotations declare readOnlyHint=false, which directly contradicts the description's emphatic read-only/no-writes claims; per rubric, a description that contradicts its annotations scores 1. Annotation 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?
Long but front-loaded: the first sentence states the purpose, and each paragraph carries distinct information — when/when-not, sibling contrast, phase limitation, side effects, and verdict semantics. No filler or repetition; the LED-1710 reference is the only minor noise.
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 single-parameter tool that already has an output schema and annotations, the description covers selection (when/not-to-use), invocation safety (read-only, hermetic git env), result interpretation (fail-closed, critical vs warn severities, per-check record shape), and operational limitations (phase-1 validator only). Nothing needed for correct selection or invocation is missing.
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% — project_path is fully documented as 'Repository path to inspect. Empty resolves via the gateway resolver, then cwd.' The description adds tool-behavior context (which state is inspected at that path) but no new parameter-level semantics, so the high-coverage baseline of 3 holds.
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?
Opens with a specific verb+resource pair: 'Validate cross-agent handoff invariants before switching coding agents.' It names the exact invariants checked (core.bare=true, git identity, GIT_* env leaks, index.lock, .last_capture) and explicitly differentiates itself from delimit_revive, delimit_soul_capture, delimit_repo_diagnose, and delimit_gov_health, so an agent can select it from ~200 siblings without opening any schema.
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 ('before a session hands off to a different coding agent... or an Auto-Phoenix revive'), when-not-to-use ('to capture or restore session context... or for general repo health'), and names the exact alternatives (delimit_soul_capture, delimit_revive, delimit_repo_diagnose). The sibling contrast adds exclusion criteria by noting delimit_revive is read+write while this is a narrow read-only gate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_heartbeat_checkDelimit Heartbeat CheckA
Walk the heartbeat directory and report which scheduled services are stale (LED-1412).
When to use: as part of the session-start ritual to surface silent
daemon staleness before it becomes a customer-visible incident. The
2026-05-15 incident — delimit-reddit-proxy.service inactive for 13
days, all reddit scans 429-failing silently, founder noticing only
via "3 day old posts" — is the failure mode this prevents. Each
scheduled task writes ~/.delimit/heartbeats/<service>.json after
every run; this tool walks the dir and classifies each service.
When NOT to use: for one-off liveness checks (just read the file
yourself) or for full-host metrics (delimit_obs_status). Phase 2
will add an external deadman ping for full-host outages —
heartbeats here are local-only.
Sibling contrast: delimit_obs_status reports composed runtime observability metrics; this reports per-service liveness based on last_run timestamps written by each daemon. delimit_gov_health reports the kernel layer.
Side effects: read-only on the heartbeat directory. No network, no write, no ledger, no notification.
Classification (most-severe-first):
parse_error: heartbeat file unreadable
failed: status='failed' in the record
stale: last_run older than service-specific threshold
degraded: status='degraded' in the record
never_seen: configured service has no heartbeat file yet
unknown_age: heartbeat exists but timestamp won't parse
ok: status='ok' AND last_run within threshold
Per-service thresholds default to sensible values (reddit/social-loop
2h, inbox 30min, daily timers 36h). Override via
<dir>/_thresholds.json — JSON map of {service_name: seconds}.
| Name | Required | Description | Default |
|---|---|---|---|
| heartbeat_dir | No | Override the heartbeat directory. Default: $DELIMIT_HEARTBEAT_DIR env var or ~/.delimit/heartbeats/. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotation Contradiction: the description states 'Side effects: read-only on the heartbeat directory. No network, no write, no ledger, no notification,' but the annotations declare readOnlyHint: false. This directly contradicts the structured metadata and creates conflicting signals about whether the tool may mutate state.
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 long but every section earns its place: purpose, usage guidance, sibling contrast, side effects, classification semantics, and thresholds. It is front-loaded with a clear one-sentence summary and uses structured headings for scannability.
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?
An output schema exists, so return values need no prose description. The description covers classifications, thresholds, override mechanism, local-only behavior, and alternatives. It would be fully complete were it not for the readOnlyHint contradiction, which introduces avoidable uncertainty about side effects.
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 single optional parameter heartbeat_dir is already well documented with its default and environment variable fallback. The description adds useful context about heartbeat files and thresholds but does not need to compensate for schema gaps, so the baseline 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?
The first sentence states a specific verb, resource, and outcome: 'Walk the heartbeat directory and report which scheduled services are stale.' The sibling contrast explicitly distinguishes this tool from delimit_obs_status and delimit_gov_health, so an agent can tell them apart.
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 explicit 'When to use' and 'When NOT to use' guidance, including concrete alternatives like delimit_obs_status and direct file reads for one-off liveness checks. This leaves no ambiguity about selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_helpDelimit HelpARead-onlyIdempotent
Get help for a Delimit tool — purpose, parameters, examples.
When to use: when an agent or operator needs a quick reminder of a tool's interface, or wants the workflow overview. When NOT to use: for the full version/environment status (use delimit_version) or governance health (delimit_gov_health).
Sibling contrast: delimit_version reports server info; this returns per-tool descriptions from the TOOL_HELP table.
Side effects: read-only. Looks up an in-memory help table.
| Name | Required | Description | Default |
|---|---|---|---|
| tool_name | No | Tool name (e.g. "lint", "gov_health"). Empty returns the workflows overview. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 useful context beyond these: it states 'Side effects: read-only' and reveals the implementation detail 'Looks up an in-memory help table.' This gives the agent confidence about safety and internal behavior without contradicting 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 tightly structured with clear labeled sections (When to use, When NOT to use, Sibling contrast, Side effects) and no filler. Every sentence contributes either usage guidance or behavioral context, and the most important purpose statement 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?
For a simple, read-only help tool with one optional parameter and a proper output schema, the description is complete. It covers purpose, usage boundaries, sibling differentiation, side effects, and parameter behavior, so an agent can safely and correctly invoke it without further research.
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%: the single optional parameter tool_name is already documented in the schema, including that empty returns the workflows overview. The tool description itself does not add much parameter detail beyond the schema, so the 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 opens with a specific verb and resource: 'Get help for a Delimit tool — purpose, parameters, examples.' It also distinguishes itself from siblings by noting it 'returns per-tool descriptions from the TOOL_HELP table,' making its scope clear against the many delimit_* 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 provides 'When to use' and 'When NOT to use' conditions, and names the alternative tools (delimit_version, delimit_gov_health) for those excluded cases. The sibling contrast line further clarifies the boundary by contrasting the returned content.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_impactDelimit ImpactARead-onlyIdempotent
Analyze downstream impact of an API change (informational only).
When to use: when assessing blast radius for a planned API change, by inspecting a dependency manifest for callers of the named API. When NOT to use: to make a gate decision (use delimit_lint or delimit_gov_evaluate for pass/fail) — this returns information.
Sibling contrast: delimit_lint returns pass/fail; this returns a blast-radius report.
Side effects: read-only. Calls backends.gateway_core.run_impact.
| Name | Required | Description | Default |
|---|---|---|---|
| api_name | Yes | The API name that changed. Required. | |
| dependency_file | No | Optional path to a dependency manifest file (package.json, requirements.txt, go.mod) to scan for callers. Default None = backend default path. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is known. The description adds useful context beyond annotations: it is 'informational only', not a gate decision, and it calls backends.gateway_core.run_impact. This gives the agent a clear picture of behavior without being exhaustive.
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 well-structured and front-loaded: purpose first, then usage guidance, then sibling contrast, then side effects. Every sentence serves a distinct purpose and there is no filler.
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 read-only analysis tool with rich annotations, full schema coverage, and an output schema, the description covers purpose, usage, alternatives, exclusions, and side effects. Nothing needed for an agent to select and invoke it correctly is missing.
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 both api_name and dependency_file. The description reinforces that dependency_file is a manifest path (package.json, requirements.txt, go.mod), but this is also in the schema, so no significant extra meaning is added.
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 specific verb and resource: 'Analyze downstream impact of an API change', and clarifies scope via 'blast radius' and 'dependency manifest'. It also distinguishes itself from delimit_lint by noting that this returns a blast-radius report rather than pass/fail.
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, explicitly says 'When NOT to use', and names the exact alternatives (delimit_lint, delimit_gov_evaluate). This fully routes the agent to the correct tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_inbox_daemonDelimit Inbox DaemonA
Control the inbox polling daemon for email governance (Pro).
When to use: at session start (per orchestrator session ritual) to ensure the daemon is up; or to stop/inspect it. When NOT to use: to read inbound items (use delimit_notify_inbox) or send notifications (delimit_notify).
Sibling contrast: delimit_notify_inbox reads; this controls the daemon process that fills the inbox.
Side effects: action="start" / "stop" mutate daemon process state. The daemon polls pro@delimit.ai every 5 minutes, classifies emails, forwards owner-action items, and handles draft approvals via email replies. Auto-posting is disabled — approved drafts are emailed for manual posting. Backing module is gateway-only and surfaces a graceful "not_available" payload when called from the npm bundle.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | "start" (begin polling), "stop" (halt polling), "status" (default — show daemon state). | status |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description clearly discloses mutation semantics: action 'start'/'stop' mutate daemon process state. It adds rich context beyond annotations by describing polling frequency, classification behavior, draft approval handling, auto-posting being disabled, and the gateway-only 'not_available' payload behavior. This does not contradict the readOnlyHint=false or destructiveHint=false 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 well-structured with clear sections: what it does, when to use, when not to use, sibling contrast, and side effects. Every section adds distinct value, and the most decision-critical information 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?
The description fully orients an agent for a one-parameter control tool: session-start ritual usage, daemon behavior, side effects, integration constraints, and graceful degradation in the npm bundle. An output schema exists, so return-value details are not required here.
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 schema already documents the single 'action' parameter. The description adds operational meaning beyond the schema by specifying that start/stop mutate daemon state and status is the default inspection mode, reinforcing how the parameter values behave.
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 specific verb and resource: 'Control the inbox polling daemon for email governance (Pro).' It clearly distinguishes itself from siblings by noting that delimit_notify_inbox reads while this tool controls the daemon process that fills the inbox.
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 explicit when-to-use guidance ('at session start... to ensure the daemon is up; or to stop/inspect it') and when-not-to-use guidance with named alternatives ('use delimit_notify_inbox' or 'delimit_notify'). It also provides a sibling contrast, leaving no ambiguity about role boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_initDelimit InitA
Initialize Delimit governance scaffolding for a project.
When to use: once per project, the first time you adopt Delimit — creates .delimit/policies.yml, ledger directory, and (optionally) a project .claude/settings.json with a reasonable allowlist. When NOT to use: to load an existing config (use delimit_project_config action="load") or to discover Delimit's capabilities for a project (delimit_scan).
Sibling contrast: delimit_project_config manages the config after init; delimit_scan inspects what could be governed; this is the one-time initializer.
Side effects: creates .delimit/policies.yml + ledger dir; chmod 755 on .delimit/, chmod 600 on .delimit/secrets/*; writes a project .claude/settings.json with an Edit/Write/Bash allowlist if missing. Pass no_permissions=True to skip the permission step.
| Name | Required | Description | Default |
|---|---|---|---|
| preset | No | Policy preset — "strict", "default", "relaxed". | default |
| project_path | No | Project root directory. Default "." (cwd). | . |
| no_permissions | No | Skip filesystem permission auto-config (LED-269). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal, so the description carries the full burden of behavioral disclosure. It clearly lists side effects: creates .delimit/policies.yml, ledger directory, chmod 755/600 changes, and optional .claude/settings.json writes. It also discloses that permission configuration can be skipped with no_permissions=True, giving the agent a complete picture of the tool's footprint.
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 well-organized with clear 'When to use', 'When NOT to use', and 'Side effects' sections, and the most important information is front-loaded. There is minor redundancy: the creation of .delimit/policies.yml and ledger directory appears in both the 'When to use' paragraph and the 'Side effects' section, but this is a small cost for the clarity gained.
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 three optional parameters and meaningful side effects, the description is complete: it names prerequisites, alternatives, exact filesystem effects, permission behavior, and how to opt out of the permission step. Because an output schema exists, no return-value explanation is required.
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 baseline is 3. The description adds useful meaning by tying no_permissions to the permission step and to the optional .claude/settings.json allowlist, which goes slightly beyond the schema's short parameter description. Preset and project_path rely on the schema, which is acceptable given 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?
The description opens with a specific verb and resource: 'Initialize Delimit governance scaffolding for a project.' It also contrasts itself with delimit_project_config ('manages the config after init') and delimit_scan ('inspects what could be governed'), making it easy for an agent to distinguish this one-time initializer from nearby 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?
Usage guidance is explicit: 'When to use: once per project, the first time you adopt Delimit' and 'When NOT to use' names both the alternative tools and the conditions that route to them. This leaves no ambiguity about when the tool is the correct choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_intel_dataset_freezeDelimit Intel Dataset FreezeA
Freeze a dataset to make it immutable for replay integrity.
When to use: when a dataset is about to be referenced as evidence or signed attestation, and you want to lock its content forever. When NOT to use: to delete a dataset (the registry is append-only) or to inspect what's frozen (use delimit_intel_dataset_list).
Sibling contrast: delimit_intel_dataset_list inventories; delimit_intel_dataset_register writes; this locks against further writes.
Side effects: writes a frozen marker to the registry via backends.tools_data.intel_dataset_freeze. Subsequent writes to this dataset id will be rejected.
| Name | Required | Description | Default |
|---|---|---|---|
| dataset_id | Yes | Dataset identifier from the registry. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses concrete side effects: writing a frozen marker to a specific backend path and causing subsequent writes to the dataset id to be rejected. This adds meaningful behavioral context beyond the annotations, which only indicate readOnlyHint=false and destructiveHint=false.
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 well-structured with a clear lead sentence followed by concise, purposeful sections for usage, non-usage, sibling contrast, and side effects. Every sentence adds relevant information without 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?
For a simple single-parameter tool with an output schema, annotations, and clear sibling routing, the description is complete. It captures the action, rationale, exclusions, side effects, and consequences for future writes.
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%, with dataset_id already documented as the registry identifier and required. The description adds minimal new semantic detail about the parameter itself, so the 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 opens with a specific verb and resource: 'Freeze a dataset to make it immutable for replay integrity.' It clearly distinguishes this tool from siblings by contrasting list, register, and freeze behaviors.
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' and 'When NOT to use' sections, including a specific alternative for inspection (delimit_intel_dataset_list). It also explains that deletion is inappropriate because the registry is append-only, leaving no ambiguity about selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_intel_dataset_listDelimit Intel Dataset ListARead-onlyIdempotent
List all datasets in the intel registry.
When to use: to inventory datasets currently registered for intel queries. When NOT to use: to register a new dataset (use delimit_intel_dataset_register) or to freeze one (delimit_intel_dataset_freeze).
Sibling contrast: delimit_intel_dataset_register writes; delimit_intel_dataset_freeze locks; this reads metadata.
Side effects: read-only. Calls backends.tools_data.intel_dataset_list.
Args: None.
Returns: Dict with the dataset registry and next_steps.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, and the description reinforces this with 'Side effects: read-only' and 'this reads metadata.' It also adds a concrete backend call and return shape, giving the agent useful behavioral context beyond the structured 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 well-structured with labeled sections and front-loads the core purpose. Every section adds useful guidance: usage, exclusions, side effects, args, and returns, without unnecessary 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?
For a read-only, zero-parameter inventory tool with an output schema present, the description fully covers what the tool does, when to use it, what it returns, and how it differs from siblings. Nothing an agent needs to call it correctly is missing.
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 tool has zero parameters and the schema is 100% covered by an empty properties object. The description explicitly states 'Args: None,' which is the appropriate baseline for a no-parameter tool.
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 opens with a specific verb and resource: 'List all datasets in the intel registry.' It also differentiates itself from siblings by contrasting read vs. write vs. lock behavior, so the agent can distinguish it from delimit_intel_dataset_register and delimit_intel_dataset_freeze.
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' and 'When NOT to use' guidance, including the exact sibling tools to use instead for registration and freezing. The sibling contrast reinforces the decision boundary, leaving no ambiguity about when to invoke this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_intel_dataset_registerDelimit Intel Dataset RegisterA
Register a new dataset in the file-based intel registry.
When to use: at the start of an intel collection effort, to declare a named dataset that future ingest calls will write to. When NOT to use: to write data into an existing dataset (use delimit_intel_snapshot_ingest) or to inventory datasets (delimit_intel_dataset_list).
Sibling contrast: delimit_intel_dataset_list inventories; delimit_intel_dataset_freeze locks; this creates.
Side effects: writes a registry entry via backends.tools_data.intel_dataset_register. Coerces schema from a JSON string to a dict via _coerce_dict_arg.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Dataset name (key). Required. | |
| schema | No | Optional JSON schema as dict or JSON string. | |
| description | No | Human-readable description for the registry. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey readOnlyHint=false and destructiveHint=false, but the description adds useful behavioral detail: it writes a registry entry through a specific backend path and coerces schema from JSON string to dict. It does not fully describe duplicate-name behavior or error handling, but it goes beyond what annotations alone provide.
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 compact and well-structured with labeled sections for usage, non-usage, sibling contrast, and side effects. Every part adds decision-relevant information, and important content is front-loaded in the opening sentence.
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 registration tool with a small input schema and an output schema, this description is complete enough: it tells the agent when to use it, when not to, how it contrasts with siblings, and what side effects to expect. The presence of an output schema means return-value details are not required in the description.
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 the baseline is 3, but the description adds meaningful parameter-related context by explicitly noting that the schema argument is coerced from a JSON string to a dict. This helps the agent understand how to supply the schema parameter beyond the schema's own type declaration.
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 opens with the specific action 'Register a new dataset' and names the target resource ('file-based intel registry'). It further distinguishes the tool from siblings by stating 'this creates' relative to inventory and freeze operations, so there is no ambiguity about what the tool does.
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 provides 'When to use' and 'When NOT to use' guidance, naming the exact alternative tools for writing data (delimit_intel_snapshot_ingest) and inventorying datasets (delimit_intel_dataset_list). This gives an agent clear decision criteria and removes reliance on inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_intel_queryDelimit Intel QueryARead-onlyIdempotent
Search saved intel snapshots by keyword, date, or dataset.
When to use: to surface ingested intel matching a query, optionally scoped to one dataset. When NOT to use: to ingest new data (use delimit_intel_snapshot_ingest) or list datasets (delimit_intel_dataset_list).
Sibling contrast: delimit_intel_snapshot_ingest writes; this reads back filtered snapshots.
Side effects: read-only. Calls backends.tools_data.intel_query. Coerces parameters from JSON string to dict via _coerce_dict_arg.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Keyword search string. Empty = all. | |
| dataset_id | No | Optional dataset to scope the query to. | |
| parameters | No | Optional dict with date_from, date_to, limit. Accepted as JSON string and coerced. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, and the description adds value by stating the backend call target and the parameter coercion behavior. This gives an agent concrete expectations about internal behavior beyond the annotation flags.
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 compact, front-loaded with the core purpose, and uses labeled sections for usage guidance and side effects. Every sentence earns its place with no redundancy or filler.
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 a rich output schema, complete parameter schema, clear annotations, and explicit sibling alternatives, nothing critical is missing. The description fully equips an agent to invoke the tool correctly and understand its side effects.
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 the input schema already fully documents query, dataset_id, and parameters. The description adds a helpful high-level summary of search dimensions ('keyword, date, or dataset') but does not materially go beyond the schema's 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 opens with a specific verb and resource: 'Search saved intel snapshots by keyword, date, or dataset.' It clearly differentiates from siblings by naming exactly what this tool is not (ingest, dataset listing) and contrasting it with delimit_intel_snapshot_ingest.
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 explicit 'When to use' and 'When NOT to use' guidance, naming the exact alternative tools for ingestion and dataset listing. This leaves no ambiguity about when to select this tool over its siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_intel_snapshot_ingestDelimit Intel Snapshot IngestA
Store a research snapshot with provenance in the intel store.
When to use: to ingest research / signal data with provenance (source, author) for later replay or attestation. When NOT to use: to register a dataset (use delimit_intel_dataset_register) or query existing snapshots (delimit_intel_query).
Sibling contrast: delimit_intel_dataset_register declares; delimit_intel_query reads; this writes new snapshots.
Side effects: writes a snapshot record via backends.tools_data.intel_snapshot_ingest. Coerces data and provenance from JSON strings to dicts via _coerce_dict_arg.
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | Snapshot data (JSON-serializable dict or JSON string). Required. | |
| provenance | No | Optional provenance metadata (source, author, etc.). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already indicate this is not read-only and not destructive. The description goes beyond that by disclosing the side effect of writing a snapshot record via a specific backend and explaining that data and provenance are coerced from JSON strings to dicts via _coerce_dict_arg. This adds useful behavioral detail, though it does not fully address idempotency or failure semantics.
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 well-structured with clear sections: purpose, when to use, when not to use, sibling contrast, and side effects. Every sentence contributes useful information, and the main 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?
For a two-parameter tool with full schema descriptions, an output schema, and safety annotations, the description covers purpose, usage boundaries, sibling relationships, side effects, and parameter coercion behavior. An agent has enough information to select and invoke this 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 100%, so the input schema already documents both parameters. The description adds meaningful value by mentioning the JSON-string-to-dict coercion behavior, which is not obvious from the schema alone and directly affects how callers can pass data and provenance.
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 specific verb and resource: 'Store a research snapshot with provenance in the intel store.' It further distinguishes itself from the closely related siblings delimit_intel_dataset_register and delimit_intel_query, making the tool's purpose immediately 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?
The description provides explicit 'When to use' and 'When NOT to use' guidance, names the alternative tools to use instead, and includes a sibling contrast ('register declares; query reads; this writes'). An agent can confidently decide whether this tool is the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_ledgerDelimit LedgerARead-onlyIdempotent
Query the append-only contract ledger (hash-chained JSONL).
When to use: to read or audit the cryptographically-chained contract ledger that records signed governance events. When NOT to use: for the project work ledger (use delimit_ledger_list / delimit_ledger_query) — the contract ledger is a different, hash-chained store.
Sibling contrast: delimit_ledger_list reads work items; delimit_audit reads audit logs; this reads the hash-chained contract ledger and can verify integrity.
Side effects: read-only. Calls backends.gateway_core.query_ledger.
| Name | Required | Description | Default |
|---|---|---|---|
| api_name | No | Optional filter by API name. | |
| repository | No | Optional filter by repository. | |
| ledger_path | Yes | Path to the ledger JSONL file (e.g. .delimit/ledger/operations.jsonl). Required. | |
| validate_chain | No | If True, verify the hash chain integrity in addition to filtering. Default False. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnlyHint, idempotentHint, and destructiveHint, but the description adds substantial behavioral context: the ledger is append-only, hash-chained, stores signed governance events, and can verify integrity. It also discloses that it calls backends.gateway_core.query_ledger, which is useful and consistent with 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 well-structured with front-loaded key information and labeled sections. A minor redundancy exists: the hash-chained contract ledger is described more than once, and the 'Side effects: read-only' line partly repeats the annotations, but the overall length is still appropriate and scannable.
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 annotations cover safety, and the input schema covers parameters at 100%, the description is complete for selection and invocation. It explains the data store, integrity verification capability, and sibling distinctions without needing to explain 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 baseline is 3. The description does not repeat parameter-level details, which is appropriate, but it only lightly contextualizes validate_chain via the 'audit' and 'verify integrity' language. The schema already explains 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 opens with a specific verb and resource: 'Query the append-only contract ledger (hash-chained JSONL).' It clearly distinguishes this tool from delimit_ledger_list and delimit_audit by naming what each sibling reads, so an agent can tell them apart without opening schemas.
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?
It provides an explicit 'When to use' section and an explicit 'When NOT to use' section that names the alternatives (delimit_ledger_list / delimit_ledger_query). The sibling contrast further clarifies routing to delimit_audit vs. this tool, leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_ledger_addDelimit Ledger AddA
Add a new item to a project's ledger.
When to use: to capture work that should outlive the current session — tasks, bugs, features, decisions, strategy items. When NOT to use: for governance-classed work (use delimit_gov_new_task) or quick conversation memory (delimit_memory_store).
Sibling contrast: delimit_ledger_update changes; delimit_ledger_done closes; this creates.
Side effects: writes a new ledger entry via ai.ledger_manager.add_item. Coerces tags / acceptance_criteria / tools_needed from comma strings to lists via _coerce_list_arg.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Labels/tags (e.g. ["deploy-ready", "ship"] or "deploy-ready,ship"). | |
| title | Yes | What needs to be done. Required. | |
| ledger | No | "ops" (tasks, bugs, features) or "strategy" (decisions, direction). | ops |
| source | No | Where this came from (session, consensus, focus-group, etc). | session |
| context | No | Background info an AI agent needs to work on this item. | |
| venture | No | Project name or path. Empty = auto-detect from cwd. | |
| priority | No | P0 (urgent), P1 (important), P2 (nice to have). | P1 |
| item_type | No | task, fix, feat, strategy, consensus. | task |
| worked_by | No | Which AI model is working on this. Auto-detected if empty. | |
| description | No | Details. | |
| tools_needed | No | Delimit tools needed (e.g. "delimit_lint", "delimit_test_coverage"). | |
| acceptance_criteria | No | List of testable "done when" conditions (e.g. "tests pass", "coverage > 80%"). | |
| estimated_complexity | No | small, medium, or large. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide readOnlyHint: false and destructiveHint: false, which are weak generic signals. The description adds meaningful behavioral disclosure: it "writes a new ledger entry via ai.ledger_manager.add_item" and coerces tags/acceptance_criteria/tools_needed from comma strings to lists via _coerce_list_arg. This reveals internal mechanics and transformation behavior an agent needs to predict outcomes. Minor gap: no mention of error behavior or failure modes (e.g., invalid venture auto-detection).
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 tightly organized into labeled sections: purpose, when-to-use, when-not-to-use, sibling contrast, and side effects. Every sentence earns its place, the core purpose is front-loaded, and there is zero filler. The structure makes it scannable for an agent.
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 13 parameters, 100% schema coverage, an output schema, and annotations, the description covers the decision-critical aspects thoroughly: purpose, alternatives, exclusions, side effects, and coercion. What's missing is prerequisite context — e.g., whether the target project/ledger must already exist, or failure behavior when venture auto-detection from cwd fails. These are real edge cases for a write tool but not crippling 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%, so the baseline is 3 — the schema already documents all 13 parameters. The description adds value beyond the schema by explaining that tags, acceptance_criteria, and tools_needed accept comma-separated strings that get coerced to lists, which clarifies the anyOf string/array types. That lifts it 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 opens with a specific verb and resource: "Add a new item to a project's ledger." It then distinguishes itself from siblings explicitly — "delimit_ledger_update changes; delimit_ledger_done closes; this creates" — and from delimit_gov_new_task and delimit_memory_store. An agent can confidently select this tool without inspecting schemas.
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 an explicit "When to use" section (work that should outlive the session: tasks, bugs, features, decisions, strategy items) and a "When NOT to use" section naming exact alternatives (delimit_gov_new_task for governance-classed work, delimit_memory_store for quick conversation memory). This is the strongest possible routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_ledger_auto_cancel_staleDelimit Ledger Auto Cancel StaleADestructive
Auto-archive open ledger items dormant past the stale-TTL threshold.
When to use: as nightly automation / scripted cleanup to retire items that have gone quiet past a strict threshold (default 60 days). When NOT to use: to merely surface stale candidates without applying (use delimit_ledger_groom which is propose-only and uses a softer 30-day default), to inspect ledger health (use delimit_ledger_health), or to auto-close items mirrored from external repos (delimit_ledger_auto_close_external).
Sibling contrast: delimit_ledger_groom proposes archives with a softer threshold and never applies; delimit_ledger_auto_close_external targets externally-mirrored items; delimit_ledger_bulk is the underlying bulk-action surface; this composes the stale-detector with bulk_action(archive) on a stricter dormancy threshold.
Side effects: with dry_run=False, archives matching items via bulk_action(archive). Items are never hard-deleted — the JSONL append-only log retains the full record. With dry_run=True (default), returns the plan only.
LED-1145 Phase 2 #4.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | True (default) returns the plan; False applies via bulk_action(archive). | |
| venture | No | Project name or path. Auto-detects if empty. | |
| max_items | No | cap items processed per call. When the candidate list exceeds this, response includes truncated=True so the caller can run again to drain. | |
| threshold_days | No | dormancy threshold in days. 0 = read default (60 from STALE_TTL_DEFAULT_DAYS or DELIMIT_STALE_TTL_DAYS env). Pass an int to override. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description discloses the key side effects: with dry_run=False it archives via bulk_action(archive), with dry_run=True it returns only the plan, items are never hard-deleted, and the JSONL append-only log retains full records. It also explains the composition with the stale-detector and bulk_action, which goes well beyond what annotations alone provide.
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 well-organized with clear sections and front-loaded purpose, but it is somewhat long and repeats sibling contrast in both the 'When NOT to use' and 'Sibling contrast' sections. The trailing internal reference 'LED-1145 Phase 2 #4' also adds little value for an agent selecting or invoking 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?
Given the tool's complexity, destructive nature, and rich sibling set, the description covers selection criteria, invocation semantics, dry-run behavior, persistence guarantees, and composition with bulk actions. An output schema exists, so lack of explicit return-value detail is acceptable; nothing essential for correct use is missing.
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 input schema already covers all four parameters with detailed descriptions (100% coverage), so the baseline is 3. The tool description adds general context about the 60-day default and strict threshold, but does not materially extend the schema's parameter-level explanations.
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 specific action (auto-archive open ledger items dormant past stale-TTL threshold) with the resource and behavior clearly named. It differentiates itself from siblings like delimit_ledger_groom and delimit_ledger_auto_close_external, so an agent can select it accurately.
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 explicit 'When to use' and 'When NOT to use' guidance, naming exact alternatives (delimit_ledger_groom, delimit_ledger_health, delimit_ledger_auto_close_external) and the conditions that route to each. This is ideal for an agent deciding between closely-related ledger tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_ledger_auto_close_externalDelimit Ledger Auto Close ExternalA
Auto-close ledger items whose linked GitHub issue/PR already resolved.
When to use: as periodic maintenance to keep the ledger in sync with external reality — LEDs whose tracked GitHub issue/PR is closed/merged should not stay open. When NOT to use: to close one item by hand (use delimit_ledger_done) or to read external state (delimit_resource_get).
Sibling contrast: delimit_ledger_done is per-item; this auto-detects across many items.
Side effects: when dry_run=False, marks/archives via delimit_ledger_bulk under the hood. Default dry_run=True returns a plan only. Detection scans description/context/last_note/tags for github links / shorthand / gh: tag form.
Detection scans description / context / last_note / tags for:
https://github.com///(issues|pull)/
/# (short form)
gh:// (explicit tag form)
Action map (per LED-1146 deliberation):
PR with merged=true → mark_done with merge SHA in note
issue/PR closed with state_reason="completed" → mark_done with closed_at
issue/PR closed with state_reason="not_planned" or no reason → archive
state="open" → leave alone
gh API error / 404 → leave alone, recorded in
errors
Implementation re-uses bulk_action() under the hood; nothing new on the write path. dry_run=True (default) returns a plan; dry_run=False applies.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | True (default) returns a plan without writing. | |
| venture | No | project name or path. Auto-detects if empty. | |
| max_items | No | hard cap on items processed in one call (default 200). When the candidate set exceeds this, the response is `truncated=True`. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses meaningful behavioral details beyond the annotations: dry_run defaults to true and returns a plan, false applies changes via delimit_ledger_bulk, detection fields and link formats are specified, an action map covers merged/closed/open/error cases, and errors are recorded. This is thorough and does not contradict the readOnlyHint=false/destructiveHint=false 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 well-structured and front-loaded, with clear sections for purpose, usage, side effects, detection, and action mapping. It loses one point because the detection fields are introduced twice in near-identical wording: once in prose and again in the bulleted list.
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 of this complexity, the description is remarkably complete: it covers side effects, dry-run behavior, detection patterns, per-state actions, error/404 handling, implementation reuse, and output truncation. The presence of an output schema means return-value details do not need to be repeated.
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 largely restates what the parameter schemas already say (dry_run plan vs apply, venture auto-detection, max_items cap with truncated=True). It adds no significant parameter-level meaning beyond the schema, so the 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?
The description opens with a specific action and resource: 'Auto-close ledger items whose linked GitHub issue/PR already resolved.' It also distinguishes itself from delimit_ledger_done, making the tool's batch/auto-detection scope immediately clear.
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 'When to use' and 'When NOT to use' sections name concrete alternatives (delimit_ledger_done for manual per-item closing, delimit_resource_get for reading external state) and clarify the periodic-maintenance context. This leaves little ambiguity about when this tool should be selected.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_ledger_bulkDelimit Ledger BulkA
Apply one action to many ledger items in a single call (LED-1145 Phase 1 PR-B).
When to use: after delimit_ledger_groom or another tool surfaces a list of item ids that should all receive the same change. When NOT to use: for a single item (use delimit_ledger_update or delimit_ledger_done).
Sibling contrast: delimit_ledger_update is one item; delimit_ledger_groom proposes; this applies bulk.
Side effects: when dry_run=False, writes status/priority/tag changes via the ledger manager. Per-item failures don't block the batch. Default dry_run=True returns what would change without writing — callers MUST explicitly pass dry_run=False to apply.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | required when action="add_tag". | |
| note | No | optional note attached to every successful update event. | |
| action | Yes | one of the actions above. | |
| dry_run | No | True (default) returns `would_change`; False applies and returns `changed`. | |
| venture | No | project name or path. Auto-detects if empty. | |
| item_ids | Yes | comma-separated LED ids (e.g. "LED-915,LED-916,LED-918") or a JSON array of strings. | |
| new_status | No | required when action="set_status". | |
| new_priority | No | required when action="set_priority". |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate readOnlyHint=false and destructiveHint=false, so the description carries the burden of explaining behavior. It clearly discloses that dry_run=False writes status/priority/tag changes, that per-item failures do not block the batch, and that callers must explicitly pass dry_run=False to apply. No contradiction with annotations exists.
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 well-structured with labeled sections, front-loaded purpose, and minimal redundancy. It loses a point for the 'LED-1145 Phase 1 PR-B' ticket reference, which adds non-actionable noise for an agent, but overall each substantive section 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?
The description covers when to use the tool, when not to use it, alternative tools, side effects, default behavior, and failure semantics, and an output schema exists for return values. The main gap is that the set of valid action strings is not explicitly enumerated in the description, which would make invocation more robust.
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 already covers 100% of parameters with descriptions, so the baseline is 3. The description adds meaningful context by explaining dry_run semantics and the write side effects tied to status/priority/tag actions. It does not enumerate the exact action enum values, but related parameter descriptions partially compensate.
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 opens with a concrete verb and object—'Apply one action to many ledger items in a single call'—making the tool's core function immediately clear. It also explicitly contrasts with delimit_ledger_update and delimit_ledger_groom, so an agent can distinguish this bulk-applier from its siblings without inspecting schemas.
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 includes dedicated 'When to use' and 'When NOT to use' guidance, plus a direct sibling contrast. It tells the agent to use single-item tools for one item and to reach for this tool only after a grooming/list step produces multiple IDs needing the same change.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_ledger_contextDelimit Ledger ContextARead-onlyIdempotent
Quick summary of what's open in the ledger (top 5 by priority).
When to use: at session start as part of the orchestrator session ritual, to see the highest-priority open items. When NOT to use: for the full list (use delimit_ledger_list) or to fetch a specific item (delimit_ledger_query).
Sibling contrast: delimit_ledger_list returns the full list; this returns a top-5 summary.
Side effects: read-only. Calls ai.ledger_manager.get_context.
| Name | Required | Description | Default |
|---|---|---|---|
| venture | No | Project name or path. Empty = auto-detect from cwd. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered by structured data. The description adds value beyond that by stating 'Side effects: read-only' and, more usefully, revealing the concrete backing call 'ai.ledger_manager.get_context'. It does not contradict the annotations; the read-only claim aligns with readOnlyHint=true. The minor deduction is because the read-only statement partially duplicates what the annotation already conveys.
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 front-loaded with a one-sentence summary of the tool's purpose, followed by clearly labeled sections: When to use, When NOT to use, Sibling contrast, and Side effects. Every line earns its place. There is slight redundancy between the 'When NOT to use' and 'Sibling contrast' paragraphs, but it is minor and reinforces rather than bloats.
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 simple read-only tool with one optional parameter, everything needed for correct selection and invocation is present: usage timing, exclusions with named alternatives, safety profile (via annotations), implementation detail, and the parameter is fully documented in the schema. An output schema exists, so return-format explanation is not the description's burden. Nothing material is missing.
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% — the single optional 'venture' parameter is already documented in the schema ('Project name or path. Empty = auto-detect from cwd.'). The tool description adds no parameter-level detail, but per the rubric the baseline of 3 applies when the schema carries the full burden, and here it does. No extra credit needed, no penalty warranted.
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 specific function: 'Quick summary of what's open in the ledger (top 5 by priority)' — a concrete resource (ledger), scope (open items), and constraint (top 5). It explicitly distinguishes itself from the siblings in the same domain: delimit_ledger_list (full list) and delimit_ledger_query (specific item). An agent can tell this tool apart without opening the schema.
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 ('at session start as part of the orchestrator session ritual') and When-NOT-to-use guidance with named alternatives (delimit_ledger_list for full list, delimit_ledger_query for a specific item). The sibling contrast section further reinforces the routing decision. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_ledger_doneDelimit Ledger DoneA
Mark a ledger item as done (convenience wrapper).
When to use: to close out a ledger item with one call instead of using delimit_ledger_update with status="done". When NOT to use: to change other fields (use delimit_ledger_update) or create new items (delimit_ledger_add).
Sibling contrast: delimit_ledger_update changes any field; this is the close-out shortcut.
Side effects: writes status="done" + optional note via ai.ledger_manager.update_item. LED-1408 Phase 1: when commit_sha or pr_url is provided (or a PR URL is detected in the note), attaches a ship_proof block to the event with verified=True. Future audits use this flag to distinguish trustworthy-done from marked-done-but-never-verified. Phase 2 will tighten enforcement.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Optional completion note. If the note contains a GitHub PR URL, it will be auto-extracted as ship proof. | |
| pr_url | No | LED-1408: optional GitHub PR URL proving the fix shipped. Parsed into pr_owner/pr_repo/pr_number; verified=True flag set on the item. | |
| item_id | Yes | Ledger item id (e.g. "LED-001"). Required. | |
| venture | No | Project name or path. Empty = auto-detect. | |
| commit_sha | No | LED-1408: optional merge-commit SHA proving the fix shipped. Recorded as ship_proof on the event; verified=True flag set on the item. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only mark readOnlyHint=false and destructiveHint=false, leaving the mutation profile unspecified; the description fills this by stating it 'writes status="done"' and calls ai.ledger_manager.update_item. It also discloses the conditional side effect of attaching a ship_proof block with verified=True and mentions Phase 2 changes, which are exactly the behavioral traits an agent cannot infer from the schema.
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 front-loaded with the one-line purpose, then uses clear headings for usage, alternatives, and side effects. It is a few sentences longer than minimal, but each section earns its place; no filler.
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 tool has a rich 100%-covered schema, an output schema, and non-conflicting annotations, so the main missing context was when to use it and what side effects it triggers, both covered. An agent has enough information to select it, call it with correct parameters, and anticipate the verified=True behavior.
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 each parameter already documented (e.g., pr_url says it is parsed into pr_owner/pr_repo/pr_number and sets verified=True). The description cross-references the ship-proof behavior but does not need to add per-parameter detail; baseline 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?
Description opens with a specific verb and resource: 'Mark a ledger item as done (convenience wrapper).' It immediately positions itself against delimit_ledger_update ('this is the close-out shortcut'), so an agent can distinguish it from the large ledger sibling family.
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 'When to use' and 'When NOT to use' sections state the condition for choosing this tool (single-call close-out) and direct other field edits to delimit_ledger_update and creations to delimit_ledger_add. Sibling contrast reinforces the distinction, so routing is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_ledger_groomDelimit Ledger GroomARead-onlyIdempotent
Read-only grooming proposal — flags stale / duplicate / garbage items.
When to use: as a periodic review tool to surface items that likely should be archived (stale, duplicate, garbage venture). When NOT to use: to apply the changes — use delimit_ledger_bulk after reviewing the proposal.
Sibling contrast: delimit_ledger_bulk applies; delimit_ledger_health composes this with other checks; this is the read-only proposer.
Side effects: read-only on the ledger. Returns proposals only — risky operations (mass-cancel, dedup-merge) MUST go through delimit_ledger_bulk after founder review. Each proposal includes a copy-pasteable ready_to_apply invocation.
LED-1145 Phase 2 #2. Risky operations (mass-cancellation, dedup-merge)
must NOT be a single atomic action — this tool only PROPOSES; the
founder applies via delimit_ledger_bulk after review. Each proposal
in the response includes a copy-pasteable ready_to_apply invocation.
| Name | Required | Description | Default |
|---|---|---|---|
| venture | No | project name or path. Auto-detects if empty. | |
| stale_days | No | threshold for stale_open detector (default 30). | |
| dup_min_count | No | minimum group size for duplicate_titles (default 3). | |
| max_per_category | No | cap per category in the response (default 50). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 goes further by explaining that the tool returns proposals only, never applies changes, requires founder review before risky operations, and includes a copy-pasteable ready_to_apply invocation. This adds meaningful behavioral context 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 well-structured and front-loaded, with clear When to use, When NOT to use, and Sibling contrast sections. However, the final LED-1145 paragraph largely repeats the Side effects paragraph, creating minor redundancy that could be trimmed without losing 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?
The description covers purpose, usage boundaries, sibling alternatives, safety behavior, and the proposal response pattern. Since an output schema exists, return-value details do not need to be repeated. All four parameters have defaults and descriptions, so an agent has everything needed to 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 description coverage is 100%, so the schema already documents all four parameters with defaults and meanings. The description adds high-level context by mentioning stale, duplicate, and garbage detectors, but it does not add meaningful detail beyond the schema's per-parameter descriptions. Baseline 3 is appropriate given full 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 opens with a specific verb and resource: 'Read-only grooming proposal — flags stale / duplicate / garbage items.' It clearly distinguishes itself from nearby ledger tools by positioning itself as 'the read-only proposer' versus delimit_ledger_bulk's applying role.
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 it ('as a periodic review tool'), when NOT to use it ('to apply the changes'), and names the alternative (delimit_ledger_bulk). The sibling contrast further clarifies that delimit_ledger_health composes this with other checks, leaving no ambiguity about tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_ledger_healthDelimit Ledger HealthARead-onlyIdempotent
One-shot ledger health check — totals + P0 + stale + duplicates + garbage.
When to use: at session start (orchestrator session ritual) or nightly review to get a traffic-light verdict on the ledger. When NOT to use: to apply changes (use delimit_ledger_bulk) or inspect a single item (delimit_ledger_query).
Sibling contrast: delimit_ledger_groom proposes archives; delimit_ledger_context returns top-5 open; this composes them into a one-shot health verdict with pre-formatted next_actions.
Side effects: read-only. Internally calls list_items + groom + P0 quota helpers.
LED-1145 capstone — closes the loop on the entire ledger-tooling refactor. Designed for nightly/weekly review or session-start status snapshot. Returns:
totals (unresolved / open / in_progress / blocked)
p0 (count vs quota + health)
stale (count >stale_days + health)
duplicates (group count + total items + health)
garbage_venture (count + health)
overall_health (worst-of: green / yellow / red)
next_actions: pre-formatted list of {reason, tool, args, follow_up}
All Phase 1+2 tools are referenced in the suggested actions, so the response is self-contained for an AI agent that wants to act on it.
| Name | Required | Description | Default |
|---|---|---|---|
| venture | No | project name or path. Auto-detects if empty. | |
| stale_days | No | stale-detector threshold passed to groom_proposal. | |
| dup_min_count | No | duplicate-detector threshold passed to groom_proposal. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only/idempotent/destructive annotations, it discloses that the tool internally calls list_items + groom + P0 quota helpers, is a composition, and produces a self-contained response with pre-formatted next_actions. This gives an agent an accurate model of what happens when invoked.
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 front-loaded with a one-line summary and uses clear section labels. It is somewhat longer than strictly necessary — the 'LED-1145 capstone' line and the detailed Returns list partly duplicate the output schema and earlier usage guidance — but the structure keeps it scannable.
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 selection criteria, exclusions, side effects, internal behavior, output shape, and self-contained actionability. With a rich output schema and annotations also present, nothing an agent needs to invoke this tool correctly is missing.
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 schema already describes venture, stale_days, and dup_min_count, including defaults. The description adds only indirect context, so it meets the baseline but adds little 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 opening phrase 'One-shot ledger health check — totals + P0 + stale + duplicates + garbage' combines a specific verb, resource, and distinctive scope. It also names sibling tools it composes, so an agent can distinguish it from delimit_ledger_groom and delimit_ledger_context.
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 (session start or nightly review), when not to use (applying changes or inspecting a single item), and names the correct alternatives (delimit_ledger_bulk, delimit_ledger_query). This is exactly the guidance needed for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_ledger_linkDelimit Ledger LinkA
Create a typed relationship between two ledger items.
When to use: to track dependencies and structure (blocks, parent/child, duplicates) between ledger items. When NOT to use: to read existing links (use delimit_ledger_links) or update other fields (delimit_ledger_update).
Sibling contrast: delimit_ledger_links reads; delimit_ledger_update changes simple fields; this writes a relationship.
Side effects: writes the link via ai.ledger_manager.link_items. "blocks" / "blocked_by" auto-create the reverse direction so both items see the relationship.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Optional note explaining the relationship. | |
| to_id | Yes | Target item id (e.g. "STR-005"). Required. | |
| from_id | Yes | Source item id (e.g. "LED-025"). Required. | |
| venture | No | Project name/path. Empty = auto-detect. | |
| link_type | No | One of "blocks" (default), "blocked_by", "parent", "child", "relates_to", "duplicates". | blocks |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses that the tool writes via ai.ledger_manager.link_items and that 'blocks'/'blocked_by' auto-create the reverse direction. This gives the agent important side-effect knowledge not visible in readOnlyHint/destructiveHint alone.
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 well-structured with clear sections: purpose, usage, exclusions, sibling contrast, and side effects. Every sentence serves a distinct purpose, and the most important information 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?
For a tool with five parameters and an output schema, the description covers when to use it, when not to use it, alternatives, side effects, and reverse-direction behavior. Nothing essential for correct invocation is missing.
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 the baseline is 3. The description adds meaningful context by explaining the relationship semantics, giving example link types, and clarifying that certain link types produce reverse-direction entries, which is not evident from the schema alone.
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 opens with a specific verb and resource: 'Create a typed relationship between two ledger items.' It explicitly contrasts itself with delimit_ledger_links and delimit_ledger_update, making its unique role immediately clear even among a large sibling 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?
It provides explicit 'When to use' and 'When NOT to use' sections, naming exact alternatives for reading links and updating fields. The sibling contrast section reinforces which tool does what, leaving no ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_ledger_linksDelimit Ledger LinksARead-onlyIdempotent
List relationships / dependencies for a ledger item.
When to use: to inspect what an item blocks, what it depends on, its parent/child, related items, and duplicates. When NOT to use: to add a link (use delimit_ledger_link) or update fields (delimit_ledger_update).
Sibling contrast: delimit_ledger_link adds links; this reads existing ones.
Side effects: read-only. Calls ai.ledger_manager.get_links.
| Name | Required | Description | Default |
|---|---|---|---|
| item_id | Yes | Item id to look up links for. Required. | |
| venture | No | Project name/path. Empty = auto-detect. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint, idempotentHint, and destructiveHint false, so the safety profile is covered. The description restates 'read-only' and adds the underlying call to ai.ledger_manager.get_links, but it does not disclose additional behavioral details such as error behavior or response shape; with annotations present the added value is modest.
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 short, scannable, and organized with clear labeled sections (When to use, When NOT to use, Sibling contrast, Side effects). No filler; every sentence adds routing or behavioral 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?
For a two-parameter read-only tool with full schema coverage and a declared output schema, the description covers purpose, alternatives, exclusions, and side effects. It even names the backing API call. Nothing important is missing for an agent to decide and invoke it 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?
The schema covers both parameters 100%, and the description adds semantic depth beyond the schema by explaining what relationships mean in practice: blocks, depends on, parent/child, related items, duplicates. This helps an agent understand what item_id is actually resolving even though the schema only says 'look up links for.'
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 the exact action — 'List relationships / dependencies for a ledger item' — with a concrete resource and scope. It explicitly contrasts with delimit_ledger_link ('this reads existing ones'), so an agent can distinguish read vs write ledger-link tools immediately.
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 a dedicated 'When to use' section listing inspection scenarios (blocking, dependencies, parent/child, related items, duplicates) and a 'When NOT to use' section naming the exact alternative tools (delimit_ledger_link, delimit_ledger_update). This leaves no ambiguity about selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_ledger_listDelimit Ledger ListARead-onlyIdempotent
List ledger items with rich filters, sort, and pagination (LED-1145).
When to use: to query a venture's ledger with filters — by status, priority, tags, text, time window, or external link. When NOT to use: for a top-N summary (use delimit_ledger_context) or to fetch a single item (delimit_ledger_query).
Sibling contrast: delimit_ledger_context is the top-5 summary; delimit_ledger_query fetches one; this is the powerful list call.
Side effects: read-only. Calls ai.ledger_manager.list_items.
Single-value status / priority are kept for back-compat.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | "updated_at" (default), "created_at", or "priority". | updated_at |
| text | No | Case-insensitive substring match on title + description. | |
| limit | No | Page size. Default 20. | |
| order | No | "asc" or "desc" (default). | desc |
| cursor | No | Opaque pagination token from prior next_cursor. Becomes invalid if filters change between calls. | |
| fields | No | Response projection. "" / "*" = full; "slim" = subset; CSV = those fields only. Unknown names ERROR. | |
| ledger | No | "ops", "strategy", or "both" (default). | both |
| status | No | Single-value status filter (back-compat). | |
| venture | No | Project name/path. Empty = auto-detect. | |
| priority | No | Single-value priority filter (back-compat). | |
| status_in | No | Comma-separated statuses (e.g. "open,blocked"). | |
| priority_in | No | Comma-separated priorities (e.g. "P0,P1"). | |
| created_after | No | ISO-8601 timestamp lower bound on creation time. If omitted, no lower bound is applied. | |
| updated_after | No | ISO-8601 timestamp lower bound on last-update time. If omitted, no lower bound is applied. | |
| created_before | No | ISO-8601 timestamp upper bound on creation time. If omitted, no upper bound is applied. | |
| updated_before | No | ISO-8601 timestamp upper bound on last-update time. If omitted, no upper bound is applied. | |
| tags_contains_all | No | Comma-separated tags; item must contain ALL. | |
| linked_external_id | No | Substring match in description / tags / context (github URL, Linear id, Discord thread). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, but the description adds useful context: it explicitly states 'Side effects: read-only', names the underlying implementation call, and explains the back-compat behavior of single-value status/priority. This goes beyond the structured 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 well-structured and front-loaded with the core purpose, followed by concise usage routing, sibling contrast, and side effects. Every sentence earns its place; the back-compat note is particularly valuable without adding bulk.
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 18 parameters, a rich input schema, an output schema, and annotations, the description completes the picture by providing routing guidance, filter category summaries, and explicit read-only semantics. Nothing needed to call this tool correctly is missing.
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 the baseline is 3. The description adds value by grouping the 18 parameters into meaningful categories (status, priority, tags, text, time window, external link) and by flagging that single-value status/priority are back-compat, implying preference for the _in variants. This helps an agent navigate a large parameter set.
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 opens with a specific verb and resource ('List ledger items with rich filters, sort, and pagination'), and the sibling contrast explicitly names the nearby tools it is not — delimit_ledger_context and delimit_ledger_query. An agent can immediately distinguish this from similar ledger 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 provides explicit 'When to use' and 'When NOT to use' sections, naming the alternatives (delimit_ledger_context for top-N summary, delimit_ledger_query for single item) and the conditions that select them. No inference is required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_ledger_proposeDelimit Ledger ProposeA
Propose new ledger items based on signals, completed work, and gaps.
When to use: at the end of a build loop or when the queue is empty, to suggest 3-5 next items with rationale. When NOT to use: to add a known item (use delimit_ledger_add) or list current items (delimit_ledger_list).
Sibling contrast: delimit_ledger_add commits chosen items; this proposes candidates.
Side effects: read-only analysis (does NOT auto-create ledger items). The caller decides which proposals to commit.
| Name | Required | Description | Default |
|---|---|---|---|
| focus | No | Optional area filter — "outreach", "engineering", "security", etc. | |
| venture | No | Focus on a specific venture. Empty = auto-detect. | |
| max_items | No | Maximum proposals. Default 5. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description clearly states 'read-only analysis (does NOT auto-create ledger items)', but the annotations set readOnlyHint: false. An agent receives conflicting signals about whether invoking this tool can mutate state, which is exactly the kind of contradiction that undermines safe tool selection.
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 front-loads the purpose in one sentence, then uses labeled sections for usage, non-usage, sibling contrast, and side effects. Every sentence earns its place and there is no redundant filler.
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 full parameter schema, an output schema, and clear side-effect disclosure, the description is nearly complete for an agent to invoke it correctly. It loses the top score only because the readOnlyHint: false annotation conflicts with the description's read-only claim, leaving the overall context inconsistent.
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 focus, venture, and max_items are already documented with defaults and semantics. The description does not add parameter-level meaning beyond suggesting 3-5 items, so a 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 opens with a precise verb and object: 'Propose new ledger items based on signals, completed work, and gaps.' It directly distinguishes this from delimit_ledger_add and delimit_ledger_list, so an agent can tell what the tool is for without opening the schema.
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 ('end of a build loop or when the queue is empty'), when-not-to-use ('to add a known item' or 'list current items'), and names the correct sibling tools. This leaves no ambiguity about selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_ledger_queryDelimit Ledger QueryARead-onlyIdempotent
Ask natural-language questions about the ledger (ChatOps 2.0).
When to use: when an operator wants a free-form answer ("what shipped this week?", "what's blocked?", "show all P0s") rather than a structured filter query. When NOT to use: for structured listing (use delimit_ledger_list) or top-N summary (delimit_ledger_context).
Sibling contrast: delimit_ledger_list takes structured filters; this maps natural language to those filters internally.
Side effects: read-only. Internally calls list / context queries.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Natural-language question (e.g. "what's blocked?", "search for dashboard"). Required. | |
| venture | No | Project name/path. Empty = auto-detect. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, and the description reinforces this by stating 'Side effects: read-only.' It adds useful internal behavior context by noting that it maps natural language to filters and internally calls list/context queries, which is value 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 well-structured with clear headings, front-loads the core purpose, and includes only high-value details: examples, exclusions, sibling contrast, and side effects. Every sentence 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 simple 2-parameter schema with full coverage, an output schema, and thorough annotations, the description fully covers what an agent needs: when to use it, when not to, how it differs from siblings, and its side effects. Nothing essential is missing.
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 both parameters. The description adds helpful examples of natural-language queries but does not add significant meaning to the 'venture' parameter beyond what the schema provides. 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 the tool's purpose: asking natural-language questions about the ledger, with concrete examples. It also explicitly distinguishes this tool from delimit_ledger_list and delimit_ledger_context, making the resource and behavior 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?
The description provides explicit 'When to use' and 'When NOT to use' sections, naming the specific alternative tools for structured listing and top-N summaries. This gives an agent clear routing criteria without requiring inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_ledger_updateDelimit Ledger UpdateA
Update any field on an existing ledger item.
When to use: to change state on a ledger item (status, priority, assignee, links, labels). Pass only the fields you want to change. When NOT to use: to create a new item (use delimit_ledger_add) or to mark one done (delimit_ledger_done is the convenience wrapper).
Sibling contrast: delimit_ledger_add creates; delimit_ledger_done closes; this is the general-purpose updater.
Side effects: writes to the ledger via ai.ledger_manager. Coerces string list inputs (labels) through _coerce_list_arg.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Append a note/comment to the item. | |
| title | No | New title. | |
| blocks | No | Item id that this one blocks (e.g. "STR-005"). | |
| labels | No | Labels/tags as comma string or list. | |
| status | No | New status — "open", "in_progress", "blocked", "done". | |
| item_id | Yes | Ledger item id, e.g. "LED-001" or "STR-001". Required. | |
| venture | No | Project name/path. Empty = auto-detect. | |
| assignee | No | Assign to person or agent (e.g. "founder", "claude"). | |
| due_date | No | ISO date string (e.g. "2026-04-01"). | |
| priority | No | New priority — "P0", "P1", "P2". | |
| worked_by | No | AI model working on this. Empty = auto-detect. | |
| blocked_by | No | Item id that blocks this one (e.g. "LED-025"). | |
| description | No | New description. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the key behavioral trait: 'writes to the ledger via ai.ledger_manager.' It also explains the label coercion behavior through _coerce_list_arg. This adds meaningful context beyond the annotations, which only say readOnlyHint=false and destructiveHint=false.
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 compact and well-organized with clear sections: purpose, when to use, when not to use, sibling contrast, and side effects. Every sentence contributes useful information 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 rich 100%-covered input schema and the presence of an output schema, the description covers everything needed: purpose, selection criteria, alternatives, side effects, and partial-update semantics. No critical information is missing for correct 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%, so the input schema already documents all 13 parameters. The description adds important usage semantics beyond the schema: 'Pass only the fields you want to change' clarifies partial-update behavior, and the label coercion note explains how the labels parameter is normalized.
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 opens with a specific verb and resource: 'Update any field on an existing ledger item.' It clearly distinguishes the tool from delimit_ledger_add and delimit_ledger_done, making its role as the general-purpose updater 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?
The description gives explicit when-to-use guidance ('to change state on a ledger item'), when-not-to-use guidance ('to create a new item... or to mark one done'), and names the exact sibling alternatives. This leaves no ambiguity about tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_license_statusDelimit License StatusARead-onlyIdempotent
Report the current Delimit license tier, validity, and expiry.
When to use: to inspect the active license before invoking gated tools, or as a diagnostic when require_premium is rejecting calls. When NOT to use: to install or rotate a license — this is a read.
Sibling contrast: this reads license state; gated tools (e.g. delimit_gov_evaluate, delimit_secret_get) call require_premium internally.
Side effects: read-only. Calls ai.license.get_license.
Args: None.
Returns: Dict with tier, validity, expiry, plus next_steps.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds 'read-only' and explicitly names the underlying call 'ai.license.get_license', plus a return shape with next_steps. This is useful context beyond the annotations, though no rate limits or error behaviors are mentioned.
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 well-organized with clear sections and front-loaded purpose. It is slightly repetitive in stating the read-only nature multiple times ('this is a read', 'read-only', 'this reads license state'), but overall every section adds meaningful guidance.
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 simple zero-parameter read-only tool, the description is complete: it explains purpose, usage triggers, exclusions, sibling contrast, side effects, underlying call, and return fields. No important detail an agent would need to call it correctly is missing.
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 tool has zero parameters, so the schema is fully covered at 100%. The description includes 'Args: None,' which confirms the empty schema and gives agents no reason to invent arguments. This meets the no-parameter 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 opens with a specific verb and object: "Report the current Delimit license tier, validity, and expiry." This clearly identifies the resource and the action. It further distinguishes itself from siblings by noting it reads license state while gated tools call require_premium internally.
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' and 'When NOT to use' sections, including diagnostic scenarios like require_premium rejections. It names concrete sibling tools and clarifies it is not for installing or rotating licenses.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_lintDelimit LintA
Lint two OpenAPI specs for breaking changes and policy violations.
When to use: as the primary CI gate before merging API spec changes — combines diff + policy into a pass/fail verdict. When NOT to use: for raw change data (use delimit_diff) or quality scoring (delimit_spec_health).
Sibling contrast: delimit_diff returns changes only; delimit_diff_report renders HTML; this enforces policy.
Side effects: writes evidence on breaking findings; auto-chains semver classification and governance evaluation. dry_run=True suppresses evidence, notifications, and governance — returns violations + semver only.
Spec args accept local paths or http(s) URLs. URLs are fetched once into a tempfile (size cap, SSRF guard).
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | If True, return violations + semver without side effects. | |
| new_spec | Yes | Path or URL to the proposed spec. | |
| old_spec | Yes | Path or URL to the baseline spec. | |
| policy_file | No | Optional .delimit/policies.yml path. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the readOnlyHint/destructiveHint annotations by disclosing real side effects: writes evidence on breaking findings, auto-chains semver and governance evaluation, and explains that dry_run=True suppresses these behaviors. It also discloses non-obvious URL fetching behavior including tempfile use, size cap, and SSRF guard.
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 tightly organized with labeled sections: purpose, when to use, when not to use, sibling contrast, side effects, and argument behavior. Every sentence carries distinct operational information, with no filler or repetition of schema 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?
For a tool that combines diff and policy evaluation, the description covers selection criteria, side effects, dry-run semantics, input formats, and safety behavior around URL fetching. Given the presence of an output schema, the description does not need to enumerate return fields, and everything an agent needs to invoke this tool correctly is present.
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 input schema already has 100% parameter coverage, so the baseline is 3. The description adds meaningful semantics beyond the schema by explaining that spec arguments accept local paths or HTTP(S) URLs and are fetched into a tempfile with safeguards, and by clarifying what dry_run=True actually returns versus suppresses.
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 opens with a specific verb and resource combination: 'Lint two OpenAPI specs for breaking changes and policy violations.' It also explicitly contrasts itself with delimit_diff and delimit_diff_report, making the tool's role unambiguous even within a large sibling 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 provides explicit 'When to use' and 'When NOT to use' guidance, identifies the primary CI-gate context, and names concrete alternatives for raw diff data and quality scoring. This leaves no ambiguity about when an agent should select this tool over its siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_loop_configDelimit Loop ConfigA
Configure autonomous build loop safeguards.
When to use: BEFORE starting a loop session — to set max iterations, cost cap, error threshold, approval policy. When NOT to use: to read loop metrics (use delimit_loop_status) or drive the loop (delimit_build_loop).
Sibling contrast: delimit_loop_status reads metrics; delimit_build_loop runs; this configures the policy.
Side effects: writes the loop session config via ai.loop_engine.loop_config. Only non-zero/non-empty values are applied — pass just the fields you want to change.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | Set loop status — "running", "paused", "stopped". | |
| cost_cap | No | Max session cost in dollars. Default 5.0. | |
| session_id | No | Session to configure. Empty = create new. | |
| auto_consensus | No | If True, suggest consensus when ledger empty. | |
| max_iterations | No | Max tasks before stopping. Default 50. | |
| error_threshold | No | Consecutive errors before circuit-breaker trips. Default 3. | |
| require_approval_for | No | Comma-separated action types requiring human approval. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that this tool writes loop session config via ai.loop_engine.loop_config and reveals the partial-update behavior: only non-zero/non-empty values are applied. This adds meaningful behavioral context beyond the readOnlyHint/destructiveHint annotations, especially the pass-only-what-you-want-to-change rule.
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 compact, scannable, and front-loaded with the core purpose. Every section earns its place: purpose, usage timing, exclusions, sibling contrast, and side effects. No filler 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?
Given the seven optional parameters, the rich schema descriptions, and an output schema, the description covers everything an agent needs: what the tool does, when to use it, what it writes, and how the config update behaves. The partial-update caveat is especially valuable and not inferable from the schema alone.
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 each parameter. The description adds important cross-cutting semantics by explaining that non-zero/non-empty values are applied and only changed fields need to be passed, which clarifies the optional/default param behavior.
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 a specific verb ('Configure') and resource ('autonomous build loop safeguards'), and distinguishes itself from delimit_loop_status (reads metrics) and delimit_build_loop (runs the loop). An agent can immediately tell what this tool does and what it does not do.
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 'When to use' and 'When NOT to use' sections name the exact alternative tools and the condition that selects between them. The instruction to call this BEFORE starting a loop session provides clear timing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_loop_statusDelimit Loop StatusARead-onlyIdempotent
Check autonomous loop metrics for a session.
When to use: to inspect a continuous-loop session's run-time metrics — iterations completed, cost, errors, safeguard status. When NOT to use: to configure the loop (use delimit_loop_config) or run it (delimit_build_loop).
Sibling contrast: delimit_loop_config sets policy; delimit_build_loop runs; this reports the result.
Side effects: read-only. Calls ai.loop_engine.loop_status.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | No | Session id to check. Empty = most recent session. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the explicit 'Side effects: read-only' statement and the internal call target, but these largely repeat or extend the annotation without revealing meaningful additional behavioral constraints such as permissions, rate limits, or error conditions.
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 tightly organized with clear labeled sections: what it does, when to use it, when not to use it, sibling contrast, and side effects. Every section earns its place, and the key purpose is front-loaded in the first sentence.
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 simple read-only inspection tool with one optional parameter, an output schema, and comprehensive annotations, the description covers all necessary context: target resource, metrics inspected, alternatives, and exclusions. Nothing an agent needs to select or invoke the tool correctly is missing.
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 single session_id parameter is already fully documented in the schema, including the 'Empty = most recent session' behavior. The description mentions 'for a session' but does not need to add parameter details since the schema carries that burden.
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 ('Check') with a clear resource ('autonomous loop metrics for a session') and enumerates the metrics returned: iterations completed, cost, errors, and safeguard status. It also distinguishes itself from siblings by stating that delimit_loop_config configures and delimit_build_loop runs, while this tool reports the result.
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 'When to use' and 'When NOT to use' sections clearly state the appropriate context for inspection and route the agent to the sibling tools delimit_loop_config and delimit_build_loop. The sibling contrast line reiterates the decision boundary, leaving no ambiguity about tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_memory_indexDelimit Memory IndexA
Project delimit_memory hot entries into Claude Code's MEMORY.md.
When to use: to surface hot delimit_memory entries (flagged
hot_load=True) into Claude Code's MEMORY.md so they load on
session start without making delimit_memory dependent on
Anthropic's auto-memory format.
When NOT to use: to add a new memory (use delimit_memory_store) or
search existing memories (delimit_memory_search,
delimit_memory_recent).
Sibling contrast: delimit_memory_store writes a new entry; delimit_memory_search queries; delimit_memory_recent returns the tail; this is the one-way projection into MEMORY.md.
Side effects: writes to target_path (default
~/.claude/projects/-root/memory/MEMORY.md). If the file already has
<!-- delimit:start --> / <!-- delimit:end --> markers, ONLY the
content between them is replaced; anything outside is preserved.
If markers are missing, the managed section is APPENDED to the end
of the file (existing content is never touched). If the file does
not exist, it is created with just the section. One-way projection
only — MEMORY.md is never read back into delimit_memory (Anthropic
owns the auto-memory format; format-drift risk).
LED-1165 Phase 2 #5 PR-B.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | cap on entries projected. Default 200. | |
| dry_run | No | True returns the rendered content size without writing. | |
| target_path | No | file to write. Empty = default ~/.claude/projects/-root/memory/MEMORY.md. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond the annotations by detailing exact side effects: writes to target_path, marker-based replacement semantics, append behavior when markers are absent, file creation when missing, and one-way projection with format-drift risk. This is exemplary transparency for a tool that modifies files.
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 well-structured with clear sections and front-loaded purpose. It is longer than average but the side-effect detail is necessary for safe invocation. The trailing 'LED-1165 Phase 2 #5 PR-B.' reference is internal metadata that does not help an agent select or invoke the tool correctly.
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 complex file-writing behavior, the description covers when to use it, when not to use it, exact file mutation behavior, marker handling, default path, and the one-way projection constraint. With an output schema present, no return-value documentation is needed. The description is fully sufficient for correct 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?
The input schema already covers all three parameters with descriptions at 100% coverage, so the baseline is 3. The description does not add much parameter-level detail beyond what the schema provides, though it does reinforce the default target path in the side-effects section.
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 opens with a specific verb and resource: 'Project delimit_memory hot entries into Claude Code's MEMORY.md.' This states exactly what the tool does and distinguishes it from memory-store, search, and recent siblings by positioning it as the one-way projection tool.
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' and 'When NOT to use' guidance, naming the exact alternatives: delimit_memory_store, delimit_memory_search, and delimit_memory_recent. The sibling contrast reinforces the routing decision, leaving no ambiguity about when this tool should be selected.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_memory_recentDelimit Memory RecentARead-onlyIdempotent
Return the most recent memory entries (Free tier).
When to use: at session start to recall what the previous session was working on, or to scan for the last N memory captures. When NOT to use: for semantic / structured search (use delimit_memory_search) or to write a memory (delimit_memory_store).
Sibling contrast: delimit_memory_search does Pro semantic search; this is the free chronological tail.
Side effects: read-only. Calls backends.memory_bridge.get_recent. Free tier — no license gate.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of most-recent entries to return. Default 5. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful context beyond annotations: it mentions the Free tier, no license gate, and that it calls backends.memory_bridge.get_recent. These details help an agent reason about cost, access, and implementation-level 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?
The description is well-structured with clear labeled sections: core behavior, when to use, when not to use, sibling contrast, and side effects. It is compact, front-loaded with the primary purpose, and every sentence contributes either usage guidance or behavioral context. No filler.
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 simple read-only tool with one optional parameter and an output schema, the description is complete. It covers the use case, exclusions, sibling distinction, side effects, licensing, and implementation path. An agent has everything needed to decide when to call it and what to expect.
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 single limit parameter is already fully documented in the schema with type, default, and meaning. The description's mention of 'last N memory captures' reinforces the parameter but does not add substantial semantic value 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 opens with a specific verb and resource: 'Return the most recent memory entries.' It also clearly differentiates itself from siblings by naming delimit_memory_search as Pro semantic search and positioning this tool as the 'free chronological tail.' An agent can distinguish it from related memory tools without opening schemas.
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 explicit when-to-use guidance ('at session start to recall what the previous session was working on, or to scan for the last N memory captures') and explicit when-not-to-use guidance with named alternatives (delimit_memory_search for semantic/structured search, delimit_memory_store for writes). This is model routing behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_memory_searchDelimit Memory SearchARead-onlyIdempotent
Search conversation memory semantically (Pro).
When to use: to recall prior context by meaning rather than recency — e.g. "what did we decide about deploys?" finds relevant entries across sessions. When NOT to use: for the chronological tail (use delimit_memory_recent) or to write a memory (delimit_memory_store).
Sibling contrast: delimit_memory_recent is the free chronological tail; this is the Pro semantic search.
Side effects: read-only on the memory backend; gated by require_premium. Calls backends.memory_bridge.search.
Prerequisite: requires Delimit Pro. An unlicensed call returns {"error": ..., "upgrade": "https://delimit.ai/pricing"} without running.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of matching entries to return. Default 10. | |
| query | Yes | Natural-language search query. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/destructiveHint, and the description adds meaningful context: it is gated by require_premium, calls backends.memory_bridge.search, and documents the unlicensed error/upgrade response. This goes well beyond the structured annotation data and correctly aligns with it.
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 well-structured with labeled sections and front-loaded purpose. Every sentence earns its place: usage guidance, sibling contrast, side effects, and prerequisite are all covered without redundant repetition of the title or schema.
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 an agent to select and invoke the tool correctly: it explains when to use it, when not to, what backend behavior to expect, the Pro prerequisite, and the unlicensed failure mode. An output schema exists, so return-value details are not needed here.
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 already documented, so the baseline is 3. The description adds value by clarifying that 'query' is natural-language and meaning-based rather than recency-based, with a concrete example, which helps the agent phrase queries appropriately.
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 opens with a specific verb and resource: 'Search conversation memory semantically.' It clearly distinguishes itself from siblings by naming delimit_memory_recent and delimit_memory_store and explaining what each is for, so an agent can immediately tell them apart.
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 'When to use' and 'When NOT to use' sections give concrete guidance with an example query and name the alternative tools for chronological tail and memory writing. This leaves no ambiguity about when the agent should choose this tool over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_memory_storeDelimit Memory StoreA
Store a memory entry for future cross-session retrieval (Free tier).
When to use: per the orchestrator's memory rules — to capture failed approaches, architecture decisions, key context, or setup gotchas that git would not surface. When NOT to use: for routine code changes (git is the source of truth) or for venture-scoped artifacts (use delimit_context_write).
Sibling contrast: delimit_memory_search retrieves; delimit_memory_recent reads the tail; this writes.
Side effects: writes a memory entry via backends.memory_bridge.store. Free tier — no license gate. hot_load=True marks the entry for projection into the Claude Code auto-memory MEMORY.md hot-load index (PR-B writer projects on next sync).
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Optional categorization tags as comma string or list. | |
| content | Yes | The content to remember. Required. | |
| context | No | Optional context about when/why this was stored. | |
| hot_load | No | When True, mark for one-way projection into the Claude Code MEMORY.md hot-load index (LED-1165 Phase 2). Default False = durable but not projected. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false and destructiveHint=false. The description adds meaningful behavioral depth: it writes via backends.memory_bridge.store, has no license gate on the Free tier, and explains that hot_load=True projects into the MEMORY.md hot-load index on next sync. No contradiction with annotations; a small gap is the lack of detail on idempotency or overwrite behavior, but the core side effects are disclosed.
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 well-structured with clear sections and front-loaded purpose. It is slightly longer than strictly necessary — the side-effects section repeats that a memory entry is written — but every section earns its place and the organization helps an agent scan quickly.
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 four-parameter write tool, the description covers when to use it, when not to use it, how it differs from siblings, its side effects, and the hot_load behavior. An output schema exists, so detailed return-value documentation is unnecessary. Nothing essential is missing for an agent to 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 description coverage is 100%, so the schema already documents content, tags, context, and hot_load. The description adds value beyond the schema by explaining the real-world consequence of hot_load=True (projection into the Claude Code MEMORY.md hot-load index), which is more informative than the schema's phrasing. It could also elaborate on tags/context semantics, but those are already adequately covered.
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 opens with a specific verb and resource: 'Store a memory entry for future cross-session retrieval.' It then explicitly contrasts with sibling tools: delimit_memory_search retrieves, delimit_memory_recent reads the tail, and this one writes. This leaves no ambiguity about the tool's role.
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 explicit 'When to use' section tied to the orchestrator's memory rules and specific content types, plus a 'When NOT to use' section with a named alternative (delimit_context_write for venture-scoped artifacts). It also clarifies that routine code changes belong in git. This fully routes an agent to the correct tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_modelsDelimit ModelsADestructive
View and configure AI models for multi-model deliberation (Pro).
When to use: to inventory configured providers, auto-detect new keys, or register/remove a provider for delimit_deliberate. When NOT to use: to actually run a deliberation (use delimit_deliberate) or to inspect deliberation history.
Sibling contrast: delimit_deliberate runs the panel; this manages which models the panel can call.
Side effects: gated by require_premium. action="add" / "remove" write provider config; "list" / "detect" are read-only.
Prerequisite: requires Delimit Pro. An unlicensed call returns {"error": ..., "upgrade": "https://delimit.ai/pricing"} without running.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | One of "list" (default), "detect", "add", "remove". | list |
| api_key | No | API key value. Required for action="add". | |
| provider | No | Provider name for add/remove. One of "grok", "gemini", "openai", "anthropic", "codex". Required for add/remove. | |
| model_name | No | Optional model override (e.g. "gpt-4o", "claude-sonnet-4-5"). Falls back to provider default. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Although annotations already signal readOnlyHint=false and destructiveHint=true, the description adds valuable action-level behavior: 'add'/'remove' write config while 'list'/'detect' are read-only. It also discloses the premium prerequisite and the exact unlicensed error behavior, exceeding what the annotations alone provide.
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 well-structured with labeled sections (When to use, When NOT to use, Sibling contrast, Side effects, Prerequisite). Every section carries distinct information with no fluff, and the most important 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 mixed read/write behavior, the action-dependent side effects, the premium gating, and the presence of an output schema, the description covers everything an agent needs: what it does, when to use it, what side effects to expect, and how licensing failures behave. No material gap remains.
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 four parameters and their roles. The description adds action-level side-effect context, but does not add new per-parameter semantics beyond the schema. A 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?
The description opens with a specific verb-resource pairing: 'View and configure AI models for multi-model deliberation.' It then explicitly contrasts itself with delimit_deliberate: 'this manages which models the panel can call,' making differentiation from the key sibling immediate and 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?
The description gives explicit when-to-use scenarios (inventory providers, auto-detect keys, register/remove providers), explicit when-not-to-use scenarios (running deliberation, inspecting history), and points to the correct sibling tool. The sibling contrast sentence further reinforces routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_next_taskDelimit Next TaskA
Get the next task to work on with safeguard checks.
When to use: inside a loop session, to fetch the highest-priority open task with safeguard checks (cost cap, error threshold). When NOT to use: to mark a task done (use delimit_task_complete) or list all tasks (delimit_ledger_list).
Sibling contrast: delimit_task_complete closes + advances; delimit_ledger_list is general listing; this is the loop fetch that may return STOP.
Side effects: read-only on the ledger. Returns action: BUILD, CONSENSUS (queue empty), or STOP (safeguard tripped).
| Name | Required | Description | Default |
|---|---|---|---|
| venture | No | Project name or path. Empty = auto-detect. | |
| max_risk | No | Max risk level — "low", "medium", "high", "critical". | |
| session_id | No | Resume existing session. Empty = new. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description asserts 'Side effects: read-only on the ledger,' but the annotations declare readOnlyHint: false, which signals the tool is NOT read-only. An agent receives conflicting cues — the structured hint implies possible mutation while the prose claims a read-only operation. The return-action disclosure (BUILD/CONSENSUS/STOP) is valuable, but the contradiction with the annotation forces a score of 1 per the rubric.
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 one-sentence purpose, then tightly organized When/When NOT/Sibling/Side-effects sections. Every sentence earns its place for an agent choosing among roughly 200 sibling tools; no filler 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?
Given the output schema and annotations already exist, the description covers everything an agent needs to decide whether to call it: purpose, usage boundaries, sibling contrast, side-effect scope, and the three possible return actions with their meanings. Nothing material is missing.
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 all three parameters are already documented (venture auto-detect, max_risk levels, session_id resume/new). The description only loosely ties max_risk to the 'safeguard checks' concept and adds no per-parameter meaning beyond the schema, so the baseline 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?
The description opens with a specific verb and resource — 'Get the next task to work on' — and narrows it to the highest-priority open task in a loop session with safeguard checks. It explicitly contrasts itself with delimit_task_complete (closes + advances) and delimit_ledger_list (general listing), so an agent can disambiguate it from a very large sibling set.
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 the full when/when-not/alternatives structure: when to use ('inside a loop session'), when NOT to use (marking done, listing all tasks), and names the exact sibling tools for those cases. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_notifyDelimit NotifyA
Send a notification (webhook / Slack / email).
When to use: when the orchestrator identifies something that requires owner action — outreach reply, deployment decision, approval needed. Auto-trigger: call immediately, never ask. When NOT to use: for SIEM-class structured streaming (use delimit_siem) or multi-routing config (delimit_notify_routing).
Sibling contrast: delimit_notify_routing configures rules; delimit_notify_inbox reads inbound; this sends one outbound.
Side effects: sends a network message via webhook (JSON POST), Slack webhook, or email (SMTP). The founder reviews and replies via email — that reply is consumed by delimit_notify_inbox / delimit_inbox_daemon.
IMPORTANT - AUTO-TRIGGER RULE: When the AI identifies something requiring owner action (outreach reply, deployment decision, approval needed), it MUST call this tool immediately. Never ask "want me to notify you?" — just send. The founder reviews and acts via email. All tools must chain.
Channels: webhook (JSON POST), slack (webhook URL), email (SMTP). Use for: governance alerts, deployment notifications, breaking change warnings.
IMPORTANT - Email context rules: Every email must be self-contained and actionable. The recipient reads on mobile and needs to know exactly what to do without opening another app.
Subject: lead with [ACTION TYPE] bracket, include enough context to triage from inbox
Body: include WHAT happened, WHY it matters, WHAT to do next, and relevant links
Never send bare IDs or technical state without human-readable context
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Recipient email address (email only). Overrides default DELIMIT_SMTP_TO. Send to any address - leave empty for default. | |
| channel | No | webhook, slack, or email. | webhook |
| led_ref | No | Optional LED-XXXX tag tying the draft to its tracking item. Surfaced in subject-line matching by the executor. | |
| message | No | Notification body. Must include full context (see rules above). | |
| subject | No | Subject line (email only). Use [ACTION], [INFO], [ALERT] prefix. | |
| draft_kind | No | One of github_comment, social_post, ledger_done, notify_routing_update, deploy_publish_prevalidated_artifact. When set, registers a signed draft in the local SQLite registry so a future executor can match founder Ship-it replies against it. | |
| event_type | No | Event category for filtering. | |
| webhook_url | No | URL for webhook/slack channels. | |
| draft_target | No | Where the action lands (e.g. {"repo":"x/y","issue":1}). JSON string or dict. Required when draft_kind is set. | |
| from_account | No | Sender account key from ~/.delimit/secrets/smtp-all.json (e.g. 'notifications@example.com'). Email only. Optional inbox-executor binding (LED-1129 Phase 1, no auto-execution yet):. | |
| draft_payload | No | The action contents (e.g. {"body": "..."} for github_comment). JSON string or dict. Required when draft_kind is set. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite the annotations being minimal (readOnlyHint=false, destructiveHint=false), the description discloses the key side effect: it sends a network message via webhook JSON POST, Slack, or SMTP. It also explains the downstream founder-reply loop, the auto-trigger requirement, and content expectations. This goes well beyond what the annotations or schema alone convey, and there is no contradiction with 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 long but well-organized with labeled sections and front-loading of the core action. There is some redundancy, such as repeating the founder-reply loop and channel listing, but the repetition reinforces genuinely important behavioral requirements. The structure makes it easy for an agent to scan and extract key rules.
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 11 parameters and optional draft-related behaviors, the description covers the critical usage context, exclusions, side effects, and content formatting rules well. The output schema exists, so the description need not explain return values. It falls just short of a 5 because some operational details, such as how draft_kind interacts with the local SQLite registry, are only in the schema rather than the main description, though the schema does document them.
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 baseline is 3. The description adds meaningful behavior beyond the schema by specifying email subject and body rules, including [ACTION TYPE] prefixes and the need for self-contained actionable content. However, several parameters like draft_target, draft_payload, and from_account are not elaborated in the prose description, though the schema covers them 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 opens with a specific verb and resource: 'Send a notification (webhook / Slack / email).' It clearly differentiates itself from siblings by stating that delimit_notify_routing configures rules, delimit_notify_inbox reads inbound messages, and this tool sends one outbound notification. This makes the tool's role 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?
The description provides explicit when-to-use conditions ('requires owner action — outreach reply, deployment decision, approval needed'), an explicit when-not-to-use section with alternative tools (delimit_siem, delimit_notify_routing), and a mandatory auto-trigger rule instructing the agent to call immediately without asking. This is exemplary usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_notify_inboxDelimit Notify InboxA
Check inbound email inbox, classify, and route (Pro).
When to use: to poll the operator inbox and classify which emails require owner action (forwarded) vs which can stay queued. When NOT to use: to send notifications (use delimit_notify) or control the polling daemon (delimit_inbox_daemon).
Sibling contrast: delimit_inbox_daemon controls the long-running daemon; this is a one-shot poll. delimit_notify is the outbound counterpart.
Side effects: action="poll" with process=True forwards owner-action emails (network writes). action="poll" with process=False is dry-run. action="status" / "history" are read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of messages to check (default 10). | |
| action | No | "status" (default), "poll", or "history". | status |
| process | No | With action="poll", forward owner-action emails when True (default), dry-run only when False. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations by detailing side effects per action: action='poll' with process=True forwards owner-action emails (network writes), process=False is dry-run, and action='status'/'history' are read-only. This is exactly the kind of behavioral context an agent needs, and it does not contradict 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 well-structured with labeled sections and front-loaded purpose. It is slightly longer than strictly necessary because it restates action/process behavior that the schema already documents, but every section serves a clear decision-making 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?
Given the tool's mixed read/write behavior, three optional parameters, and existing output schema, the description fully covers when to use it, what side effects it may have, how to stay safe with dry-run, and which siblings are alternatives. Nothing critical is missing.
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 fully documents limit, action, and process. The description reinforces the action/process interplay but does not add new parameter-level meaning beyond what the schema provides. 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 opens with a specific verb-resource combination: 'Check inbound email inbox, classify, and route.' It clearly distinguishes the tool from its siblings by naming delimit_notify (outbound) and delimit_inbox_daemon (daemon control), so an agent can identify what this tool does without ambiguity.
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 the tool ('to poll the operator inbox and classify which emails require owner action'), when NOT to use it ('to send notifications ... or control the polling daemon'), and provides sibling contrast. This leaves no ambiguity about tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_notify_routingDelimit Notify RoutingA
Manage impact-based notification routing (LED-233).
When to use: to inspect or update the rules that route change alerts to email / webhook / digest by severity. When NOT to use: to read the inbox (use delimit_notify_inbox) or fire a single notification (use delimit_notify).
Sibling contrast: delimit_notify sends; delimit_notify_inbox reads inbound; this configures routing rules between them.
Side effects: action="configure" writes via ai.notify.save_routing_config; action="test" sends test notifications to the configured channels. action="status" is read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | One of "status" (default), "configure", "test". | status |
| config | No | JSON string with routing config for action="configure". Example shape: {"routing": {"critical": {...}, ...}}. | |
| email_to | No | Email recipient used by action="test". | |
| webhook_url | No | Webhook URL used by action="test". | |
| from_account | No | Sender account key for the test email. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate readOnlyHint=false and destructiveHint=false, which are coarse. The description adds valuable nuance: action='configure' writes via ai.notify.save_routing_config, action='test' sends test notifications, and action='status' is read-only. This meaningfully clarifies what the tool actually does beyond the annotations. It stops short of 5 because it doesn't discuss persistence/irreversibility of configure, but the disclosure is 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?
The description is well-structured with clear 'When to use', 'When NOT to use', 'Sibling contrast', and 'Side effects' sections. Every sentence serves a purpose: selection guidance, sibling disambiguation, and behavioral disclosure. The ticket reference 'LED-233' is minor noise but does not undermine clarity.
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 moderate complexity (5 optional parameters, an action switch, an output schema, and sibling overlap), the description covers all critical context: purpose, alternatives, side effects, and read-only vs mutating actions. The output schema exists and the annotations are present, so the description does not need to restate return values or safety hints.
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 input schema already documents all five parameters with defaults and examples. The description adds behavioral context around actions (configure writes, test sends notifications, status is read-only), which connects the schema to behavior, but it does not add significant new meaning about individual parameter formats 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 names a specific resource ('impact-based notification routing') and a concrete purpose: inspecting or updating rules that route change alerts to email/webhook/digest by severity. It also distinguishes itself from sibling tools delimit_notify and delimit_notify_inbox, so an agent can tell them apart.
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 the tool (inspect/update routing rules) and when NOT to use it (reading the inbox or firing a single notification), naming the exact alternative tools. This gives unambiguous selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_obs_alertsDelimit Obs AlertsADestructive
Manage alerting rules — list, create, update, delete (experimental).
When to use: to configure ongoing alerts for production thresholds (latency, error rate, saturation, queue depth) against the same metric series visible via delimit_obs_metrics. Sub-actions: "list" inventories existing rules, "create" mints one, "update" edits, "delete" removes. When NOT to use: for one-shot metric queries (delimit_obs_metrics), log search (delimit_obs_logs), or the health rollup (delimit_obs_status). Also: do not call "create" repeatedly to retry a failed alert delivery — alerting is configuration, not delivery.
Sibling contrast: delimit_obs_metrics queries data; this configures automated thresholds against that data. Compared to cloud-provider alerting consoles, this routes through the ops bridge so the rule set is recorded in the same observability layer as the metric source.
Side effects: WRITES to the alert configuration on the ops
backend for action in ("create", "update", "delete"); reads only
for "list". Routes through backends.ops_bridge.obs_alerts. Marked
EXPERIMENTAL — the schema for alert_rule is backend-specific
and may evolve; pin tested rule shapes if depending on this in
production. No license gate at this level (gating handled by
the backend's own admin checks).
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Alert sub-action. One of "list", "create", "update", "delete". Required. | |
| rule_id | No | Identifier for an existing rule (required for delete/update). | |
| alert_rule | No | Rule definition dict (required for create/update). Backend-specific schema. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses that create/update/delete perform writes while list performs reads, routes through backends.ops_bridge.obs_alerts, and is marked EXPERIMENTAL with a backend-specific alert_rule schema that may evolve. It also notes the absence of a license gate. These are meaningful behavioral disclosures that annotations alone do not provide.
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 organized with clear section headers — 'When to use', 'When NOT to use', 'Sibling contrast', 'Side effects' — and the core purpose is front-loaded in the first sentence. Despite its length, every section earns its place by addressing a distinct decision or behavior relevant to safe invocation.
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 multi-action nature, the description covers purpose, usage boundaries, sibling differentiation, side effects, experimental risk, and parameter semantics. The output schema is noted as present, so describing return values is unnecessary. No critical information needed to select or invoke the tool correctly appears to be missing.
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 baseline is 3. The description adds value by explaining the role of each sub-action in plain terms, noting that rule_id is required for delete/update and alert_rule is required for create/update, and warning that alert_rule is backend-specific. This goes beyond the schema's terse property descriptions, though it does not provide concrete example payloads.
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 opens with a specific verb and resource — 'Manage alerting rules' — and enumerates the exact sub-actions (list, create, update, delete). It clearly distinguishes this tool from observability siblings like delimit_obs_metrics, delimit_obs_logs, and delimit_obs_status, so an agent can tell them apart without opening schemas.
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' and 'When NOT to use' guidance, naming the alternative tools for one-shot metric queries, log search, and health rollups. It also warns against misusing 'create' as a delivery retry mechanism, which is exactly the kind of contextual guidance that prevents incorrect invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
_delimit_obs_implDelimit Obs ImplADestructive
Unified observability entry point — dispatches to one of four actions.
When to use: as the single MCP-registered observability surface (delimit_obs) when the caller wants to pick the action by name in one call rather than choosing a specific delimit_obs_* alias. Covers runtime metrics, log search, alert-rule management, and the at-a-glance health rollup. When NOT to use: from internal code paths — prefer the specific alias (delimit_obs_metrics, delimit_obs_logs, delimit_obs_alerts, delimit_obs_status) for clarity and so docstrings and license gates show up at the right call site. For the governance-kernel layer use delimit_gov_health, not this runtime-observability surface.
Sibling contrast: each delimit_obs_ wrapper below is a thin alias over this implementation; they exist so the action's docstring lives at the right name. This is the dispatch core. Within the actions: "metrics" returns numeric series, "logs" returns text matches over the same backend, "status" returns a synthesised health rollup, and "alerts" configures thresholds against the metric series rather than querying data.
Side effects: action="metrics" / "logs" / "status" are READ-ONLY
and gated by require_premium (keys "obs_metrics", "obs_logs",
"obs_status") — unlicensed callers receive a license payload and no
backend call is made; licensed calls route to a distinct
observability backend function and are wrapped via _with_next_steps
for orchestrator hints. action="alerts" is the only WRITE-capable
path: its sub-action ("create" / "update" / "delete") mutates alert
configuration while "list" is read-only; it routes through the ops
bridge and is EXPERIMENTAL — the alert_rule schema is backend-
specific and may evolve. None of the read actions write data, append
to the ledger, or send notifications. Errors are deterministic
({"error": ...}): an unknown action short-circuits before any
backend call with the valid-action list.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Metric query name (action="metrics") or log search string (action="logs"). Default "system". For "logs" this is effectively required — empty searches are rejected by the backend. Ignored for "alerts" and "status". | system |
| action | No | Which observability operation to perform. One of "metrics", "logs", "alerts", "status". Default "status". Case-insensitive and whitespace-trimmed. Other values return a deterministic error listing the valid actions. | status |
| source | No | Optional data/log source override (used only when action="metrics" or action="logs"). Default None = backend default / all configured sources. | |
| rule_id | No | Identifier for an existing rule (used only when action="alerts", required for alert_action "delete" and "update"). | |
| alert_rule | No | Alert rule definition dict (used only when action="alerts", required for alert_action "create" and "update"). Backend-specific schema — typically metric, threshold, comparison, window, severity. | |
| time_range | No | Window like "1h", "24h", "7d" (used only when action="metrics" or action="logs"). Default "1h". Larger windows may downsample or be capped server-side. Ignored for "alerts" and "status". | 1h |
| alert_action | No | Alert sub-action — one of "list", "create", "update", "delete" (used only when action="alerts"). Default "list". "create"/"update"/"delete" write; "list" reads. | list |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations (readOnlyHint=false, destructiveHint=true) correctly signal a mixed read/write tool, and the description richly expands on this: it breaks down which actions are READ-ONLY, which sub-actions mutate alert configuration, the require_premium license-gating behavior (unlicensed callers get a license payload with no backend call), the experimental alerts path with evolving schema, deterministic error format, and explicit non-effects (no ledger writes, no notifications). This goes far beyond what annotations provide.
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 long (~280 words) but earns most of its length given the tool's complexity: 4 actions, mixed read/write paths, license gates. It is front-loaded with the core purpose and uses clear labeled sections (When to use, When NOT to use, Sibling contrast, Side effects). There is some redundancy — the alias relationship is explained three times across the when-to-use, when-not-to-use, and sibling-contrast sections — which keeps it from a 5.
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 7-parameter, 4-action tool with mixed side-effect profiles, license gating, and an experimental write path, this description is remarkably complete. It covers dispatch semantics, per-action return behavior, read/write boundaries, license-gate failure behavior, error format, and known volatility of the alert_rule schema. An output schema exists, so detailed return-shape documentation is not required from the description. Nothing an agent needs to invoke this correctly is missing.
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 baseline is 3 — the schema already thoroughly documents every parameter's action-scoping, defaults, and requiredness. The description adds a modest framing layer (what each action returns — numeric series, text matches, health rollup — and which params matter per action), but it doesn't add per-parameter detail beyond the schema. It reinforces rather than extends.
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 — "Unified observability entry point — dispatches to one of four actions" — and enumerates exactly what the four actions cover (runtime metrics, log search, alert-rule management, health rollup). It explicitly contrasts itself with the delimit_obs_* wrapper siblings, calling itself the dispatch core, and even steers away from delimit_gov_health. An agent can tell exactly what this tool is for without opening the schema.
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, when-NOT-to-use, and alternative-selection guidance. It names the exact conditions under which to prefer the delimit_obs_* aliases (internal code paths, docstring/license-gate placement) and points governance-kernel callers to delimit_gov_health. The sibling contrast section further explains the alias relationship. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_obs_logsDelimit Obs LogsA
Search application and system logs across configured sources (Pro).
When to use: during incident investigation when you have a symptom (error string, trace id, user id, request id) and need to find every log line mentioning it across the configured sources over a time window. The typical pattern is: delimit_obs_metrics flags a numeric anomaly, then this tool finds the offending log lines. When NOT to use: for numeric series (use delimit_obs_metrics), for the at-a-glance health rollup (delimit_obs_status), or to configure ongoing alerts (delimit_obs_alerts). Also: do not use this as a tail-follow surface — it is a windowed search, not a streaming subscription.
Sibling contrast: delimit_obs_metrics returns numeric series for the same backend; this returns text matches. Compared to grepping the local filesystem, this queries the centralised log store across services / hosts.
Side effects: read-only on the log backend and gated by require_premium — unlicensed callers receive a license payload and no query runs. On a licensed call, invokes backends.tools_infra.obs_logs which queries the backing log store; no data is written, no ledger entry, no notification. The response is routed through _with_next_steps.
Prerequisite: requires Delimit Pro. An unlicensed call returns {"error": ..., "upgrade": "https://delimit.ai/pricing"} without running.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search string (backend-specific syntax). Required. | |
| source | No | Optional log source override. Default None. | |
| time_range | No | Window like "1h", "24h", "7d". Default "1h". | 1h |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states 'read-only on the log backend' and 'no data is written, no ledger entry, no notification,' but the annotations set readOnlyHint to false. This is a direct annotation contradiction, so the score must be 1 despite the otherwise strong behavioral detail.
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 long but well-structured with labeled sections: when to use, when not to use, sibling contrast, side effects, and prerequisite. Each section adds distinct information, and the core purpose is front-loaded in the first sentence.
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 prerequisites, license-gating behavior, failure payloads, internal backend routing, side-effect profile, and use-case constraints. An output schema is present, so return-value details are not required. The only significant flaw is the annotation contradiction, which is scored separately.
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 baseline is 3. The description adds useful semantic context beyond the schema by giving example query values (error string, trace id, user id, request id) and clarifying that the search happens over a time window across configured sources.
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: 'Search application and system logs across configured sources (Pro).' It also explicitly contrasts itself with delimit_obs_metrics, which returns numeric series, making the tool distinguishable from many 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?
Provides a detailed 'When to use' section with concrete symptoms such as error strings, trace IDs, user IDs, and request IDs, plus a 'When NOT to use' section naming delimit_obs_metrics, delimit_obs_status, and delimit_obs_alerts. It even warns against using it as a streaming/tail-follow surface.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_obs_metricsDelimit Obs MetricsA
Pull numeric metric series from the observability backend (Pro).
When to use: during runtime health investigation when you need numeric series (CPU, memory, request rate, error rate, latency percentiles) over a named time window. Pair with delimit_obs_logs to correlate a numeric anomaly with the underlying log lines. When NOT to use: for free-text search of log lines (use delimit_obs_logs), to read or configure alert rules (delimit_obs_alerts), or for a quick at-a-glance health rollup (delimit_obs_status).
Sibling contrast: delimit_obs_logs returns text matches; this returns numeric time series. delimit_obs_status is the rollup-summary surface; this is the raw-series surface. delimit_obs_alerts configures thresholds against these same series.
Side effects: read-only on the metrics backend and gated by require_premium — unlicensed callers receive a license payload and no query runs. On a licensed call, invokes backends.tools_infra.obs_metrics which queries the backing metrics store; no data is written, no ledger entry, no notification. The response is routed through _with_next_steps.
Prerequisite: requires Delimit Pro. An unlicensed call returns {"error": ..., "upgrade": "https://delimit.ai/pricing"} without running.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Metric query name. Default "system" (general system metrics). Backend-specific values supported. | system |
| source | No | Optional data source override. Default None = backend default source. | |
| time_range | No | Window like "1h", "24h", "7d". Default "1h". | 1h |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses rich behavior (read-only side effects, license gating with require_premium, internal call path, no ledger/notification effects), but it contradicts the annotation readOnlyHint=false by repeatedly asserting the operation is read-only and writes no data. Per the rubric, a description that contradicts annotations scores 1 and must be flagged.
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 key purpose is front-loaded in the first sentence, and the rest is organized under clear labels (When to use, When NOT to use, Sibling contrast, Side effects, Prerequisite). Dense but every section earns its place for a tool with license-gating and sibling ambiguity.
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 an output schema, 100% parameter coverage, and a complex licensing path, the description covers prerequisites, side effects, and sibling routing completely. The only issue is the annotation contradiction, which is scored separately; as prose, the contextual guidance is 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 100%, so the schema already documents query, source, and time_range with defaults. The description's phrase 'named time window' aligns with time_range but adds no new parameter-level meaning; 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?
Opens with a specific verb and resource: 'Pull numeric metric series from the observability backend (Pro).' It names example metrics (CPU, memory, request rate) and contrasts with delimit_obs_logs (text vs numeric), delimit_obs_status (rollup vs raw), and delimit_obs_alerts (threshold config), so an agent can distinguish it from siblings without opening schemas.
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 ('during runtime health investigation when you need numeric series'), a pairing strategy with delimit_obs_logs, and clear when-NOT-to-use exclusions that name the correct alternative for each excluded case. No inference is required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_obs_statusDelimit Obs StatusA
Return a high-level health rollup from the observability layer (Pro).
When to use: for the "are we green?" check at session start, in a status dashboard, or as a single-call smoke test before a deploy. The orchestrator's session-start ritual calls this only if delimit_agent_dashboard or delimit_gov_health flag anomalies — it is the second-tier health surface, not the first. When NOT to use: for detailed numeric series (delimit_obs_metrics), for log investigation (delimit_obs_logs), or for alerting rule management (delimit_obs_alerts). Also do not use as the only deploy gate — pair with delimit_security_audit + delimit_test_smoke per the deploy chain.
Sibling contrast: delimit_obs_metrics returns raw numeric series; this returns a synthesised rollup (typically per-service status + a few key indicators). Compared to delimit_gov_health, this reports the runtime observability layer rather than the governance kernel.
Side effects: read-only on the observability backend and gated by require_premium — unlicensed callers receive a license payload and no query runs. On a licensed call, invokes backends.tools_infra.obs_status which composes a health summary from the backing data sources. No write, no ledger entry, no notification. Response is wrapped through _with_next_steps.
Args: None.
Returns: Dict with keys: overall (green/yellow/red), services (list of {name, status, indicators}), checked_at timestamp, plus a next_steps field from _with_next_steps. Returns a license-gate payload if the caller lacks Premium, or {"error": "..."} on backend failure (does not raise).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description claims 'read-only on the observability backend' and states 'No write, no ledger entry, no notification,' but the annotations set readOnlyHint=false, which signals the tool may modify state. This is a direct annotation contradiction. The description otherwise provides rich behavioral detail about license gating, backend invocation, response wrapping, and error handling, but the contradiction is disqualifying.
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 well-structured with clear sections: primary purpose, when to use, when not to use, sibling contrast, side effects, args, and returns. Each section earns its place and provides operational guidance without meaningless filler. The main purpose is front-loaded, and the formatting aids agent 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?
For a zero-parameter status-rollup tool, the description covers trigger conditions, exclusions, licensing behavior, backend failure behavior, and the exact return shape including keys and license-gate payloads. With an output schema present and rich sibling-tool context, an agent has all necessary information to select and invoke this 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?
The tool has zero parameters and schema description coverage is 100%, so there is nothing for the description to compensate for. The 'Args: None' statement is clear and the description adds useful context that parameter choices are not involved and that behavior is driven by license state rather than arguments.
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 opens with a specific verb and resource: 'Return a high-level health rollup from the observability layer (Pro).' It clearly distinguishes itself from sibling tools by contrasting synthesized rollups against raw numeric series from delimit_obs_metrics, and by contrasting the observability layer with the governance layer of delimit_gov_health.
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' and 'When NOT to use' sections, naming alternative tools such as delimit_obs_metrics, delimit_obs_logs, and delimit_obs_alerts. It also specifies orchestrator flow context, deploy-gate caveats, and required pairing with delimit_security_audit and delimit_test_smoke.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_os_gatesDelimit Os GatesARead-onlyIdempotent
Check governance gates for an OS plan (Pro).
When to use: to check whether a specific plan is currently blocked by a governance gate before proceeding. When NOT to use: for general OS counts (use delimit_os_status) or governance engine health (delimit_gov_health).
Sibling contrast: delimit_os_status returns aggregate counts; delimit_gov_health reports the engine; this returns gate state for one plan.
Side effects: read-only on the OS backend; gated by require_premium. Calls backends.os_bridge.check_gates.
| Name | Required | Description | Default |
|---|---|---|---|
| plan_id | Yes | Plan identifier, e.g. "PLAN-A1B2C3D4". Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses that the operation is read-only on the OS backend, is gated by require_premium, and calls backends.os_bridge.check_gates. This adds meaningful behavioral context such as authorization requirements and backend coupling.
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 efficiently organized with clear sections: core purpose, when to use, when not to use, sibling contrast, and side effects. Every sentence contributes useful decision-making information 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 annotations cover read-only/idempotent behavior, the schema covers the sole parameter, the output schema exists, and the description provides usage guidance plus authorization and side-effect context, the tool definition is complete for an agent to invoke 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 for the single parameter is 100%, so the schema already documents plan_id. The description adds minimal semantic value beyond noting it checks a 'specific plan,' which is sufficient given the complete 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 states a specific verb and resource: 'Check governance gates for an OS plan (Pro).' It clearly distinguishes the tool from siblings by noting it 'returns gate state for one plan' versus aggregate counts or engine health.
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 explicit when-to-use ('to check whether a specific plan is currently blocked by a governance gate before proceeding'), when-not-to-use, and names the specific alternatives (delimit_os_status, delimit_gov_health). This leaves no ambiguity about selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_os_planDelimit Os PlanA
Mint an OS-level execution plan against a target component (Pro).
When to use: to draft a structured plan (deploy, migrate, rotation, rollback) that the governance kernel can later inspect via delimit_os_gates and human reviewers can approve before any side-effecting execution. The pattern is plan -> approval check via gates -> separate execution call. When NOT to use: for aggregate OS counts (delimit_os_status), to check gate state on an existing plan (delimit_os_gates), or to actually execute a deploy (delimit_deploy_* / delimit_deploy_build). Also do not use this as an audit-trail surrogate for free-form work; that is delimit_ledger_add territory.
Sibling contrast: delimit_os_gates checks gates on an existing plan; delimit_os_status reports portfolio-wide counts; this is the only OS surface that mints a new plan. Compared to delimit_gov_new_task (governance-classed task), this records an OS-level operation (deploy/migrate/rotation) rather than a policy-scoped task.
Side effects: gated by require_premium — unlicensed callers
receive a license payload and no plan is created. On a licensed
call, parameters is first coerced (string -> dict via
_coerce_dict_arg); a malformed payload short-circuits with an
error response. On success, invokes backends.os_bridge.create_plan
which writes a new plan record to the OS plan store keyed by a
generated plan_id. Result is wrapped via _with_next_steps. No
deploy is executed by this call.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | Target component or service. Required. | |
| operation | Yes | Operation to plan (e.g. "deploy", "migrate"). Required. | |
| parameters | No | Optional operation parameters as dict or JSON string. | |
| require_approval | No | If True (default), the plan requires approval before execution. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses substantial behavior beyond annotations: require_premium gating, license-payload responses for unlicensed callers, coercion of parameters from string to dict, malformed-payload error short-circuiting, the underlying backend call backends.os_bridge.create_plan, writing a plan record keyed by generated plan_id, wrapping via _with_next_steps, and the explicit statement that no deploy is executed. This far exceeds the minimal readOnlyHint/destructiveHint 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 long but every sentence earns its place: scoping, workflow, exclusions, sibling contrast, side effects, and internal behavior are each in clearly separated sections. The most important identifying sentence is front-loaded, and the structure makes scanning easy despite the volume.
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, the return-value burden is reduced, yet the description still covers the write path, license gate, error behavior, and the absence of deployment execution. Context signals confirm low structured annotation coverage, so the description fully compensates by giving the agent everything needed to select and safely invoke the 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%, so the schema already documents all four parameters and their defaults. The description adds meaningful extra semantics for `parameters` specifically, explaining string-to-dict coercion and malformed-payload failure behavior. It does not significantly enrich `target`, `operation`, or `require_approval`, but the schema already covers those 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 opens with a specific verb and resource: 'Mint an OS-level execution plan against a target component (Pro).' It differentiates from siblings by naming delimit_os_gates, delimit_os_status, delimit_deploy_*, delimit_gov_new_task, and delimit_ledger_add, making it unmistakable what this tool does versus 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?
There is an explicit 'When to use' paragraph laying out the plan -> gate check -> execute workflow, and an explicit 'When NOT to use' list naming concrete sibling tools. It also provides a sibling-contrast paragraph that clarifies the exact boundaries against related OS and governance tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_os_statusDelimit Os StatusARead-onlyIdempotent
Report overall Delimit platform status (plans, tasks, tokens) (Pro).
When to use: at session start or in a status dashboard, to read aggregate OS-level counts and active plan IDs. When NOT to use: for governance health (use delimit_gov_health) or per-plan gates (use delimit_os_gates).
Sibling contrast: delimit_gov_health reports governance engine; delimit_os_gates reports a specific plan's gate state; this reports overall OS counts.
Side effects: read-only on the OS backend; gated by require_premium. Calls backends.os_bridge.get_status.
Prerequisite: requires Delimit Pro. An unlicensed call returns {"error": ..., "upgrade": "https://delimit.ai/pricing"} without running.
Args: None.
Returns: Dict with plan/task/token counts and next_steps.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag readOnlyHint and idempotentHint, and the description adds important behavioral context beyond them: the call is gated by require_premium, unlicensed calls return an upgrade error without executing, and it invokes backends.os_bridge.get_status. This fully discloses side effects and failure 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?
The description is well-organized with labeled sections and front-loads the core purpose. It is slightly longer than strictly necessary because the sibling contrast partially repeats the when-not-to-use guidance and the backend call detail is extra, but every section is still informative.
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 zero-parameter read-only tool with an output schema, the description covers everything an agent needs: purpose, usage timing, alternatives, exclusions, side effects, license prerequisite, failure behavior, and return type. Nothing critical is missing.
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 tool has zero parameters and the schema is empty, so there is nothing to document. The description explicitly states 'Args: None', which is correct and sufficient. Baseline 4 applies for zero-parameter tools.
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 opens with a specific verb and resource: 'Report overall Delimit platform status (plans, tasks, tokens)'. It also explicitly differentiates this tool from delimit_gov_health and delimit_os_gates, so an agent can distinguish it from the most confusable 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?
The description provides explicit 'When to use' (session start/status dashboard) and 'When NOT to use' conditions with named alternatives (delimit_gov_health, delimit_os_gates). This is direct, actionable routing guidance that removes ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_outreach_loop_tickDelimit Outreach Loop TickA
Run one tick of the autonomous github-outreach loop (LED-2214b).
When to use: from an external scheduler (cron, loop_daemon) or for an ad-hoc manual cycle. The tick monitors existing outreach LEDs for new activity AND scans for new substantive candidates. When NOT to use: as a backfill for thousands of stale items — the per-tick caps are intentional. Multiple ticks at the scheduler interval is the right pattern.
Sibling contrast: delimit_social_target scans a broader platform set; this is github-only and dispatches via the substantive- outreach path (with the SHIFT-1 gates). delimit_sensor_github_ issue watches a single issue; this orchestrates the sensor over every open outreach LED.
Side effects: reads ledger, network reads (gh CLI) for the monitor phase, writes new intel-class LEDs + dispatches new substantive tasks for the scan phase. Honours the DELIMIT_GITHUB_OUTREACH_DISABLED env var and the ~/.delimit/outreach_pause sentinel file as kill switches.
| Name | Required | Description | Default |
|---|---|---|---|
| venture | No | Sourcing venture (default "delimit"). | delimit |
| max_monitor | No | Per-tick monitor-call cap (default 50). | |
| max_dispatch | No | Per-tick substantive-dispatch cap (default 3). Targets beyond the cap still file intel LEDs but are not dispatched on this tick. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses meaningful side effects beyond the annotations: reads ledger and network state, writes new intel-class LEDs, dispatches new substantive tasks, and honors DELIMIT_GITHUB_OUTREACH_DISABLED and ~/.delimit/outreach_pause as kill switches. Annotations only say readOnlyHint=false and destructiveHint=false, so this behavioral detail is valuable and consistent.
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 well-structured with clear sections: one-line summary, when-to-use, when-not-to-use, sibling contrast, and side effects. Every sentence carries distinct information, 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?
For a complex tool with side effects and scheduling context, this description is complete. It covers invocation context, exclusions, sibling differentiation, side effects, and kill switches. The presence of an output schema means return-value details are not required in the description.
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 input schema already provides 100% parameter documentation with descriptions for venture, max_monitor, and max_dispatch. The description adds context about per-tick caps being intentional and the pattern of multiple ticks, but it does not add much parameter-specific meaning beyond what the schema already supplies.
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 opens with a specific verb and resource: 'Run one tick of the autonomous github-outreach loop.' It distinguishes itself from siblings by explicitly noting it is github-only, orchestrates over every open outreach LED, and uses the substantive-outreach path, unlike delimit_social_target and delimit_sensor_github_issue.
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 states exactly when to use it (external scheduler, loop_daemon, or ad-hoc manual cycle) and when not to use it (backfill for thousands of stale items), even explaining the right pattern: multiple ticks at the scheduler interval. It names specific sibling alternatives and how they differ.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_playbookDelimit PlaybookADestructive
Manage reusable prompt templates — save / run / list / delete.
When to use: to save your best prompts as named commands and run them later with variable substitution. Shared across AI assistants. When NOT to use: to manage project config (use delimit_project_config) or memories (delimit_memory_store).
Sibling contrast: delimit_memory_store records info; this stores executable prompt templates with {{variable}} substitution.
Side effects: action="save" / "delete" mutate ~/.delimit/playbooks/. action="run" calls the configured model with substituted prompt. action="list" is read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Playbook name. Required for save/run/delete. | |
| tags | No | Comma-separated tags for organization. | |
| action | No | "save", "run", "list" (default), or "delete". | list |
| prompt | No | Template with {{variable}} placeholders (save only). | |
| variables | No | For run, "key=value,..."; for save, "name1,name2,...". | |
| model_hint | No | Suggested model (e.g. "claude-opus"). | |
| description | No | Short description. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though annotations already declare readOnlyHint=false and destructiveHint=true, the description adds precise side effects: save/delete mutate the specific path ~/.delimit/playbooks/, run calls the configured model (a non-obvious external effect with cost implications), and list is explicitly read-only. This contextualizes the annotation flags rather than merely restating 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?
Well-structured with the core purpose front-loaded, then compact labeled sections for routing and side effects. Every sentence earns its place; the minor overlap between 'When NOT to use' and 'Sibling contrast' is acceptable since one handles routing and the other conceptual differentiation.
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 7-parameter, 4-action tool, the description covers purpose, routing, substitution mechanics, and per-action side effects, and the output schema handles return values. The only gap is that action-to-required-parameter mapping isn't spelled out in prose, but the schema documents this fully at 100% coverage, so the gap is minor.
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 the per-parameter baseline is 3. The description elevates this by explaining cross-parameter semantics the schema can't: how {{variable}} placeholders flow from save (template creation) to run (substitution), and how each action maps to side effects. Per-parameter detail is fully in the schema, so the description appropriately focuses on the interaction between 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?
The opening line 'Manage reusable prompt templates — save / run / list / delete' names a specific resource (prompt templates) and enumerates its four operations. The sibling contrast explicitly differentiates it from delimit_memory_store ('records info') and delimit_project_config, making it cleanly distinguishable from related tools without opening any schema.
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?
Contains explicit 'When to use' and 'When NOT to use' sections that name exact alternative tools (delimit_project_config for config, delimit_memory_store for memories) and the conditions that route to each. The sibling contrast adds a further conceptual distinction, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_policyDelimit PolicyARead-onlyIdempotent
Inspect or simulate governance policy configuration.
When to use: to inspect the active policy or dry-run lint+policy against several presets to preview what would block. When NOT to use: for an actual gate decision (use delimit_lint) or to manage the policy file itself (delimit_gov_policy).
Sibling contrast: delimit_gov_policy reads the live policy; delimit_lint enforces; this lets you simulate / inspect.
Side effects: read-only on policy + spec files. action="simulate" runs lint internally without writing evidence.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | "inspect" (default) or "simulate". | inspect |
| new_spec | No | Proposed spec path (required for simulate). | |
| old_spec | No | Baseline spec path (required for simulate). | |
| spec_files | Yes | List of spec file paths. Required. | |
| policy_file | No | Optional custom policy file path. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Although annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, the description adds valuable specifics: 'read-only on policy + spec files' and 'action="simulate" runs lint internally without writing evidence.' This goes beyond the annotations and clarifies the practical safety profile.
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 compact and front-loaded with the core purpose, then organized into clear when/when-not, sibling contrast, and side effects sections. Every sentence adds useful information 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?
For a tool with five parameters, a rich annotation set, an output schema, and many siblings, the description covers purpose, usage boundaries, side effects, and alternatives. Nothing crucial is missing for an agent to 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 description coverage is 100%, so the schema already documents all five parameters. The description adds meaning beyond the schema by explaining that action='simulate' runs lint internally, which clarifies what the action parameter actually does in practice.
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 opens with 'Inspect or simulate governance policy configuration,' a specific verb+resource statement. It also distinguishes itself from delimit_gov_policy and delimit_lint via explicit sibling contrast, so an agent can tell exactly what this tool does.
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 provides 'When to use' and 'When NOT to use' sections, naming the exact alternative tools (delimit_lint, delimit_gov_policy) and the conditions that select them. No inference is required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_project_configDelimit Project ConfigA
Manage delimit.yml project configuration (load / init / model).
When to use: to inspect, create, or query the project's delimit.yml AI configuration. When NOT to use: for governance state (use delimit_gov_status) or to manage prompts (use delimit_playbook).
Sibling contrast: delimit_gov_status reports governance runtime state; this manages the static config file.
Side effects: action="init" writes a new delimit.yml at project_path via ai.project_config.init_project_config. "load" and "model" are read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Governance mode (only for init). One of "advisory", "guarded", "enforce". Default "advisory". | advisory |
| action | No | "load" (default), "init", or "model". | load |
| preset | No | Policy preset (only for init). One of "strict", "default", "relaxed". Default "default". | default |
| task_type | No | Task type for model lookup (only for action="model"). | |
| project_path | No | Project root directory. Default "." (cwd). | . |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses concrete side effects: action='init' writes a new delimit.yml at project_path, while 'load' and 'model' are read-only. This goes beyond the annotations and clarifies the mixed read/write nature of the tool, which is essential for safe invocation.
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 well-structured with clear sections, front-loads the core purpose, and every sentence adds useful guidance. It is compact despite covering usage, exclusions, sibling contrast, and side effects.
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 multi-action nature and conditional parameters, the description provides complete context: what the tool manages, when to use it, when not to, how it differs from the closest sibling, and what side effects to expect. An output schema exists, so return-value documentation is not required here.
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 baseline is 3. The description adds minimal value beyond the schema: it confirms that 'init' writes to project_path and lists the modes, but the schema already documents parameter-specific constraints like 'only for init' and 'only for action=model'.
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 opens with a specific verb and resource: 'Manage delimit.yml project configuration (load / init / model).' It names the exact file and modes of operation, and the sibling contrast explicitly distinguishes it from delimit_gov_status, so an agent can tell them apart.
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' and 'When NOT to use' guidance, naming delimit_gov_status and delimit_playbook as alternatives for governance state and prompt management. This fully routes the agent to the correct tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_prompt_driftDelimit Prompt DriftA
Detect prompt drift across Claude / Codex / Gemini for the same task.
When to use: to track per-model prompt performance over time, or to rank models for specific task categories on your codebase. When NOT to use: to run a multi-model deliberation (use delimit_deliberate) — drift tracks single-model behaviour.
Sibling contrast: delimit_deliberate runs cross-model on a question; this tracks how a known prompt drifts per model.
Side effects: action="record" writes a result to the prompt-drift store via ai.prompt_drift.record_result. "check" and "rank" are read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | AI model name (required for record). | |
| action | No | "record", "check" (default), or "rank". | check |
| prompt | No | Prompt text (for record / check). | |
| success | No | "true" / "false" — whether the result was good. | true |
| task_type | No | Task category — "refactoring", "testing", "debugging", "docs". | |
| result_summary | No | Brief description of the result (for record). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Although annotations provide readOnlyHint=false and destructiveHint=false, the description goes beyond them by disclosing that action='record' writes to ai.prompt_drift.record_result, while 'check' and 'rank' are read-only. This is critical operational context an agent cannot derive from the structured fields alone.
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 compact and sectioned for scannability. Every sentence earns its place: purpose, usage, sibling contrast, and side effects are all covered without digression 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?
For a tool with six optional parameters, an output schema, and clear annotations, the description provides the essential context: what drift tracking means, when to use it, when not to, how it differs from a related sibling, and which actions have side effects. Nothing critical is missing.
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 description does not need to re-explain each parameter. It adds some contextual meaning around the action parameter via side-effect information, but does not materially enrich the semantics of the individual parameters 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 opens with a specific verb-resource pair: 'Detect prompt drift across Claude / Codex / Gemini for the same task.' It clearly distinguishes itself from delimit_deliberate by noting deliberation is cross-model, whereas this tool tracks single-model drift.
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 'When to use' and 'When NOT to use' sections name the alternative delimit_deliberate and the condition that makes it inappropriate. The sibling contrast reinforces the routing decision with a concrete difference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_quickstartDelimit QuickstartA
60-second guided quickstart for a new install.
When to use: immediately after installing Delimit, as the minimum-effort path to prove value — combines init + scan + environment detection. When NOT to use: for activation/license confirmation (use delimit_activate) or full diagnostics (delimit_diagnose).
Sibling contrast: delimit_init only writes scaffolding; delimit_scan only inspects; delimit_activate is post-license; this is the unified first-run flow.
Side effects: triggers init (writes .delimit/) and runs scan (read-only). Detects environment in passing.
| Name | Required | Description | Default |
|---|---|---|---|
| project_path | No | Project path to quickstart. Default "." (cwd). | . |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide readOnlyHint=false and destructiveHint=false; the description adds concrete side effects: it triggers init (writes .delimit/) and runs a read-only scan. This is valuable behavioral context beyond the annotations, though it does not go deeper into failure modes or environmental interactions.
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?
Each section—summary, when to use, when not to use, sibling contrast, side effects—adds distinct value and is front-loaded with the core purpose. No filler or redundant restatement of the schema.
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 fully orients an agent: when to call, when not to, which siblings do what, and what side effects to expect. With the output schema and full parameter schema present, nothing needed for correct invocation is missing.
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% with the single project_path parameter fully described (default '.'). The tool description adds no extra parameter semantics, aligning with the baseline 3 when the schema carries the weight.
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 outcome ('60-second guided quickstart for a new install') and clarifies it as the unified first-run flow combining init, scan, and environment detection. It explicitly contrasts with delimit_init, delimit_scan, and delimit_activate, so an agent can distinguish it without inspecting schemas.
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?
A 'When to use' section defines the exact trigger (immediately after installation) and the 'When NOT to use' section routes to delimit_activate and delimit_diagnose. The sibling contrast further clarifies the alternatives, leaving no ambiguity about when to select this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_redactDelimit RedactARead-onlyIdempotent
Scan or redact sensitive data (API keys, secrets, PII) from text.
When to use: before sending text to external LLMs or publishing output, to prevent leaking credentials or PII. When NOT to use: to manage stored secrets (use delimit_secret_store family) — this is in-memory text redaction.
Sibling contrast: delimit_secret_* manages credentials at rest; this scrubs them out of arbitrary text.
Side effects: read-only on input text — produces a sanitized copy in action="redact". Calls ai.pii_redact.scan / redact. Detects: API keys (OpenAI, xAI, Google, GitHub, npm), passwords, bearer tokens, emails, phone numbers, SSNs, credit cards, IPs, database URLs.
The internal token map is intentionally NOT exposed via MCP — it stays local. action="redact" returns only the redacted text and counts; the original cannot be recovered through this tool.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Text to process. | |
| action | No | "scan" (preview, default) or "redact" (replace). | scan |
| categories | No | Comma-separated categories — "api_key", "secret", "pii", "infra". Empty = all categories. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/idempotentHint/destructiveHint annotations, the description adds valuable behavioral details: it is read-only on input text, produces a sanitized copy, calls internal PII redaction services, keeps the token map local, and states that the original cannot be recovered through this tool. This gives an agent a clear safety and privacy model.
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 long but each section earns its place: when-to-use, sibling contrast, side effects, detection scope, and token-map caveat. It is front-loaded with purpose and clearly structured, with no filler.
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 full input schema, output schema presence, and annotations, the description is complete for correct invocation. It covers purpose, routing to alternatives, side effects, parameter behavior, and limitations such as the unrecoverable original text.
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 the schema already documents text, action, and categories. The description adds meaning by enumerating detected sensitive-data types (API keys, passwords, emails, SSNs, etc.) and clarifying action='redact' behavior. It does not fully map the detected types to the category enum values, so a 5 is not warranted.
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 first line states a specific verb ('scan or redact') and resource ('sensitive data from text'), making the core function immediately clear. The sibling contrast explicitly distinguishes it from delimit_secret_* tools, so an agent can tell them apart.
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 it (before sending text to external LLMs or publishing output) and when NOT to use it (for managing stored secrets, use delimit_secret_store family). It also provides the sibling contrast explaining that delimit_secret_* manages credentials at rest while this tool scrubs arbitrary text.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_reddit_scanDelimit Reddit ScanARead-onlyIdempotent
Bulk scan 25+ subreddits for outreach targets (Pro).
When to use: as a venture-agnostic bulk Reddit scan — returns ranked, categorized targets ready for comment drafting. When NOT to use: for venture-scoped scan (use delimit_reddit_fetch_thread or delimit_social_target) or one specific thread.
Sibling contrast: delimit_reddit_fetch_thread is single thread; delimit_social_target is multi-platform venture scan; this is the broad Reddit pass.
Side effects: read-only network via residential proxy. Rate limited to 1 req / 2sec. The orchestrator must chain (per rule below).
IMPORTANT -- TOOL CHAINING RULE: After scanning, the AI MUST process high_priority targets:
Draft replies via delimit_social_post or delimit_notify
Create ledger items for strategic opportunities via delimit_ledger_add Never just return targets and stop. Always chain.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Reddit sort order — "hot" (default), "new", "top". | hot |
| limit | No | Posts per subreddit. Default 10, max 25. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, idempotentHint, destructiveHint), the description discloses read-only network access via residential proxy, a 1 req/2sec rate limit, and a mandatory tool-chaining rule after scanning. This adds substantive behavioral context that annotations alone do not provide.
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 well-structured and front-loaded: the core purpose appears first, followed by usage guidance, side effects, and the chaining rule. Every section earns its place and the text is dense without being bloated.
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 tool is fully contextualized for an agent: clear purpose, explicit alternative routing, side-effect disclosures, rate limiting, and a mandatory follow-up chain. With an output schema present and annotations covering safety, nothing essential is missing for correct invocation and follow-through.
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 fully documents the sort and limit parameters. The description does not add new parameter-level semantics, but this is acceptable because the baseline of 3 applies when the schema carries the load.
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 opens with a specific verb and resource: bulk scanning 25+ subreddits for outreach targets. It further distinguishes itself by stating it is venture-agnostic and returns ranked, categorized targets, which clearly separates it from sibling tools like delimit_social_target and delimit_reddit_fetch_thread.
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' and 'when NOT to use' guidance, names the alternative tools by name, and includes a sibling contrast section. An agent can confidently route to this tool versus the alternatives without ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_release_historyDelimit Release HistoryA
Return the recent release timeline for an environment (experimental).
When to use: during incident investigation when you need to see
what shipped and when ("what changed in the last 10 releases?"),
or when picking a known-good to_version for
delimit_release_rollback. The output is the release-tier
equivalent of git log for a deploy environment.
When NOT to use: to inspect only the current release (use
delimit_release_status) or for per-app deploy timeline
(delimit_deploy_status / SHA-level history). Also: for
audit-trail evidence collection use delimit_evidence_collect.
Sibling contrast: delimit_release_status is the point-in-time snapshot; this is the time-axis sibling. delimit_release_rollback consumes the output of this tool when picking a target version.
Side effects: read-only against the ops backend. No license gate at this level. Calls backends.ops_bridge.release_history which reads the release timeline store. No write, no probe, no notification. Marked EXPERIMENTAL — output schema may evolve.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of releases to return. Default 10. | |
| environment | Yes | Target environment. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is very transparent about side effects, internal backend calls, and experimental status. However, annotations declare readOnlyHint=false while the description explicitly claims 'read-only against the ops backend' and 'No write'. This is a direct contradiction, so the score must be 1 per rubric.
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 front-loaded with the core purpose and organized into clear, purposeful sections. Every section contributes actionable information without boilerplate or 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?
The description covers when to use, when not to use, sibling relationships, side effects, backend implementation, and experimental caveats. Since an output schema exists and the tool has only two simple parameters, this is complete enough for correct selection and 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 description coverage is 100%, with the schema already documenting environment as required and limit as an integer defaulting to 10. The description adds useful context about 'recent' releases but does not need to restate parameter 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 states a specific operation on a specific resource: returning the recent release timeline for an environment. It also distinguishes itself from related siblings such as delimit_release_status, delimit_release_rollback, and delimit_evidence_collect.
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' and 'When NOT to use' sections with concrete scenarios and names the alternative tools. It also clarifies the time-axis versus point-in-time relationship with delimit_release_status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
_delimit_release_implDelimit Release ImplA
Unified release-management entry point — dispatches to one of six actions.
When to use: as the single MCP-registered release surface (delimit_release) when the caller wants to pick the release operation by name in one call rather than choosing a specific delimit_release_* alias. Release-tier means whole-environment, multi-service versions (the rollup across apps), as opposed to the deploy-tier (per-app SHA) covered by the delimit_deploy_* tools. When NOT to use: from internal code paths — prefer the specific alias (delimit_release_plan, delimit_release_validate, delimit_release_status, delimit_release_rollback, delimit_release_history, delimit_release_sync) for clarity and so each action's docstring and license gate show up at the right call site. For per-app rollout state use delimit_deploy_status; to ship code use delimit_deploy_publish; for OpenAPI spec linting use delimit_lint.
Sibling contrast: each delimit_release_ wrapper is a thin
alias over this implementation; they exist so the action's
docstring lives at the right name. This is the dispatch core.
delimit_release_validate routes through a shared _release_validate
chain, and the public delimit_release_sync exposes its sub-action as
a param named action, which this function receives as sync_action.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of releases to return. Default 10. Used only by "history". | |
| action | No | Which release operation to perform. One of "plan", "validate", "status", "rollback", "history", "sync". Default "status". Other values return a deterministic error. | status |
| version | No | Release version (auto-detected from git tags if empty). Used by "plan", "validate", and "rollback" (as the expected current version to roll back FROM). | |
| services | No | Optional list of service names to scope the plan; None = all services in the repo manifest. Used only by "plan". | |
| repository | No | Repository path. Default ".". Used only by "plan". | . |
| to_version | No | Prior release version to roll back to. Required for "rollback"; ignored otherwise. | |
| environment | No | Target environment, "staging" or "production". Default "production". | production |
| sync_action | No | Sub-action for "sync" — "audit" (default) or "config". Ignored by other actions. | audit |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no readOnly or destructive annotations present, the description carries the behavioral burden. It is transparent about being a dispatch core with six possible actions, thin alias wrappers, and a sync_action mapping. The main gap is that potentially mutating actions like rollback and sync are implied by name rather than explicitly flagged as state-changing operations.
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 front-loaded with its core purpose and organized into labeled sections: purpose, when to use, when not to use, and sibling contrast. The long alias lists earn their place because they directly route the agent to the correct tool among hundreds of siblings.
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 complex multi-action dispatch tool with 8 parameters and many sibling tools, the description is nearly complete: it defines dispatch scope, differentiates tiers, names alternatives, and relies on the 100%-covered schema for parameter detail. It loses one point for not explicitly disclosing side-effect or safety characteristics of the rollback/sync actions, especially since annotations provide no mutation hints.
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 input schema already gives each of the 8 parameters a thorough description, defaults, and action-scope notes. The description adds only the useful but nonessential cross-reference that the public sync surface names the sub-action 'action' while this implementation receives it as 'sync_action', so it stays at the high-coverage 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 leads with a specific verb-plus-resource statement: a unified release-management entry point that dispatches to one of six named actions. It also differentiates itself from the delimit_release_* alias wrappers and from deploy-tier tools, so an agent can distinguish this tool from its many siblings without opening other definitions.
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 are explicit 'When to use' and 'When NOT to use' sections. It tells the agent to call this single MCP-registered release surface when selecting an action by name, to prefer specific delimit_release_* aliases from internal code paths, and names the correct alternative tools for deploy status, publish, and linting.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_release_planDelimit Release PlanARead-onlyIdempotent
Generate a release plan from git history (Pro).
When to use: ahead of cutting a release, to enumerate the services and changes that will ship and surface the version to bump. When NOT to use: to validate readiness (use delimit_release_validate) or to ship code (use delimit_deploy_publish).
Sibling contrast: delimit_deploy_plan plans a deploy of one app; this plans a multi-service release across an environment.
Side effects: read-only on git/repo state; gated by require_premium. Calls backends.tools_infra.release_plan.
Prerequisite: requires Delimit Pro. An unlicensed call returns {"error": ..., "upgrade": "https://delimit.ai/pricing"} without running.
| Name | Required | Description | Default |
|---|---|---|---|
| version | No | Release version. Auto-detected from git tags if empty. | |
| services | No | Optional list of service names to scope the plan; None = all services in the repo manifest. | |
| repository | No | Repository path. Default "." (cwd). | . |
| environment | No | Target environment, "production" or "staging". Default "production". | production |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 valuable behavioral context beyond this: it states the call is read-only on git/repo state, gated by require_premium, invokes backends.tools_infra.release_plan, and returns an upgrade error without running when unlicensed. This is rich, concrete behavioral 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?
The description is well-structured with labeled sections, zero filler, and the core purpose front-loaded. Each sentence earns its place: purpose, usage, exclusions, sibling contrast, side effects, backend call, and prerequisite. The formatting makes it easy for an agent to scan.
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, all parameters are documented, and annotations cover safety, the description is fully complete for correct selection and invocation. It covers when to use, when not to use, the sibling distinction, side effects, backend call, and licensing prerequisite. Nothing material is missing.
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 fully documents all four parameters. The description adds context about surfacing the version to bump and multi-service release planning, but it does not need to explain individual parameters. Baseline 3 is appropriate because the schema carries the semantic load.
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 opens with a specific verb and resource: 'Generate a release plan from git history.' It clarifies the output is a multi-service release plan and explicitly contrasts with delimit_deploy_plan, so an agent can distinguish it from a similarly named sibling without inspecting schemas.
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' and 'When NOT to use' guidance, naming delimit_release_validate and delimit_deploy_publish as alternatives. It also contrasts with delimit_deploy_plan, making the selection criteria unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_release_rollbackDelimit Release RollbackADestructive
Revert a whole environment to a prior release version (experimental).
When to use: when delimit_release_validate or delimit_obs_alerts indicate a regression that spans services and you need to revert the WHOLE environment to a known-good release, not just one app. Typical sequence: alert fires -> delimit_release_history to pick a target -> this -> delimit_release_status to confirm. When NOT to use: to roll back a single app at the SHA level (use delimit_deploy_rollback), to roll back an npm publish (npm publish history is largely append-only — there is no clean rollback), or to roll forward (delimit_release_plan).
Sibling contrast: delimit_deploy_rollback reverts one app at
the SHA level; this reverts a release version across services
in lockstep. delimit_release_history is how you pick the
to_version.
Side effects: invokes backends.ops_bridge.release_rollback which
MUTATES the live environment — services are flipped to the
to_version artifacts. No license gate at this level (handled
by the backend's own admin checks). Marked EXPERIMENTAL —
handler may return partial results on backends without rollback
automation; verify with delimit_release_status afterwards. No
automatic ledger write, no automatic notification — pair with
delimit_evidence_collect + delimit_notify per the deploy-gate
chain.
| Name | Required | Description | Default |
|---|---|---|---|
| version | Yes | Current release version that is failing. Required. | |
| to_version | Yes | Prior release version to roll back to. Required. | |
| environment | Yes | Target environment. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond the annotations' destructiveHint, explaining that the tool invokes backends.ops_bridge.release_rollback, mutates the live environment, may return partial results on backends without rollback automation, and does not write to the ledger or notify automatically. It also tells the agent to verify with delimit_release_status afterwards. This is thorough behavioral 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?
The description is long but highly structured with clear sections: summary, when to use, when not to use, sibling contrast, and side effects. Every sentence earns its place, especially given the destructive and experimental nature of the operation. The main action 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?
For a destructive, experimental environment-wide rollback, the description covers the full workflow, selection criteria, alternatives, side effects, failure modes, verification step, and missing automatic behaviors. The output schema exists, so return-value documentation is not the description's responsibility. Nothing critical is missing.
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 schema already documents the three required parameters. The description adds operational meaning by explaining that 'version' is the current failing release, 'to_version' is the prior known-good target, and that delimit_release_history should be used to choose it. This enriches the schema without redundancy.
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 opens with a specific verb and resource: 'Revert a whole environment to a prior release version.' It clearly distinguishes this from sibling tools by explicitly stating it reverts an entire environment in lockstep, not a single app at the SHA level. The experimental marker adds an important scoping note.
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 'When to use' section names concrete triggers (delimit_release_validate/delimit_obs_alerts indicating a cross-service regression) and gives a typical sequence with adjacent tools. 'When NOT to use' explicitly excludes single-app rollbacks, npm publish rollbacks, and roll-forwards, naming the correct alternatives. This is exemplary routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_release_statusDelimit Release StatusA
Report the active release version for a whole environment (Pro).
When to use: to inspect which release version is currently live across all services in an environment — the "what is shipped right now?" check at the release-tier (versions across services) rather than the deploy-tier (per-app SHA). Useful for incident pages and pre-deploy "what are we coming from?" snapshots. When NOT to use: for per-app rollout state (use delimit_deploy_status), for past releases on the same env (use delimit_release_history), or to plan a new release (delimit_release_plan).
Sibling contrast: delimit_deploy_status reports a single app's SHA rollout; this reports the environment's release version overall (the rollup across apps). delimit_release_history is the time-axis sibling; this is the point-in-time snapshot.
Side effects: read-only against the ops backend and gated by require_premium — unlicensed callers receive a license payload and no query runs. On a licensed call, invokes backends.tools_infra.release_status which reads the release manifest for the environment. No write, no probe, no notification. Response routed through _with_next_steps.
Prerequisite: requires Delimit Pro. An unlicensed call returns {"error": ..., "upgrade": "https://delimit.ai/pricing"} without running.
| Name | Required | Description | Default |
|---|---|---|---|
| environment | No | Target environment. Default "production". | production |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description provides rich behavioral context: licensing gate, unlicensed payload, no write/probe/notification, and internal invocation. However, it states 'read-only against the ops backend' while the annotations declare readOnlyHint=false, directly conflicting with the annotation; per rubric this is a 1.
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 front-loaded with the purpose and organized into scannable sections, and most content earns its place for a tool with many siblings. It is slightly long and includes some implementation detail like '_with_next_steps' that an agent does not need for selection, so 4 rather than 5.
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 one optional parameter, an output schema, and comprehensive sibling/alternative/exclusion guidance, the description covers everything needed to invoke the tool correctly. The contradictory readOnlyHint=false annotation versus the 'read-only' claim leaves the agent with conflicting safety signals, so it is not fully 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 100% and the only parameter, environment, is described with a default in the schema. The description reinforces environment-level scope but adds no new syntax, constraints, or format details beyond what the schema already provides, so baseline 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?
Opens with a specific verb and resource: 'Report the active release version for a whole environment (Pro).' It clarifies the release-tier vs deploy-tier distinction and names the sibling tools it is not, so an agent can differentiate it from delimit_deploy_status and delimit_release_history without opening schemas.
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 has explicit 'When to use' and 'When NOT to use' sections. It names delimit_deploy_status, delimit_release_history, and delimit_release_plan as alternatives with the conditions that select them, and adds a sibling contrast paragraph.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_release_syncDelimit Release SyncARead-onlyIdempotent
Audit or report config of public surfaces for consistency (Pro).
When to use: to confirm that all public surfaces (CLI, action, npm, site) reference the same release version and configuration. When NOT to use: to actually deploy or sync content — this is a read/audit tool only.
Sibling contrast: delimit_release_status reports the deployed state; this audits the public surface configuration for drift.
Side effects: gated by require_premium. Calls ai.release_sync.audit (read-only audit) or ai.release_sync.get_release_config when action="config".
Prerequisite: requires Delimit Pro. An unlicensed call returns {"error": ..., "upgrade": "https://delimit.ai/pricing"} without running.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | Sub-action — "audit" (default) or "config". | audit |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive hints. The description goes further by disclosing the license gate, naming the internal endpoints (ai.release_sync.audit and ai.release_sync.get_release_config), and specifying the unlicensed response shape. This adds meaningful behavioral context 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 well-structured with labeled sections and front-loaded purpose. There is minor redundancy between the initial '(Pro)' marker and the later prerequisite line, but otherwise every section contributes useful information without bloat.
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 single-parameter read-only audit tool with an output schema and comprehensive annotations, the description covers scope, exclusions, sibling distinction, licensing, side effects, and error behavior. Nothing an agent needs to decide whether to call this tool is missing.
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 lone parameter's description already documents the 'audit' and 'config' values. The description adds extra meaning by mapping each action to a specific internal endpoint and reinforcing the default behavior, which helps the agent anticipate what happens for each value.
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 opens with a specific verb and resource: 'Audit or report config of public surfaces for consistency.' It explicitly names the surfaces (CLI, action, npm, site) and contrasts with delimit_release_status, so an agent can distinguish it from siblings without opening schemas.
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' and 'When NOT to use' guidance, plus a direct sibling contrast: delimit_release_status reports deployed state, while this tool audits config drift. It also states the prerequisite (Delimit Pro) and the unlicensed error behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_release_validateDelimit Release ValidateA
Validate that a release is safe to ship.
When to use: as the gate between delimit_release_plan and the actual rollout — confirms the release passes preflight checks. When NOT to use: for OpenAPI spec linting (delimit_lint) or for runtime health (delimit_obs_status).
Sibling contrast: delimit_release_plan describes what would ship; this attests it is safe to ship.
Side effects: on success, returns a passed verdict (no side effects). On failure, auto-chains:
backends.repo_bridge.evidence_collect (records failure evidence)
ai.notify.send_notification (webhook event release_validation_failed)
ai.ledger_manager.add_item (creates ops-ledger fix item, P1)
| Name | Required | Description | Default |
|---|---|---|---|
| version | Yes | Release version string. Required. | |
| environment | Yes | Target environment ("production" / "staging"). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description clearly discloses the conditional side-effect behavior: no side effects on success, but on failure it auto-chains three specific actions (evidence collection, notification, ledger item). This is significant behavioral context the agent needs before invoking the 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?
The description is well-structured with labeled sections: purpose, when to use, when not to use, sibling contrast, and side effects. Every section adds distinct value, and the most important usage guidance 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 has an output schema, the description does not need to explain return values. It covers purpose, usage boundaries, sibling differentiation, and side effects, which are the critical elements for correct invocation. Nothing essential is missing.
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 parameters version and environment are already fully documented in the input schema. The description adds no additional parameter-level detail, which is acceptable but not above the 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 opens with a specific verb and resource: 'Validate that a release is safe to ship.' It explicitly distinguishes itself from delimit_release_plan, delimit_lint, and delimit_obs_status, making the tool's role clear relative to 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?
The description provides explicit when-to-use ('gate between delimit_release_plan and the actual rollout'), when-not-to-use (OpenAPI linting, runtime health), and a sibling contrast with delimit_release_plan. This leaves no ambiguity about selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_repo_analyzeDelimit Repo AnalyzeARead-onlyIdempotent
Analyze repository structure and quality (experimental).
When to use: for a deep audit of a repo (local or remote) — code structure, language mix, quality signals. When NOT to use: for a fast health pass (use delimit_repo_diagnose) or config-only audit (delimit_repo_config_audit).
Sibling contrast: delimit_repo_diagnose is a quick smoke test; this is the deeper structural audit.
Side effects: read-only on the resolved local path. Accepts local path, "owner/repo" shorthand, or GitHub URL — remote inputs are shallow-cloned into a tempdir for the call. Calls backends.repo_bridge.analyze through _run_repo_tool_with_remote.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | Repository path, "owner/repo", or GitHub URL. Default "." (cwd). | . |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false. The description adds meaningful behavioral context: read-only on the resolved local path, remote inputs are shallow-cloned into a tempdir, and the underlying call path is disclosed. This goes well 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 well-structured with clear sections and front-loaded purpose. Every sentence contributes useful guidance, though the final implementation-detail sentence about backends.repo_bridge.analyze is slightly lower-value for an agent deciding whether to call 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 tool with one parameter, rich annotations, and an output schema, the description covers intent, usage boundaries, side effects, accepted input forms, and remote behavior. Nothing essential for correct invocation is missing.
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 target parameter is already well documented. The description adds value by explaining the remote-clone behavior for non-local targets and reinforcing the accepted input formats. This is more than the baseline, though the schema already carries most of the semantic weight.
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 specific verb and resource: 'Analyze repository structure and quality,' and clarifies it is a 'deep audit' covering code structure, language mix, and quality signals. It also distinguishes itself from the sibling delimit_repo_diagnose, making its 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 explicit 'When to use' and 'When NOT to use' guidance, directly naming alternatives delimit_repo_diagnose and delimit_repo_config_audit. The sibling contrast further clarifies when this tool is the right choice versus a quick smoke test.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_repo_config_auditDelimit Repo Config AuditARead-onlyIdempotent
Audit repository configuration for compliance (experimental).
When to use: when checking a repo's config against a compliance standard — required files, branch protection, license header. When NOT to use: for structural validity (use delimit_repo_config_validate) or full quality analysis (delimit_repo_analyze).
Sibling contrast: delimit_repo_config_validate checks well-formedness; this checks compliance.
Side effects: read-only on the resolved local path. Accepts local path, "owner/repo" shorthand, or GitHub URL — remote inputs are shallow-cloned. Calls backends.repo_bridge.config_audit via _run_repo_tool_with_remote.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | Repository or config path, "owner/repo", or GitHub URL. Default "." (cwd). | . |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 value beyond them by flagging the tool as 'experimental' and disclosing that remote inputs are shallow-cloned, plus naming the call path via backends.repo_bridge.config_audit. A minor gap is the absence of failure-mode disclosure for invalid or unreachable repo targets.
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?
Well-structured with labeled sections (When to use, When NOT to use, Sibling contrast, Side effects). The core purpose is front-loaded immediately, and every sentence contributes meaningful information — the experimental warning and side-effect disclosure each earn their 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 tool with a single fully-documented parameter, an output schema, and safety annotations, the description covers all essentials: purpose, routing against siblings, accepted input formats, remote handling behavior, and side effects. Nothing an agent needs to select and invoke it correctly is missing.
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 the single 'target' parameter is already fully documented in the input schema. The description's mention of accepted formats (local path, owner/repo, GitHub URL) largely repeats schema content; the only added meaning is the shallow-clone behavior for remote inputs, which is more behavioral than parameter-semantic. The 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 opens with a specific verb+resource phrase — 'Audit repository configuration for compliance' — which precisely states the tool's function. It further distinguishes from siblings by contrasting 'delimit_repo_config_validate checks well-formedness; this checks compliance'.
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?
Includes explicit 'When to use' and 'When NOT to use' sections with named alternatives: delimit_repo_config_validate for structural validity and delimit_repo_analyze for full quality analysis. The sibling contrast paragraph reinforces the routing decision, leaving no ambiguity about when to select this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_repo_config_validateDelimit Repo Config ValidateARead-onlyIdempotent
Validate repository configuration files (experimental).
When to use: as a pre-merge check that .github/, package.json, pyproject.toml, etc. are well-formed and self-consistent. When NOT to use: for compliance vs an external standard (use delimit_repo_config_audit) or full repo analysis (delimit_repo_analyze).
Sibling contrast: delimit_repo_config_audit reports policy compliance; this checks structural validity.
Side effects: read-only on the resolved local path. Accepts local path, "owner/repo" shorthand, or GitHub URL — remote inputs are shallow-cloned into a tempdir. Calls backends.repo_bridge.config_validate via _run_repo_tool_with_remote.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | Repository or config path, "owner/repo", or GitHub URL. Default "." (cwd). | . |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds meaningful context beyond this: read-only on the resolved local path, remote inputs are shallow-cloned into a tempdir, and it names the internal code path. 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 well-structured with labeled sections and the core purpose front-loaded. The final sentence about internal backend calls is a marginal implementation detail, but it does not significantly harm readability.
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 one optional parameter, an output schema, and safety annotations, the description covers purpose, usage boundaries, sibling differentiation, side effects, and input semantics. No critical information for correct invocation is missing.
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 already fully documents the single target parameter, so the baseline is 3. The description adds value by reinforcing accepted input forms (local path, owner/repo, GitHub URL) and explaining the behavioral difference for remote inputs.
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?
Opens with a specific verb and resource: 'Validate repository configuration files.' It clarifies that this checks structural validity and self-consistency, and explicitly contrasts itself with delimit_repo_config_audit and delimit_repo_analyze, so an agent can tell it apart from relevant 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?
Provides explicit 'When to use' and 'When NOT to use' guidance, naming the exact alternatives (delimit_repo_config_audit for compliance, delimit_repo_analyze for full repo analysis). The sibling contrast further removes ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_repo_diagnoseDelimit Repo DiagnoseARead-onlyIdempotent
Diagnose repository health issues (experimental) (Pro).
When to use: before a commit or push to surface common repo problems — broken hooks, missing config, dirty working tree. When NOT to use: for full quality analysis (use delimit_repo_analyze) or per-file config validation (delimit_repo_config_validate).
Sibling contrast: delimit_repo_analyze is a deeper structural audit; this is a quick health-check pass.
Side effects: read-only on the repo; gated by require_premium. Calls backends.repo_bridge.diagnose. Marked experimental — output schema may evolve.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | Repository path. Default "." (cwd). | . |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnly/idempotent/non-destructive, and the description adds meaningful context: gated by require_premium, explicitly 'read-only on the repo', experimental output schema, and backend call name. The description is fully consistent with the annotations and adds non-redundant behavioral detail.
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 compact yet information-dense: purpose, usage windows, exclusions, sibling contrast, side effects, gating, and experimental status are all covered in a few short labeled segments. No filler or tautology is present.
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 single-optional-parameter, output-schema-backed tool with rich annotations, the description covers everything an agent needs to select and invoke it correctly: what it does, when to use it, when not to, safety profile, and access requirements. Nothing critical is missing.
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 single parameter 'target' is already fully documented in the schema at 100% coverage, including default '.'. The description does not need to add more parameter detail, so baseline 3 applies. No contradiction or gap exists here.
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: 'Diagnose repository health issues', and clarifies it is a 'quick health-check pass'. It explicitly contrasts with the deeper structural audit of delimit_repo_analyze, so an agent can distinguish it from siblings without opening schemas.
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?
Gives a concrete trigger ('before a commit or push') and lists examples of detected problems. It also names when NOT to use it, pointing to delimit_repo_analyze and delimit_repo_config_validate as alternatives. This is explicit routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_resource_driversDelimit Resource DriversARead-onlyIdempotent
List available data plane drivers and their resource schemas.
When to use: to inventory which external systems Delimit can read from (github, etc.) and what resources each driver exposes. When NOT to use: to read data from a driver (use delimit_resource_list / delimit_resource_get).
Sibling contrast: delimit_resource_list lists items via a driver; this lists the drivers themselves.
Side effects: read-only. Calls ai.data_plane.list_drivers.
Args: None.
Returns: Dict with key "drivers" (list of driver definitions and their resource schemas) and next_steps.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds value by stating the underlying call (ai.data_plane.list_drivers) and clarifying the return shape, which goes 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 well structured with clear sections, front-loaded purpose, and no filler. Every section earns its place: when to use, when not to use, sibling contrast, side effects, args, and returns.
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 zero-parameter read-only inventory tool, the description is complete: it explains what the tool returns, how it differs from siblings, and what side effects to expect. The presence of an output schema also reduces the need to document return values further.
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 tool has zero parameters, so there is no parameter semantics burden. The description explicitly states 'Args: None', which is consistent with the empty input schema and gives the agent certainty.
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 specific verb and resource: 'List available data plane drivers and their resource schemas.' It also explicitly contrasts with sibling tools delimit_resource_list and delimit_resource_get, making it unambiguous which tool is which.
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 explicit 'When to use', 'When NOT to use', and names the exact alternative tools for reading data. This is ideal routing guidance for an agent deciding among many delimit_* siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_resource_getDelimit Resource GetARead-onlyIdempotent
Get a specific resource from a connected data-plane system.
When to use: to fetch a single item by identifier via a driver — a repo, PR, issue, or workflow run. When NOT to use: to list items (use delimit_resource_list) or inventory drivers (delimit_resource_drivers).
Sibling contrast: delimit_resource_list returns many; this returns one.
Side effects: read-only network call via the driver. Calls ai.data_plane.get_driver and the driver's get_* method.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | No | "owner/name" required for PRs / issues / workflow runs. | |
| driver | No | Driver key. Default "github". | github |
| resource | No | One of "repos", "pull_requests", "issues", "workflows". Required. | |
| identifier | No | Resource identifier — repo name, PR number, run id. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it read-only, idempotent, and non-destructive; the description adds that it performs a network call through a driver and names the internal functions it invokes (ai.data_plane.get_driver and the driver's get_* method). This is useful behavioral context beyond the annotations, though it does not detail failure modes or connection requirements.
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 organized into labeled sections, starts with the core action, and each sentence carries distinct value: scope, exclusions, sibling contrast, and side effects. There is no filler or redundant repetition of the schema.
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 single-item read tool, the description covers what it does, when to use it, when not to, how it behaves, and its side effects; the schema documents all parameters and an output schema exists. An agent has enough context to select and invoke it correctly without additional assumptions.
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 baseline applies and the schema already explains repo, driver, resource, and identifier. The description adds no parameter-level detail beyond the schema; its mention of 'single item by identifier' supports conceptual semantics but is not necessary for invocation.
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 ('Get'), a clear resource ('a specific resource from a connected data-plane system'), and explicitly limits scope to a single item by identifier: repo, PR, issue, or workflow run. It also distinguishes itself by saying delimit_resource_list returns many while this returns one.
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?
It includes explicit 'When to use' and 'When NOT to use' sections, naming the exact sibling tools to choose instead (delimit_resource_list, delimit_resource_drivers). This gives an agent clear decision criteria rather than leaving the choice to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_resource_listDelimit Resource ListARead-onlyIdempotent
List resources from a connected data-plane system.
When to use: to enumerate items via a driver — repos, PRs, issues, workflow runs. When NOT to use: to fetch a specific item (use delimit_resource_get) or inventory drivers (delimit_resource_drivers).
Sibling contrast: delimit_resource_drivers lists drivers; delimit_resource_get fetches one item; this lists items.
Side effects: read-only network calls via the chosen driver. Calls ai.data_plane.get_driver and the driver's list_* method.
| Name | Required | Description | Default |
|---|---|---|---|
| org | No | Organization filter for repos. | |
| repo | No | "owner/name" — required for workflow listing. | |
| limit | No | Max results. Default 10. | |
| state | No | PR/issue state — "open" (default), "closed", "all". | open |
| driver | No | Driver key. Default "github". | github |
| resource | No | One of "repos", "pull_requests", "issues", "workflows". Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses the side effect of read-only network calls, names the internal calls to ai.data_plane.get_driver and the driver's list_* method, and confirms no destructive behavior. This gives an agent a clear model of what executing the tool involves.
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 compact and well-structured: a one-sentence purpose followed by tightly scoped sections for usage, contrast, and side effects. Every sentence earns its place with no filler.
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 self-sufficient for selection and invocation: purpose, alternatives, side effects, and internal behavior are all covered. Parameter details and return shape are delegated to the input/output schemas, which is appropriate given the schema coverage.
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 already documents all six parameters with descriptions, so the description does not need to restate parameter semantics. It adds general context about driver-based enumeration but no parameter-specific detail beyond the schema. The baseline of 3 applies because schema coverage is complete.
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 specific verb and resource: 'List resources from a connected data-plane system' and clarifies that it enumerates items like repos, PRs, issues, and workflow runs. It distinguishes itself from peers by naming delimit_resource_get and delimit_resource_drivers as different operations.
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' and 'When NOT to use' guidance, including named alternatives. This leaves no ambiguity about when to choose this tool over delimit_resource_get or delimit_resource_drivers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_reviewDelimit ReviewA
Run a multi-model code review on a diff or file.
When to use: to get cross-model feedback on a code change before merging, optionally posted as a PR comment. When NOT to use: for structured cross-lens audit (use delimit_audit) or full multi-round debate (delimit_deliberate).
Sibling contrast: delimit_audit is structured (security / correctness / governance lenses); delimit_deliberate is full debate; this is single-prompt multi-model review.
Side effects: calls multiple models via ai.multi_review. May write a saved review record. When pr_url is provided, the review can be posted as a PR comment by the caller (this tool returns the comment body, it does not auto-post).
| Name | Required | Description | Default |
|---|---|---|---|
| diff | No | Git diff or code text to review. Takes priority over file_path. | |
| pr_url | No | GitHub PR URL for linking the review. | |
| context | No | Additional context about the change. | |
| file_path | No | Path to file to review (reads current content if no diff). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations' readOnlyHint=false and destructiveHint=false, the description discloses side effects: calls multiple models via ai.multi_review, may write a saved review record, and when pr_url is provided returns a comment body without auto-posting. This materially clarifies what invoking the tool can do.
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 front-loaded with the core purpose, then logically organized into usage, non-usage, sibling contrast, and side effects. Each section adds distinct information without fluff or repetition that wastes tokens.
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 required parameters and an output schema present, the description covers all essential selection and invocation context: what it does, when to use it, when to avoid it, which siblings are alternatives, and what side effects to expect. An agent can confidently choose and call this tool based on the description alone.
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 the baseline is 3. The description adds extra semantic value for pr_url by explaining the post-as-comment behavior is caller-driven and that the tool returns the comment body rather than auto-posting, which goes beyond the schema's 'GitHub PR URL for linking the review.'
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 opens with 'Run a multi-model code review on a diff or file,' naming a specific action, resource, and input. It further distinguishes itself from delimit_audit and delimit_deliberate, making its scope immediately clear.
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?
It explicitly states 'When to use' and 'When NOT to use,' naming the exact sibling tools that should replace it in other scenarios. The sibling contrast section reinforces the decision boundary with concrete lens/debate vs. single-prompt review distinctions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_reviveDelimit ReviveARead-onlyIdempotent
Revive the last session's captured soul in any model.
When to use: at session start, to load the prior session's soul (active task, decisions, blockers, next steps). When NOT to use: to capture a soul (delimit_soul_capture) or read recent memories (delimit_memory_recent).
Sibling contrast: delimit_soul_capture writes the soul; this reads and applies it (cross-model: Claude, Codex, Gemini, Cursor).
Side effects: read-only; calls ai.session_phoenix.revive.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Optional handoff/receipt id. When set, revives ONLY that scoped handoff context (for dispatched subagents) instead of the global session soul. Empty = full soul (default). | |
| soul_id | No | Specific soul id to revive. Empty = latest. | |
| project_path | No | Project path to revive. Empty = auto-detect from cwd. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already provide readOnlyHint, idempotentHint, and destructiveHint. The description adds useful context by explicitly stating the operation is read-only, that it reads and applies the soul, and that it is cross-model. This aligns with and supplements the 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 well-organized with front-loaded purpose, concise when/where/contrast sections, and a short side-effects note. Every sentence adds value, and the formatting makes scanning easy.
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 when to use, when not to use, sibling contrast, side effects, and model scope. With a rich output schema and full parameter documentation in the input schema, nothing critical is missing for an agent to invoke this 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?
The input schema descriptions cover 100% of the three parameters, including defaults and empty-string meanings. The description itself adds no parameter-specific detail, but because the schema carries the full burden, the 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?
The description states a specific action ('Revive the last session's captured soul') and clearly distinguishes it from sibling tools like delimit_soul_capture and delimit_memory_recent. The unique resource ('soul') and the intent ('any model') are immediately clear.
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 ('at session start'), when NOT to use (capturing a soul or reading recent memories), and names the alternative tools. It also contrasts with delimit_soul_capture, giving the agent unambiguous routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_scanDelimit ScanA
Scan a project and report what Delimit can do for it.
When to use: as a first-run discovery on a new project — finds OpenAPI specs, checks for security issues, detects frameworks, suggests what to track. When NOT to use: to initialize governance (use delimit_init) or run the 60-second quickstart (delimit_quickstart).
Sibling contrast: delimit_quickstart is a guided first-run flow; delimit_init creates the governance scaffolding; this is read-only discovery.
Side effects: read-only scan via filesystem globs. Does not write to project files.
| Name | Required | Description | Default |
|---|---|---|---|
| project_path | No | Path to the project to scan. Default "." (cwd). | . |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description claims this is a 'read-only scan' and 'Does not write to project files,' but the annotations declare readOnlyHint=false. This is a direct contradiction about a critical behavioral trait, so the score must be 1 despite the otherwise useful side-effect 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?
The description is well organized with labeled sections, opens with the one-sentence purpose, and has no filler. Every sentence contributes either routing guidance or behavioral context.
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 simple one-parameter tool with an output schema, the description covers what, when, when not, and side effects thoroughly. However, the conflict between the stated read-only behavior and readOnlyHint=false leaves a serious ambiguity about side effects, preventing a perfect score.
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 optional project_path parameter is already fully described with a default value and meaning. The description adds no parameter-specific detail, but none is required 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?
States a specific action ('Scan a project'), a clear object (the project), and the output ('report what Delimit can do for it'). It also lists concrete discovery results (OpenAPI specs, security issues, frameworks) and distinguishes itself from delimit_init and delimit_quickstart.
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' and 'When NOT to use' guidance, naming delimit_quickstart and delimit_init as alternatives. The sibling contrast section further reinforces the correct selection logic.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_screen_recordDelimit Screen RecordA
Record a screen capture (browser or terminal session) (Pro).
When to use: to capture a video for documentation, demo, or audit evidence over a fixed window. When NOT to use: for a single still (use delimit_screenshot).
Sibling contrast: delimit_screenshot is one frame; this is a duration-bound recording.
Side effects: launches headless Chromium (browser mode) or a terminal subprocess (terminal mode), writes MP4 (browser) or GIF
MP4 (terminal) under ~/.delimit/recordings/. Gated by require_premium. Duration is capped at 120 seconds.
Prerequisite: requires Delimit Pro. An unlicensed call returns {"error": ..., "upgrade": "https://delimit.ai/pricing"} without running.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | URL to visit (browser mode only). | |
| mode | No | "browser" (default) or "terminal". | browser |
| name | No | Output filename without extension. Default "recording". | recording |
| script | No | Shell script to run (terminal mode only). Empty = idle terminal capture. | |
| duration | No | Recording duration in seconds. Max 120. Default 30. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses concrete side effects: launching headless Chromium or a terminal subprocess, writing MP4/GIF files to ~/.delimit/recordings/, gating on require_premium, and returning an upgrade error without running when unlicensed. Annotations only provide readOnlyHint=false and destructiveHint=false, so this description adds substantial behavioral context that the annotations do not 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?
The description is well-structured with clear headers, front-loaded purpose, and useful side-effect and prerequisite sections. It is slightly longer than necessary because the 'When NOT to use' and 'Sibling contrast' sections partially overlap, but every section still contributes 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?
For a tool with optional parameters, a Pro licensing prerequisite, file-output side effects, and an output schema, the description covers the prerequisite, the failure behavior, output locations, duration cap, and sibling differentiation. Nothing an agent needs to decide whether and how to invoke it is missing.
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 input schema already documents all five parameters with defaults and constraints. The description reinforces the 120-second cap and browser/terminal modes, but does not add significant meaning 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 opens with a specific verb and resource: 'Record a screen capture (browser or terminal session)'. It clearly identifies this as a duration-bound recording tool and contrasts it directly with delimit_screenshot, making the tool's identity and scope 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?
The description provides explicit 'When to use' and 'When NOT to use' guidance, including naming delimit_screenshot as the alternative for still images. This gives an agent a clear decision rule for selecting this tool over its closest sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_screenshotDelimit ScreenshotA
Take a screenshot of a URL using headless Chromium (Pro).
When to use: for audit evidence, visual regression baselines, or documentation captures. When NOT to use: for time-based recordings (use delimit_screen_record) or rendered HTML extraction.
Sibling contrast: delimit_screen_record captures over time (browser or terminal); this captures a single image.
Side effects: gated by require_premium. Launches headless Chromium via Playwright and writes a PNG file under ~/.delimit/screenshots/.
Prerequisite: requires Delimit Pro. An unlicensed call returns {"error": ..., "upgrade": "https://delimit.ai/pricing"} without running.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL to screenshot. Required. | |
| name | No | Output filename (without extension). Default "screenshot". | screenshot |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it discloses concrete side effects: launching headless Chromium via Playwright, writing a PNG under ~/.delimit/screenshots/, and requiring a Pro license. It also describes the unlicensed failure response, which makes actual runtime behavior predictable.
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 well-structured with labeled sections and the core action front-loaded. There is minor redundancy—'headless Chromium' appears twice and Pro is mentioned in both the opening and prerequisite—but every section 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 two-parameter tool with an output schema, the description covers purpose, usage boundaries, sibling comparison, side effects, licensing prerequisite, and failure behavior. Nothing an agent needs to call it correctly is missing.
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 url and name. The description adds context about the output artifact (a PNG file under ~/.delimit/screenshots/) but does not provide additional parameter-level meaning, so the 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 opens with a concrete verb and resource: 'Take a screenshot of a URL using headless Chromium.' It also explicitly distinguishes itself from delimit_screen_record, so an agent can tell them apart despite the large sibling 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?
It provides explicit when-to-use scenarios (audit evidence, visual regression baselines, documentation captures) and explicit when-not-to-use cases (time-based recordings, rendered HTML extraction). For time-based recordings it names the alternative tool, delimit_screen_record.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_seal_verifyDelimit Seal VerifyARead-onlyIdempotent
Verify a Delimit Seal receipt against the bundled Layer-0 constitution (Free).
When to use: to check that a signed governed-output receipt has not been tampered with — content-pin to the published constitution, a valid Ed25519 signature, and a well-formed structure. Free tier. Pass mode='a1' to verify a hardened offline A1 bundle (schema_version >= 0.3) with subject binding + key-manifest crosscheck. When NOT to use: to verify an evidence bundle (use delimit_evidence_verify) or to query the ledger (delimit_ledger).
Sibling contrast: delimit_evidence_verify checks an evidence bundle's hash chain; this checks an open-core Seal receipt's signature + content-pin with no access to the engine or the signing key.
Side effects: read-only. Calls backends.repo_bridge.seal_verify. The 'cryptography' dependency is optional + lazy-imported: if absent, it returns verification_unavailable rather than failing. No license gate.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Verification mode. 'receipt' (default) = legacy/v0.2 receipt path, unchanged. 'a1' = hardened offline A1 bundle path (schema_version >= 0.3): tar-safety, version floor, crypto-suite allowlist, subject binding, key-manifest crosscheck. | receipt |
| expect_repo | No | A1 only: the canonical repo URL the relying party expects. When given, sha256(subject_salt || url) must equal subject.repo or verification hard-fails. | |
| receipt_path | Yes | Path to a Delimit Seal receipt JSON file, OR (mode='a1') an A1 bundle (.a1.tar.gz). Required. | |
| expect_merge_commit | No | A1 only: the git merge-commit SHA the relying party expects. When given, verification hard-fails unless subject.merge_commit matches (anti-replay binding, spec §2.2 step 11). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent/non-destructive annotations, the description states read-only side effects, calls an internal backend, discloses the lazy-import behavior ('returns verification_unavailable' if cryptography is absent), and notes there is no license gate. 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 well organized and front-loaded with purpose, but it is slightly repetitive: 'Free tier' and 'No license gate' say similar things, and the signature/content-pin checks are described twice. Still, each major section 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 tool with schemas and annotations carrying the structured details, the description adds the necessary selection context, side-effect and failure-mode transparency, sibling differentiation, and mode guidance. Nothing critical is missing for correct 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 description coverage is 100%, so the schema already documents all four parameters thoroughly. The description reinforces mode='a1' context but does not add significant parameter-level meaning beyond what the schema provides; baseline 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?
The description uses a specific verb and resource: verifying a Delimit Seal receipt against the bundled Layer-0 constitution, with concrete checks (content-pin, Ed25519 signature, structure). It distinguishes itself from delimit_evidence_verify by naming what this tool checks versus what the sibling checks.
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 'When to use' and 'When NOT to use' sections name alternatives: delimit_evidence_verify for evidence bundles and delimit_ledger for ledger queries. The mode='a1' path is also scoped with a condition, leaving no ambiguity about when this tool should be selected.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_secret_access_logDelimit Secret Access LogARead-onlyIdempotent
Show the audit log of secret accesses.
When to use: for compliance review, incident investigation, or to see who/what fetched a credential. When NOT to use: to read a secret value (delimit_secret_get) or to inventory secrets (delimit_secret_list).
Sibling contrast: delimit_secret_get appends to this log; this reads it back.
Side effects: read-only. Calls ai.secrets_broker.get_access_log.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Optional secret name to filter the log. Empty = all secrets. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, and the description reinforces the read-only side effect and names the underlying call 'ai.secrets_broker.get_access_log.' It also adds useful behavioral context by noting that delimit_secret_get appends to this log while this tool reads it back, which helps the agent understand the operational relationship.
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 well-organized with clear labeled sections: core purpose, when to use, when not to use, sibling contrast, and side effects. Every sentence contributes useful selection or invocation guidance without repetition or filler.
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 simple read-only audit-log tool with one optional parameter and an output schema, the description covers purpose, usage boundaries, sibling relationships, and side effects. It provides everything an agent needs to decide when to call it and how it behaves.
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 input schema already fully documents the single optional 'name' parameter with the meaning of an empty value. The description adds no new parameter-level detail, so with 100% schema coverage the 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 opens with a specific verb and resource: 'Show the audit log of secret accesses.' It explicitly distinguishes itself from the sibling tools delimit_secret_get and delimit_secret_list by stating what each is for, so an agent can select this tool with confidence.
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 concrete use cases ('compliance review, incident investigation, or to see who/what fetched a credential') and explicit negative guidance ('When NOT to use: to read a secret value... or to inventory secrets...'), naming the alternative tools. This leaves no ambiguity about when the tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_secret_getDelimit Secret GetA
Request just-in-time access to a stored secret.
When to use: when a tool or agent needs a credential at execution time. The broker logs every access for audit. When NOT to use: to add a secret (use delimit_secret_store) or to examine the audit log (use delimit_secret_access_log).
Sibling contrast: delimit_secret_store writes; this reads with audit; delimit_secret_access_log shows the resulting access trail.
Side effects: appends an access log entry via ai.secrets_broker.get_secret. Does not return secrets to scopes that were not authorised at store time.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Secret name to retrieve. Required. | |
| tool | No | Name of the requesting tool (used by the broker to check scope). | |
| agent_type | No | Identity of the requesting agent (used by the broker to check scope). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses side effects beyond the annotations: it appends an access log entry via ai.secrets_broker.get_secret and does not return secrets to scopes unauthorized at store time. This is valuable behavioral context that the readOnlyHint=false and destructiveHint=false annotations alone do not provide, and 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 well-organized with clear sections: purpose, when to use, when not to use, sibling contrast, and side effects. Every sentence contributes actionable information, and the most important details are 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?
For a simple 3-parameter tool with an output schema present, the description is complete. It covers purpose, usage boundaries, side effects, and authorization scope, so an agent has enough context to invoke it 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%, so the input schema already documents all three parameters. The description adds the conceptual framing of just-in-time scope checking, but it does not add parameter-level meaning beyond what the schema provides. The baseline of 3 is appropriate here.
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 opens with a specific verb and resource: 'Request just-in-time access to a stored secret.' It also explicitly contrasts with delimit_secret_store and delimit_secret_access_log, so an agent can distinguish it from sibling tools without needing to inspect their schemas.
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 states exactly when to use the tool ('when a tool or agent needs a credential at execution time') and when NOT to use it, naming the alternatives: delimit_secret_store for adding secrets and delimit_secret_access_log for examining audit logs. This gives the agent explicit routing criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
_delimit_secret_implDelimit Secret ImplA
Unified secrets-broker entry point — dispatches to one of five actions.
Manages just-in-time credential access through the local Delimit secrets broker (ai.secrets_broker) instead of bare environment variables or .env files: store a credential once with an access scope, fetch it at execution time with every read recorded to an audit trail, inventory credential metadata without exposing values, revoke on rotation/leak, and read the access log.
When to use: as the single MCP-registered secrets surface (delimit_secret) when the caller wants to pick the operation by name in one call rather than choosing a specific delimit_secret_* alias. When NOT to use: from internal code paths — prefer the specific alias (delimit_secret_store, delimit_secret_get, delimit_secret_list, delimit_secret_revoke, delimit_secret_access_log) so each operation's docstring and arg schema show up at the right call site. Do not use the broker as a general key/value store — it is credential-scoped and every read is audited.
Sibling contrast: each delimit_secret_ wrapper below is a thin alias over this implementation; they exist so the action's docstring lives at the right name. This is the dispatch core. Versus delimit_context_* / delimit_memory_*: those persist plans and notes; this persists access-controlled credentials with a read audit trail.
Storage & access model: credentials are persisted to the local broker store under ~/.delimit/secrets/ (encoded at rest) and returned in cleartext to an authorized caller — the host filesystem is the trust boundary, so protect it accordingly. Scope is enforced at READ time: scope="all" permits any caller; otherwise the requester's agent_type or tool must appear in the credential's comma-separated allow-list. The access log records who/what/when and whether access was granted — it never stores the credential value, and "list" returns metadata only, never values.
Side effects (per action):
"store": WRITES/overwrites the credential under ~/.delimit/secrets/ with its scope and description. A same-name store overwrites silently; there is no version history.
"get": returns the credential value to an authorized requester and appends an access-log entry (granted true/false); on success it updates the credential's access counter / last-accessed timestamp. A scope denial, a missing name, or a revoked credential is logged and returns without a value.
"list": READ-ONLY. Returns credential metadata (name, scope, description, created_by, access_count, revoked, timestamps) — never values. Wrapped via _with_next_steps.
"revoke": WRITES a revoked flag + timestamp and appends a revoke entry to the access log; subsequent "get" calls are denied. Does NOT hard-delete the stored file.
"access_log": READ-ONLY. Returns the access trail (newest first), optionally filtered to one credential name. Wrapped via _with_next_steps. No action is license-gated. Errors are deterministic ({"error": "..."}): a missing required argument or an unknown action short-circuits before the backend call.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Credential name / key. Required for "store", "get", "revoke"; optional filter for "access_log" (empty = all); ignored for "list". Sanitized for filesystem safety. | |
| tool | No | Name of the requesting tool (action="get" only), checked against scope. | |
| scope | No | Comma-separated agent/tool identities permitted to read this credential, or "all" for any requester. Used only by action="store". Default "all". Enforced at read time. | all |
| value | No | The credential to store. Required for action="store"; ignored otherwise. Never echoed back by "store". | |
| action | No | Which secret operation to perform. One of "store", "get", "list", "revoke", "access_log". Default "list". Case- insensitive (lowered + stripped). Other values return a deterministic error. | list |
| agent_type | No | Identity of the requesting agent (action="get" only), checked against scope. | |
| description | No | Human-readable description (action="store" only). Optional but recommended; surfaces in "list" and the audit trail. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (title only), so the description carries the full burden. It discloses per-action side effects, silent overwrites, no version history, revoke-not-delete behavior, read-only guarantees for list/access_log, audit-log behavior, scope enforcement at read time, cleartext return, filesystem trust boundary, and deterministic error handling. This is exceptionally transparent.
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 long, but it is well-structured with clear sections and every section contributes necessary detail for a five-action dispatcher. It is slightly repetitive around the alias relationship and unified entry point, but the density of useful information justifies the 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 — seven parameters, five actions, minimal annotations, and an output schema — the description covers everything an agent needs: storage location, access control model, audit behavior, side effects, limitations, error shape, and what each action returns. Nothing essential is missing.
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 baseline is 3. The description adds value by mapping parameters to actions: name is required for store/get/revoke but only filters access_log, scope is enforced at read time, value is never echoed, and action is case-insensitive. This enriches the parameter semantics beyond the raw 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 identifies a specific verb-and-resource relationship: a unified secrets-broker entry point that dispatches to five named actions (store, get, list, revoke, access_log). It clearly distinguishes itself from the delimit_secret_* aliases and from the delimit_context_* / delimit_memory_* families, so an agent can tell what this tool is and is not.
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 an explicit 'When to use' and 'When NOT to use' section. It names the preferred alternatives (delimit_secret_store, delimit_secret_get, etc.) and the condition that selects them, and it warns against using the broker as a general key/value store. This is unambiguous routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_secret_listDelimit Secret ListARead-onlyIdempotent
List secrets in the broker (metadata only — never values).
When to use: to inventory what credentials are stored without exposing the values themselves. When NOT to use: to retrieve a value (use delimit_secret_get) or to add one (delimit_secret_store).
Sibling contrast: delimit_secret_get returns values (audited); this returns only metadata (name, scope, description).
Side effects: read-only. Calls ai.secrets_broker.list_secrets.
Args: None.
Returns: Dict with key "secrets" containing a list of metadata records, plus next_steps suggestions.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds meaningful behavioral context beyond that: it emphasizes that secret values are never exposed, states side effects as read-only, and reveals the underlying call to ai.secrets_broker.list_secrets. This is strong but not exhaustive; a 4 reflects solid added value without needing to over-credit.
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 well-structured and front-loaded: core purpose first, then usage guidance, sibling contrast, side effects, args, and returns. Every section earns its place and is concise; there is no filler 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?
For a read-only, zero-parameter tool with an output schema, this description is complete. It explains what the tool returns, confirms there are no arguments, clarifies side effects, and gives enough selection guidance against relevant siblings. Nothing an agent needs to invoke it correctly is missing.
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 tool has zero parameters, and the description explicitly states 'Args: None,' which aligns with the empty input schema. With no parameters to document, the schema and description together fully disambiguate invocation requirements. The baseline for zero-parameter tools is 4, and nothing else is needed.
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: 'List secrets in the broker' and immediately clarifies the scope with 'metadata only — never values.' It distinguishes itself from delimit_secret_get and delimit_secret_store, making the tool's purpose unmistakable even within a very large sibling 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 includes explicit 'When to use' and 'When NOT to use' sections, names the exact alternative tools for retrieving values and storing secrets, and adds a sibling contrast explaining the audited versus metadata-only difference. This leaves no ambiguity about tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_secret_revokeDelimit Secret RevokeADestructive
Revoke a secret to prevent any future access.
When to use: after a credential leak or when rotating away from an old secret name. When NOT to use: to delete metadata only — revocation also blocks delimit_secret_get from succeeding.
Sibling contrast: delimit_secret_store creates; this disables.
Side effects: writes a revocation record via ai.secrets_broker.revoke_secret. Subsequent get calls will be denied; the access log is preserved.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Secret name to revoke. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, it discloses the exact side effect: writes a revocation record via ai.secrets_broker.revoke_secret, subsequent get calls denied, and access log preserved. This is richer than the annotation and clarifies what destructive means here.
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 compact and front-loaded, then organized into labeled sections (When to use, When NOT to use, Sibling contrast, Side effects). Every sentence carries distinct information with no filler.
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 single-parameter destructive tool, the description covers use cases, exclusions, sibling relationship, side effects, and downstream behavior. An output schema exists, so return-value documentation is not required here.
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 only parameter is fully described in the schema ('Secret name to revoke. Required.'), so the description does not need to repeat it. It adds no extra format or behavior details beyond the schema, matching the baseline for 100% 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?
Opens with a specific verb and resource ('Revoke a secret to prevent any future access') and explicitly contrasts with delimit_secret_store ('creates; this disables'), which distinguishes it from the closest sibling. An agent knows exactly what this tool does.
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 conditions ('after a credential leak or when rotating away from an old secret name') and a when-NOT-to-use condition ('to delete metadata only') with a concrete consequence (blocks delimit_secret_get). It also names the creating sibling as the alternative, leaving no ambiguity about selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_secret_storeDelimit Secret StoreADestructive
Write a credential into the Delimit secrets broker store.
When to use: when onboarding an API key, OAuth token, or other credential that one or more agents/tools will need at execution time, and you want the access scoped + audit-logged rather than sitting in an environment variable or .env file. Typical pairing: call this once at setup, then call delimit_secret_get from the consuming tool at runtime. When NOT to use: to fetch the value (use delimit_secret_get for just-in-time access with audit), to inspect which secrets exist without revealing values (delimit_secret_list), to disable an existing secret (delimit_secret_revoke), or to read the access audit trail (delimit_secret_access_log). Also: do not use this as a general-purpose key/value store — the broker is credential- scoped and the audit log will fill up with non-credential noise.
Sibling contrast: delimit_secret_store writes; delimit_secret_get reads with JIT access logging; delimit_secret_list shows metadata only (never values); delimit_secret_revoke disables; together they form the broker surface. Compared to writing a value directly to .env, this routes through a scoped, audited broker.
Side effects: invokes ai.secrets_broker.store_secret which persists the value to the broker's at-rest store. The scope field is also persisted and is enforced on every subsequent delimit_secret_get call. There is no append-only history of stored values — a re-store with the same name overwrites. No network egress and no ledger write; the audit trail is the broker's own access log (visible via delimit_secret_access_log), which records the WRITE event as well as later reads.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Secret name (key). Required. | |
| scope | No | Comma-separated agent/tool scopes that may access this secret, or "all" to allow any. Default "all". | all |
| value | No | Secret value (the actual credential). Required. | |
| description | No | Human-readable description for audit trails. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations, explaining that the call persists to an at-rest store, enforces scope on later reads, overwrites on re-store with no append-only history, has no network egress or ledger write, and records a WRITE event in the access log. This fully discloses side effects and gives the agent an accurate model of the operation's consequences.
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 structured into clear labeled sections (When to use, When NOT to use, Sibling contrast, Side effects) and front-loads the core purpose. There is some redundancy between the 'When to use' section and the 'Sibling contrast' paragraph, but every section still adds useful decision-relevant content, and the length is appropriate for a credential-writing tool with side effects.
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, the description does not need to document return values. It covers purpose, usage boundaries, sibling routing, parameter behavior, side effects, persistence semantics, and audit implications. An agent has everything needed to decide when to call this tool and what to expect from invoking it.
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 already covers all four parameters at 100%, so no parameter documentation burden falls on the description. The description still adds useful meaning by emphasizing that 'value' holds the actual credential, that 'name' acts as the key subject to overwrite on re-store, and that 'scope' is persisted and enforced on subsequent delimit_secret_get calls.
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 opens with a specific verb and resource: 'Write a credential into the Delimit secrets broker store.' It clearly distinguishes this write tool from its siblings by naming what each sibling does, e.g., delimit_secret_get reads, delimit_secret_list shows metadata only, and delimit_secret_revoke disables.
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?
This is exemplary: it provides explicit 'When to use' context, a typical pairing pattern with delimit_secret_get, and a thorough 'When NOT to use' list naming each alternative tool. It even warns against using the broker as a general-purpose key/value store, which an agent otherwise might assume.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_security_auditDelimit Security AuditA
Audit security and auto-chain evidence + governance on critical findings.
When to use: as the deploy gate / pre-release security check — combines dependency vulnerability scanning, hardcoded-secret detection, dangerous-pattern checks, and .env-tracked-in-git checks, AND automatically opens a governance task + sends a notification when critical findings are present. When NOT to use: for a baseline scanner pass without auto-chained side effects (use delimit_security_scan), to ingest an external scanner's output (delimit_security_ingest), or to triage existing findings (delimit_security_deliberate).
Sibling contrast: delimit_security_scan is the read-only baseline scanner; delimit_security_ingest accepts external tool output; delimit_security_deliberate triages findings via multi-model panel; this one runs the audit AND auto-chains evidence collection, governance task creation, and notification on criticals.
LED-1278: by default the scanner skips test directories (tests/, tests/, spec/, fixtures/, *_test.py, *.test.tsx, etc.) and suppresses well-known dummy values (AWS canonical example, alphabet-pattern GitHub tokens, leading-1234567890 Slack tokens, trivial JWTs, generic placeholder dict values). Pass include_tests=True to scan test trees too — useful for repos that ship real secrets in fixture files (rare, but legitimate).
Side effects: writes an evidence bundle (always, best-effort). On critical findings, creates a governance task via the governance engine and sends a webhook notification. Optional: SNYK_TOKEN or Trivy in the environment enable enhanced scanning.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | Repository or file path to audit. Default "." (cwd). | . |
| include_tests | No | When True, scan test directories (tests/, __tests__/, spec/, fixtures/, etc.). Default False — test trees are skipped to avoid the canonical fixture-credential FP class (LED-1278). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the sparse annotations (readOnlyHint=false, destructiveHint=false) by disclosing concrete side effects: always writes an evidence bundle (best-effort), and on critical findings creates a governance task and sends a webhook notification. It also reveals the LED-1278 default behavior (skipping test dirs, suppressing dummy values) and the optional SNYK_TOKEN/Trivy enhancement. No contradiction with annotations — readOnlyHint=false correctly matches the disclosed 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?
The description is longer than average but earns its length with clear section headers (When to use, When NOT to use, Sibling contrast, Side effects) and front-loading of the core purpose. Minor redundancy exists between the 'When NOT to use' list and the 'Sibling contrast' paragraph, but the structure keeps it scannable.
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 side effects and a deploy-gate role, the description covers everything needed for correct invocation: purpose, routing, default behavior quirks, side-effect conditions, and optional environment enhancements. The output schema exists, so return-value documentation is already covered by structured data, and the two parameters are fully described.
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 the baseline is 3. The description adds value beyond the schema by explaining the LED-1278 rationale for include_tests and giving guidance on when passing include_tests=True is legitimate (repos shipping real secrets in fixtures). This contextualizes both parameters beyond their raw schema 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 opens with a specific verb+resource and the defining differentiator: 'Audit security and auto-chain evidence + governance on critical findings.' It enumerates the concrete checks performed (dependency scanning, secret detection, dangerous-pattern checks, .env-in-git) and explicitly contrasts with siblings, so an agent can identify it immediately.
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?
Has dedicated 'When to use' and 'When NOT to use' sections that name exact alternatives (delimit_security_scan, delimit_security_ingest, delimit_security_deliberate) and the conditions that select each. The sibling-contrast paragraph reinforces the routing decision. This is the ideal level of usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_security_deliberateDelimit Security DeliberateA
Multi-model triage of security findings (Pro).
When to use: after delimit_security_ingest has loaded findings, to classify each as real risk / false positive / accepted risk / needs immediate action. When NOT to use: to ingest the findings (use delimit_security_ingest) or to scan from scratch (delimit_security_scan).
Sibling contrast: delimit_deliberate is general-purpose multi-model consensus; this is the security-class variant scoped to findings.
Side effects: gated by require_premium. Calls multiple models via the deliberation panel. Updates ledger items with triage verdicts.
Prerequisite: requires Delimit Pro. An unlicensed call returns {"error": ..., "upgrade": "https://delimit.ai/pricing"} without running.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | No | Repository context for the triage. | |
| focus | No | Which findings to triage — "critical" (default), "high", "all". | critical |
| findings | No | JSON string of findings to triage. Empty = pull from the ledger automatically. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, destructiveHint=false), the description discloses side effects: it calls multiple models via the deliberation panel and updates ledger items with triage verdicts. It also explains the Pro prerequisite and the exact unlicensed-call error behavior, which is valuable operational 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?
The description is organized with clear labeled sections (When to use, When NOT to use, Sibling contrast, Side effects, Prerequisite) and no filler. Each sentence adds distinct value, from routing to side effects to failure behavior.
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 required parameters and an existing output schema, the description covers the pipeline context, safety/mutation effects, licensing constraint, and error behavior. An agent has enough to decide when to invoke it and what to expect from an unlicensed 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 description coverage is 100%, so the schema already documents repo, focus, and findings fully. The description does not add parameter-specific detail beyond the schema, which matches the baseline of 3 for 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 opens with a specific verb phrase, 'Multi-model triage of security findings', and enumerates the classification outcomes (real risk / false positive / accepted risk / needs immediate action), so an agent knows exactly what the tool accomplishes. It also distinguishes the tool from delimit_security_ingest, delimit_security_scan, and delimit_deliberate, making it unambiguous among 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 'When to use' and 'When NOT to use' sections state the prerequisite pipeline step (after delimit_security_ingest) and route ingest and scan tasks to the correct siblings. The sibling contrast with delimit_deliberate further clarifies which variant to choose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_security_ingestDelimit Security IngestA
Ingest external security scan output and normalize into ledger findings (Pro).
When to use: after running a scanner externally — Trivy, Semgrep, npm-audit, pip-audit, Snyk, CodeQL — to feed its JSON output into Delimit's canonical schema and gate deploys on unresolved criticals. When NOT to use: to run a scan from scratch (use delimit_security_scan) or to triage findings (delimit_security_deliberate).
Sibling contrast: delimit_security_scan runs the built-in scan; delimit_security_deliberate triages findings; this is the bridge that pulls external scanner output into the same ledger.
Side effects: gated by require_premium. Writes findings to the ledger (creates new items, optionally closes resolved ones). Computes a stable fingerprint per finding to enable diffing.
Prerequisite: requires Delimit Pro. An unlicensed call returns {"error": ..., "upgrade": "https://delimit.ai/pricing"} without running.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | No | "owner/repo" identifier. Empty = auto-detect. | |
| tool | Yes | Scanner name — one of "trivy", "semgrep", "npm-audit", "pip-audit", "snyk", "codeql". Required. | |
| results | Yes | JSON string of scan results, or path to a JSON file. Required. | |
| commit_sha | No | Git SHA the scan ran against. Empty = auto-detect. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses concrete behavioral details: writes findings to the ledger, creates new items, optionally closes resolved ones, computes a stable fingerprint for diffing, is gated by require_premium, and returns a specific unlicensed-call error without running. This fully informs the agent of side effects and failure modes.
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 well-structured with clear sections and front-loaded purpose. It is slightly redundant, repeating the Pro/premium requirement and partially restating sibling contrast, but overall every major section earns its place and the length is justified for the tool's complexity.
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, return-value documentation is not required. The description covers when to use, when not to use, sibling alternatives, side effects, prerequisites, and unlicensed behavior. Nothing critical is missing for an agent to select and invoke this 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 description coverage is 100%, so the input schema already documents all four parameters thoroughly, including allowed scanner names and auto-detect behavior. The description adds useful high-level context about external scanner JSON output but does not contribute meaningfully beyond the schema for individual 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?
The description states a specific verb and resource: 'Ingest external security scan output and normalize into ledger findings.' It immediately distinguishes itself from delimit_security_scan and delimit_security_deliberate by naming the exact bridging role it plays, making the tool's 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?
The description provides explicit 'When to use' and 'When NOT to use' guidance, names the alternative tools (delimit_security_scan, delimit_security_deliberate), and explains the sibling contrast. An agent can reliably decide whether to call this tool or a sibling without further inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_security_scanDelimit Security ScanARead-onlyIdempotent
Scan a repository for security vulnerabilities.
When to use: as a baseline security pass over a repo, before a deploy or a release. When NOT to use: to ingest external scan results (use delimit_security_ingest) or to triage findings (delimit_security_deliberate).
Sibling contrast: delimit_security_ingest accepts external scanner output; delimit_security_deliberate triages findings; this is the built-in scan.
Side effects: read-only on the target. Calls backends.repo_bridge.security_scan.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | Repository or file path. Default "." (cwd). | . |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 useful behavioral context by stating 'Side effects: read-only on the target' and revealing the internal backend call, which goes beyond the structured 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 well-structured with clear headings, front-loads the core purpose, and every sentence adds value. It covers usage, exclusions, sibling contrast, and side effects without 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 simple single-parameter schema, full parameter documentation, robust annotations (read-only, idempotent, non-destructive), and the presence of an output schema, the description covers all necessary context. It clearly explains when to use this tool versus its security-focused siblings.
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 fully documents the single 'target' parameter. The description adds no extra parameter meaning, but with full schema coverage and a simple optional parameter, the 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?
The description states a specific verb and resource: 'Scan a repository for security vulnerabilities.' It also explicitly contrasts itself with sibling tools, distinguishing this built-in scan from ingest and triage tools, so an agent can tell them apart immediately.
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 (baseline security pass before deploy/release), when-not-to-use guidance (don't ingest external results or triage findings), and names the alternative sibling tools. This fully routes the agent to the correct tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_self_repair_daemonDelimit Self Repair DaemonAIdempotent
Control the self-repair watcher daemon (LED-191, internal).
When to use: to start, stop, or inspect the watcher that polls function KPIs and emits founder alerts on breaches. When NOT to use: for general daemon status (use delimit_daemon_status) or inbox / social daemons (delimit_inbox_daemon, delimit_social_daemon).
Sibling contrast: delimit_daemon_status is the autonomous loop's daemon; this is the KPI-watcher daemon. Different processes.
Side effects: action="start" / "stop" mutate daemon state. Idempotent start. Circuit-breakered stop after 3 consecutive pass failures. Honors DELIMIT_SELF_REPAIR_PAUSE=1 at every pass without requiring a daemon restart. Higher modes (diagnose / deliberate / apply / verify) chain through the watcher when configured per function in ~/.delimit/self_repair.yaml.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | 'start' (begin polling), 'stop' (halt polling), 'status' (running / last_pass / breaches_emitted / consecutive_failures). | status |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already set readOnlyHint=false and idempotentHint=true, and description adds matching detail: start/stop mutate state, idempotent start, circuit-breakered stop, environment-pause behavior, and mode chaining. It also mentions config path. 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?
Well structured with labeled sections and front-loaded purpose; all sentences contribute, but it is denser/longer than strictly necessary and could be trimmed without losing key info.
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?
Complete for a one-parameter control tool: covers when, when not, alternatives, side effects, env var, and config path; output schema exists so return values need no description.
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 action with 100% coverage; description adds operational consequences for parameter values: start/stop mutate daemon state, idempotent start, circuit-breakered stop. This is beyond schema's 'begin polling'/'halt polling', though status output is only 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?
Description states a specific verb+resource: control the self-repair watcher daemon, with explicit actions start/stop/inspect and object (KPI watcher emitting founder alerts on breaches). It distinguishes from siblings by naming delimit_daemon_status, inbox/social daemons and noting different processes.
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 when-to-use and when-not-to-use sections; names alternative tools (delimit_daemon_status, delimit_inbox_daemon, delimit_social_daemon) and clarifies the sibling contrast. No inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_semverDelimit SemverARead-onlyIdempotent
Classify a spec change's semver bump (MAJOR/MINOR/PATCH/NONE).
When to use: to deterministically pick the version bump for an API spec change, optionally computing the next version string. When NOT to use: for full lint with policy (use delimit_lint) or a plain change list (delimit_diff).
Sibling contrast: delimit_diff lists changes; delimit_lint adds policy; this maps the diff to a semver verdict only.
Side effects: read-only. Calls backends.gateway_core.run_semver (deterministic classification on top of the diff engine output).
| Name | Required | Description | Default |
|---|---|---|---|
| new_spec | Yes | Path to the proposed OpenAPI spec file. Required. | |
| old_spec | Yes | Path to the baseline OpenAPI spec file. Required. | |
| current_version | No | Optional version string (e.g. "1.2.3") to compute the next version. Default None = no next computed. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/non-destructive behavior, and the description reinforces this with 'Side effects: read-only' while adding new context: it calls backends.gateway_core.run_semver and is deterministic on top of the diff engine output. This goes beyond the annotation metadata without contradicting it.
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?
Every section earns its place: core purpose, usage guidance, sibling contrast, and side effects are all compact and front-loaded. The use of short headings makes it easy to scan without any padding 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?
For a tool with full parameter documentation and an output schema, the description covers all selection-relevant context: what it returns, when to use it, when not to, how it relates to siblings, and side-effect behavior. Nothing an agent needs to pick or invoke this tool correctly is missing.
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 old_spec/new_spec as required paths and current_version as optional. The description's mention of 'optionally computing the next version string' mirrors the schema and adds no new parameter-level detail. Baseline 3 is appropriate when the schema does the heavy lifting.
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?
Opens with a specific verb-resource pair—'Classify a spec change's semver bump'—and names the exact output enum (MAJOR/MINOR/PATCH/NONE), so an agent knows exactly what the tool produces. It also explicitly contrasts itself with delimit_diff and delimit_lint, making sibling differentiation clear.
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?
Has explicit 'When to use' and 'When NOT to use' sections that name delimit_lint and delimit_diff as alternatives. The sibling contrast line further clarifies the boundary: this maps a diff to a semver verdict only, while siblings list changes or add policy.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_senseDelimit SenseA
Review and manage the signal corpus (LED-877).
When to use: to inspect, cluster, or explicitly promote sensed signals into ledger items. Signals live separately from the ledger so noise doesn't pollute it. When NOT to use: to fetch new signals (use the platform-specific sensors like delimit_reddit_scan / delimit_github_scan) or write ledger items directly (delimit_ledger_add).
Sibling contrast: platform sensors capture; this manages the captured corpus and bridges it into the ledger.
Side effects: "promote" writes a new ledger item (via the ledger manager). "freeze" cold-archives a month of signals. "query", "digest", "show", "status" are read-only against ~/.delimit/intel/signals/.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows for query. Default 50. | |
| month | No | YYYY-MM string for "freeze". | |
| action | No | One of "query" (default), "digest", "show", "promote", "freeze", "status". | query |
| ledger | No | Target ledger for promote — "ops" (default) or "strategy". | ops |
| platform | No | Filter source platform — "reddit", "x", "github", "hn". Empty = all. | |
| priority | No | Priority for promoted item — "P0", "P1", "P2". | P2 |
| signal_id | No | SIG-XXXX id for "show" / "promote". | |
| since_days | No | Lookback window in days (query/digest). Default 1. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say readOnlyHint=false and destructiveHint=false, which are coarse. The description adds crucial per-action side effects: 'promote' writes a ledger item, 'freeze' cold-archives a month, and 'query', 'digest', 'show', 'status' are read-only. It also names the storage path, giving the agent a realistic behavioral model 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 well-structured with labeled sections and front-loaded purpose. It is slightly longer than strictly necessary because 'Sibling contrast' partially repeats the 'When NOT to use' content, but every section contributes useful decision and side-effect 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?
For a multi-action tool with eight optional parameters and an output schema, the description covers the corpus boundary, when to use it, when not to use it, alternatives, side effects, and read-only vs write actions. Combined with the fully documented schema, nothing essential is missing for correct selection and 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?
Input schema coverage is 100% and each parameter already has a clear description with defaults and allowed values. The tool description doesn't add parameter-level detail beyond the schema, so the baseline 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: 'review and manage the signal corpus (LED-877).' It clearly distinguishes this tool from platform sensors and ledger write tools by naming them directly, so an agent can tell it apart from delimit_reddit_scan, delimit_github_scan, and delimit_ledger_add.
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' and 'When NOT to use' guidance, names the exact alternative tools for each excluded case, and adds a sibling contrast sentence that captures the boundary: sensors capture; this manages. An agent has clear decision criteria for selecting 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.
delimit_sensor_github_issueDelimit Sensor Github IssueARead-onlyIdempotent
Check a GitHub issue for new comments since the last sensor tick.
When to use: to monitor a specific outreach / tracking issue for new activity, returning a structured signal for routing. When NOT to use: for repo-wide scans (use delimit_github_scan) or one-shot fetch (delimit_resource_get).
Sibling contrast: delimit_github_scan scans many repos for migrations; this watches one issue for new comments.
Side effects: read-only network call via gh CLI. Validates repo format with regex (defense-in-depth). Subject to the confused-deputy guard (_check_repo_allowlist) before fetching.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | Yes | "owner/repo" GitHub repository. Required. | |
| issue_number | Yes | Issue number to monitor. Must be > 0. | |
| since_comment_id | No | Last seen comment id. 0 = all comments. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, and the description reinforces this by stating 'read-only network call via gh CLI.' It adds valuable context beyond the annotations: the regex repo-format validation (defense-in-depth) and the confused-deputy guard (_check_repo_allowlist) that can block the call before fetching. This is genuinely useful failure-mode 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?
Compact and efficiently organized: one-line purpose, then labeled sections for when-to-use, when-not-to-use, sibling contrast, and side effects. Every sentence earns its place and the most decision-critical information (purpose, exclusions) 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?
Complete for a monitored-read tool. An output schema exists to document return values, annotations cover the safety profile, and the description covers usage boundaries, side effects, validation behavior, and the allowlist guard. Nothing an agent needs to call or route this tool correctly is missing.
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 baseline is 3. The description's 'since the last sensor tick' framing gives conceptual meaning to since_comment_id (incremental monitoring), but it does not add concrete parameter-level detail beyond what the schema already documents for repo, issue_number, or since_comment_id. The schema carries the weight here, which is acceptable.
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 opens with a specific verb+resource+scope construction: 'Check a GitHub issue for new comments since the last sensor tick.' It names both alternatives it is not (delimit_github_scan for repo-wide scans, delimit_resource_get for one-shot fetch), making sibling differentiation explicit and immediate.
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' and 'When NOT to use' sections with concrete alternative tool names and the conditions that select them. Also adds a sibling contrast paragraph specifically distinguishing this tool from delimit_github_scan. No inference is required by the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_sensor_github_migrationsDelimit Sensor Github MigrationsARead-onlyIdempotent
Scan GitHub issues/PRs for migration patterns across target repos.
When to use: for competitive intelligence — surface where target repos are migrating between tools (e.g. "switched from X to Y", "replaced X with Y") so the sensing function can act on the signal. When NOT to use: for general sensing/outreach research (use delimit_sense), to pull single-issue intel (delimit_sensor_github_issue), or for broad public-repo polling (delimit_github_scan).
Sibling contrast: delimit_sensor_github_issue tracks a specific issue's state; delimit_github_scan does broad public-repo polling; delimit_sense is the high-level sensing entrypoint; this one detects migration-pattern language specifically.
Side effects: read-only on the target repos via GitHub API. Enforces the per-repo allowlist (LED-881 confused-deputy guard) — refuses non-allowlisted repos. Calls ai.social_target.scan_github_migrations.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max migration signals per repo. Default 20. | |
| repos | Yes | List of GitHub repos in owner/repo format (e.g. ["chatwoot/chatwoot", "cal-com/cal.com"]). Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, and the description adds meaningful behavioral context: it is read-only via the GitHub API, enforces a per-repo allowlist with the LED-881 confused-deputy guard, refuses non-allowlisted repos, and calls ai.social_target.scan_github_migrations. This goes well beyond the structured 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 well-organized with scannable sections: a front-loaded purpose sentence, explicit usage guidance, sibling contrast, and side effects. Every section earns its place and adds actionable context without 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?
Given a high-coverage schema, an output schema, and only two parameters, the description is fully complete. It covers purpose, usage boundaries, sibling differentiation, side effects, allowlist constraints, and internal delegation, so an agent has everything needed to call it 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%, so the input schema already documents the repos and limit parameters fully. The description mentions scanning target repos and migration signals, but it does not add parameter-level detail beyond what the schema provides. Baseline 3 is appropriate here.
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 specific verb, resource, and scope: 'Scan GitHub issues/PRs for migration patterns across target repos.' It further distinguishes itself from sibling tools by name, so an agent can tell it apart from delimit_sensor_github_issue, delimit_github_scan, and delimit_sense without opening schemas.
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 provides 'When to use' and 'When NOT to use' conditions, including named alternatives such as delimit_sense, delimit_sensor_github_issue, and delimit_github_scan. This gives clear routing guidance and leaves no ambiguity about selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_session_handoffDelimit Session HandoffA
Save a session summary for cross-session continuity.
When to use: at the end of a productive session, to leave a structured record the next session can recover. When NOT to use: for richer cross-model state (use delimit_soul_capture, which auto-detects more) or single-line memory (delimit_memory_store).
Sibling contrast: delimit_soul_capture writes a richer "soul" with git state; this writes a structured handoff with explicit fields.
Side effects: writes a handoff record via
ai.ledger_manager.session_handoff. Coerces list inputs from comma
strings via _coerce_list_arg. LED-3731: also refreshes a lightweight
pointer-soul for project_path (default = cwd) so the NEXT
delimit_revive for that project returns THIS handoff's state rather
than a stale older soul.
| Name | Required | Description | Default |
|---|---|---|---|
| summary | Yes | 2-3 sentence summary of the session. Required. | |
| venture | No | Venture context. Empty = auto-detect. | |
| blockers | No | What's blocked and why. | |
| items_added | No | Newly added item ids as list or comma string. | |
| project_path | No | Project path whose revive soul this handoff should refresh. Empty = auto-detect from cwd. | |
| files_changed | No | Key files that were modified. | |
| key_decisions | No | Key decisions or consensus results. | |
| items_completed | No | Completed ledger item ids (e.g. ["LED-164"]) as list or comma string. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by describing side effects: writes a handoff record via ai.ledger_manager.session_handoff, coerces list inputs from comma strings, and refreshes a pointer-soul for project_path which affects future delimit_revive behavior. This discloses meaningful state-changing behavior beyond what readOnlyHint/destructiveHint 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?
The description is longer than average but logically structured with a lead sentence, usage guidance, sibling contrast, and side effects. The internal ticket reference (LED-3731) adds minor noise, but every major section earns its place and the core action 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?
For an 8-parameter tool with an output schema, complete schema coverage, and clear annotations, this description covers the action, alternatives, side effects, and downstream behavioral implications. Nothing needed for correct invocation or sibling differentiation is missing.
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 detailed per-parameter semantics already exist in the schema. The description adds useful context about comma-string coercion and project_path default behavior, but these are also partially implied by the schema and do not fundamentally compensate for missing schema info.
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 a specific action ('Save a session summary') with a clear resource and purpose (cross-session continuity). It also distinguishes the tool from siblings by explicitly contrasting it with delimit_soul_capture and delimit_memory_store.
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' and 'When NOT to use' guidance, including named alternatives (delimit_soul_capture, delimit_memory_store) and the conditions that would select each. This gives the agent directly actionable routing information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_session_historyDelimit Session HistoryARead-onlyIdempotent
Load recent session handoffs for context recovery.
When to use: at session start to see what previous sessions left — items completed, key decisions, blockers from the last N runs. When NOT to use: to write a handoff (use delimit_session_handoff) or for richer cross-model state (delimit_revive).
Sibling contrast: delimit_session_handoff writes; delimit_revive reads soul state; this reads structured handoffs.
Side effects: read-only. Calls ai.ledger_manager.session_history.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of recent sessions to return. Default 5. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description reinforces this with 'Side effects: read-only' while adding the implementation target (ai.ledger_manager.session_history) and what the recovered content consists of. It stops short of describing edge cases or empty-state behavior, so not a 5.
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 front-loaded with a one-sentence summary followed by clearly labeled sections for usage, exclusions, sibling contrast, and side effects. Every line earns its place; there is no filler or repetition of the 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 simple read-only tool with one optional parameter, an output schema, and annotations covering safety, the description covers selection context, usage timing, sibling distinctions, and side effects. Nothing needed for correct invocation is missing.
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 only parameter, limit, is already documented in the schema with its default. The description's 'last N runs' is largely a restatement of 'recent sessions' and adds no new constraints such as minimum/maximum values or ordering rules.
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 opens with a specific action and resource: 'Load recent session handoffs for context recovery.' It then contrasts itself with siblings (delimit_session_handoff writes, delimit_revive reads soul state), making its role 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?
It provides an explicit 'When to use' section (session start, to recover completed items, decisions, blockers) and an explicit 'When NOT to use' section naming the correct alternatives. This removes ambiguity for an agent selecting between read and write handoff tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_siemDelimit SiemA
Manage SIEM streaming for audit-event forwarding (Splunk/Datadog/etc.).
When to use: to inspect or configure where Delimit's audit events stream — Splunk, Datadog, EventBridge, generic webhooks. When NOT to use: for one-shot notifications (use delimit_notify) or inbox handling (delimit_notify_inbox).
Sibling contrast: delimit_notify sends to humans; this configures structured-log streaming to SIEM endpoints.
Side effects: action="configure" / "forward" / "test" write to the configured SIEM endpoints (network calls). action="status" is read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| event | No | JSON string of an event (for forward / test). | |
| action | No | One of "status" (default), "configure", "test", "forward". | status |
| enabled | No | "true" or "false" (for configure). | |
| settings | No | JSON string of settings (for configure). | |
| integration | No | One of "splunk", "datadog", "eventbridge", "webhook" (for configure). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly discloses action-dependent side effects: configure/forward/test write to SIEM endpoints via network calls, while status is read-only. This adds behavior beyond the readOnlyHint=false annotation and gives the agent a clear safety/impact model.
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 front-loaded with the core purpose and uses labeled sections for use, exclusion, sibling contrast, and side effects. It is compact with no redundant 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 the output schema exists, the rich schema descriptions for all 5 optional parameters, and the annotations, the description covers purpose, exclusions, alternative tools, and side effects. Nothing critical for an agent to select and invoke the tool correctly is missing.
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 each parameter is already documented in the input schema. The description reinforces that actions have side effects but does not add new parameter-level semantics beyond what the schema provides, so 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?
States a specific verb and resource: managing SIEM streaming for audit-event forwarding, naming Splunk/Datadog/EventBridge/webhooks. It also differentiates itself from delimit_notify and delimit_notify_inbox, so an agent can distinguish it from nearby 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?
Gives explicit 'When to use' and 'When NOT to use' guidance with named alternatives (delimit_notify for one-shot notifications, delimit_notify_inbox for inbox handling). The sibling contrast further clarifies when this tool is the right choice: structured-log streaming vs human notifications.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_social_accountsDelimit Social AccountsARead-onlyIdempotent
List configured social media accounts.
When to use: to inventory which Twitter/X accounts have credentials available before drafting or scheduling a post. When NOT to use: to draft content (use delimit_social_generate) or publish (delimit_social_post).
Sibling contrast: delimit_social_generate drafts; delimit_social_post publishes; this lists who can publish.
Side effects: read-only. Calls ai.social.list_twitter_accounts, which scans ~/.delimit/secrets/twitter-.json files.
Args: None.
Returns: Dict with "accounts" list and "count" plus next_steps.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, covering the safety profile. The description adds meaningful context beyond that: 'Calls ai.social.list_twitter_accounts, which scans ~/.delimit/secrets/twitter-<handle>.json files.' This discloses the data source and underlying implementation, letting the agent infer scope (only locally configured accounts) and potential failure modes (missing secret files). It doesn't dwell on edge cases, but it adds real 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 uses labeled sections (When to use, When NOT to use, Sibling contrast, Side effects, Args, Returns) that make it scannable and every section earns its place. The opening line states the core purpose, and nothing is redundant or padded. This is an exemplary structure for an MCP tool description.
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 zero-parameter read-only tool, the description covers everything an agent needs: purpose, usage timing, sibling routing, side effects, underlying data source, the fact that there are no arguments, and the return shape ('Dict with accounts list and count plus next_steps'). The output schema exists and the description confirms the return format. Nothing material is missing.
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 tool has zero parameters, which carries a baseline of 4 per the rubric. The description explicitly states 'Args: None,' which is genuinely useful — it prevents an agent from hallucinating optional parameters like a platform filter or handle argument that the tool does not accept.
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 opens with a specific verb and resource — 'List configured social media accounts' — and then explicitly differentiates itself from siblings: 'delimit_social_generate drafts; delimit_social_post publishes; this lists who can publish.' An agent can immediately tell exactly what this tool does and how it differs from its direct siblings without opening any schema.
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 an explicit 'When to use' section ('to inventory which Twitter/X accounts have credentials available before drafting or scheduling a post') and a 'When NOT to use' section naming the exact alternatives (delimit_social_generate for drafting, delimit_social_post for publishing). This is textbook usage guidance — the condition and the routing are both explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_social_approveDelimit Social ApproveA
Manage social media drafts — list, approve, reject (Pro).
When to use: to clear the social drafts queue created by delimit_social_post(draft=True). When NOT to use: to draft (use delimit_social_post(draft=True)) or inspect history (delimit_social_history).
Sibling contrast: delimit_social_post creates the draft; this lists / approves / rejects them.
Side effects: action="approve" actually posts via the social backend (network write). action="reject" discards. action="list" is read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | "list" (default), "approve", or "reject". | list |
| draft_id | No | Required for approve / reject. Returned by delimit_social_post(draft=True). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by disclosing action-dependent side effects: approve performs a network write, reject discards the draft, and list is read-only. This is especially valuable because the tool-level annotations (readOnlyHint=false, destructiveHint=false) cannot express per-action 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?
The description is compact, well-organized, and front-loaded with the core purpose before structured guidance sections. Each sentence earns its place: when to use, when not to use, sibling contrast, and side effects. The minor repetition about delimit_social_post reinforces rather than bloats the message.
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 mixed read/write/discard actions, the description covers all essential contexts: queue origin, alternative tools, per-action side effects, and the source of the required draft_id. Because an output schema exists, the absence of return-value details is acceptable.
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 input schema already documents both parameters, including that draft_id is required for approve/reject and is returned by delimit_social_post(draft=True). The tool description adds little parameter-level meaning beyond the schema, so the 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 opens with a specific verb-plus-resource statement: 'Manage social media drafts — list, approve, reject'. It enumerates the exact operations, making the tool's scope immediately clear. It also distinguishes itself from siblings by explicitly contrasting with delimit_social_post, which creates the drafts.
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 ('to clear the social drafts queue created by delimit_social_post(draft=True)') and when-not-to-use guidance by naming delimit_social_post and delimit_social_history as alternatives. This leaves no ambiguity about when the agent should select this tool over its siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_social_daemonDelimit Social DaemonA
Control the social sensing daemon (Pro).
When to use: to start, stop, or inspect the autonomous social discovery daemon that scans Reddit/X/HN every 15 min. When NOT to use: to run a one-shot scan (use delimit_social_target) or read the inbox (delimit_notify_inbox).
Sibling contrast: delimit_social_target is one-shot; this controls the long-running daemon.
Side effects: action="start" / "stop" mutate daemon state. The daemon scans, deduplicates, and emits HTML draft emails. Calls ai.social_daemon.{start_daemon, stop_daemon, get_daemon_status}.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | "start", "stop", or "status" (default). | status |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide readOnlyHint=false and destructiveHint=false, but the description adds substantive behavioral context: start/stop mutate daemon state, the daemon autonomously scans/deduplicates and emits HTML draft emails, and it maps to ai.social_daemon.{start_daemon, stop_daemon, get_daemon_status}. This goes well beyond the annotation flags and 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?
Every labeled section earns its place: when-to-use, when-not-to-use, sibling contrast, side effects, and internal method mapping. Despite being detailed, the description is scannable, front-loaded, and contains no filler.
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-parameter tool with an output schema, this is complete: action semantics are clear, exclusions are explicit, side effects are disclosed, and sibling tools are referenced. An agent has everything needed to select and invoke it 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 100%, so the action parameter is already documented; the description still adds value by tying 'status' to inspection and noting that 'start'/'stop' mutate daemon state. The internal method mapping provides extra semantic grounding for the 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?
Description opens with a specific verb and resource, 'Control the social sensing daemon (Pro)', and enumerates the supported start/stop/inspect operations within an explicit every-15-min scanning scope. It also differentiates itself from delimit_social_target as the one-shot alternative, so an agent can tell them apart without opening the schema.
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?
Contains explicit 'When to use' and 'When NOT to use' sections that name delimit_social_target for one-shot scans and delimit_notify_inbox for inbox reads. The sibling-contrast line further reinforces the long-running daemon versus one-shot boundary, leaving no ambiguity about when to invoke this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_social_generateDelimit Social GenerateARead-onlyIdempotent
Generate a social media post draft (no posting) (Pro).
When to use: to draft a tweet for review before manual or automated posting. When NOT to use: to actually publish (use delimit_social_post or delimit_content_publish) or to manage targets (delimit_social_target_config).
Sibling contrast: delimit_social_post publishes a draft; this only generates one.
Side effects: read-only / draft. Calls ai.social.generate_post.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | Post category — "tip" (default), "changelog", "insight", or "engagement". | tip |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 useful behavioral context beyond that: it only creates a draft, never publishes, and calls ai.social.generate_post. This meaningfully supplements the 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 compact, well-structured, and front-loaded with the core purpose before diving into usage guidance. Every sentence provides useful information 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?
The tool is simple, has only one optional parameter, and has an output schema. Annotations cover safety semantics, and the description covers purpose, usage boundaries, sibling contrast, and side effects. Nothing critical is missing for an agent to invoke it 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%, and the single optional category parameter is already fully documented in the schema. The description does not add parameter-level detail, but it does not need to because the schema carries the weight.
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 social media post draft without posting, which is a specific verb and resource. It also distinguishes itself from delimit_social_post and delimit_content_publish, so an agent can tell them apart immediately.
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 says when to use it (drafting a tweet for review) and when NOT to use it (publishing, managing targets), and names the alternative tools. This leaves no ambiguity about tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_social_historyDelimit Social HistoryARead-onlyIdempotent
View recent social media post history (Pro).
When to use: to recall prior posts/comments for context when drafting follow-ups or DM replies — Reddit entries include thread context. When NOT to use: to draft new posts (use delimit_social_generate) or scan targets (delimit_social_target).
Sibling contrast: delimit_social_generate drafts; delimit_social_post publishes; this reads what was already posted.
Side effects: read-only. Calls ai.social.get_post_history.
| Name | Required | Description | Default |
|---|---|---|---|
| user | No | Filter by Reddit user we interacted with (e.g. "coolinjapan001"). | |
| limit | No | Max entries to return. Default 20. | |
| platform | No | Filter by "twitter" or "reddit". Empty = all. | |
| subreddit | No | Filter by subreddit (e.g. "r/vibecoding"). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds value beyond annotations by revealing the underlying call (ai.social.get_post_history), explicitly stating 'Side effects: read-only,' and noting that Reddit entries include thread context. This is useful behavioral context, though it could go further with pagination or filtering details.
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 well-structured with short labeled sections (When to use, When NOT to use, Sibling contrast, Side effects) that make scanning easy. Every sentence carries functional information, with no filler or redundant restatements of the title. It is dense but appropriately sized for the amount of guidance it provides.
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 purpose, usage conditions, exclusions, sibling relationships, and side effects. With a 100% documented schema and an output schema present, nothing essential for correct invocation is missing. The note about thread context also prepares the agent for the shape of returned Reddit entries. The tool is fully contextualized.
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 all four parameters have clear descriptions in the schema. The tool description does not add parameter-level meaning beyond what the schema already provides, so the baseline of 3 applies. No parameter explanation is missing, but the description contributes no extra semantic enrichment.
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 opens with a specific verb and resource: 'View recent social media post history.' It also explicitly differentiates from siblings by stating 'this reads what was already posted,' making it unmistakably distinct from delimit_social_generate and delimit_social_post. The purpose is fully clear.
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 an explicit 'When to use' section with concrete use cases (recalling prior posts/comments for follow-ups and DM replies) and an explicit 'When NOT to use' section naming delimit_social_generate and delimit_social_target. The sibling contrast further clarifies role boundaries, leaving no ambiguity about when to select this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_social_postDelimit Social PostA
Post to social media (Twitter / Reddit) (Pro).
When to use: when the AI drafts a social post, it MUST call this immediately (auto-trigger rule). Email approval flow handles human review. When NOT to use: just to generate (use delimit_social_generate) or to inspect history (delimit_social_history).
Sibling contrast: delimit_social_generate is draft-only; delimit_social_approve manages the queue; this is the actual post path.
Side effects: when draft=True, queues for delimit_social_approve. Otherwise posts via the social backend. Subject to rate cap: 2 original posts per hour, 24 per day (founder-approved 2026-04-30). Override via DELIMIT_HOURLY_TWEETS / DELIMIT_DAILY_TWEETS env. Sends approval email with the registry_draft_id for inbox-daemon matching.
IMPORTANT - AUTO-TRIGGER RULE: When the AI drafts a social post, it MUST call this tool immediately. Never ask "want me to send this?" — just call the tool. The email-based approval flow handles human review.
Categories: tip, changelog, insight, engagement. Leave text empty to auto-generate from templates. Every post provides value - tips, insights, governance wisdom. Rate cap: 2 original posts per hour, 24 per day (founder-approved 2026-04-30). Override via DELIMIT_HOURLY_TWEETS / DELIMIT_DAILY_TWEETS.
IMPORTANT - Platform tone rules (these are DIFFERENT per platform):
Twitter: confident technical brand. Direct, professional, ALWAYS POSITIVE. Celebrate wins and progress. Never complain or air gaps publicly. No em dashes or en dashes. Default to insight-first with no CTA unless source-grounded.
Reddit: helpful builder voice. Grounded, concise, never salesy. Default to no Delimit mention unless directly necessary and source-grounded. NO bullet points/lists/bold/em dashes. 2-3 sentences max.
LinkedIn: professional hook + insight + CTA
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Tweet text. Leave empty to auto-generate. | |
| draft | No | If True, save as draft for approval instead of posting immediately. | |
| account | No | Twitter handle (without @) to post from. Empty = default account. | |
| context | No | WHY this post should be made. Strategic reasoning shown in the approval email. | |
| category | No | Content category for auto-generation. | |
| platform | No | Social platform (twitter). | |
| reply_to_id | No | Tweet ID to reply to (creates a reply). | |
| quote_tweet_id | No | Tweet ID to quote (creates a quote tweet). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses side effects (queuing when draft=True, immediate posting otherwise), rate caps with environment overrides, and approval-email behavior with registry_draft_id. Annotations only say readOnlyHint=false and destructiveHint=false, so the description adds substantial operational context. It does not contradict 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 well-structured with headers and bullets, but it is overlong and repeats the rate cap and auto-trigger rule nearly verbatim. A leaner version would be easier to consume, though the key information 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?
Covers when to use, when not to use, side effects, approval flow, rate caps, categories, and per-platform tone. The only material gap is the platform inconsistency between the prose ('Twitter / Reddit', LinkedIn rules) and the schema's twitter-only platform parameter; otherwise an agent has enough to invoke 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?
The input schema already covers all 8 parameters at 100%, so the baseline is 3. The description adds useful category values and auto-generation behavior, but its platform guidance (Reddit/LinkedIn tone rules) conflicts with the schema's platform parameter description ('Social platform (twitter)'), which keeps it from rising 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?
Opens with 'Post to social media (Twitter / Reddit) (Pro)' — a specific verb and resource — and immediately contrasts with delimit_social_generate and delimit_social_history, so an agent can tell this is the actual posting tool. The sibling contrast removes ambiguity about what this tool is not.
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?
Contains dedicated 'When to use' and 'When NOT to use' sections, names the alternatives (delimit_social_generate, delimit_social_history, delimit_social_approve), and encodes an explicit auto-trigger rule. This is unambiguous routing guidance beyond anything the schema provides.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_social_targetDelimit Social TargetA
Scan platforms for demand signals / engagement opportunities (Pro).
When to use: mode="demand_signal" (recommended under SHIFT-1) to research which topics/repos show API-governance / breaking-change pain and feed the INTERNAL report-topic backlog — the input to choosing the next public worked-example report. mode="engagement" (legacy) finds posts a venture could engage with. When NOT to use: to fetch one X tweet (use delimit_x_fetch) or drafts (delimit_social_generate).
Sibling contrast: delimit_social_target_config configures which platforms to scan; delimit_x_fetch is single-tweet; this is the multi-platform scanner.
Side effects: read-only network scans by default. With mode="demand_signal" (LED-3729) scored results are written to the local report-topic backlog — an internal research list, NOT outbound; nothing is posted or contacted. With draft_replies=True, calls delimit_social_post(draft=True) for "reply" targets. With create_ledger=True, calls delimit_ledger_add for "strategic" targets. Deduplicates across runs.
SHIFT-1 NOTE (LED-3729): under the anonymity constitution, brand-account reply/DM prospecting is forbidden, so engagement targets are mostly un-actionable. Prefer mode="demand_signal": a "target" becomes a demonstrated public question/pain to answer with a BROADCAST report, not a person to contact. The produced artifact is a public report — squarely in-bounds. Do NOT chain scan results into outbound replies.
Scans X, Reddit (RapidAPI), HN, Dev.to, GitHub. NamePros flagged as manual_check_needed (no API). Run in a /loop for continuous discovery.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | "engagement" (default, legacy behavior) or "demand_signal" to route scan results into the INTERNAL report-topic backlog instead of drafting outbound. LED-3729. | engagement |
| limit | No | Max targets per platform. | |
| action | No | "scan" to discover targets, "list" to show recent, "stats" to show counts, "backlog" to show the report-topic backlog. | scan |
| keywords | No | Extra keywords to search for beyond venture topics. | |
| ventures | No | Comma-separated ventures to scan for. Empty = all. | |
| platforms | No | Comma-separated platforms to scan (x, hn, devto, reddit, github, namepros). | x,hn,devto,reddit,github |
| create_ledger | No | If True, create ledger items for "strategic" targets. | |
| draft_replies | No | If True, auto-draft social posts for "reply" targets. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the sparse annotations, the description discloses default read-only behavior, conditional writes to an internal backlog, delegation to delimit_social_post and delimit_ledger_add, deduplication, platform API limitations, and explicit 'NOT outbound' constraints. It fully informs the agent of side effects and policy boundaries.
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 definition is well-structured and front-loaded, but it is quite long and repeats the demand_signal preference and sibling comparisons in multiple places. Most content is valuable, but tighter editing would improve 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 8-parameter surface, output schema presence, and complex policy context, the description covers modes, platform coverage, side effects, dedup behavior, and operating model thoroughly. Nothing an agent needs to call this safely and correctly is missing.
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 baseline is 3. The description adds extra value by explaining the behavioral significance of mode='demand_signal' and the side effects of draft_replies and create_ledger, going beyond the schema's field-level 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 opens with a specific action and resource: 'Scan platforms for demand signals / engagement opportunities.' It clearly distinguishes the two modes and contrasts the tool with delimit_x_fetch and delimit_social_target_config, making its 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?
The description gives explicit when-to-use guidance for both modes, explicitly states when NOT to use the tool, names the alternatives to use instead, and adds a policy directive to prefer demand_signal mode. This is exemplary routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_social_target_configDelimit Social Target ConfigA
Configure social target scanning platforms.
When to use: to inspect / update which platforms the social-target scanner uses, or to add subreddits a venture should scan. When NOT to use: to run a scan (use delimit_social_target) or drafts (delimit_social_generate).
Sibling contrast: delimit_social_target runs scans; this configures which platforms to scan.
Side effects: action="update" / "add_subreddits" write to the target config. action="status" / "detect" are read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | "status" (default), "detect", "update", "add_subreddits". | status |
| enabled | No | Enable/disable on update. Default True. | |
| platform | No | Platform key — "x", "reddit", "github", "hn", "devto", "namepros". | |
| provider | No | Provider name — "twttr241", "xai", "proxy", "gh_cli", etc., for update. | |
| subreddits | No | Comma-separated subreddits for add_subreddits. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only state readOnlyHint=false and destructiveHint=false, which is generic. The description adds precise behavioral detail: actions 'update' and 'add_subreddits' write to the config, while 'status' and 'detect' are read-only. This is exactly the kind of side-effect transparency an agent 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 compact, well-organized into labeled sections, and every sentence earns its place. It front-loads the core purpose before moving to usage, exclusions, sibling contrast, and side effects without 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?
For a tool with 5 optional parameters, full schema coverage, and an output schema, the description covers the essential decision points: when to use, when not to use, sibling relationships, and side effects. A small gap is that the 'detect' action's exact behavior is not elaborated, but the schema and output schema cover enough for successful 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%, so the baseline is 3. The description adds value beyond the schema by mapping action values to behavior (write vs read-only) and clarifying the purpose of subreddit configuration. It does not fully describe every parameter interaction, but it meaningfully supplements 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 states a specific action and resource: 'Configure social target scanning platforms' and elaborates with inspect/update platforms and add subreddits. It explicitly distinguishes this tool from delimit_social_target, which runs scans, so an agent can immediately tell them apart.
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 explicit when-to-use guidance ('to inspect / update which platforms...'), when-not-to-use guidance ('to run a scan...'), and names the correct alternative tools. The sibling contrast line reinforces the routing decision without ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_soul_captureDelimit Soul CaptureA
Capture session state as a 'soul' for cross-model resurrection.
When to use: at session end or when context gets full, to save what you're working on so the next session in any model can pick up where you left off. When NOT to use: for general memory writes (use delimit_memory_store) or full handoff orchestration (delimit_session_handoff).
Sibling contrast: delimit_session_handoff writes a structured handoff for the next session; this writes a richer "soul" with git state and active task pointers, used by delimit_revive.
Side effects: writes a soul record via ai.session_phoenix.capture_soul. Auto-detects git state and the current model. Splits comma-string inputs into lists internally.
| Name | Required | Description | Default |
|---|---|---|---|
| blockers | No | Comma-separated blockers. | |
| decisions | No | Comma-separated key decisions made this session. | |
| next_steps | No | Comma-separated next steps. | |
| active_task | No | What you're currently working on (one line). | |
| key_context | No | Comma-separated important context for next session. | |
| task_status | No | One of "in_progress", "blocked", "almost_done". | in_progress |
| tokens_used | No | Estimated tokens consumed this session. | |
| project_path | No | Project path to capture the soul for. Empty = auto-detect from cwd. | |
| context_fullness | No | 0.0-1.0 representing context-window fullness. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite readOnlyHint=false and destructiveHint=false already permitting writes, the description adds critical behavioral detail: it writes a soul record via ai.session_phoenix.capture_soul, auto-detects git state and current model, and splits comma-string inputs into lists. These are non-obvious behaviors that meaningfully exceed annotation coverage.
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 well-structured with clear section headers, front-loaded purpose, and zero filler. Every sentence provides actionable information: when to use, when not to use, sibling contrast, and side effects. It is longer than minimal but each part 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 tool has 9 optional parameters and an output schema, the description covers the essential decision-making context: trigger conditions, exclusions, alternative tools, side effects, and internal transformations. An agent can correctly select and invoke this tool based solely on this description plus the 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 100%, so the baseline is 3. The description adds value by explicitly stating that comma-string inputs are split into lists internally, which clarifies the semantics of blockers, decisions, next_steps, and key_context beyond their schema descriptions. It also notes auto-detection behavior for project_path, aligning with the schema's 'Empty = auto-detect' note.
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 opens with a specific verb and resource: 'Capture session state as a soul', and clarifies the cross-model resurrection purpose. It explicitly contrasts with delimit_session_handoff and names delimit_revive as the consumer, making sibling differentiation clear without needing to open schemas.
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' and 'When NOT to use' guidance, including concrete alternative tools: delimit_memory_store for general memory writes and delimit_session_handoff for structured handoffs. This leaves no ambiguity about when an agent should select this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_spec_healthDelimit Spec HealthARead-onlyIdempotent
Score an OpenAPI spec on quality dimensions (0-100, A-F grade).
When to use: for quick spec quality checks during onboarding or review — completeness, security, consistency, documentation, best practices. When NOT to use: as a breaking-change gate (use delimit_lint) or raw diff (delimit_diff).
Sibling contrast: delimit_lint compares two specs; this scores one spec on its own merits.
Side effects: read-only. Calls backends.gateway_core.run_spec_health. Works on any valid OpenAPI 3.x or Swagger 2.0 spec.
| Name | Required | Description | Default |
|---|---|---|---|
| spec | Yes | Path to an OpenAPI spec file (YAML or JSON). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so safety is covered. The description adds valuable behavior context: it notes the tool is read-only, calls backends.gateway_core.run_spec_health, and supports any valid OpenAPI 3.x or Swagger 2.0 spec, which goes 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 well-structured with distinct sections for purpose, usage, exclusions, sibling contrast, and side effects. It is front-loaded with the core behavior and contains no redundant or filler content; every sentence 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?
The description covers purpose, usage criteria, exclusions, alternatives, side effects, internal backend call, and supported spec versions. With an output schema present and annotations covering safety, nothing essential is missing for an agent to select and call this 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 100%, so the schema already documents the single 'spec' parameter. The description adds meaning by defining what 'valid spec' means — OpenAPI 3.x or Swagger 2.0 — which helps clarify acceptable input values beyond the schema's 'Path to an OpenAPI spec file'.
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 opens with a specific verb and resource: 'Score an OpenAPI spec on quality dimensions (0-100, A-F grade).' It clearly distinguishes this tool from delimit_lint by explaining that delimit_lint compares two specs while this one scores a single spec on its own merits.
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 the tool ('quick spec quality checks during onboarding or review') and when NOT to use it, naming delimit_lint for breaking-change gates and delimit_diff for raw diffs. This gives an agent clear routing guidance among nearby siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_story_accessibilityDelimit Story AccessibilityARead-onlyIdempotent
Scan HTML/JSX/TSX for WCAG accessibility issues.
When to use: as a CI gate or pre-merge check on UI changes for common a11y problems — missing alt, missing labels, empty buttons, heading order, aria-hidden on focusable elements. When NOT to use: for responsive layout (use delimit_design_validate_responsive) or visual regression (delimit_story_visual_test).
Sibling contrast: delimit_design_validate_responsive checks layout; this checks WCAG.
Side effects: read-only static analysis. Calls backends.ui_bridge.story_accessibility_test.
| Name | Required | Description | Default |
|---|---|---|---|
| standards | No | WCAG standard — "WCAG2A", "WCAG2AA" (default), "WCAG2AAA". | WCAG2AA |
| project_path | Yes | Project path to scan. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, and the description reinforces this with 'read-only static analysis.' It also adds useful behavioral context beyond the annotations: the scan targets HTML/JSX/TSX and calls backends.ui_bridge.story_accessibility_test. This adds real transparency without contradicting the structured metadata.
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 well-structured with front-loaded purpose and clear labeled sections. It is slightly longer than strictly necessary because 'Sibling contrast' partially repeats the information already given in 'When NOT to use,' but the organization makes it easy for an agent to parse, so it remains efficient rather than bloated.
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 two-parameter read-only tool with a fully documented input schema, an output schema, and explicit annotations, the description is complete. It covers what the tool does, when to use it, when not to use it, named alternatives, side effects, and scope. Nothing essential for correct invocation is missing.
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%, with both standards and project_path clearly documented in the schema itself. The description does not add parameter-level semantics beyond the schema, so the baseline of 3 is appropriate; it neither improves nor harms parameter understanding.
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 opens with a specific verb and resource: 'Scan HTML/JSX/TSX for WCAG accessibility issues.' It enumerates concrete problem types (missing alt, missing labels, empty buttons, heading order, aria-hidden on focusable elements), and explicitly distinguishes itself from the layout-focused sibling, making purpose and scope 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?
The description gives explicit when-to-use context ('CI gate or pre-merge check on UI changes'), explicit when-not-to-use conditions, and names the exact alternatives (delimit_design_validate_responsive for layout, delimit_story_visual_test for visual regression). This is model routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_story_buildDelimit Story BuildA
Build a Storybook static site (or return setup guidance).
When to use: to build the Storybook static site for an existing project, e.g. for hosting on a docs site. When NOT to use: to write stories (use delimit_story_generate) or run a11y checks (delimit_story_accessibility).
Sibling contrast: delimit_story_generate writes stories; delimit_story_accessibility audits; this builds the static site.
Side effects: when Storybook is configured, invokes the build via backends.ui_bridge.story_build (subprocess writes the static site under output_dir). When not configured, returns setup guidance instead.
| Name | Required | Description | Default |
|---|---|---|---|
| output_dir | No | Output directory. None = Storybook default. | |
| project_path | Yes | Project path. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description clearly discloses the side effect: when Storybook is configured, it invokes backends.ui_bridge.story_build via subprocess and writes the static site under output_dir. It also reveals the conditional behavior of returning setup guidance when not configured, going well beyond the sparse readOnlyHint/destructiveHint 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 well-structured with clear sections and front-loads the core purpose in the first sentence. Every section — when to use, when not, sibling contrast, side effects — adds necessary decision and behavior information without filler.
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 build tool with two parameters, an output schema, and simple annotations, the description covers the essential context: prerequisites, alternative tools, side effects, and fallback behavior. Nothing an agent needs to call it correctly is missing.
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 the baseline is 3. The description adds meaningful context by tying output_dir to the subprocess write destination and implying project_path refers to an existing Storybook project, which is more than the schema alone 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 opens with a specific verb and resource: 'Build a Storybook static site'. It also covers the conditional fallback ('or return setup guidance') and explicitly contrasts itself with delimit_story_generate and delimit_story_accessibility, making its unique role 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?
The description has an explicit 'When to use' section, a 'When NOT to use' section naming the alternative tools, and a direct sibling contrast. An agent knows exactly when to pick this tool over the closely related delimit_story_generate and delimit_story_accessibility.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_story_generateDelimit Story GenerateA
Generate a .stories.tsx file for a UI component (no Storybook required).
When to use: to scaffold per-variant stories for a React/TSX component without installing the full Storybook toolchain. When NOT to use: for accessibility checks (use delimit_story_accessibility) or component scaffolding from scratch (delimit_design_generate_component).
Sibling contrast: delimit_design_generate_component creates the component; this generates its stories file. Together they form a component-first authoring path.
Side effects: writes a new .stories.tsx file next to the component. Coerces variants from a comma string to a list via _coerce_list_arg.
| Name | Required | Description | Default |
|---|---|---|---|
| variants | No | Variants to generate (e.g. "Default,WithChildren"). Default = ["Default", "WithChildren"]. | |
| story_name | No | Custom story name. Default = component name. | |
| component_path | Yes | Path to the component (.tsx) file. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate non-read-only and non-destructive. The description adds valuable side-effect disclosure: it writes a new .stories.tsx file next to the component and coerces variants via _coerce_list_arg. It could also state what happens if the target file already exists, but the provided behavior is still solid.
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 well-organized with clear sections: purpose, when/how to use, sibling contrast, and side effects. Every sentence contributes useful information without 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?
Covers purpose, usage boundaries, side effects, and variant coercion. An output schema exists, so return-value documentation is not required. The only minor gap is whether an existing .stories.tsx file is overwritten, but overall the description is sufficiently complete 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%, so the baseline is 3. The description adds extra meaning by explaining that variants can be supplied as a comma string and are coerced to a list, which is not evident from the schema alone.
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 specific verb and resource: 'Generate a .stories.tsx file for a UI component.' It also clarifies the Storybook-free context and contrasts with delimit_design_generate_component, so an agent can distinguish it from 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?
Provides explicit 'When to use' and 'When NOT to use' guidance, naming alternative tools (delimit_story_accessibility and delimit_design_generate_component). This leaves no ambiguity about routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_story_visual_testDelimit Story Visual TestA
Run visual regression test — screenshot vs stored baseline.
When to use: as a CI gate after UI changes, to catch unintended visual regressions vs a stored baseline. Auto-creates the baseline on first run. When NOT to use: for a11y checks (use delimit_story_accessibility) or one-off screenshots (delimit_screenshot).
Sibling contrast: delimit_screenshot is one image without baseline; delimit_story_accessibility audits HTML; this compares against a stored baseline.
Side effects: writes baseline images on first run; subsequent runs are read-only against the baseline. Falls back to Puppeteer (screenshot only) when Playwright is not installed.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL to screenshot. | |
| threshold | No | Diff threshold (0.0-1.0). Default 0.05. | |
| project_path | No | Project path for baseline storage. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say readOnlyHint=false and destructiveHint=false; the description adds the critical nuance that the first run writes baseline images while subsequent runs are read-only against the baseline. It also discloses the Puppeteer fallback when Playwright is unavailable. These are genuine behavioral disclosures beyond what annotations convey, and they are consistent with the annotations (write-on-first-run aligns with readOnlyHint=false).
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 front-loaded with the core purpose, then organized into labeled sections (When to use, When NOT to use, Sibling contrast, Side effects). Every sentence carries distinct information; there is no redundancy or filler, and the structure makes it scannable for an agent deciding whether to call it.
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 tool with an output schema and annotations covering the safety profile, the description is highly complete: it covers purpose, selection criteria, alternatives, side effects, and engine fallback. The only minor gap is absence of any permissions/auth prerequisites, which is a small omission for a tool capable of writing baseline files.
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 baseline of 3 applies: the schema already documents url, threshold, and project_path clearly. The description adds only indirect context (baseline lifecycle, what the threshold measures) but no parameter-specific syntax or format details beyond the schema. This is adequate but not additive.
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 opening line 'Run visual regression test — screenshot vs stored baseline' uses a specific verb, names the exact resource, and defines the core mechanism in one sentence. The sibling-contrast section further pins down what this tool is not (delimit_screenshot is a single image without baseline; delimit_story_accessibility audits HTML), making it unmistakably distinct.
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 has explicit 'When to use' and 'When NOT to use' sections. It names the exact CI-gate scenario, and gives two concrete alternatives with the conditions that select them: delimit_story_accessibility for a11y checks and delimit_screenshot for one-off screenshots. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_substantive_content_checkDelimit Substantive Content CheckA
Pre-submit gate for autonomous github outreach (LED-2214b).
When to use: as the LAST step before any agent submits a comment, issue body, or PR description to a third-party github repo via the outreach_substantive task path. Mandatory under CLAUDE.md SHIFT-1; bypass requires explicit founder approval. When NOT to use: for internal repo content, for posts on platforms other than github, or for non-outreach submissions (use the surface's own validators instead).
Sibling contrast: delimit_external_pr_check guards PR duplication; this guards the substantive-content boundary itself. For a PR submission the agent calls BOTH — this one first to refuse covert-commercial drafts, then external_pr_check to refuse duplicates.
Side effects: read-only. Pure validator over the body string and target metadata; no network, no ledger writes, no notifications.
The gate runs in two stages:
Target-side veto — if repo / repo_description / repo_topics contain a banking / fintech / regulator-adjacent keyword, the gate blocks regardless of content quality (SHIFT-1 hard veto; KYC would deanonymize the operating account).
Content shape — bans forbidden phrases (incl. our own product names), requires at least one technical anchor (commit hash, issue number, CVE, spec path, source file path), enforces minimum body length.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | The draft body to validate. Required. | |
| repo | No | Target "owner/name" if known (used in target veto). | |
| repo_topics | No | List of repo topic tags (target veto). | |
| proposed_action | No | "comment", "issue", or "pr". Default "comment". | comment |
| repo_description | No | Repo description string (target veto). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly claims 'Side effects: read-only. Pure validator... no network, no ledger writes, no notifications,' while the annotations declare readOnlyHint: false. This is a direct contradiction: the annotation signals the tool may have write/network effects, but the description insists it is a pure read-only validator. An agent cannot trust the safety profile, which is critical before invoking a pre-submit gate. Flagged as Annotation 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 long, but it is well-structured with clearly labeled sections (when to use, when not, sibling contrast, side effects, two stages) and front-loads the purpose. The two-stage explanation is detailed and somewhat documentation-like, so not every sentence is lean, but the complexity of the gate justifies most of the 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?
For a complex policy gate, the description covers the two veto stages, the side-effect profile, mandatory-usage context, and sibling interaction — essentially everything an agent needs to invoke it correctly. The one caveat: the contradictory readOnlyHint annotation leaves the operational safety picture unresolved, which slightly undermines completeness despite the thorough prose. Output schema exists, so return-value documentation is not the description's burden.
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 the baseline is 3. The description adds genuine meaning beyond the schema by explaining how parameters participate in the two-stage logic: repo/repo_description/repo_topics feed the 'target-side veto' and body feeds the 'content shape' checks, including the KYC/deanonymization rationale. This tells the agent WHY each parameter matters, not just what it is.
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 specific verb-and-resource purpose: 'Pre-submit gate for autonomous github outreach' that validates the substantive-content boundary. It explicitly distinguishes itself from the closest sibling: 'delimit_external_pr_check guards PR duplication; this guards the substantive-content boundary itself.' An agent can tell what this tool does and how it differs from delimit_external_pr_check without opening any schema.
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 ('as the LAST step before any agent submits a comment, issue body, or PR description to a third-party github repo via the outreach_substantive task path'), when-NOT-to-use ('for internal repo content, for posts on platforms other than github, or for non-outreach submissions'), mandatory policy context (CLAUDE.md SHIFT-1, founder-approval bypass), and call-ordering relative to delimit_external_pr_check. This is the gold standard for routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_swarmDelimit SwarmA
Manage the cross-venture agent swarm (personas + namespace isolation).
When to use: to inspect or mutate the swarm — register a venture with its 5 agent roles, create custom tools, hot-reload modules, check namespace access. When NOT to use: to dispatch a single task (use delimit_agent_dispatch) or read agent state (delimit_agent_status / dashboard).
Sibling contrast: delimit_agent_dispatch is per-task; this manages the multi-venture / multi-persona swarm overall (Agent Swarm Standard v1.2).
Side effects: action="register" / "create_tool" / "create_agent" / "approve_agent" / "reload" mutate state. status / venture / agent / list_* / check / approve / guide / rules are read-only.
Each venture gets 5 AI agent roles (Architect, Senior Dev, Reviewer, QA, Ops) with namespace isolation and model binding.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | See actions above. | status |
| venture | No | Venture name (for register/venture/create_agent). | |
| agent_id | No | Agent ID (for agent/check/create_agent/approve_agent). | |
| repo_path | No | Repo path, description, or reason depending on action. | |
| target_path | No | File path, tool name, or role name depending on action. | |
| access_action | No | Action name - for check: "read"/"write"/"deploy". For approve: "deploy_production"/"deploy_staging"/"social_post" etc. | read |
| deploy_target | No | Deploy target for venture registration. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations (readOnlyHint=false, destructiveHint=false) only signal that the tool mutates and is not destructive. The description adds a Side effects section that classifies which action classes mutate (register/create_tool/create_agent/approve_agent/reload) versus which are read-only (status/venture/agent/list_*/check/approve/guide/rules) — genuinely useful beyond the annotations. Minor deductions: 'approve' appears in the read-only list while 'approve_agent' is in the mutation list, creating slight ambiguity, and permission requirements are not disclosed.
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?
Well-structured with labeled sections: purpose sentence, when to use, when not to use, sibling contrast, side effects, and a venture-structure note. The purpose is front-loaded and every section earns its place. Slightly long, but the length is justified by the tool's polymorphic action surface with 14+ action values.
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 high-complexity tool (7 optional parameters, polymorphic action, no enums), the description covers the critical decisions: when to use it, which actions mutate state, and how it differs from the per-task sibling. Output schema presence relieves it of explaining return values. Remaining gaps: it never states that calling with no arguments defaults to action='status', and the action-specific parameter roles rely on the schema's terse hints ('for register/venture/create_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?
Schema coverage is 100%, so the baseline is 3. The description earns the extra point by supplying the vocabulary for the polymorphic action parameter — the schema's own action field defers to it ('See actions above') — and by enumerating access_action values (read/write/deploy; deploy_production/deploy_staging/social_post). It does not fully resolve ambiguous parameters like repo_path ('description, or reason depending on action'), but the schema's per-parameter hints cover most of the remaining 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?
Opens with a specific verb-resource pairing ('Manage the cross-venture agent swarm') and enumerates concrete capabilities (register a venture with its 5 agent roles, create custom tools, hot-reload modules, check namespace access). It distinguishes itself from delimit_agent_dispatch, which the description explicitly labels as per-task, so an agent can separate the two without opening schemas.
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?
Contains explicit 'When to use' and 'When NOT to use' sections, the latter naming exact alternatives (delimit_agent_dispatch for single-task dispatch; delimit_agent_status / dashboard for agent state). Adds a sibling contrast line and even cites the governing standard (Agent Swarm Standard v1.2). This is complete routing guidance, not merely implied context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_task_completeDelimit Task CompleteA
Mark current loop task done and get the next one.
When to use: at the end of each loop iteration — records completion, updates session metrics, returns the next task. When NOT to use: to close a regular ledger item (use delimit_ledger_done) or fetch next task without closing (delimit_next_task).
Sibling contrast: delimit_ledger_done is per-item; delimit_next_task only fetches; this completes + advances.
Side effects: writes status to the ledger, updates session metrics (cost, errors), returns next task. Loop continues until a STOP signal.
| Name | Required | Description | Default |
|---|---|---|---|
| error | No | If task failed, describe error. | |
| result | No | Summary of what was done. | |
| task_id | Yes | Ledger item id completed (e.g. "LED-042"). | |
| venture | No | Project name or path. | |
| session_id | No | Loop session to update. | |
| cost_incurred | No | Estimated cost (USD). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond the annotations by disclosing concrete side effects: writes status to the ledger, updates session metrics (cost, errors), and returns the next task. It also explains the loop-continuation semantics, which is important behavioral context not available from annotations or schema.
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 well-structured with clear headers, front-loads the core purpose, and every sentence earns its place. It is concise but information-dense, covering usage, exclusions, sibling contrast, and side effects 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 tool's moderate complexity, existing annotations, and presence of an output schema, the description covers all essential decision points: when to call, when not to call, what side effects occur, and how the loop progresses. Nothing critical is missing.
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 parameters. The description adds context about task_id being the 'current loop task' but does not need to explain each parameter further; 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 opens with a specific verb and resource: 'Mark current loop task done and get the next one.' It also explicitly contrasts itself with delimit_ledger_done and delimit_next_task, making the tool's unique role immediately clear.
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' and 'When NOT to use' guidance, naming the exact alternatives (delimit_ledger_done, delimit_next_task) and the condition that selects this tool. This leaves no ambiguity for an agent deciding between siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_tdqs_lintDelimit Tdqs LintA
Score MCP tool docstrings against the 6 TDQS dimensions (LED-2108).
When to use: as a CI gate before publishing the MCP server, to catch low-quality tool descriptions. Operates on any Python file with @mcp.tool()-decorated functions.
When NOT to use: for runtime tool selection or policy decisions — TDQS grades documentation, not behaviour. Use delimit_lint for OpenAPI specs and delimit_gov_evaluate for policy-class decisions.
Sibling contrast: unlike delimit_lint (OpenAPI specs) and delimit_spec_health (spec quality scoring), this scores Python source against Glama's Tool Definition Quality Score rubric.
Side effects: none. Pure read-only static analysis via ast (no import, no execution). Does not write ledger, evidence, or notify.
| Name | Required | Description | Default |
|---|---|---|---|
| human | No | If True, include a human-readable "report" string in the response. Default False (JSON-only is cheaper for CI pipes). | |
| target_file | No | Path to a Python file with @mcp.tool() decorators. Default "ai/server.py", resolved against cwd. | ai/server.py |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description claims 'Side effects: none. Pure read-only static analysis via ast (no import, no execution)' and explicitly says it does not write ledger/evidence/notify. However, the annotations declare readOnlyHint=false, which signals the tool is not read-only. This direct contradiction undermines the agent's trust in whether invoking the tool can mutate state.
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 well-structured with clear 'When to use', 'When NOT to use', 'Sibling contrast', and 'Side effects' sections, and the main purpose is front-loaded. It is slightly longer than necessary — the ticket reference (LED-2108) and some repetition of the sibling distinction could be trimmed — but every substantive sentence 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 tool with two optional parameters and an output schema, the description covers purpose, operational scope (file pattern), non-goals, side effects, and alternatives. No critical operational information for an agent selecting or invoking the tool is missing; the only issue is the annotation contradiction already scored.
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 both parameters. The description adds some context for target_file by mentioning it operates on Python files with @mcp.tool() decorators, but it does not explain the 'human' parameter beyond the schema. Baseline 3 is appropriate because the schema carries the parameter-documentation load.
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 opens with a specific verb-resource pair: 'Score MCP tool docstrings against the 6 TDQS dimensions.' It also names sibling tools it is not, noting it differs from delimit_lint (OpenAPI specs) and delimit_spec_health (spec quality scoring). An agent can clearly distinguish this from the many delimit_* 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?
Provides an explicit 'When to use' ('as a CI gate before publishing the MCP server') and 'When NOT to use' (runtime tool selection or policy decisions), and names alternatives for those cases (delimit_lint for OpenAPI specs, delimit_gov_evaluate for policy). This gives the agent unambiguous selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_test_coverageDelimit Test CoverageARead-onlyIdempotent
Analyze test coverage for a project (experimental) (Pro).
When to use: to surface coverage by file/folder against a threshold when you need a pass/fail signal for CI. When NOT to use: to scaffold new test stubs (use delimit_test_generate) or run a smoke run (delimit_test_smoke).
Sibling contrast: delimit_test_smoke validates that tests run at all; delimit_test_generate writes test scaffolds; this measures coverage of existing tests.
Side effects: read-only inspection. Gated by require_premium. Calls backends.ui_bridge.test_coverage. Marked experimental — coverage runner detection is heuristic.
| Name | Required | Description | Default |
|---|---|---|---|
| threshold | No | Coverage percentage threshold for pass/fail. Default 80. | |
| project_path | Yes | Path to the project root. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, lowering the bar. The description adds genuinely useful context beyond that: gated by require_premium (a key failure mode), experimental status, and the heuristic nature of coverage-runner detection. The 'Side effects: read-only inspection' line is redundant with the annotation, but the premium gating and reliability caveat earn the score.
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?
Well-organized with labeled sections (when to use, when not to use, sibling contrast, side effects), front-loaded with the core function in the first sentence. Each section earns its place; the experimental and premium-gating disclosures justify the length. Only minor redundancy is the read-only line repeating the annotation.
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?
Complete for a 2-parameter tool with an output schema and safety annotations. Covers purpose, selection criteria, exclusions, sibling alternatives, side effects, premium gating, backend call, and an experimental/heuristic caveat. The output schema covers return values, so the description needn't explain them.
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 both parameters (project_path, threshold) are already documented with descriptions and the threshold has a default. The description mentions 'against a threshold' and pass/fail semantics, echoing the schema rather than adding new parameter-level detail. Baseline 3 is correct when the schema carries the full weight.
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?
Opens with a specific verb+resource ('Analyze test coverage for a project') and then sharpens the scope: surfaces coverage by file/folder against a threshold and produces a pass/fail signal for CI. The sibling contrast explicitly distinguishes it from delimit_test_smoke and delimit_test_generate, so an agent can tell them apart without opening schemas.
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' and 'When NOT to use' sections with named alternatives (delimit_test_generate for stubs, delimit_test_smoke for smoke runs), plus a sibling-contrast paragraph explaining exactly how each sibling differs. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_test_generateDelimit Test GenerateA
Generate test skeletons for source code (Jest / pytest / vitest).
When to use: to scaffold new test stubs for public functions when starting tests on a previously-untested module. When NOT to use: to measure coverage of existing tests (use delimit_test_coverage) or run a smoke test (delimit_test_smoke).
Sibling contrast: delimit_test_coverage measures; delimit_test_smoke runs; this writes new test scaffolds.
Side effects: writes new test files alongside the source. Uses AST parsing for Python and regex for JS/TS via backends.ui_bridge.test_generate.
| Name | Required | Description | Default |
|---|---|---|---|
| framework | No | Test framework — "jest" (default), "pytest", "vitest". | jest |
| project_path | Yes | Project path. Required. | |
| source_files | No | Specific files to generate tests for. None = all detectable public functions. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide readOnlyHint=false and destructiveHint=false. The description adds meaningful behavioral context by stating that the tool 'writes new test files alongside the source' and explains the parsing approaches for different languages. This goes beyond the structured fields 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 tightly organized into labeled sections that are easy to scan. Every section earns its place: purpose, when to use, when not to use, sibling contrast, and side effects. It is long enough to be useful but not padded with filler.
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 an output schema and 100% schema coverage, the description covers the remaining contextual needs: selection criteria, exclusions, side effects, and implementation nuance. An agent has enough to decide when to invoke it and what to expect.
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 baseline is 3 and the schema already documents all three parameters. The description adds some framing like 'public functions' and framework names, but it does not meaningfully extend the parameter-level semantics provided 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 opens with a specific verb and resource: 'Generate test skeletons for source code (Jest / pytest / vitest).' It goes beyond a generic label by naming the frameworks and the artifact produced, and the sibling contrast explicitly distinguishes this tool from delimit_test_coverage and delimit_test_smoke.
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' and 'When NOT to use' sections, including concrete alternative tools for excluded cases. The sibling contrast further clarifies the division of labor, leaving no ambiguity about when to select this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_test_smokeDelimit Test SmokeARead-onlyIdempotent
Run smoke tests for a project.
When to use: as a pre-commit / pre-deploy gate to confirm tests pass. Auto-detects framework (pytest / jest / vitest / mocha) from project config. When NOT to use: to scaffold new tests (use delimit_test_generate) or measure coverage (delimit_test_coverage).
Sibling contrast: delimit_test_generate writes; delimit_test_coverage measures; this runs and parses.
Side effects: invokes the project's test runner via backends.ui_bridge.test_smoke (subprocess). Read-only on filesystem apart from the test runner's own outputs.
| Name | Required | Description | Default |
|---|---|---|---|
| fail_fast | No | Stop execution immediately on first failure. | |
| extra_args | No | Optional extra arguments to pass to the test runner. | |
| test_suite | No | Optional specific test suite or pattern. | |
| project_path | Yes | Project path. Required. | |
| timeout_seconds | No | Optional execution timeout in seconds. Default is 120. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations by disclosing that it invokes the project's test runner via backends.ui_bridge.test_smoke as a subprocess, and that it is read-only on the filesystem apart from the test runner's own outputs. This adds meaningful operational context that the annotations do not fully 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?
The description is well-structured with clear sections for use cases, non-use cases, sibling contrast, and side effects. Each section earns its place and the core purpose is front-loaded in the first sentence.
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 purpose, usage timing, alternatives, framework detection, side effects, and filesystem impact. With an output schema present and all parameters fully described in the schema, nothing essential is missing for an agent to correctly select and invoke this 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 100%, so the schema already documents all five parameters and their defaults. The description adds general context like framework auto-detection but does not add much per-parameter meaning beyond what the schema provides, which matches 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 opens with a specific verb and resource: 'Run smoke tests for a project.' It further differentiates from siblings by stating delimit_test_generate writes, delimit_test_coverage measures, and this tool 'runs and parses,' leaving no ambiguity about its role.
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 when-to-use guidance is provided: 'as a pre-commit / pre-deploy gate to confirm tests pass.' It also includes clear when-not-to-use instructions with named alternatives for scaffolding tests and measuring coverage, making the routing decision unmistakable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_toolcard_cacheDelimit Toolcard CacheARead-onlyIdempotent
Manage the tool-schema cache to reduce per-session token waste.
When to use: when an MCP client repeatedly dumps full tool definitions and you want to send only diffs across sessions. When NOT to use: as a runtime tool dispatcher — this is a cache side-channel, not a tool-call surface.
Sibling contrast: this caches tool schemas; delimit_help describes individual tools at runtime.
Side effects: action="register" / "clear" / "flush" mutate the cache; "status" / "delta" / "estimate" are read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | One of "status" (default), "register", "delta", "clear", "estimate", "flush", "usage" (durable tool utilization + dormancy report). | status |
| tool_names | No | Comma-separated tool names (for delta). | |
| tool_schemas | No | JSON array of tool schema objects (for register/ estimate). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states that actions like 'register', 'clear', and 'flush' mutate the cache, and that only 'status', 'delta', and 'estimate' are read-only. This directly contradicts the annotation readOnlyHint=true, which declares the entire tool read-only. The 'clear'/'flush' actions also sit awkwardly with destructiveHint=false.
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 well-structured with a front-loaded one-sentence purpose, followed by compact labeled sections for when to use, when not to use, sibling contrast, and side effects. Every sentence earns its place with no filler.
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 usage context, exclusions, sibling distinction, and side effects, and the output schema plus full parameter coverage reduce the need for return-value details. However, the direct contradiction between the stated mutating side effects and the readOnlyHint=true annotation leaves an agent unable to trust the tool's safety profile.
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 input schema already documents all three parameters and their purposes. The description adds some value by labeling which actions are mutating vs read-only and clarifying the cache side-channel nature, but it does not add significant new parameter-level 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 states a specific verb ('Manage'), a concrete resource ('tool-schema cache'), and a clear objective ('reduce per-session token waste'). It also distinguishes itself from delimit_help, so an agent can tell them apart.
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 explicit 'When to use' and 'When NOT to use' guidance, including a concrete use case (repeated dumps, sending diffs) and a clear exclusion (runtime tool dispatcher). It also names the sibling alternative delimit_help for contrast.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_tracker_syncDelimit Tracker SyncA
Pull open GitHub issues into the Delimit ledger as context (LED-188).
When to use: to enrich the ledger with external issue context from a GitHub repo so cross-references work. When NOT to use: to write back to GitHub (this is read-only) or to monitor a single issue (delimit_sensor_github_issue).
Sibling contrast: delimit_sensor_github_issue watches one issue; this syncs many into the ledger as context.
Side effects: read-only on GitHub (network calls via gh CLI). Writes context entries into the ledger but does not push back to GitHub.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | No | "owner/repo" GitHub repo. Empty = auto-detect from git remote. | |
| limit | No | Max issues to sync. Default 10. | |
| labels | No | Comma-separated label filter (e.g. "bug,priority:high"). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations only say readOnlyHint=false and destructiveHint=false, but the description adds important nuance: it is read-only on GitHub, makes network calls via gh CLI, writes context entries into the ledger, and does not push back. This precisely clarifies the mixed read/write behavior 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?
The description is organized into clear labeled sections: purpose, when to use, when not to use, sibling contrast, and side effects. Every sentence adds useful information, and the structure makes it easy for an agent to scan.
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 100% schema coverage, an output schema, and clear annotations, the description fully covers the behavioral and selection context. It explains side effects, sibling differentiation, and usage boundaries, leaving no critical gap for an agent to infer.
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 schema already documents repo, limit, and labels with defaults and examples. The description does not add parameter-level detail, but it does not need to because the schema carries the burden effectively.
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 specific verb and resource: 'Pull open GitHub issues into the Delimit ledger as context.' It clearly identifies what the tool does and distinguishes it from the sibling delimit_sensor_github_issue, which watches a single issue rather than syncing many.
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 says when to use it ('to enrich the ledger with external issue context'), when NOT to use it ('to write back to GitHub' or 'to monitor a single issue'), and names the alternative tool. This gives an agent unambiguous routing logic.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_vault_healthDelimit Vault HealthARead-onlyIdempotent
Report vault subsystem health (Pro).
When to use: at session start or as a CI smoke test to confirm the vault backend is reachable and indexes are intact. When NOT to use: to query content (use delimit_vault_search) or to capture state (delimit_vault_snapshot).
Sibling contrast: delimit_vault_search reads content; delimit_vault_snapshot captures state; this reports the engine's own health.
Side effects: read-only on the vault backend; gated by require_premium. Calls backends.vault_bridge.health.
Prerequisite: requires Delimit Pro. An unlicensed call returns {"error": ..., "upgrade": "https://delimit.ai/pricing"} without running.
Args: None.
Returns: Dict with health status and next_steps.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond annotations by disclosing read-only side effects on the vault backend, the require_premium gating, the exact unlicensed response shape, and the underlying backend call. It also aligns with annotations (readOnlyHint, idempotentHint, destructiveHint), adding implementation-level detail 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 well-structured with clear labeled sections: purpose, when to use, when not to use, side effects, prerequisite, args, and returns. Every sentence adds value, and the most important information 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?
For a zero-parameter health-check tool, the description is complete: it covers usage context, exclusions, side effects, licensing prerequisite, error behavior, and return contents. The presence of an output schema also removes the need to heavily describe return structure, and the description still gives a useful summary.
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 tool has zero parameters and the schema is empty, so there is no parameter semantics to document. The description explicitly states 'Args: None,' confirming the schema. With no parameters, the baseline of 4 applies and the description handles it 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 opens with a specific verb and resource: 'Report vault subsystem health (Pro).' It clearly distinguishes this from sibling tools by stating that delimit_vault_search reads content and delimit_vault_snapshot captures state, leaving no ambiguity about what this tool does.
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 guidance is explicit: use at session start or as a CI smoke test to confirm vault backend reachability and index integrity. It also states when NOT to use it and names the correct alternatives, making the routing decision unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_vault_searchDelimit Vault SearchARead-onlyIdempotent
Search vault entries by query string (Pro).
When to use: to retrieve stored vault content matching a search string. The vault holds long-lived knowledge artifacts. When NOT to use: for conversation memory (use delimit_memory_search) or to capture state (delimit_vault_snapshot).
Sibling contrast: delimit_memory_search hits the conversation memory store; this hits the vault — different storage, different semantics.
Side effects: read-only on the vault backend; gated by require_premium. Calls backends.vault_bridge.search.
Prerequisite: requires Delimit Pro. An unlicensed call returns {"error": ..., "upgrade": "https://delimit.ai/pricing"} without running.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query string. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnly/idempotent/non-destructive, and the description adds meaningful behavior beyond them: read-only backend, Pro license gate, internal backend call, and the exact unlicensed error/upgrade response. 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?
Well organized with scannable sections and front-loaded purpose; only minor redundancy remains ('Pro', 'gated by require_premium', and the prerequisite section all state the same requirement).
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 use cases, exclusions, sibling contrast, side effects, licensing prerequisite, and unlicensed behavior; output schema exists so return-value detail is not required. Nothing needed to invoke correctly is missing.
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 query parameter is fully documented by the schema (100% coverage), so the description need not repeat it. It adds only the high-level 'by query string' phrasing, which is adequate but no additional parameter detail 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?
States a concrete action on a defined resource: 'Search vault entries by query string'. It additionally scopes the target as long-lived vault content and names the exact sibling it is not for memory, so an agent can distinguish it easily.
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 'When to use' and 'When NOT to use' sections name exact alternatives: delimit_memory_search for conversation memory and delimit_vault_snapshot for state capture. Sibling contrast explains different storage and semantics. No inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_vault_snapshotDelimit Vault SnapshotA
Capture a snapshot of vault state (Pro).
When to use: before a risky vault edit, to have a rollback point for content recovery. When NOT to use: for searching content (use delimit_vault_search) or checking health only (delimit_vault_health).
Sibling contrast: delimit_vault_health reports up/down only; this returns a structured snapshot of state.
Side effects: gated by require_premium. Calls backends.vault_bridge.snapshot, which writes a snapshot record on the vault backend.
Args: None.
Returns: Dict with snapshot data and next_steps.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses that the call is gated by require_premium, invokes backends.vault_bridge.snapshot, and writes a snapshot record on the vault backend. This alerts the agent that the operation is state-changing despite destructiveHint=false, adding significant behavioral context the annotations alone do not provide.
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 well-structured with clear labeled sections: purpose, when to use, when not to use, sibling contrast, side effects, args, and returns. The most important information is front-loaded, and each section earns its place by adding actionable guidance rather than filler.
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 zero-parameter tool with an output schema, the description covers all necessary context: what it does, when to use it, alternatives, side effects, and return shape. The output schema presumably details the snapshot structure, so the description's high-level 'Dict with snapshot data and next_steps' 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?
The tool has zero parameters, and the input schema confirms this with empty properties. The description explicitly states 'Args: None,' which is redundant with the schema but harmless. With 0 params, there is no parameter semantics burden, so the baseline 4 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?
The description opens with a specific verb and resource: 'Capture a snapshot of vault state (Pro).' It distinguishes the tool from siblings by explicitly contrasting it with delimit_vault_health, which reports only up/down status, while this tool returns a structured snapshot. An agent can immediately tell what this tool does and how it differs from adjacent 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 provides explicit when-to-use guidance ('before a risky vault edit, to have a rollback point') and when-not-to-use guidance with named alternatives ('searching content (use delimit_vault_search) or checking health only (delimit_vault_health)'). This leaves no ambiguity about tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_vendor_news_draftDelimit Vendor News DraftA
Draft a brand-voice Delimit-POV riff for a specific X tweet (Pro) (LED-1253).
When to use: when an operator/sensor surfaces a vendor-news tweet that warrants a Delimit-POV riff for the autonomous content queue. When NOT to use: to fetch the tweet without drafting (use delimit_x_fetch) or for general social drafting (delimit_social_generate).
Sibling contrast: delimit_x_fetch fetches; delimit_vendor_news_health inspects subsystem health; this drafts a riff into the queue.
Side effects: gated by require_premium. Runs the riff drafter end-to-end: rate cap, source-fit pre-filter, generator, capability validator, fit floor, queue insert. dry_run=True suppresses the queue insert but still runs validators (and still consults the 24h per-vendor rate cap to avoid log noise).
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | If True, suppress queue insertion. Default False. | |
| tweet_id | No | Source X tweet id (numeric string) or full x.com URL. Required. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint=false, destructiveHint=false) already signal this is a mutating operation, and the description goes well beyond them: it discloses premium gating (require_premium), the end-to-end pipeline stages (rate cap, source-fit pre-filter, generator, capability validator, fit floor, queue insert), and the subtle dry_run behavior where validators still run and the 24h rate cap is still consulted. This is rich behavioral context that materially changes how an agent should call the 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?
The description uses labeled sections (When to use, When NOT to use, Sibling contrast, Side effects) that make the content scannable, and the core purpose is front-loaded in the first sentence. It is slightly verbose — the internal task reference 'LED-1253' and the long pipeline enumeration could be trimmed — but every section earns its place with non-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?
For a 2-parameter tool with an output schema, full schema coverage, and annotations present, the description covers everything an agent needs: purpose, selection criteria, exclusions, named alternatives, side effects, gating, and dry_run specifics. Return values are handled by the output schema, so the absence of that detail is not a 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 description coverage is 100%, so the baseline is 3. The description adds meaningful value beyond the schema by clarifying that dry_run suppresses only the queue insert while still running validators and consulting the rate cap, and by flagging tweet_id as 'Required' — important guidance since the schema shows an empty default but the tool is useless without it. A minor mismatch exists between the schema's default '' and the description's 'Required', but the net guidance is helpful rather than misleading.
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 opening sentence names a specific verb ('Draft'), resource (Delimit-POV riff), and source (specific X tweet), plus the concrete use case of vendor-news surfacing. It also explicitly contrasts with named siblings: 'delimit_x_fetch fetches; delimit_vendor_news_health inspects subsystem health; this drafts a riff into the queue.' An agent can distinguish this from its siblings without opening schemas.
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?
Contains dedicated 'When to use' and 'When NOT to use' sections that name exact alternatives: use delimit_x_fetch to fetch without drafting, and delimit_social_generate for general social drafting. The sibling contrast paragraph reinforces routing decisions. This is explicit, actionable guidance with nothing left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_vendor_news_healthDelimit Vendor News HealthA
Health check for the vendor-news riff system (LED-1253).
When to use: to answer "is the cron firing? are drafts landing? what's getting rejected?" without grepping logs. When NOT to use: to draft a riff (use delimit_vendor_news_draft) or inspect the broader social daemon (delimit_social_daemon).
Sibling contrast: delimit_vendor_news_draft writes one riff; delimit_social_daemon controls the broader sensing daemon; this is the vendor-news subsystem health.
Side effects: read-only. Greps crontab for the cron entry, reads sensor JSONL log, tweet queue, rejected log, watchlist file.
Args: None.
Returns: Dict with cron_installed, last_run_ts, sensor stats, 24h queued/rejected entries, watchlist count, budget snapshot.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states 'Side effects: read-only' and lists the files it reads, but the annotations declare readOnlyHint: false. This directly contradicts the annotation. While the description provides useful detail about what it greps/reads, the contradiction forces a score of 1 per the rubric.
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 well-organized into labeled sections (When to use, When NOT to use, Sibling contrast, Side effects, Args, Returns) with no filler. Each section earns its place, and the key 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?
Despite the annotation contradiction, the description is otherwise complete: it covers purpose, usage boundaries, side effects, arguments, and return shape ('Dict with cron_installed, last_run_ts, sensor stats...'). An agent has enough to decide whether and how to call it.
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 tool has zero parameters and the input schema is empty. The description explicitly states 'Args: None,' which is clear and sufficient. Baseline 4 applies for 0-parameter tools.
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 opens with a specific verb and resource: 'Health check for the vendor-news riff system (LED-1253).' It names concrete sibling tools and clarifies that this tool is specifically the vendor-news subsystem health check, distinguishing it from delimit_vendor_news_draft and delimit_social_daemon.
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 with concrete diagnostic questions ('is the cron firing? are drafts landing? what's getting rejected?') and 'When NOT to use' rules with named alternatives. This gives an agent clear routing criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_vendor_news_scanDelimit Vendor News ScanA
Scan watchlisted vendor accounts and auto-draft riffs (Pro) (LED-1253).
When to use: for ad-hoc execution of the vendor-news sensor (the cron is the normal autonomous path). When NOT to use: for a single tweet (use delimit_vendor_news_draft) or subsystem health (delimit_vendor_news_health).
Sibling contrast: delimit_vendor_news_draft is one tweet; delimit_vendor_news_health is health rollup; this is the full sensor + drafter pass.
Side effects: gated by require_premium. Wraps ai.vendor_news.sensor.scan_vendor_news + draft_vendor_riff. dry_run=True polls (cache-friendly) but skips JSONL log write AND skips the drafter entirely (no queue, no rate-cap consumption).
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | If True, sensor-only (no drafter, no queue). Default False. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by detailing side effects: require_premium gating, wrapped function calls, JSONL log writes, queue behavior, and rate-cap consumption. It also explains exactly what dry_run does and does not do, which is valuable behavioral context not present in the structured 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 organized with clear labeled sections: purpose, when to use, when not to use, sibling contrast, and side effects. Every sentence contributes useful decision-making information, and the most critical scoping information 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?
For a tool with one optional parameter, explicit sibling differentiation, detailed side-effect disclosure, and an output schema available, this description is complete. There are no obvious gaps an agent would need to resolve elsewhere before invoking the 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?
Although schema coverage is 100%, the description adds meaning beyond the dry_run schema description by clarifying that dry_run=True is cache-friendly, skips the JSONL log write, and skips the drafter entirely with no queue or rate-cap consumption. This materially improves an agent's ability to choose the right value.
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 opens with a specific verb and resource ('Scan watchlisted vendor accounts and auto-draft riffs') and clearly distinguishes this tool from its closest siblings by naming exactly what each sibling does. This makes the tool's identity unambiguous even among a large family of delimit_ 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 provides an explicit 'When to use' section, a 'When NOT to use' section, and names the alternative tools for each exclusion case. An agent can confidently decide between scan, draft, and health without needing to inspect their schemas.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_venturesDelimit VenturesARead-onlyIdempotent
List all registered ventures (auto-registered project directories).
When to use: to inventory which projects Delimit has tracked, before routing a ledger query or context operation. When NOT to use: to read venture-scoped context (use delimit_context_list) or memory (delimit_memory_recent).
Sibling contrast: delimit_context_list inventories artifacts inside one venture; this lists the ventures themselves.
Side effects: read-only. Calls ai.ledger_manager.list_ventures. Note: ventures are auto-registered when any Delimit tool is run in a project directory.
Args: None.
Returns: Dict with the venture list (each entry has name, path, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds value by disclosing the underlying implementation call (ai.ledger_manager.list_ventures) and the data-provenance mechanism (auto-registration when any Delimit tool runs in a project directory). 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?
Well-structured with labeled sections (When to use, When NOT to use, Sibling contrast, Side effects, Args, Returns). Front-loaded with a one-sentence purpose, and every section contributes non-redundant information. The 'Side effects' and 'Note' lines are economical and earn their 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 parameterless read-only list tool with full annotation coverage and an output schema, the description is complete: purpose, routing guidance, side effects, data provenance, args, and return shape are all covered. The only absent details (ordering, staleness) are negligible for a simple inventory 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?
There are zero parameters and the description explicitly states 'Args: None,' confirming the empty schema. Per the baseline for 0-param tools, no parameter documentation is needed; the description even goes beyond by outlining the return shape ('Dict with the venture list (each entry has name, path, etc.)').
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?
Opens with a specific verb+resource statement: 'List all registered ventures (auto-registered project directories).' The parenthetical defines the key term, and the sibling contrast ('delimit_context_list inventories artifacts inside one venture; this lists the ventures themselves') explicitly distinguishes it from the closest sibling without requiring the agent to open either schema.
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?
Contains explicit 'When to use' and 'When NOT to use' sections that name the alternatives (delimit_context_list, delimit_memory_recent) and the routing condition ('before routing a ledger query or context operation'). The sibling contrast reinforces the boundary. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_versionDelimit VersionARead-onlyIdempotent
Return Delimit server version, tool count, and environment status.
When to use: at session start, in a dashboard, or as a diagnostic when investigating capability availability. When NOT to use: for governance health (use delimit_gov_health) or OS status (delimit_os_status).
Sibling contrast: delimit_help describes individual tools; this reports server-wide version and detected environment.
Side effects: read-only. Counts registered tools and detects API keys / CLIs / security tools in the environment so callers know what's available without manual config.
Args: None.
Returns: Dict with version, total_tools, adapter_contract, authority, environment-detection results, plus next_steps.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it read-only and idempotent, but the description adds meaningful behavioral context: it counts registered tools, detects API keys/CLIs/security tools, and reports environment-detection results. This goes beyond the annotations and helps the agent anticipate side effects and capabilities without manual configuration.
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 well-structured and front-loaded: purpose, usage, exclusions, sibling contrast, side effects, args, and returns. Every section earns its place and contributes directly to correct invocation, 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?
For a no-argument read-only tool with a returned dict described at a high level and an output schema present, the description is complete. It covers when to use it, when not to, what it reports, and its side-effect profile. Nothing essential is missing for an agent to call it appropriately.
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 tool has zero parameters, so the empty input schema is self-explanatory. The description explicitly states 'Args: None' and clarifies what the tool returns, which is sufficient for a parameterless tool. Baseline 4 is appropriate since there is nothing more to add about 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?
The description states a clear verb and resource: 'Return Delimit server version, tool count, and environment status.' It distinguishes itself from delimit_help, delimit_gov_health, and delimit_os_status by scope, making the tool's 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?
The description gives explicit 'When to use' guidance for session start, dashboards, and diagnostics. It also provides 'When NOT to use' exclusions with named alternatives, which is exactly the level of routing clarity an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_webhook_manageDelimit Webhook ManageADestructive
Manage webhook notifications for governance events.
When to use: to register a Slack/Discord/HTTP webhook to receive governance alerts (deploy blocked, security finding, consensus). When NOT to use: for SIEM-class structured streaming (use delimit_siem) or one-shot notifications (delimit_notify).
Sibling contrast: delimit_siem streams structured audit events; this routes governance alerts to chat / HTTP endpoints.
Side effects: action="add" / "remove" mutate ~/.delimit/webhooks.json. action="test" sends a test notification to the configured webhooks. action="list" is read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Webhook URL (Slack, Discord, or any HTTP endpoint). Required for add / remove / test (test uses all configured if not specified). | |
| action | No | One of "list" (default), "add", "remove", "test". | list |
| events | No | Comma-separated event filter — "all" (default), "blocked", "critical", "security". | all |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses side effects per action: add/remove mutate ~/.delimit/webhooks.json, test sends a test notification, and list is read-only. This meaningfully supplements the annotations (readOnlyHint=false, destructiveHint=true) with operation-specific behavior and file-level impact.
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 well-organized into focused sections and front-loads the core purpose. There is minor redundancy between the 'When NOT to use' section and the 'Sibling contrast' paragraph, but overall every section earns its place and is easy to scan.
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 full parameter documentation in the schema, an output schema present, and annotations provided, the description covers what remains: when to use, when not to use, side effects, and sibling differentiation. An agent has everything needed to select and invoke this 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 100%, so the input schema already documents url, action, and events. The description adds extra semantic value by tying actions to side effects and clarifying test behavior, which goes beyond a bare schema listing.
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 opens with a specific verb and resource ('Manage webhook notifications for governance events') and immediately clarifies what registering a Slack/Discord/HTTP webhook does. It explicitly contrasts itself with delimit_siem and delimit_notify, so an agent can distinguish this tool from siblings without inspecting schemas.
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' and 'When NOT to use' guidance, naming the exact alternatives (delimit_siem for streaming, delimit_notify for one-shot notifications). This gives clear decision rules and removes ambiguity about selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_work_ordersDelimit Work OrdersA
Manage work orders — structured task artifacts for the founder (STR-177).
When to use: to list, read, or close work orders that bridge strategy deliberations and interactive execution. When NOT to use: for ledger items (use delimit_ledger_*) or governance tasks (delimit_gov_new_task / run / verify).
Sibling contrast: delimit_ledger_add tracks general work; delimit_gov_new_task is governance-classed; this is the founder work-order surface — copy-pasteable markdown artifacts.
Side effects: action="list" / "show" are read-only. action="complete" writes to the work-order store via ai.work_order.complete_work_order.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Completion note (used by "complete"). | |
| wo_id | No | Work order id (required for "show" / "complete"). | |
| action | No | One of "list" (default), "show", "complete". | list |
| status | No | Filter for list — "pending" (default), "completed", "all". | pending |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations only provide tool-level readOnlyHint=false and destructiveHint=false. The description adds genuinely useful per-action behavioral disclosure: action='list'/'show' are read-only while action='complete' writes to the work-order store via ai.work_order.complete_work_order. This goes beyond the annotations and tells the agent exactly which invocations have 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?
The description is organized into clear labeled sections (purpose, when to use, when not to use, sibling contrast, side effects) and front-loads the core purpose. Every sentence earns its place; the sibling contrast slightly overlaps with 'when NOT to use', but it adds concrete named alternatives rather than pure 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?
With an output schema present (return values are covered), zero required parameters, and a description covering purpose, usage boundaries, sibling differentiation, and per-action side effects, there is nothing an agent needs to invoke the tool correctly that is missing. The reference to STR-177 is minor noise but not a 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 description coverage is 100%, so the baseline is 3 — the schema already documents all four parameters well. The description adds value by mapping action values to side-effect behavior (read-only vs write) and connecting note/wo_id to the 'complete' action, which is beyond the schema. It doesn't elaborate on status filter nuances or wo_id format, so it doesn't reach 5.
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-resource pair — 'Manage work orders' — and immediately elaborates the concrete actions: 'to list, read, or close work orders'. It frames work orders as 'structured task artifacts for the founder' and explicitly contrasts with ledger and governance tools, so an agent can distinguish it from siblings without opening the schema.
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 has explicit 'When to use' and 'When NOT to use' sections. It names concrete alternatives (delimit_ledger_* for ledger items, delimit_gov_new_task / run / verify for governance tasks) and explains the boundary. This is exactly the kind of routing guidance that lets an agent pick the right tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_x_fetchDelimit X FetchA
Fetch tweets from X by id or URL via twttr241 RapidAPI (LED-825).
When to use: to surgically fetch one or many tweets by id/URL, sharing the cached path with delimit_social_target so repeats are free. When NOT to use: to scan for new content (use delimit_social_target) or fetch a Reddit thread (delimit_reddit_fetch_thread).
Sibling contrast: delimit_social_target scans for opportunities; delimit_reddit_fetch_thread is the Reddit equivalent; this is the X (Twitter) single/batch fetcher.
Side effects: read-only network call via twttr241 (RapidAPI). Inherits the LRU + SQLite cache + budget gate from the social-target scanner — repeated reads are free. No writes.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Comma-separated list of status ids OR URLs for a batch fetch. Each is normalized to a status id and fetched independently. | |
| id_or_url | No | Single status id ("2048825010371039648") OR a full x.com / twitter.com URL — id is extracted automatically. Mutually exclusive with `ids`. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly claims 'read-only network call' and 'No writes', but the annotations set readOnlyHint to false, which implies the tool is not marked read-only. This is a direct annotation contradiction, and the description's 'No writes' also conflicts with its own mention of an SQLite cache that presumably writes to disk.
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 well structured with clear sections and the most important information is front-loaded. It is slightly verbose due to ticket references and repeated sibling contrast, but every section earns its place and the format is easy for an agent to parse.
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 purpose, when to use, alternatives, side effects, caching, and budget behavior, and an output schema is present. It is complete enough for an agent to invoke correctly, though the read-only contradiction with annotations prevents a perfect score.
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 both parameters have detailed descriptions including mutual exclusivity and normalization behavior. The tool description adds no parameter-level detail beyond restating 'by id or URL', so the schema already does the heavy lifting.
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 opens with a specific verb and resource ('Fetch tweets from X by id or URL') and explicitly names the integration. The sibling contrast further clarifies exactly what this tool is and is not, making it easy for an agent to distinguish from delimit_social_target and delimit_reddit_fetch_thread.
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 has explicit 'When to use' and 'When NOT to use' sections, naming the exact alternative tools and the conditions that should route to them. This gives the agent clear decision criteria without needing to infer anything.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delimit_zero_specDelimit Zero SpecARead-onlyIdempotent
Extract OpenAPI spec from framework source code (no spec file needed).
When to use: when a project has no checked-in OpenAPI spec but uses a framework Delimit can introspect (FastAPI today; Express, NestJS planned). When NOT to use: when a spec file already exists — pass it directly to delimit_lint or delimit_diff.
Sibling contrast: delimit_lint operates on existing spec files; this generates one from source.
Side effects: read-only on the project source. Calls backends.gateway_core.run_zero_spec which may invoke a Python subprocess to introspect FastAPI routes.
| Name | Required | Description | Default |
|---|---|---|---|
| python_bin | No | Optional Python binary path. Empty = auto-detect. | |
| project_dir | No | Project root directory. Default "." (cwd). | . |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false. The description adds valuable behavioral detail beyond those: it is read-only on the project source, calls backends.gateway_core.run_zero_spec, and may invoke a Python subprocess. This is relevant execution context that annotations alone do not provide.
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 core action is front-loaded, and the rest is organized into short labeled sections: when to use, when not to use, sibling contrast, and side effects. Each section carries distinct information without unnecessary padding.
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 only two optional parameters, a well-documented schema, and annotations covering safety, the description supplies the remaining context an agent needs: supported frameworks, alternative routing, and execution side effects. It is complete for correct 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 description coverage is 100%, and both parameters (python_bin, project_dir) are already documented with defaults and semantic descriptions in the input schema. The description does not add parameter-level meaning, so the 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?
The description opens with a specific verb and resource: 'Extract OpenAPI spec from framework source code'. It also explicitly differentiates from delimit_lint by stating this tool generates a spec from source rather than operating on an existing spec file.
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 explicit 'When to use' and 'When NOT to use' guidance, names the exact alternative tools (delimit_lint, delimit_diff), and specifies the deciding condition: absence of a checked-in spec file. Tool selection is unambiguous.
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. Dates show when Glama detected each change.
19 tool updates
v4.13.2- Changed
_delimit_deploy_impl7 fields changed- added
Input schema / properties / pathsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null +} - changed
Input schema / properties / project_path / descriptionPrevious value: -"Path to the project. Used by \"site\" and \"npm\".\nDefault \".\" (cwd). For \"site\" it is sanitized and must not\nescape the workspace root; for \"npm\" it must contain a\npackage.json."New value: +"Repository-relative site/package directory. It must\nremain inside repo_path." - added
Input schema / properties / repo_pathAdded value: +{ + "default": "", + "description": "Required Git worktree root for every deploy action.", + "type": "string" +} - added
Input schema / properties / staged_onlyAdded value: +{ + "default": true, + "type": "boolean" +} - added
Input schema / properties / target_urlsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null +} - added
Input schema / properties / ventureAdded value: +{ + "default": "", + "type": "string" +} - added
Input schema / properties / vercel_timeoutAdded value: +{ + "default": 60, + "type": "integer" +}
- Changed
delimit_content_publish1 field changed- changed
Input schema / properties / content_type / descriptionPrevious value: -"\"tweet\" (default) to post next queued tweet, or \"youtube\" to generate + upload the next video."New value: +"\"tweet\" (default) to post next queued tweet, \"youtube\" to generate + upload the next video, or \"report\" to STAGE (compose, not post) distribution for the next report."
- Changed
delimit_content_queue2 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"\"status\" (default), \"seed\", or \"add\"."New value: +"\"status\" (default), \"seed\", \"add\", or \"add_report\"." - changed
Input schema / properties / items / descriptionPrevious value: -"For \"add\" — newline-separated tweet texts."New value: +"For \"add\" — newline-separated tweet texts. For \"add_report\" — one or more report slugs (newline- or comma-separated)."
- Changed
delimit_deliberate1 field changed- added
Input schema / properties / context_filesAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional list of file paths whose contents are read server-side, redacted (secrets/PII), size-capped, and injected as a \"Referenced Files\" block so the panel can reason over real source (panelists have no filesystem access). Fails closed per file." +}
- Changed
delimit_deploy_build1 field changed- added
Input schema / properties / repo_pathAdded value: +{ + "default": "", + "description": "Explicit Git worktree root.", + "type": "string" +}
- Changed
delimit_deploy_npm2 fields changed- changed
Input schema / properties / project_path / descriptionPrevious value: -"Path to the npm project root. Default \".\" (cwd)."New value: +"Deprecated compatibility field; repo_path is authoritative." - added
Input schema / properties / repo_pathAdded value: +{ + "default": "", + "description": "Required explicit Git worktree/package root; never derived from cwd.", + "type": "string" +}
- Changed
delimit_deploy_plan4 fields changed- changed
Input schema / properties / app / descriptionPrevious value: -"Application name (project key in the deploy backend). Required."New value: +"Application identity (not a filesystem path). Required." - changed
Input schema / properties / git_ref / descriptionPrevious value: -"Git ref (branch/tag/SHA). Optional; defaults to the backend's notion of HEAD when omitted."New value: +"Git ref (branch/tag/SHA). Optional; defaults to HEAD." - added
Input schema / properties / repo_pathAdded value: +{ + "default": "", + "description": "Explicit Git worktree root used for health, security, governance, evidence, and attribution.", + "type": "string" +} - added
Input schema / properties / ventureAdded value: +{ + "default": "", + "description": "Optional ledger venture identity; repository context remains authoritative.", + "type": "string" +}
- Changed
delimit_deploy_publish1 field changed- added
Input schema / properties / repo_pathAdded value: +{ + "default": "", + "description": "Explicit Git worktree root.", + "type": "string" +}
- Changed
delimit_deploy_rollback1 field changed- added
Input schema / properties / repo_pathAdded value: +{ + "default": "", + "description": "Explicit Git worktree root.", + "type": "string" +}
- Changed
delimit_deploy_site6 fields changed- added
Input schema / properties / appAdded value: +{ + "default": "", + "description": "Deployment application identity, separate from filesystem context.", + "type": "string" +} - added
Input schema / properties / pathsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Explicit repo-relative paths to stage; set staged_only=false when used." +} - changed
Input schema / properties / project_path / descriptionPrevious value: -"Path to the site project. Default \".\" (cwd). Sanitized — must not escape the workspace root."New value: +"Site directory inside repo_path, or an absolute path inside it." - added
Input schema / properties / repo_pathAdded value: +{ + "default": "", + "description": "Required explicit Git worktree root; never derived from MCP server cwd.", + "type": "string" +} - added
Input schema / properties / staged_onlyAdded value: +{ + "default": true, + "description": "Deploy only the existing index. Safe default: true.", + "type": "boolean" +} - added
Input schema / properties / vercel_timeoutAdded value: +{ + "default": 60, + "description": "Seconds to wait for Vercel after push before returning pending (10-600).", + "type": "integer" +}
- Changed
delimit_deploy_status1 field changed- added
Input schema / properties / repo_pathAdded value: +{ + "default": "", + "description": "Explicit Git worktree root.", + "type": "string" +}
- Changed
delimit_deploy_verify3 fields changed- changed
Input schema / properties / app / descriptionPrevious value: -"Application name."New value: +"Application identity; selects only this app's targets." - added
Input schema / properties / repo_pathAdded value: +{ + "default": "", + "description": "Explicit Git worktree root containing deploy target configuration.", + "type": "string" +} - added
Input schema / properties / target_urlsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional app-specific HTTPS targets; never expands to the global fleet." +}
- Changed
delimit_design_validate_responsive1 field changed- added
Input schema / properties / urlAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional URL or HTML file path for dynamic Playwright testing." +}
- Changed
delimit_handoff_acknowledge1 field changed- added
Input schema / properties / project_pathAdded value: +{ + "default": "", + "description": "Optional exact project namespace. Blank searches all namespaces; an explicit path never writes outside that namespace.", + "type": "string" +}
- Changed
delimit_handoff_list2 fields changed- added
Input schema / properties / limitAdded value: +{ + "default": 50, + "description": "Maximum receipts to return, 1-200. Default 50.", + "type": "integer" +} - added
Input schema / properties / project_pathAdded value: +{ + "default": "", + "description": "Optional exact project namespace. Blank aggregates all namespaces.", + "type": "string" +}
- Changed
delimit_seal_verify4 fields changed- added
Input schema / properties / expect_merge_commitAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "A1 only: the git merge-commit SHA the relying party expects. When given, verification hard-fails unless subject.merge_commit matches (anti-replay binding, spec §2.2 step 11)." +} - added
Input schema / properties / expect_repoAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "A1 only: the canonical repo URL the relying party expects. When given, sha256(subject_salt || url) must equal subject.repo or verification hard-fails." +} - added
Input schema / properties / modeAdded value: +{ + "default": "receipt", + "description": "Verification mode. 'receipt' (default) = legacy/v0.2 receipt path, unchanged. 'a1' = hardened offline A1 bundle path (schema_version >= 0.3): tar-safety, version floor, crypto-suite allowlist, subject binding, key-manifest crosscheck.", + "type": "string" +} - changed
Input schema / properties / receipt_path / descriptionPrevious value: -"Path to a Delimit Seal receipt JSON file. Required."New value: +"Path to a Delimit Seal receipt JSON file, OR (mode='a1') an A1 bundle (.a1.tar.gz). Required."
- Changed
delimit_session_handoff1 field changed- added
Input schema / properties / project_pathAdded value: +{ + "default": "", + "description": "Project path whose revive soul this handoff should refresh. Empty = auto-detect from cwd.", + "type": "string" +}
- Changed
delimit_social_target2 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"\"scan\" to discover targets, \"list\" to show recent, \"stats\" to show counts."New value: +"\"scan\" to discover targets, \"list\" to show recent, \"stats\" to show counts, \"backlog\" to show the report-topic backlog." - added
Input schema / properties / modeAdded value: +{ + "default": "engagement", + "description": "\"engagement\" (default, legacy behavior) or \"demand_signal\" to route scan results into the INTERNAL report-topic backlog instead of drafting outbound. LED-3729.", + "type": "string" +}
- Changed
delimit_soul_capture1 field changed- added
Input schema / properties / project_pathAdded value: +{ + "default": "", + "description": "Project path to capture the soul for. Empty = auto-detect from cwd.", + "type": "string" +}
6 tool updates
v4.13.1- Changed
_delimit_agent_impl12 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"Which agent operation to perform."New value: +"Which lifecycle operation to perform. One of \"dispatch\",\n\"status\", \"complete\", \"handoff\". Default \"status\". Any other\nvalue returns a deterministic {\"error\": \"Unknown action ...\"}." - changed
Input schema / properties / assignee / descriptionPrevious value: -"Target model claude/codex/gemini/any (for action='dispatch')."New value: +"Target model \"claude\"/\"codex\"/\"gemini\"/\"any\"\n(action=\"dispatch\" only). Default \"any\", resolved to a\nconcrete model by the router. Invalid values are rejected." - changed
Input schema / properties / constraints / descriptionPrevious value: -"Comma-separated constraints (for action='dispatch')."New value: +"Comma-separated constraints, e.g. \"no force push\"\n(action=\"dispatch\" only). Coerced to a list." - changed
Input schema / properties / context / descriptionPrevious value: -"Background info (for dispatch) or handoff context (for handoff)."New value: +"Background to seed the executor (action=\"dispatch\") OR\nnotes for the next model (action=\"handoff\"). Unused by\nstatus/complete." - changed
Input schema / properties / description / descriptionPrevious value: -"Task description (for action='dispatch')."New value: +"Longer task description (action=\"dispatch\" only)." - changed
Input schema / properties / files_changed / descriptionPrevious value: -"Comma-separated files modified (for action='complete')."New value: +"Comma-separated modified file paths\n(action=\"complete\" only). Coerced to a list." - changed
Input schema / properties / priority / descriptionPrevious value: -"P0/P1/P2 (for action='dispatch')."New value: +"\"P0\"/\"P1\"/\"P2\" (action=\"dispatch\" only). Default \"P1\";\ninvalid values are rejected." - changed
Input schema / properties / result / descriptionPrevious value: -"Summary of what was done (for action='complete')."New value: +"Summary of what was done (action=\"complete\" only)." - changed
Input schema / properties / task_id / descriptionPrevious value: -"Task ID e.g. AGT-A1B2C3D4 (for status/complete/handoff)."New value: +"Task id, e.g. \"AGT-A1B2C3D4\". Used by status, complete,\nhandoff. Optional for status (empty lists all active tasks);\nrequired and validated for complete/handoff." - changed
Input schema / properties / title / descriptionPrevious value: -"Task title (for action='dispatch')."New value: +"Task title (action=\"dispatch\" only). Required — the backend\nrejects empty titles." - changed
Input schema / properties / to_model / descriptionPrevious value: -"Target model for handoff (for action='handoff')."New value: +"Target model for the transfer (action=\"handoff\" only).\nRequired; validated against the allowed models." - changed
Input schema / properties / tools_needed / descriptionPrevious value: -"Comma-separated tools list (for action='dispatch')."New value: +"Comma-separated MCP tools the work will need\n(action=\"dispatch\" only). Coerced to a list."
- Changed
_delimit_context_impl8 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"Which context operation to perform."New value: +"Which context operation to perform. One of \"init\", \"read\",\n\"write\", \"list\", \"snapshot\", \"branch\". Default \"list\". Other\nvalues return a deterministic error." - changed
Input schema / properties / artifact_type / descriptionPrevious value: -"Type hint text/json/code/plan (for action='write')."New value: +"Type hint stored on the artifact — \"text\", \"json\",\n\"code\", or \"plan\". Used only when action=\"write\". Default\n\"text\". Affects the stored type hint, not the storage format." - changed
Input schema / properties / branch_action / descriptionPrevious value: -"Branch sub-action create/merge/list (for action='branch')."New value: +"Branch sub-action — \"list\", \"create\", or \"merge\".\nUsed only when action=\"branch\". Default \"list\"." - changed
Input schema / properties / branch_name / descriptionPrevious value: -"Branch name (for action='branch' with create/merge)."New value: +"Branch name. Required when action=\"branch\" with\nbranch_action=\"create\" or \"merge\"; ignored for \"list\"." - changed
Input schema / properties / content / descriptionPrevious value: -"Artifact content (for action='write')."New value: +"Artifact text body. Used only when action=\"write\"." - changed
Input schema / properties / label / descriptionPrevious value: -"Snapshot label (for action='snapshot')."New value: +"Optional human-readable snapshot label, appended to the\ntimestamp in the snapshot dir name. Used only when\naction=\"snapshot\"." - changed
Input schema / properties / name / descriptionPrevious value: -"Artifact name (for read/write)."New value: +"Artifact name, used as the <name>.json file key. Required\nfor action=\"read\" and action=\"write\". Ignored by other\nactions." - changed
Input schema / properties / venture / descriptionPrevious value: -"Venture/project namespace (default: \"default\")."New value: +"Venture/project namespace key — selects the\n~/.delimit/context/<venture>/ tree. Used by every action.\nDefault \"default\"."
- Changed
_delimit_deploy_impl10 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"Which deploy operation to perform."New value: +"Which deploy operation to perform. One of \"plan\", \"build\",\n\"npm\", \"publish\", \"site\", \"status\", \"verify\", \"rollback\".\nDefault \"status\". Case/space-insensitive (lowered + stripped).\nOther values return a deterministic {\"error\": ...}." - changed
Input schema / properties / app / descriptionPrevious value: -"Application name (for plan/build/publish/verify/rollback/status)."New value: +"Application name / project key in the deploy backend. Used by\n\"plan\", \"build\", \"publish\", \"verify\", \"rollback\", \"status\".\nRequired for a real container operation. (Ignored by \"site\"\nand \"npm\".)" - changed
Input schema / properties / bump / descriptionPrevious value: -"Version bump patch/minor/major (for action='npm')."New value: +"Semver bump \"patch\" (default) / \"minor\" / \"major\". Used by\n\"npm\" only." - changed
Input schema / properties / dry_run / descriptionPrevious value: -"Preview without publishing (for action='npm')."New value: +"If True, run the npm chain without the final publish. Used\nby \"npm\" only. Default False." - changed
Input schema / properties / env / descriptionPrevious value: -"Target environment staging/production (for plan/verify/rollback/status)."New value: +"Target environment, typically \"staging\" or \"production\". Used\nby \"plan\", \"verify\", \"rollback\", \"status\"." - changed
Input schema / properties / git_ref / descriptionPrevious value: -"Git reference branch/tag/SHA (for plan/build/publish/verify)."New value: +"Git ref (branch/tag/SHA). Used by \"plan\", \"build\",\n\"publish\", \"verify\". Default None = backend HEAD; drives the\nimage tag for \"build\"." - changed
Input schema / properties / message / descriptionPrevious value: -"Git commit message (for action='site')."New value: +"Git commit message. Used by \"site\" only." - changed
Input schema / properties / project_path / descriptionPrevious value: -"Path to project (for action='site' or action='npm')."New value: +"Path to the project. Used by \"site\" and \"npm\".\nDefault \".\" (cwd). For \"site\" it is sanitized and must not\nescape the workspace root; for \"npm\" it must contain a\npackage.json." - changed
Input schema / properties / tag / descriptionPrevious value: -"npm dist-tag (for action='npm')."New value: +"npm dist-tag. Used by \"npm\" only. Default \"latest\"; use \"next\"\nor a custom tag to avoid auto-installing the new version for\nexisting users." - changed
Input schema / properties / to_sha / descriptionPrevious value: -"SHA to rollback to (for action='rollback')."New value: +"SHA to roll back to. Used by \"rollback\" only. None lets the\nbackend select the previous deployed SHA."
- Changed
_delimit_obs_impl7 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"Which observability operation to perform."New value: +"Which observability operation to perform. One of\n\"metrics\", \"logs\", \"alerts\", \"status\". Default \"status\".\nCase-insensitive and whitespace-trimmed. Other values\nreturn a deterministic error listing the valid actions." - changed
Input schema / properties / alert_action / descriptionPrevious value: -"Alert sub-action list/create/delete/update (for action='alerts')."New value: +"Alert sub-action — one of \"list\", \"create\",\n\"update\", \"delete\" (used only when action=\"alerts\").\nDefault \"list\". \"create\"/\"update\"/\"delete\" write; \"list\"\nreads." - changed
Input schema / properties / alert_rule / descriptionPrevious value: -"Alert rule definition (for alerts create/update)."New value: +"Alert rule definition dict (used only when\naction=\"alerts\", required for alert_action \"create\" and\n\"update\"). Backend-specific schema — typically metric,\nthreshold, comparison, window, severity." - changed
Input schema / properties / query / descriptionPrevious value: -"Metrics query type or log search string (for metrics/logs)."New value: +"Metric query name (action=\"metrics\") or log search\nstring (action=\"logs\"). Default \"system\". For \"logs\" this\nis effectively required — empty searches are rejected by\nthe backend. Ignored for \"alerts\" and \"status\"." - changed
Input schema / properties / rule_id / descriptionPrevious value: -"Rule ID (for alerts delete/update)."New value: +"Identifier for an existing rule (used only when\naction=\"alerts\", required for alert_action \"delete\" and\n\"update\")." - changed
Input schema / properties / source / descriptionPrevious value: -"Optional data source (for metrics/logs)."New value: +"Optional data/log source override (used only when\naction=\"metrics\" or action=\"logs\"). Default None = backend\ndefault / all configured sources." - changed
Input schema / properties / time_range / descriptionPrevious value: -"Time range e.g. 1h, 24h, 7d (for metrics/logs)."New value: +"Window like \"1h\", \"24h\", \"7d\" (used only when\naction=\"metrics\" or action=\"logs\"). Default \"1h\". Larger\nwindows may downsample or be capped server-side. Ignored\nfor \"alerts\" and \"status\"."
- Changed
_delimit_release_impl8 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"Which release operation to perform."New value: +"Which release operation to perform. One of \"plan\",\n\"validate\", \"status\", \"rollback\", \"history\", \"sync\".\nDefault \"status\". Other values return a deterministic error." - changed
Input schema / properties / environment / descriptionPrevious value: -"Target environment staging/production."New value: +"Target environment, \"staging\" or \"production\".\nDefault \"production\"." - changed
Input schema / properties / limit / descriptionPrevious value: -"Number of releases to return (for action='history')."New value: +"Maximum number of releases to return. Default 10. Used\nonly by \"history\"." - changed
Input schema / properties / repository / descriptionPrevious value: -"Repository path (for action='plan')."New value: +"Repository path. Default \".\". Used only by \"plan\"." - changed
Input schema / properties / services / descriptionPrevious value: -"Optional service list (for action='plan')."New value: +"Optional list of service names to scope the plan;\nNone = all services in the repo manifest. Used only by \"plan\"." - changed
Input schema / properties / sync_action / descriptionPrevious value: -"Sub-action audit/config (for action='sync')."New value: +"Sub-action for \"sync\" — \"audit\" (default) or\n\"config\". Ignored by other actions." - changed
Input schema / properties / to_version / descriptionPrevious value: -"Version to rollback to (for action='rollback')."New value: +"Prior release version to roll back to. Required for\n\"rollback\"; ignored otherwise." - changed
Input schema / properties / version / descriptionPrevious value: -"Release version (auto-detected if empty, for plan/validate/rollback)."New value: +"Release version (auto-detected from git tags if empty).\nUsed by \"plan\", \"validate\", and \"rollback\" (as the expected\ncurrent version to roll back FROM)."
- Changed
_delimit_secret_impl7 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"Which secret operation to perform."New value: +"Which secret operation to perform. One of \"store\", \"get\",\n\"list\", \"revoke\", \"access_log\". Default \"list\". Case-\ninsensitive (lowered + stripped). Other values return a\ndeterministic error." - changed
Input schema / properties / agent_type / descriptionPrevious value: -"Requesting agent identity (for action='get')."New value: +"Identity of the requesting agent (action=\"get\" only),\nchecked against scope." - changed
Input schema / properties / description / descriptionPrevious value: -"Human-readable description (for action='store')."New value: +"Human-readable description (action=\"store\" only).\nOptional but recommended; surfaces in \"list\" and the audit\ntrail." - changed
Input schema / properties / name / descriptionPrevious value: -"Secret name (for store/get/revoke/access_log)."New value: +"Credential name / key. Required for \"store\", \"get\",\n\"revoke\"; optional filter for \"access_log\" (empty = all);\nignored for \"list\". Sanitized for filesystem safety." - changed
Input schema / properties / scope / descriptionPrevious value: -"Comma-separated allowed agents/tools or 'all' (for action='store')."New value: +"Comma-separated agent/tool identities permitted to read\nthis credential, or \"all\" for any requester. Used only by\naction=\"store\". Default \"all\". Enforced at read time." - changed
Input schema / properties / tool / descriptionPrevious value: -"Requesting tool name (for action='get')."New value: +"Name of the requesting tool (action=\"get\" only), checked\nagainst scope." - changed
Input schema / properties / value / descriptionPrevious value: -"Secret value (for action='store')."New value: +"The credential to store. Required for action=\"store\";\nignored otherwise. Never echoed back by \"store\"."
1 tool update
v4.8.0- Added
delimit_handoff_preflight
183 tool updates
v4.7.9- Changed
_delimit_gov_impl8 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"Which governance operation to perform."New value: +"Which governance operation to perform. One of \"health\",\n\"status\", \"policy\", \"evaluate\", \"new_task\", \"run\",\n\"verify\". Default \"health\". Other values return a\ndeterministic error." - changed
Input schema / properties / context / descriptionPrevious value: -"Additional context (for action='evaluate')."New value: +"Additional context (used only when action=\"evaluate\").\nStrings are auto-coerced to {\"text\": ...} via\n_coerce_dict_arg; dicts are passed through. None is\nallowed." - changed
Input schema / properties / eval_action / descriptionPrevious value: -"The action to evaluate (for action='evaluate')."New value: +"The proposed action name to evaluate (used only\nwhen action=\"evaluate\"). Empty string is rejected by the\nbackend." - changed
Input schema / properties / repo / descriptionPrevious value: -"Repository path."New value: +"Repository path. Default \".\" (cwd)." - changed
Input schema / properties / risk_level / descriptionPrevious value: -"Risk level low/medium/high/critical (for action='new_task')."New value: +"Risk level low/medium/high/critical (used only when\naction=\"new_task\"). Default \"medium\"." - changed
Input schema / properties / scope / descriptionPrevious value: -"Task scope (for action='new_task')."New value: +"Task scope (used only when action=\"new_task\"). Required\nfor new_task." - changed
Input schema / properties / task_id / descriptionPrevious value: -"Task ID (for action='run' or action='verify')."New value: +"Task ID (used only when action=\"run\" or\naction=\"verify\"). Required for those actions." - changed
Input schema / properties / title / descriptionPrevious value: -"Task title (for action='new_task')."New value: +"Task title (used only when action=\"new_task\"). Required\nfor new_task."
- Changed
delimit_activate3 fields changed- changed
Input schema / properties / auto_permissions / descriptionPrevious value: -"Auto-configure AI assistant permissions for Delimit tools (default True)."New value: +"Auto-configure AI assistant permissions (default True)." - changed
Input schema / properties / license_key / descriptionPrevious value: -"Optional license key to activate Pro (e.g. DELIMIT-XXXX-XXXX-XXXX). Leave empty to check free-tier readiness."New value: +"Optional license key (e.g. DELIMIT-XXXX-XXXX-XXXX). Empty = free-tier readiness only." - changed
Input schema / properties / project_path / descriptionPrevious value: -"Project directory to check."New value: +"Project directory to check. Default \".\" (cwd)."
- Changed
delimit_agent_check2 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"Action to check (e.g. \"ledger_write\", \"deploy\")."New value: +"Action to check (e.g. \"ledger_write\", \"deploy\"). Required." - changed
Input schema / properties / model / descriptionPrevious value: -"AI model name (claude, codex, gemini, cursor)."New value: +"AI model name — \"claude\", \"codex\", \"gemini\", \"cursor\". Required."
- Changed
delimit_agent_complete3 fields changed- added
Input schema / properties / files_changed / descriptionAdded value: +"Comma-separated paths of modified files." - added
Input schema / properties / result / descriptionAdded value: +"Summary of what was done." - added
Input schema / properties / task_id / descriptionAdded value: +"Task id from delimit_agent_dispatch. Required."
- Changed
delimit_agent_dispatch7 fields changed- added
Input schema / properties / assignee / descriptionAdded value: +"Target model — \"claude\", \"codex\", \"gemini\", or \"any\". Default \"any\"." - added
Input schema / properties / constraints / descriptionAdded value: +"Comma-separated constraints (e.g. \"no force push\")." - added
Input schema / properties / context / descriptionAdded value: +"Background info to seed the executor." - added
Input schema / properties / description / descriptionAdded value: +"Longer task description." - added
Input schema / properties / priority / descriptionAdded value: +"One of \"P0\" (immediate), \"P1\" (default), \"P2\"." - added
Input schema / properties / title / descriptionAdded value: +"Short task title. Required." - added
Input schema / properties / tools_needed / descriptionAdded value: +"Comma-separated MCP tools the work will need."
- Changed
delimit_agent_handoff3 fields changed- added
Input schema / properties / context / descriptionAdded value: +"Notes for the next model." - added
Input schema / properties / task_id / descriptionAdded value: +"Existing task id from delimit_agent_dispatch. Required." - added
Input schema / properties / to_model / descriptionAdded value: +"Target model — \"claude\", \"codex\", \"gemini\", etc. Required."
- Changed
delimit_agent_link2 fields changed- changed
Input schema / properties / ledger_item_id / descriptionPrevious value: -"Ledger item ID (LED-xxx or STR-xxx)."New value: +"Ledger item id (LED-xxx or STR-xxx). Required." - changed
Input schema / properties / task_id / descriptionPrevious value: -"Agent task ID (AGT-xxx)."New value: +"Agent task id (AGT-xxx). Required."
- Changed
delimit_agent_policy7 fields changed- changed
Input schema / properties / custom_constraints / descriptionPrevious value: -"Comma-separated constraints (e.g. \"no-deploy,no-publish\")."New value: +"Comma-separated constraints, e.g. \"no-deploy,no-publish\"." - changed
Input schema / properties / deploy / descriptionPrevious value: -"Allow deploys (true/false)."New value: +"Allow deploys (\"true\"/\"false\")." - changed
Input schema / properties / evidence / descriptionPrevious value: -"Evidence access level (read-only, read-write, none)."New value: +"Evidence access level." - changed
Input schema / properties / ledger / descriptionPrevious value: -"Ledger access level (read-only, read-write, none)."New value: +"Ledger access level." - changed
Input schema / properties / memory / descriptionPrevious value: -"Memory access level (read-only, read-write, none)."New value: +"Memory access level." - changed
Input schema / properties / model / descriptionPrevious value: -"AI model name (claude, codex, gemini, cursor). Empty = show all."New value: +"AI model name — \"claude\", \"codex\", \"gemini\", \"cursor\". Empty = list all." - changed
Input schema / properties / secrets / descriptionPrevious value: -"Allow secret access (true/false)."New value: +"Allow secret access (\"true\"/\"false\")."
- Changed
delimit_agent_status1 field changed- added
Input schema / properties / task_id / descriptionAdded value: +"Specific task id (e.g. \"AGT-A1B2C3D4\") or empty to list all."
- Changed
delimit_audit3 fields changed- changed
Input schema / properties / lenses / descriptionPrevious value: -"Comma-separated lenses to apply (security, correctness, governance). Default: all."New value: +"Comma-separated lenses — \"security\", \"correctness\", \"governance\". Empty = all three." - changed
Input schema / properties / target / descriptionPrevious value: -"File path, git diff output, or code snippet to audit."New value: +"File path, git diff output, or code snippet to audit. Required." - changed
Input schema / properties / target_type / descriptionPrevious value: -"\"file\" (reads file), \"diff\" (git diff text), \"snippet\" (inline code)."New value: +"\"file\" (default — reads file), \"diff\" (git diff text), or \"snippet\" (inline code)."
- Changed
delimit_build_loop4 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"'init' to start a session, 'run' to execute one iteration."New value: +"\"init\" to start a session, \"run\" (default) to execute one iteration." - changed
Input schema / properties / cycle_mode / descriptionPrevious value: -"'sense' (think+strategy), 'execute' (build+deploy),\n 'full' (all stages). Only applies to loop_type='cycle'.\n Daemon uses 'sense', interactive sessions use 'full' or 'execute'."New value: +"For loop_type=\"cycle\" — \"sense\" (think+strategy), \"execute\" (build+deploy), or \"full\" (all). Default \"full\"." - changed
Input schema / properties / loop_type / descriptionPrevious value: -"'cycle', 'build', 'social', or 'deploy' (default: build)."New value: +"\"cycle\", \"build\" (default), \"social\", or \"deploy\"." - changed
Input schema / properties / session_id / descriptionPrevious value: -"Optional session ID to continue."New value: +"Optional session id to continue."
- Changed
delimit_build_loop_daemon4 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"'start', 'stop', or 'status' (default: status)"New value: +"\"start\", \"stop\", or \"status\" (default)." - changed
Input schema / properties / interval_seconds / descriptionPrevious value: -"Tick interval in seconds (default 900 = 15 min). Only used on start."New value: +"Tick interval. Default 900 (15 min). Used on start." - changed
Input schema / properties / loop_type / descriptionPrevious value: -"'build', 'social', or 'deploy' (default: build). Only used on start."New value: +"\"build\" (default), \"social\", or \"deploy\". Used on start." - changed
Input schema / properties / session_id / descriptionPrevious value: -"Session to run (required for all actions)"New value: +"Session to run. Required for all actions."
- Changed
delimit_changelog8 fields changed- changed
Input schema / properties / format / descriptionPrevious value: -"Output format (markdown, json, keepachangelog, github-release)."New value: +"\"markdown\" (default), \"json\", \"keepachangelog\", \"github-release\"." - changed
Input schema / properties / include_ledger / descriptionPrevious value: -"Pull completed ledger items into changelog (git mode, default true)."New value: +"Include completed ledger items (git mode). Default True." - changed
Input schema / properties / new_spec / descriptionPrevious value: -"Path to new OpenAPI spec (spec mode only)."New value: +"New OpenAPI spec path (spec mode)." - changed
Input schema / properties / old_spec / descriptionPrevious value: -"Path to old OpenAPI spec (spec mode only)."New value: +"Old OpenAPI spec path (spec mode)." - changed
Input schema / properties / output_file / descriptionPrevious value: -"Write changelog to this file path. If CHANGELOG.md, prepends entry."New value: +"Write the rendered changelog here. If \"CHANGELOG.md\", prepends the entry." - changed
Input schema / properties / repo_path / descriptionPrevious value: -"Path to a git repository (git mode). When set, uses git log."New value: +"Repo path (git mode)." - changed
Input schema / properties / since_tag / descriptionPrevious value: -"Git tag to diff from (default: auto-detect latest tag)."New value: +"Git tag to diff from. Empty = auto-detect latest tag." - changed
Input schema / properties / version / descriptionPrevious value: -"Version label for the changelog entry (e.g. \"4.1.0\")."New value: +"Version label (e.g. \"4.1.0\")."
- Changed
delimit_collision_check3 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"\"check\", \"claim\", or \"release\"."New value: +"\"check\" (default), \"claim\", or \"release\"." - changed
Input schema / properties / model / descriptionPrevious value: -"AI model name (claude/codex/gemini)."New value: +"AI model name — \"claude\", \"codex\", \"gemini\"." - changed
Input schema / properties / task_id / descriptionPrevious value: -"Optional task ID for tracking."New value: +"Optional task id for tracking."
- Changed
delimit_config_export1 field changed- changed
Input schema / properties / project_path / descriptionPrevious value: -"Path to the project root (default: current directory)."New value: +"Path to project root. Default \".\" (cwd)."
- Changed
delimit_config_import3 fields changed- changed
Input schema / properties / config_json / descriptionPrevious value: -"The JSON config bundle string (from delimit_config_export)."New value: +"The JSON config bundle string (from delimit_config_export). Required." - changed
Input schema / properties / project_path / descriptionPrevious value: -"Path to the target project root (default: current directory)."New value: +"Target project root. Default \".\" (cwd)." - changed
Input schema / properties / write_workflow / descriptionPrevious value: -"Also write the GitHub Action workflow file if present in the bundle."New value: +"Also write the GitHub Action workflow if present. Default False."
- Changed
delimit_content_publish1 field changed- changed
Input schema / properties / content_type / descriptionPrevious value: -"'tweet' to post next queued tweet, 'youtube' to generate+upload next video."New value: +"\"tweet\" (default) to post next queued tweet, or \"youtube\" to generate + upload the next video."
- Changed
delimit_content_queue2 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"'status' to view queue, 'seed' to populate with defaults, 'add' to add custom tweets."New value: +"\"status\" (default), \"seed\", or \"add\"." - changed
Input schema / properties / items / descriptionPrevious value: -"For 'add' action -- newline-separated tweet texts to add to the queue."New value: +"For \"add\" — newline-separated tweet texts."
- Changed
delimit_context_branch3 fields changed- added
Input schema / properties / action / descriptionAdded value: +"Branch sub-action, one of \"list\", \"create\", \"merge\". Default \"list\"." - added
Input schema / properties / branch_name / descriptionAdded value: +"Branch name (required for create / merge)." - added
Input schema / properties / venture / descriptionAdded value: +"Venture namespace key. Required."
- Changed
delimit_context_init1 field changed- added
Input schema / properties / venture / descriptionAdded value: +"Venture/project namespace key. Default \"default\"."
- Changed
delimit_context_list1 field changed- added
Input schema / properties / venture / descriptionAdded value: +"Venture namespace key. Required."
- Changed
delimit_context_read2 fields changed- added
Input schema / properties / name / descriptionAdded value: +"Artifact name. Required." - added
Input schema / properties / venture / descriptionAdded value: +"Venture namespace key. Required."
- Changed
delimit_context_snapshot2 fields changed- added
Input schema / properties / label / descriptionAdded value: +"Optional human-readable label for the snapshot." - added
Input schema / properties / venture / descriptionAdded value: +"Venture namespace key. Required."
- Changed
delimit_context_write4 fields changed- added
Input schema / properties / artifact_type / descriptionAdded value: +"Type hint, one of \"text\", \"json\", \"code\", \"plan\". Default \"text\". Affects render hints, not storage format." - added
Input schema / properties / content / descriptionAdded value: +"Artifact text. Required." - added
Input schema / properties / name / descriptionAdded value: +"Artifact name (used as the file key). Required." - added
Input schema / properties / venture / descriptionAdded value: +"Venture namespace key. Required."
- Added
delimit_control - Added
delimit_corp_dashboard - Changed
delimit_cost_alert4 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"Action (list/create/delete/toggle)."New value: +"One of \"list\" (default), \"create\", \"delete\", \"toggle\"." - changed
Input schema / properties / alert_id / descriptionPrevious value: -"Alert ID (required for delete/toggle)."New value: +"Existing alert id. Required for delete/toggle." - changed
Input schema / properties / name / descriptionPrevious value: -"Alert name (required for create)."New value: +"Alert name. Required for create." - changed
Input schema / properties / threshold / descriptionPrevious value: -"Cost threshold in USD (required for create)."New value: +"Cost threshold in USD. Required for create."
- Changed
delimit_cost_analyze1 field changed- changed
Input schema / properties / target / descriptionPrevious value: -"Project or infrastructure path to analyze."New value: +"Project or infrastructure path to analyze. Default \".\" (cwd)."
- Changed
delimit_cost_controls4 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"One of 'status', 'quota', 'set', or 'reset'."New value: +"One of \"status\" (default), \"quota\", \"set\", \"reset\"." - changed
Input schema / properties / cost_cap / descriptionPrevious value: -"New session cost cap in USD (used with action='set')."New value: +"New session cost cap in USD (used with action=\"set\")." - changed
Input schema / properties / limit / descriptionPrevious value: -"New hourly call limit for the tool (used with action='set')."New value: +"New hourly call limit (used with action=\"set\")." - changed
Input schema / properties / tool_name / descriptionPrevious value: -"Tool name (required for 'quota' and 'set' with limit)."New value: +"Tool name. Required for \"quota\" and \"set\" with limit."
- Changed
delimit_cost_optimize1 field changed- changed
Input schema / properties / target / descriptionPrevious value: -"Project or infrastructure path to analyze."New value: +"Project or infrastructure path to analyze. Default \".\" (cwd)."
- Changed
delimit_daemon_classify1 field changed- changed
Input schema / properties / item_id / descriptionPrevious value: -"Specific ledger item ID to classify. If empty, classifies the next automatable item."New value: +"Specific ledger item id to classify. Empty = pick the next automatable item from the open ledger."
- Changed
delimit_daemon_run2 fields changed- changed
Input schema / properties / dry_run / descriptionPrevious value: -"If true, log actions but don't execute (default true)"New value: +"If True (default), log actions but do not execute." - changed
Input schema / properties / iterations / descriptionPrevious value: -"Number of loop iterations (0 = infinite, default 1)"New value: +"Number of iterations. 0 = infinite. Default 1."
- Changed
delimit_data_backup1 field changed- changed
Input schema / properties / target / descriptionPrevious value: -"Directory or file to back up."New value: +"Directory or file to back up. Default \".\" (cwd)."
- Changed
delimit_data_migrate1 field changed- changed
Input schema / properties / target / descriptionPrevious value: -"Project path to scan for migration files."New value: +"Project path to scan for migration files. Default \".\" (cwd)."
- Changed
delimit_data_validate1 field changed- changed
Input schema / properties / target / descriptionPrevious value: -"Directory or file path containing data files."New value: +"Directory or file path with data files. Default \".\" (cwd)."
- Changed
delimit_deliberate5 fields changed- changed
Input schema / properties / context / descriptionPrevious value: -"Background context for all models."New value: +"Background context shared to all models." - changed
Input schema / properties / max_rounds / descriptionPrevious value: -"Maximum rounds (default 3 for debate, 6 for dialogue)."New value: +"Max rounds. Default 3 for debate, 6 for dialogue." - changed
Input schema / properties / mode / descriptionPrevious value: -"\"dialogue\" (short turns) or \"debate\" (long essays)."New value: +"\"dialogue\" (short turns) or \"debate\" (long essays). Default \"dialogue\"." - changed
Input schema / properties / question / descriptionPrevious value: -"The question to reach consensus on."New value: +"The question to reach consensus on. Required." - changed
Input schema / properties / scope / descriptionPrevious value: -"Optional scope override — \"strategic\", \"social\", or\n\"operational\". When empty, the engine classifies from\nkeywords in the question and context. Strategic and social\nscopes enforce the 3-model minimum (charter consensus-thresholds)\nand allow Grok as a tiebreaker on deadlock."New value: +"Optional scope override — \"strategic\", \"social\", or \"operational\". Empty = engine classifies from keywords."
- Changed
delimit_deploy_build2 fields changed- added
Input schema / properties / app / descriptionAdded value: +"Application name (project key in the deploy backend)." - added
Input schema / properties / git_ref / descriptionAdded value: +"Git ref (branch/tag/SHA). Default None = backend HEAD."
- Changed
delimit_deploy_npm4 fields changed- added
Input schema / properties / bump / descriptionAdded value: +"Semver bump — \"patch\" (default), \"minor\", or \"major\"." - added
Input schema / properties / dry_run / descriptionAdded value: +"If True, run the chain without publishing. Default False." - added
Input schema / properties / project_path / descriptionAdded value: +"Path to the npm project root. Default \".\" (cwd)." - added
Input schema / properties / tag / descriptionAdded value: +"npm dist-tag for the publish. Default \"latest\"."
- Changed
delimit_deploy_plan3 fields changed- added
Input schema / properties / app / descriptionAdded value: +"Application name (project key in the deploy backend). Required." - added
Input schema / properties / env / descriptionAdded value: +"Target environment, typically \"staging\" or \"production\"." - added
Input schema / properties / git_ref / descriptionAdded value: +"Git ref (branch/tag/SHA). Optional; defaults to the backend's notion of HEAD when omitted."
- Changed
delimit_deploy_publish2 fields changed- added
Input schema / properties / app / descriptionAdded value: +"Application name (project key in the deploy backend)." - added
Input schema / properties / git_ref / descriptionAdded value: +"Git ref the images were built at. Default None."
- Changed
delimit_deploy_rollback3 fields changed- added
Input schema / properties / app / descriptionAdded value: +"Application name." - added
Input schema / properties / env / descriptionAdded value: +"Target environment." - added
Input schema / properties / to_sha / descriptionAdded value: +"Target SHA to roll back to. If None, the backend selects the previous deployed SHA."
- Changed
delimit_deploy_site2 fields changed- added
Input schema / properties / message / descriptionAdded value: +"Git commit message for the deploy commit." - added
Input schema / properties / project_path / descriptionAdded value: +"Path to the site project. Default \".\" (cwd). Sanitized — must not escape the workspace root."
- Changed
delimit_deploy_status2 fields changed- added
Input schema / properties / app / descriptionAdded value: +"Application name." - added
Input schema / properties / env / descriptionAdded value: +"Target environment."
- Changed
delimit_deploy_verify3 fields changed- added
Input schema / properties / app / descriptionAdded value: +"Application name." - added
Input schema / properties / env / descriptionAdded value: +"Target environment (\"staging\" or \"production\")." - added
Input schema / properties / git_ref / descriptionAdded value: +"Optional git ref the deploy targets."
- Changed
delimit_design_component_library2 fields changed- changed
Input schema / properties / output_format / descriptionPrevious value: -"Output format (json/markdown)."New value: +"One of \"json\" (default) or \"markdown\"." - changed
Input schema / properties / project_path / descriptionPrevious value: -"Project path to scan."New value: +"Project path to scan. Required."
- Changed
delimit_design_extract_tokens3 fields changed- changed
Input schema / properties / figma_file_key / descriptionPrevious value: -"Optional Figma file key (auto-uses Figma API if a token is available)."New value: +"Optional Figma file key (uses Figma API if a token is available)." - changed
Input schema / properties / project_path / descriptionPrevious value: -"Project directory to scan. Defaults to cwd."New value: +"Project directory to scan. Default = cwd." - changed
Input schema / properties / token_types / descriptionPrevious value: -"Token types to extract (colors, typography, spacing, breakpoints)."New value: +"Token types — \"colors\", \"typography\", \"spacing\", \"breakpoints\". Comma string or list. None = all."
- Changed
delimit_design_generate_component2 fields changed- changed
Input schema / properties / component_name / descriptionPrevious value: -"Component name (PascalCase)."New value: +"Component name (PascalCase). Required." - changed
Input schema / properties / output_path / descriptionPrevious value: -"Output file path. Defaults to components/<Name>/<Name>.tsx."New value: +"Output file path. Default = components/<Name>/<Name>.tsx."
- Changed
delimit_design_validate_responsive2 fields changed- changed
Input schema / properties / check_types / descriptionPrevious value: -"Check types (breakpoints, containers, fluid-type, etc.)."New value: +"Specific checks (\"breakpoints\", \"containers\", \"fluid-type\", etc.) as comma string or list. None = all." - changed
Input schema / properties / project_path / descriptionPrevious value: -"Project path to validate."New value: +"Project path to validate. Required."
- Changed
delimit_diagnose3 fields changed- changed
Input schema / properties / dry_run / descriptionPrevious value: -"If True, return a preview of what doctor would create/modify without executing changes."New value: +"If True, preview changes without executing." - changed
Input schema / properties / project_path / descriptionPrevious value: -"Project to diagnose."New value: +"Project to diagnose. Default \".\" (cwd)." - changed
Input schema / properties / undo / descriptionPrevious value: -"If True, revert changes from the last doctor --fix run using the saved manifest."New value: +"If True, revert changes from the last run."
- Changed
delimit_diff2 fields changed- changed
Input schema / properties / new_spec / descriptionPrevious value: -"Path to the new OpenAPI spec file."New value: +"Path to the proposed OpenAPI spec file. Required." - changed
Input schema / properties / old_spec / descriptionPrevious value: -"Path to the old OpenAPI spec file."New value: +"Path to the baseline OpenAPI spec file. Required."
- Changed
delimit_diff_report5 fields changed- changed
Input schema / properties / new_spec / descriptionPrevious value: -"Path to the new (proposed) OpenAPI spec file."New value: +"Proposed OpenAPI spec path." - changed
Input schema / properties / old_spec / descriptionPrevious value: -"Path to the old (baseline) OpenAPI spec file."New value: +"Baseline OpenAPI spec path." - changed
Input schema / properties / output_file / descriptionPrevious value: -"Optional file path to write the report to disk."New value: +"Optional path to write the report to disk." - changed
Input schema / properties / output_format / descriptionPrevious value: -"\"html\" for a standalone HTML report, \"json\" for structured data."New value: +"\"html\" (default) or \"json\"." - changed
Input schema / properties / policy_file / descriptionPrevious value: -"Optional path to a .delimit/policies.yml file."New value: +"Optional .delimit/policies.yml path."
- Changed
delimit_digest4 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"'run' to build and write, 'latest' to return existing file paths."New value: +"\"run\" (default) or \"latest\"." - changed
Input schema / properties / send_email / descriptionPrevious value: -"if True, attempt to email the digest to `to` or\n DELIMIT_SMTP_TO. Requires DELIMIT_DIGEST_EMAIL=true\n in the env to actually send (pipeline gate)."New value: +"If True, attempt to email the digest. Requires DELIMIT_DIGEST_EMAIL=true env to actually send." - changed
Input schema / properties / to / descriptionPrevious value: -"recipient email. Defaults to DELIMIT_SMTP_TO."New value: +"Email recipient. Empty = DELIMIT_SMTP_TO." - changed
Input schema / properties / window_hours / descriptionPrevious value: -"lookback window. Default 24."New value: +"Lookback window. Default 24."
- Changed
delimit_docs_generate1 field changed- changed
Input schema / properties / target / descriptionPrevious value: -"Project path."New value: +"Project path. Default \".\" (cwd)."
- Changed
delimit_docs_validate1 field changed- changed
Input schema / properties / target / descriptionPrevious value: -"Project path."New value: +"Project path. Default \".\" (cwd)."
- Changed
delimit_drift_check3 fields changed- changed
Input schema / properties / project_path / descriptionPrevious value: -"Project root. Defaults to current directory."New value: +"Project root. Default \".\" (cwd)." - changed
Input schema / properties / spec_path / descriptionPrevious value: -"Path to OpenAPI spec. Auto-detects if empty."New value: +"OpenAPI spec path. Empty = auto-detect." - changed
Input schema / properties / staleness_days / descriptionPrevious value: -"Alert if baseline older than this (default 7)."New value: +"Alert if baseline older than this. Default 7."
- Changed
delimit_drift_history1 field changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Max entries to return."New value: +"Max entries to return. Default 20."
- Changed
delimit_evidence_collect3 fields changed- added
Input schema / properties / asset_metaAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional JSON string with asset provenance metadata (for evidence_type='asset')." +} - changed
Input schema / properties / evidence_type / descriptionPrevious value: -"Type of evidence (e.g. \"deploy\", \"security\", \"test\", \"audit\"). Stored in bundle metadata."New value: +"Type of evidence — e.g. \"deploy\", \"security\", \"test\", \"audit\". Stored in bundle metadata. Empty = generic." - changed
Input schema / properties / target / descriptionPrevious value: -"Repository or task path."New value: +"Repository or task path. Default \".\" (cwd)."
- Changed
delimit_evidence_verify2 fields changed- changed
Input schema / properties / bundle_id / descriptionPrevious value: -"Evidence bundle ID to verify."New value: +"Evidence bundle id. Either this or bundle_path must be provided." - changed
Input schema / properties / bundle_path / descriptionPrevious value: -"Path to evidence bundle file."New value: +"Path to a bundle file on disk. Either this or bundle_id must be provided."
- Changed
delimit_executor4 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"'run' (one work order), 'poll' (scan + run all approved),\n'status' (return paused + pending count), 'pause'/'resume'."New value: +"\"run\" (one), \"poll\" (scan + run all approved), \"status\" (default), \"pause\", \"resume\"." - changed
Input schema / properties / executed_by / descriptionPrevious value: -"Identifier for the audit log (e.g. 'dashboard', 'cron')."New value: +"Identifier for the audit log (e.g. \"dashboard\", \"cron\")." - changed
Input schema / properties / live / descriptionPrevious value: -"When False (default), dry-run — describes what would happen."New value: +"When False (default), dry-run — describe what would happen without firing." - changed
Input schema / properties / wo_id / descriptionPrevious value: -"Required for action='run'."New value: +"Work order id. Required for action=\"run\"."
- Changed
delimit_explain5 fields changed- changed
Input schema / properties / new_spec / descriptionPrevious value: -"Path to the new OpenAPI spec file."New value: +"Path to the proposed OpenAPI spec file. Required." - changed
Input schema / properties / new_version / descriptionPrevious value: -"New version string."New value: +"New version string for context." - changed
Input schema / properties / old_spec / descriptionPrevious value: -"Path to the old OpenAPI spec file."New value: +"Path to the baseline OpenAPI spec file. Required." - changed
Input schema / properties / old_version / descriptionPrevious value: -"Previous version string."New value: +"Previous version string for context." - changed
Input schema / properties / template / descriptionPrevious value: -"Template name (default: developer)."New value: +"One of \"developer\" (default), \"team_lead\", \"product\", \"migration\", \"changelog\", \"pr_comment\", \"slack\"."
- Changed
delimit_external_pr_check2 fields changed- changed
Input schema / properties / repo / descriptionPrevious value: -"External GitHub repo, e.g. \"goharbor/harbor\"."New value: +"External GitHub repo, e.g. \"goharbor/harbor\". Required." - changed
Input schema / properties / state / descriptionPrevious value: -"\"open\" | \"closed\" | \"merged\" | \"all\". Default \"all\"."New value: +"\"open\", \"closed\", \"merged\", or \"all\" (default)."
- Changed
delimit_generate_scaffold3 fields changed- changed
Input schema / properties / name / descriptionPrevious value: -"Project name."New value: +"Project name (becomes the root directory). Required." - changed
Input schema / properties / packages / descriptionPrevious value: -"Packages to include."New value: +"Packages to include — either a comma string or list." - changed
Input schema / properties / project_type / descriptionPrevious value: -"Project type (nextjs, api, library, etc.)."New value: +"Project flavour, e.g. \"nextjs\", \"api\", \"library\". Required."
- Changed
delimit_generate_template5 fields changed- changed
Input schema / properties / features / descriptionPrevious value: -"Optional feature flags."New value: +"Optional feature flags as a comma string or list." - changed
Input schema / properties / framework / descriptionPrevious value: -"Target framework."New value: +"Target framework key, e.g. \"react\", \"nextjs\", \"fastapi\"." - changed
Input schema / properties / name / descriptionPrevious value: -"Name for the generated code."New value: +"Name for the generated code (file stem). Required." - changed
Input schema / properties / target / descriptionPrevious value: -"Directory to write the generated file into. Defaults to current directory."New value: +"Output directory. Default \".\" (cwd). Sanitized to remain inside the workspace." - changed
Input schema / properties / template_type / descriptionPrevious value: -"Template type (component, page, api, etc.)."New value: +"Template flavour, e.g. \"component\", \"page\", \"api\". Required."
- Changed
delimit_github_scan2 fields changed- changed
Input schema / properties / cadence / descriptionPrevious value: -"pulse, hunter, or deep."New value: +"\"pulse\" (default), \"hunter\", or \"deep\"." - changed
Input schema / properties / limit / descriptionPrevious value: -"Max results per search query (default 20, max 30)."New value: +"Max results per search query. Default 20. Max 30."
- Changed
delimit_gov_evaluate3 fields changed- added
Input schema / properties / action / descriptionAdded value: +"Proposed action name to evaluate (e.g. \"external_pr\", \"deploy\"). Empty string returns an error." - added
Input schema / properties / context / descriptionAdded value: +"Optional dict with action-specific context (e.g. target repo, author). Strings are auto-coerced to {\"text\": ...} via _coerce_dict_arg." - added
Input schema / properties / repo / descriptionAdded value: +"Filesystem path to the repository. Default \".\" (cwd)."
- Changed
delimit_gov_health1 field changed- added
Input schema / properties / repo / descriptionAdded value: +"Filesystem path to the repository. Default \".\" (cwd)."
- Changed
delimit_gov_new_task4 fields changed- added
Input schema / properties / repo / descriptionAdded value: +"Filesystem path to the repository. Default \".\" (cwd)." - added
Input schema / properties / risk_level / descriptionAdded value: +"One of \"low\", \"medium\", \"high\", \"critical\". Default \"medium\". Drives later approval requirements." - added
Input schema / properties / scope / descriptionAdded value: +"Description of what the task covers. Required." - added
Input schema / properties / title / descriptionAdded value: +"Short task title. Required (empty string is rejected)."
- Changed
delimit_gov_policy1 field changed- added
Input schema / properties / repo / descriptionAdded value: +"Filesystem path to the repository. Default \".\" (cwd)."
- Changed
delimit_gov_run2 fields changed- added
Input schema / properties / repo / descriptionAdded value: +"Filesystem path to the repository. Default \".\" (cwd)." - added
Input schema / properties / task_id / descriptionAdded value: +"Identifier returned by delimit_gov_new_task. Required."
- Changed
delimit_gov_status1 field changed- added
Input schema / properties / repo / descriptionAdded value: +"Filesystem path to the repository. Default \".\" (cwd)."
- Changed
delimit_gov_verify2 fields changed- added
Input schema / properties / repo / descriptionAdded value: +"Filesystem path to the repository. Default \".\" (cwd)." - added
Input schema / properties / task_id / descriptionAdded value: +"Identifier from delimit_gov_new_task / delimit_gov_run. Required."
- Changed
delimit_handoff_acknowledge1 field changed- changed
Input schema / properties / receipt_id / descriptionPrevious value: -"The receipt ID to acknowledge."New value: +"Receipt id to acknowledge. Required (empty string returns an error payload)."
- Changed
delimit_handoff_create9 fields changed- changed
Input schema / properties / assumptions / descriptionPrevious value: -"Comma-separated assumptions made during work."New value: +"Comma-separated assumptions made." - changed
Input schema / properties / completed / descriptionPrevious value: -"Comma-separated list of completed items."New value: +"Comma-separated completed items." - changed
Input schema / properties / files_modified / descriptionPrevious value: -"JSON list of {path, change_type, summary} dicts, or empty for auto-detect."New value: +"JSON list of {path, change_type, summary} dicts, or empty to auto-detect." - changed
Input schema / properties / in_scope / descriptionPrevious value: -"Comma-separated items that were in scope."New value: +"Comma-separated in-scope items." - changed
Input schema / properties / next_action / descriptionPrevious value: -"What the receiving agent should do first."New value: +"First thing the receiving agent should do." - changed
Input schema / properties / not_completed / descriptionPrevious value: -"Comma-separated list of items not completed (with reasons)."New value: +"Comma-separated items not completed (with reasons)." - changed
Input schema / properties / out_of_scope / descriptionPrevious value: -"Comma-separated items explicitly excluded."New value: +"Comma-separated explicitly excluded items." - changed
Input schema / properties / priority / descriptionPrevious value: -"P0/P1/P2."New value: +"P0 / P1 (default) / P2." - changed
Input schema / properties / to_model / descriptionPrevious value: -"Target model (or \"any\")."New value: +"Target model name or \"any\" (default)."
- Changed
delimit_handoff_list1 field changed- changed
Input schema / properties / status / descriptionPrevious value: -"\"pending\" (unacknowledged), \"acknowledged\", or \"all\"."New value: +"\"pending\" (default), \"acknowledged\", or \"all\"."
- Added
delimit_heartbeat_check - Changed
delimit_help1 field changed- changed
Input schema / properties / tool_name / descriptionPrevious value: -"Tool name (e.g. 'lint', 'gov_health'). Leave empty for overview."New value: +"Tool name (e.g. \"lint\", \"gov_health\"). Empty returns the workflows overview."
- Changed
delimit_impact2 fields changed- changed
Input schema / properties / api_name / descriptionPrevious value: -"The API that changed."New value: +"The API name that changed. Required." - changed
Input schema / properties / dependency_file / descriptionPrevious value: -"Optional path to dependency manifest."New value: +"Optional path to a dependency manifest file (package.json, requirements.txt, go.mod) to scan for callers. Default None = backend default path."
- Changed
delimit_inbox_daemon1 field changed- changed
Input schema / properties / action / descriptionPrevious value: -"'start' (begin polling), 'stop' (halt polling),\n 'status' (show daemon state, last poll, failures)."New value: +"\"start\" (begin polling), \"stop\" (halt polling), \"status\" (default — show daemon state)."
- Changed
delimit_init3 fields changed- changed
Input schema / properties / no_permissions / descriptionPrevious value: -"Skip the filesystem permission auto-config (LED-269)."New value: +"Skip filesystem permission auto-config (LED-269)." - changed
Input schema / properties / preset / descriptionPrevious value: -"Policy preset - strict, default, or relaxed."New value: +"Policy preset — \"strict\", \"default\", \"relaxed\"." - changed
Input schema / properties / project_path / descriptionPrevious value: -"Project root directory."New value: +"Project root directory. Default \".\" (cwd)."
- Changed
delimit_intel_dataset_freeze1 field changed- changed
Input schema / properties / dataset_id / descriptionPrevious value: -"Dataset identifier."New value: +"Dataset identifier from the registry. Required."
- Changed
delimit_intel_dataset_register3 fields changed- changed
Input schema / properties / description / descriptionPrevious value: -"Human-readable description."New value: +"Human-readable description for the registry." - changed
Input schema / properties / name / descriptionPrevious value: -"Dataset name."New value: +"Dataset name (key). Required." - changed
Input schema / properties / schema / descriptionPrevious value: -"Optional JSON schema for the dataset."New value: +"Optional JSON schema as dict or JSON string."
- Changed
delimit_intel_query3 fields changed- changed
Input schema / properties / dataset_id / descriptionPrevious value: -"Optional dataset to filter by."New value: +"Optional dataset to scope the query to." - changed
Input schema / properties / parameters / descriptionPrevious value: -"Optional params (date_from, date_to, limit)."New value: +"Optional dict with date_from, date_to, limit. Accepted as JSON string and coerced." - changed
Input schema / properties / query / descriptionPrevious value: -"Keyword search string."New value: +"Keyword search string. Empty = all."
- Changed
delimit_intel_snapshot_ingest1 field changed- changed
Input schema / properties / data / descriptionPrevious value: -"Snapshot data (any JSON-serializable dict)."New value: +"Snapshot data (JSON-serializable dict or JSON string). Required."
- Changed
delimit_ledger4 fields changed- changed
Input schema / properties / api_name / descriptionPrevious value: -"Filter events by API name."New value: +"Optional filter by API name." - changed
Input schema / properties / ledger_path / descriptionPrevious value: -"Path to the ledger JSONL file (e.g. .delimit/ledger/operations.jsonl)."New value: +"Path to the ledger JSONL file (e.g. .delimit/ledger/operations.jsonl). Required." - changed
Input schema / properties / repository / descriptionPrevious value: -"Filter events by repository."New value: +"Optional filter by repository." - changed
Input schema / properties / validate_chain / descriptionPrevious value: -"Validate hash chain integrity."New value: +"If True, verify the hash chain integrity in addition to filtering. Default False."
- Changed
delimit_ledger_add2 fields changed- changed
Input schema / properties / title / descriptionPrevious value: -"What needs to be done."New value: +"What needs to be done. Required." - changed
Input schema / properties / venture / descriptionPrevious value: -"Project name or path (e.g. \"my-project\", \"./path/to/project\"). Auto-detects if empty."New value: +"Project name or path. Empty = auto-detect from cwd."
- Added
delimit_ledger_auto_cancel_stale - Added
delimit_ledger_auto_close_external - Added
delimit_ledger_bulk - Changed
delimit_ledger_context1 field changed- changed
Input schema / properties / venture / descriptionPrevious value: -"Project name or path. Auto-detects if empty."New value: +"Project name or path. Empty = auto-detect from cwd."
- Changed
delimit_ledger_done5 fields changed- added
Input schema / properties / commit_shaAdded value: +{ + "default": "", + "description": "LED-1408: optional merge-commit SHA proving the fix shipped. Recorded as ship_proof on the event; verified=True flag set on the item.", + "type": "string" +} - changed
Input schema / properties / item_id / descriptionPrevious value: -"The item ID (e.g. LED-001 or STR-001)."New value: +"Ledger item id (e.g. \"LED-001\"). Required." - changed
Input schema / properties / note / descriptionPrevious value: -"Optional completion note."New value: +"Optional completion note. If the note contains a GitHub PR URL, it will be auto-extracted as ship proof." - added
Input schema / properties / pr_urlAdded value: +{ + "default": "", + "description": "LED-1408: optional GitHub PR URL proving the fix shipped. Parsed into pr_owner/pr_repo/pr_number; verified=True flag set on the item.", + "type": "string" +} - changed
Input schema / properties / venture / descriptionPrevious value: -"Project name or path. Auto-detects if empty."New value: +"Project name or path. Empty = auto-detect."
- Added
delimit_ledger_groom - Added
delimit_ledger_health - Changed
delimit_ledger_link4 fields changed- changed
Input schema / properties / from_id / descriptionPrevious value: -"Source item ID (e.g. \"LED-025\")."New value: +"Source item id (e.g. \"LED-025\"). Required." - changed
Input schema / properties / link_type / descriptionPrevious value: -"Relationship type - \"blocks\", \"blocked_by\", \"parent\", \"child\", \"relates_to\", \"duplicates\"."New value: +"One of \"blocks\" (default), \"blocked_by\", \"parent\", \"child\", \"relates_to\", \"duplicates\"." - changed
Input schema / properties / to_id / descriptionPrevious value: -"Target item ID (e.g. \"STR-005\")."New value: +"Target item id (e.g. \"STR-005\"). Required." - changed
Input schema / properties / venture / descriptionPrevious value: -"Project name or path. Auto-detects if empty."New value: +"Project name/path. Empty = auto-detect."
- Changed
delimit_ledger_links2 fields changed- changed
Input schema / properties / item_id / descriptionPrevious value: -"The item ID to look up links for."New value: +"Item id to look up links for. Required." - changed
Input schema / properties / venture / descriptionPrevious value: -"Project name or path. Auto-detects if empty."New value: +"Project name/path. Empty = auto-detect."
- Changed
delimit_ledger_list18 fields changed- added
Input schema / properties / created_afterAdded value: +{ + "default": "", + "description": "ISO-8601 timestamp lower bound on creation time. If omitted, no lower bound is applied.", + "type": "string" +} - added
Input schema / properties / created_beforeAdded value: +{ + "default": "", + "description": "ISO-8601 timestamp upper bound on creation time. If omitted, no upper bound is applied.", + "type": "string" +} - added
Input schema / properties / cursorAdded value: +{ + "default": "", + "description": "Opaque pagination token from prior next_cursor. Becomes invalid if filters change between calls.", + "type": "string" +} - added
Input schema / properties / fieldsAdded value: +{ + "default": "", + "description": "Response projection. \"\" / \"*\" = full; \"slim\" = subset; CSV = those fields only. Unknown names ERROR.", + "type": "string" +} - changed
Input schema / properties / ledger / descriptionPrevious value: -"\"ops\", \"strategy\", or \"both\"."New value: +"\"ops\", \"strategy\", or \"both\" (default)." - changed
Input schema / properties / limit / descriptionPrevious value: -"Max items to return."New value: +"Page size. Default 20." - added
Input schema / properties / linked_external_idAdded value: +{ + "default": "", + "description": "Substring match in description / tags / context (github URL, Linear id, Discord thread).", + "type": "string" +} - added
Input schema / properties / orderAdded value: +{ + "default": "desc", + "description": "\"asc\" or \"desc\" (default).", + "type": "string" +} - changed
Input schema / properties / priority / descriptionPrevious value: -"Filter by priority - \"P0\", \"P1\", \"P2\", or empty for all."New value: +"Single-value priority filter (back-compat)." - added
Input schema / properties / priority_inAdded value: +{ + "default": "", + "description": "Comma-separated priorities (e.g. \"P0,P1\").", + "type": "string" +} - added
Input schema / properties / sortAdded value: +{ + "default": "updated_at", + "description": "\"updated_at\" (default), \"created_at\", or \"priority\".", + "type": "string" +} - changed
Input schema / properties / status / descriptionPrevious value: -"Filter by status - \"open\", \"done\", \"in_progress\", or empty for all."New value: +"Single-value status filter (back-compat)." - added
Input schema / properties / status_inAdded value: +{ + "default": "", + "description": "Comma-separated statuses (e.g. \"open,blocked\").", + "type": "string" +} - added
Input schema / properties / tags_contains_allAdded value: +{ + "default": "", + "description": "Comma-separated tags; item must contain ALL.", + "type": "string" +} - added
Input schema / properties / textAdded value: +{ + "default": "", + "description": "Case-insensitive substring match on title + description.", + "type": "string" +} - added
Input schema / properties / updated_afterAdded value: +{ + "default": "", + "description": "ISO-8601 timestamp lower bound on last-update time. If omitted, no lower bound is applied.", + "type": "string" +} - added
Input schema / properties / updated_beforeAdded value: +{ + "default": "", + "description": "ISO-8601 timestamp upper bound on last-update time. If omitted, no upper bound is applied.", + "type": "string" +} - changed
Input schema / properties / venture / descriptionPrevious value: -"Project name or path. Auto-detects if empty."New value: +"Project name/path. Empty = auto-detect."
- Changed
delimit_ledger_propose3 fields changed- changed
Input schema / properties / focus / descriptionPrevious value: -"Optional area filter - \"outreach\", \"engineering\", \"security\", etc."New value: +"Optional area filter — \"outreach\", \"engineering\", \"security\", etc." - changed
Input schema / properties / max_items / descriptionPrevious value: -"Maximum proposals to generate (default 5)."New value: +"Maximum proposals. Default 5." - changed
Input schema / properties / venture / descriptionPrevious value: -"Focus on a specific venture (auto-detects if empty)."New value: +"Focus on a specific venture. Empty = auto-detect."
- Changed
delimit_ledger_query2 fields changed- changed
Input schema / properties / query / descriptionPrevious value: -"Natural language question about the ledger."New value: +"Natural-language question (e.g. \"what's blocked?\", \"search for dashboard\"). Required." - changed
Input schema / properties / venture / descriptionPrevious value: -"Project name or path. Auto-detects if empty."New value: +"Project name/path. Empty = auto-detect."
- Changed
delimit_ledger_update11 fields changed- changed
Input schema / properties / assignee / descriptionPrevious value: -"Assign to a person or agent (e.g. \"founder\", \"claude\", \"codex\")."New value: +"Assign to person or agent (e.g. \"founder\", \"claude\")." - changed
Input schema / properties / blocked_by / descriptionPrevious value: -"Item ID that blocks this item (e.g. \"LED-025\")."New value: +"Item id that blocks this one (e.g. \"LED-025\")." - changed
Input schema / properties / blocks / descriptionPrevious value: -"Item ID that this item blocks (e.g. \"STR-005\")."New value: +"Item id that this one blocks (e.g. \"STR-005\")." - changed
Input schema / properties / due_date / descriptionPrevious value: -"Due date in ISO format (e.g. \"2026-04-01\")."New value: +"ISO date string (e.g. \"2026-04-01\")." - changed
Input schema / properties / item_id / descriptionPrevious value: -"The item ID (e.g. LED-001 or STR-001)."New value: +"Ledger item id, e.g. \"LED-001\" or \"STR-001\". Required." - changed
Input schema / properties / labels / descriptionPrevious value: -"Labels/tags (e.g. [\"dashboard\", \"ux\"] or \"dashboard,ux\")."New value: +"Labels/tags as comma string or list." - changed
Input schema / properties / note / descriptionPrevious value: -"Add a note/comment to the item."New value: +"Append a note/comment to the item." - changed
Input schema / properties / priority / descriptionPrevious value: -"New priority - \"P0\", \"P1\", \"P2\"."New value: +"New priority — \"P0\", \"P1\", \"P2\"." - changed
Input schema / properties / status / descriptionPrevious value: -"New status - \"open\", \"in_progress\", \"blocked\", \"done\"."New value: +"New status — \"open\", \"in_progress\", \"blocked\", \"done\"." - changed
Input schema / properties / venture / descriptionPrevious value: -"Project name or path. Auto-detects if empty."New value: +"Project name/path. Empty = auto-detect." - changed
Input schema / properties / worked_by / descriptionPrevious value: -"Which AI model is working on this. Auto-detected if empty."New value: +"AI model working on this. Empty = auto-detect."
- Changed
delimit_lint4 fields changed- changed
Input schema / properties / dry_run / descriptionPrevious value: -"If True, return violations without side effects (no evidence, no chains)."New value: +"If True, return violations + semver without side effects." - changed
Input schema / properties / new_spec / descriptionPrevious value: -"Path to the new (proposed) OpenAPI spec file."New value: +"Path or URL to the proposed spec." - changed
Input schema / properties / old_spec / descriptionPrevious value: -"Path to the old (baseline) OpenAPI spec file."New value: +"Path or URL to the baseline spec." - changed
Input schema / properties / policy_file / descriptionPrevious value: -"Optional path to a .delimit/policies.yml file."New value: +"Optional .delimit/policies.yml path."
- Changed
delimit_loop_config7 fields changed- changed
Input schema / properties / auto_consensus / descriptionPrevious value: -"If True, suggest consensus when ledger is empty."New value: +"If True, suggest consensus when ledger empty." - changed
Input schema / properties / cost_cap / descriptionPrevious value: -"Max cost in dollars before stopping (default 5.0)."New value: +"Max session cost in dollars. Default 5.0." - changed
Input schema / properties / error_threshold / descriptionPrevious value: -"Consecutive errors before circuit breaker trips (default 3)."New value: +"Consecutive errors before circuit-breaker trips. Default 3." - changed
Input schema / properties / max_iterations / descriptionPrevious value: -"Max tasks before stopping (default 50)."New value: +"Max tasks before stopping. Default 50." - changed
Input schema / properties / require_approval_for / descriptionPrevious value: -"Comma-separated list of action types requiring human approval."New value: +"Comma-separated action types requiring human approval." - changed
Input schema / properties / session_id / descriptionPrevious value: -"Session to configure. Creates new if empty."New value: +"Session to configure. Empty = create new." - changed
Input schema / properties / status / descriptionPrevious value: -"Set loop status: running, paused, stopped."New value: +"Set loop status — \"running\", \"paused\", \"stopped\"."
- Changed
delimit_loop_status1 field changed- changed
Input schema / properties / session_id / descriptionPrevious value: -"The session to check. Uses most recent if empty."New value: +"Session id to check. Empty = most recent session."
- Added
delimit_memory_index - Changed
delimit_memory_recent1 field changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Number of recent entries to return."New value: +"Number of most-recent entries to return. Default 5."
- Changed
delimit_memory_search2 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum results to return."New value: +"Maximum number of matching entries to return. Default 10." - changed
Input schema / properties / query / descriptionPrevious value: -"Natural language search query."New value: +"Natural-language search query. Required."
- Changed
delimit_memory_store3 fields changed- changed
Input schema / properties / content / descriptionPrevious value: -"The content to remember."New value: +"The content to remember. Required." - added
Input schema / properties / hot_loadAdded value: +{ + "default": false, + "description": "When True, mark for one-way projection into the Claude Code MEMORY.md hot-load index (LED-1165 Phase 2). Default False = durable but not projected.", + "type": "boolean" +} - changed
Input schema / properties / tags / descriptionPrevious value: -"Optional categorization tags."New value: +"Optional categorization tags as comma string or list."
- Changed
delimit_models4 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"list, detect, add, or remove."New value: +"One of \"list\" (default), \"detect\", \"add\", \"remove\"." - changed
Input schema / properties / api_key / descriptionPrevious value: -"API key for the provider (only used with action=add)."New value: +"API key value. Required for action=\"add\"." - changed
Input schema / properties / model_name / descriptionPrevious value: -"Optional model name override (e.g. \"gpt-4o\", \"claude-sonnet-4-5-20250514\")."New value: +"Optional model override (e.g. \"gpt-4o\", \"claude-sonnet-4-5\"). Falls back to provider default." - changed
Input schema / properties / provider / descriptionPrevious value: -"Model provider for add/remove (grok, gemini, openai, anthropic, codex)."New value: +"Provider name for add/remove. One of \"grok\", \"gemini\", \"openai\", \"anthropic\", \"codex\". Required for add/remove."
- Changed
delimit_next_task3 fields changed- changed
Input schema / properties / max_risk / descriptionPrevious value: -"Filter tasks by max risk level (low, medium, high, critical)."New value: +"Max risk level — \"low\", \"medium\", \"high\", \"critical\"." - changed
Input schema / properties / session_id / descriptionPrevious value: -"Resume an existing session. Creates a new one if empty."New value: +"Resume existing session. Empty = new." - changed
Input schema / properties / venture / descriptionPrevious value: -"Project name or path. Auto-detects if empty."New value: +"Project name or path. Empty = auto-detect."
- Changed
delimit_notify6 fields changed- added
Input schema / properties / draft_kindAdded value: +{ + "default": "", + "description": "One of github_comment, social_post, ledger_done, notify_routing_update, deploy_publish_prevalidated_artifact. When set, registers a signed draft in the local SQLite registry so a future executor can match founder Ship-it replies against it.", + "type": "string" +} - added
Input schema / properties / draft_payloadAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "description": "The action contents (e.g. {\"body\": \"...\"} for github_comment). JSON string or dict. Required when draft_kind is set." +} - added
Input schema / properties / draft_targetAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Where the action lands (e.g. {\"repo\":\"x/y\",\"issue\":1}). JSON string or dict. Required when draft_kind is set." +} - changed
Input schema / properties / from_account / descriptionPrevious value: -"Sender account key from ~/.delimit/secrets/smtp-all.json\n(e.g. 'notifications@example.com'). Email only."New value: +"Sender account key from ~/.delimit/secrets/smtp-all.json (e.g. 'notifications@example.com'). Email only. Optional inbox-executor binding (LED-1129 Phase 1, no auto-execution yet):." - added
Input schema / properties / led_refAdded value: +{ + "default": "", + "description": "Optional LED-XXXX tag tying the draft to its tracking item. Surfaced in subject-line matching by the executor.", + "type": "string" +} - changed
Input schema / properties / to / descriptionPrevious value: -"Recipient email address (email only). Overrides default DELIMIT_SMTP_TO.\nSend to any address - leave empty for default."New value: +"Recipient email address (email only). Overrides default DELIMIT_SMTP_TO. Send to any address - leave empty for default."
- Changed
delimit_notify_inbox2 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"'status' (show inbox state), 'poll' (classify and optionally forward),\n 'history' (show routing log)."New value: +"\"status\" (default), \"poll\", or \"history\"." - changed
Input schema / properties / process / descriptionPrevious value: -"If True with action='poll', actually forward owner-action emails.\n If False, dry-run only (classify without forwarding)."New value: +"With action=\"poll\", forward owner-action emails when True (default), dry-run only when False."
- Changed
delimit_notify_routing5 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"'status' (show current config), 'configure' (update routing rules),\n 'test' (send test notifications at each severity level)."New value: +"One of \"status\" (default), \"configure\", \"test\"." - changed
Input schema / properties / config / descriptionPrevious value: -"JSON string with routing config for action='configure'.\nExample: {\"routing\": {\"critical\": {\"channels\": [\"email\",\"webhook\"],\n\"email_subject_prefix\": \"[URGENT]\", \"webhook_priority\": \"high\"},\n\"warning\": {\"channels\": [\"webhook\"], \"webhook_priority\": \"normal\"},\n\"info\": {\"channels\": [], \"digest\": true}}}"New value: +"JSON string with routing config for action=\"configure\". Example shape: {\"routing\": {\"critical\": {...}, ...}}." - changed
Input schema / properties / email_to / descriptionPrevious value: -"Email recipient for test notifications."New value: +"Email recipient used by action=\"test\"." - changed
Input schema / properties / from_account / descriptionPrevious value: -"Sender account key for test email delivery."New value: +"Sender account key for the test email." - changed
Input schema / properties / webhook_url / descriptionPrevious value: -"Webhook URL for test notifications."New value: +"Webhook URL used by action=\"test\"."
- Changed
delimit_obs_alerts3 fields changed- added
Input schema / properties / action / descriptionAdded value: +"Alert sub-action. One of \"list\", \"create\", \"update\", \"delete\". Required." - added
Input schema / properties / alert_rule / descriptionAdded value: +"Rule definition dict (required for create/update). Backend-specific schema." - added
Input schema / properties / rule_id / descriptionAdded value: +"Identifier for an existing rule (required for delete/update)."
- Changed
delimit_obs_logs3 fields changed- added
Input schema / properties / query / descriptionAdded value: +"Search string (backend-specific syntax). Required." - added
Input schema / properties / source / descriptionAdded value: +"Optional log source override. Default None." - added
Input schema / properties / time_range / descriptionAdded value: +"Window like \"1h\", \"24h\", \"7d\". Default \"1h\"."
- Changed
delimit_obs_metrics3 fields changed- added
Input schema / properties / query / descriptionAdded value: +"Metric query name. Default \"system\" (general system metrics). Backend-specific values supported." - added
Input schema / properties / source / descriptionAdded value: +"Optional data source override. Default None = backend default source." - added
Input schema / properties / time_range / descriptionAdded value: +"Window like \"1h\", \"24h\", \"7d\". Default \"1h\"."
- Changed
delimit_os_gates1 field changed- changed
Input schema / properties / plan_id / descriptionPrevious value: -"The plan ID (e.g. \"PLAN-A1B2C3D4\")."New value: +"Plan identifier, e.g. \"PLAN-A1B2C3D4\". Required."
- Changed
delimit_os_plan4 fields changed- changed
Input schema / properties / operation / descriptionPrevious value: -"Operation to plan (e.g. \"deploy\", \"migrate\")."New value: +"Operation to plan (e.g. \"deploy\", \"migrate\"). Required." - changed
Input schema / properties / parameters / descriptionPrevious value: -"Operation parameters."New value: +"Optional operation parameters as dict or JSON string." - changed
Input schema / properties / require_approval / descriptionPrevious value: -"Whether to require approval before execution."New value: +"If True (default), the plan requires approval before execution." - changed
Input schema / properties / target / descriptionPrevious value: -"Target component or service."New value: +"Target component or service. Required."
- Added
delimit_outreach_loop_tick - Changed
delimit_playbook6 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"\"save\", \"run\", \"list\", or \"delete\"."New value: +"\"save\", \"run\", \"list\" (default), or \"delete\"." - changed
Input schema / properties / description / descriptionPrevious value: -"Short description of what this playbook does."New value: +"Short description." - changed
Input schema / properties / model_hint / descriptionPrevious value: -"Suggested model (e.g. \"claude-opus\" for complex tasks)."New value: +"Suggested model (e.g. \"claude-opus\")." - changed
Input schema / properties / name / descriptionPrevious value: -"Playbook name (required for save/run/delete)."New value: +"Playbook name. Required for save/run/delete." - changed
Input schema / properties / prompt / descriptionPrevious value: -"Prompt template with {{variable}} placeholders (save only)."New value: +"Template with {{variable}} placeholders (save only)." - changed
Input schema / properties / variables / descriptionPrevious value: -"For run: comma-separated key=value pairs. For save: comma-separated variable names."New value: +"For run, \"key=value,...\"; for save, \"name1,name2,...\"."
- Changed
delimit_policy4 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"\"inspect\" or \"simulate\"."New value: +"\"inspect\" (default) or \"simulate\"." - changed
Input schema / properties / new_spec / descriptionPrevious value: -"Path to proposed spec (required for simulate)."New value: +"Proposed spec path (required for simulate)." - changed
Input schema / properties / old_spec / descriptionPrevious value: -"Path to baseline spec (required for simulate)."New value: +"Baseline spec path (required for simulate)." - changed
Input schema / properties / spec_files / descriptionPrevious value: -"List of spec file paths."New value: +"List of spec file paths. Required."
- Changed
delimit_project_config5 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"\"load\", \"init\", or \"model\"."New value: +"\"load\" (default), \"init\", or \"model\"." - changed
Input schema / properties / mode / descriptionPrevious value: -"Governance mode for init (advisory/guarded/enforce)."New value: +"Governance mode (only for init). One of \"advisory\", \"guarded\", \"enforce\". Default \"advisory\"." - changed
Input schema / properties / preset / descriptionPrevious value: -"Policy preset for init (strict/default/relaxed)."New value: +"Policy preset (only for init). One of \"strict\", \"default\", \"relaxed\". Default \"default\"." - changed
Input schema / properties / project_path / descriptionPrevious value: -"Project root directory."New value: +"Project root directory. Default \".\" (cwd)." - changed
Input schema / properties / task_type / descriptionPrevious value: -"Task type for model lookup (refactoring/testing/docs/debugging)."New value: +"Task type for model lookup (only for action=\"model\")."
- Changed
delimit_prompt_drift5 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"\"record\", \"check\", or \"rank\"."New value: +"\"record\", \"check\" (default), or \"rank\"." - changed
Input schema / properties / model / descriptionPrevious value: -"AI model name (for record)."New value: +"AI model name (required for record)." - changed
Input schema / properties / prompt / descriptionPrevious value: -"The prompt text (for record/check)."New value: +"Prompt text (for record / check)." - changed
Input schema / properties / success / descriptionPrevious value: -"Whether the result was good (\"true\"/\"false\")."New value: +"\"true\" / \"false\" — whether the result was good." - changed
Input schema / properties / task_type / descriptionPrevious value: -"Task category (refactoring/testing/debugging/docs)."New value: +"Task category — \"refactoring\", \"testing\", \"debugging\", \"docs\"."
- Changed
delimit_quickstart1 field changed- changed
Input schema / properties / project_path / descriptionPrevious value: -"Path to the project to quickstart."New value: +"Project path to quickstart. Default \".\" (cwd)."
- Changed
delimit_redact3 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"\"scan\" or \"redact\"."New value: +"\"scan\" (preview, default) or \"redact\" (replace)." - changed
Input schema / properties / categories / descriptionPrevious value: -"Comma-separated categories (api_key, secret, pii, infra). Empty = all."New value: +"Comma-separated categories — \"api_key\", \"secret\", \"pii\", \"infra\". Empty = all categories." - changed
Input schema / properties / text / descriptionPrevious value: -"Text to scan/redact."New value: +"Text to process."
- Changed
delimit_reddit_scan2 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Posts per subreddit (default 10, max 25)."New value: +"Posts per subreddit. Default 10, max 25." - changed
Input schema / properties / sort / descriptionPrevious value: -"Reddit sort order (hot, new, top)."New value: +"Reddit sort order — \"hot\" (default), \"new\", \"top\"."
- Changed
delimit_release_history2 fields changed- added
Input schema / properties / environment / descriptionAdded value: +"Target environment. Required." - added
Input schema / properties / limit / descriptionAdded value: +"Maximum number of releases to return. Default 10."
- Changed
delimit_release_plan4 fields changed- added
Input schema / properties / environment / descriptionAdded value: +"Target environment, \"production\" or \"staging\". Default \"production\"." - added
Input schema / properties / repository / descriptionAdded value: +"Repository path. Default \".\" (cwd)." - added
Input schema / properties / services / descriptionAdded value: +"Optional list of service names to scope the plan; None = all services in the repo manifest." - added
Input schema / properties / version / descriptionAdded value: +"Release version. Auto-detected from git tags if empty."
- Changed
delimit_release_rollback3 fields changed- added
Input schema / properties / environment / descriptionAdded value: +"Target environment. Required." - added
Input schema / properties / to_version / descriptionAdded value: +"Prior release version to roll back to. Required." - added
Input schema / properties / version / descriptionAdded value: +"Current release version that is failing. Required."
- Changed
delimit_release_status1 field changed- added
Input schema / properties / environment / descriptionAdded value: +"Target environment. Default \"production\"."
- Changed
delimit_release_sync1 field changed- added
Input schema / properties / action / descriptionAdded value: +"Sub-action — \"audit\" (default) or \"config\"."
- Changed
delimit_release_validate2 fields changed- added
Input schema / properties / environment / descriptionAdded value: +"Target environment (\"production\" / \"staging\")." - added
Input schema / properties / version / descriptionAdded value: +"Release version string. Required."
- Changed
delimit_repo_analyze1 field changed- changed
Input schema / properties / target / descriptionPrevious value: -"Repository path."New value: +"Repository path, \"owner/repo\", or GitHub URL. Default \".\" (cwd)."
- Changed
delimit_repo_config_audit1 field changed- changed
Input schema / properties / target / descriptionPrevious value: -"Repository or config path."New value: +"Repository or config path, \"owner/repo\", or GitHub URL. Default \".\" (cwd)."
- Changed
delimit_repo_config_validate1 field changed- changed
Input schema / properties / target / descriptionPrevious value: -"Repository or config path."New value: +"Repository or config path, \"owner/repo\", or GitHub URL. Default \".\" (cwd)."
- Changed
delimit_repo_diagnose1 field changed- changed
Input schema / properties / target / descriptionPrevious value: -"Repository path."New value: +"Repository path. Default \".\" (cwd)."
- Changed
delimit_resource_get4 fields changed- changed
Input schema / properties / driver / descriptionPrevious value: -"The data plane driver to use (default: github)."New value: +"Driver key. Default \"github\"." - changed
Input schema / properties / identifier / descriptionPrevious value: -"The resource identifier (repo name, PR number, run ID)."New value: +"Resource identifier — repo name, PR number, run id. Required." - changed
Input schema / properties / repo / descriptionPrevious value: -"Repository in owner/name format (for PRs, issues, workflow runs)."New value: +"\"owner/name\" required for PRs / issues / workflow runs." - changed
Input schema / properties / resource / descriptionPrevious value: -"The resource type (repos, pull_requests, issues, workflows)."New value: +"One of \"repos\", \"pull_requests\", \"issues\", \"workflows\". Required."
- Changed
delimit_resource_list6 fields changed- changed
Input schema / properties / driver / descriptionPrevious value: -"The data plane driver to use (default: github)."New value: +"Driver key. Default \"github\"." - changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum number of results."New value: +"Max results. Default 10." - changed
Input schema / properties / org / descriptionPrevious value: -"Organization filter (for repos)."New value: +"Organization filter for repos." - changed
Input schema / properties / repo / descriptionPrevious value: -"Repository in owner/name format (required for workflows)."New value: +"\"owner/name\" — required for workflow listing." - changed
Input schema / properties / resource / descriptionPrevious value: -"The resource type to list (repos, pull_requests, issues, workflows)."New value: +"One of \"repos\", \"pull_requests\", \"issues\", \"workflows\". Required." - changed
Input schema / properties / state / descriptionPrevious value: -"State filter for PRs/issues (open, closed, all)."New value: +"PR/issue state — \"open\" (default), \"closed\", \"all\"."
- Changed
delimit_review3 fields changed- changed
Input schema / properties / context / descriptionPrevious value: -"Additional context about the change (what it does, why)."New value: +"Additional context about the change." - changed
Input schema / properties / diff / descriptionPrevious value: -"Git diff or code to review. Takes priority over file_path."New value: +"Git diff or code text to review. Takes priority over file_path." - changed
Input schema / properties / file_path / descriptionPrevious value: -"Path to file to review (reads current content)."New value: +"Path to file to review (reads current content if no diff)."
- Changed
delimit_revive3 fields changed- changed
Input schema / properties / project_path / descriptionPrevious value: -"Project to revive. Auto-detects from cwd."New value: +"Project path to revive. Empty = auto-detect from cwd." - added
Input schema / properties / scopeAdded value: +{ + "default": "", + "description": "Optional handoff/receipt id. When set, revives ONLY that scoped handoff context (for dispatched subagents) instead of the global session soul. Empty = full soul (default).", + "type": "string" +} - changed
Input schema / properties / soul_id / descriptionPrevious value: -"Specific soul to revive. Empty = latest."New value: +"Specific soul id to revive. Empty = latest."
- Changed
delimit_scan1 field changed- changed
Input schema / properties / project_path / descriptionPrevious value: -"Path to the project to scan."New value: +"Path to the project to scan. Default \".\" (cwd)."
- Changed
delimit_screen_record5 fields changed- changed
Input schema / properties / duration / descriptionPrevious value: -"Recording duration in seconds (max 120)"New value: +"Recording duration in seconds. Max 120. Default 30." - changed
Input schema / properties / mode / descriptionPrevious value: -"\"browser\" or \"terminal\""New value: +"\"browser\" (default) or \"terminal\"." - changed
Input schema / properties / name / descriptionPrevious value: -"Output filename (without extension)"New value: +"Output filename without extension. Default \"recording\"." - changed
Input schema / properties / script / descriptionPrevious value: -"Shell script to run (terminal mode only). If empty, records idle terminal."New value: +"Shell script to run (terminal mode only). Empty = idle terminal capture." - changed
Input schema / properties / url / descriptionPrevious value: -"URL to visit (browser mode only)"New value: +"URL to visit (browser mode only)."
- Changed
delimit_screenshot2 fields changed- changed
Input schema / properties / name / descriptionPrevious value: -"Output filename (without extension)."New value: +"Output filename (without extension). Default \"screenshot\"." - changed
Input schema / properties / url / descriptionPrevious value: -"URL to screenshot."New value: +"URL to screenshot. Required."
- Added
delimit_seal_verify - Changed
delimit_secret_access_log1 field changed- added
Input schema / properties / name / descriptionAdded value: +"Optional secret name to filter the log. Empty = all secrets."
- Changed
delimit_secret_get3 fields changed- added
Input schema / properties / agent_type / descriptionAdded value: +"Identity of the requesting agent (used by the broker to check scope)." - added
Input schema / properties / name / descriptionAdded value: +"Secret name to retrieve. Required." - added
Input schema / properties / tool / descriptionAdded value: +"Name of the requesting tool (used by the broker to check scope)."
- Changed
delimit_secret_revoke1 field changed- added
Input schema / properties / name / descriptionAdded value: +"Secret name to revoke. Required."
- Changed
delimit_secret_store4 fields changed- added
Input schema / properties / description / descriptionAdded value: +"Human-readable description for audit trails." - added
Input schema / properties / name / descriptionAdded value: +"Secret name (key). Required." - added
Input schema / properties / scope / descriptionAdded value: +"Comma-separated agent/tool scopes that may access this secret, or \"all\" to allow any. Default \"all\"." - added
Input schema / properties / value / descriptionAdded value: +"Secret value (the actual credential). Required."
- Changed
delimit_security_audit2 fields changed- added
Input schema / properties / include_testsAdded value: +{ + "default": false, + "description": "When True, scan test directories (tests/, __tests__/, spec/, fixtures/, etc.). Default False — test trees are skipped to avoid the canonical fixture-credential FP class (LED-1278).", + "type": "boolean" +} - changed
Input schema / properties / target / descriptionPrevious value: -"Repository or file path to audit."New value: +"Repository or file path to audit. Default \".\" (cwd)."
- Changed
delimit_security_deliberate2 fields changed- changed
Input schema / properties / findings / descriptionPrevious value: -"JSON string of findings to triage, or empty to pull from ledger."New value: +"JSON string of findings to triage. Empty = pull from the ledger automatically." - changed
Input schema / properties / focus / descriptionPrevious value: -"Which findings to triage - \"critical\", \"high\", \"all\". Default: critical."New value: +"Which findings to triage — \"critical\" (default), \"high\", \"all\"."
- Changed
delimit_security_ingest4 fields changed- changed
Input schema / properties / commit_sha / descriptionPrevious value: -"Git commit SHA the scan was run against. Auto-detects if empty."New value: +"Git SHA the scan ran against. Empty = auto-detect." - changed
Input schema / properties / repo / descriptionPrevious value: -"Repository identifier (e.g. \"my-org/my-repo\"). Auto-detects if empty."New value: +"\"owner/repo\" identifier. Empty = auto-detect." - changed
Input schema / properties / results / descriptionPrevious value: -"JSON string of scan results, or path to a JSON results file."New value: +"JSON string of scan results, or path to a JSON file. Required." - changed
Input schema / properties / tool / descriptionPrevious value: -"Scanner name (trivy, semgrep, npm-audit, pip-audit, snyk, codeql)."New value: +"Scanner name — one of \"trivy\", \"semgrep\", \"npm-audit\", \"pip-audit\", \"snyk\", \"codeql\". Required."
- Changed
delimit_security_scan1 field changed- changed
Input schema / properties / target / descriptionPrevious value: -"Repository or file path."New value: +"Repository or file path. Default \".\" (cwd)."
- Added
delimit_self_repair_daemon - Changed
delimit_semver3 fields changed- changed
Input schema / properties / current_version / descriptionPrevious value: -"Optional current version (e.g. \"1.2.3\") to compute next version."New value: +"Optional version string (e.g. \"1.2.3\") to compute the next version. Default None = no next computed." - changed
Input schema / properties / new_spec / descriptionPrevious value: -"Path to the new OpenAPI spec file."New value: +"Path to the proposed OpenAPI spec file. Required." - changed
Input schema / properties / old_spec / descriptionPrevious value: -"Path to the old OpenAPI spec file."New value: +"Path to the baseline OpenAPI spec file. Required."
- Changed
delimit_sense8 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"One of 'query', 'digest', 'show', 'promote', 'freeze', 'status'."New value: +"One of \"query\" (default), \"digest\", \"show\", \"promote\", \"freeze\", \"status\"." - changed
Input schema / properties / ledger / descriptionPrevious value: -"Target ledger for 'promote' (ops or strategy)."New value: +"Target ledger for promote — \"ops\" (default) or \"strategy\"." - changed
Input schema / properties / limit / descriptionPrevious value: -"Max rows to return (query). Default 50."New value: +"Max rows for query. Default 50." - changed
Input schema / properties / month / descriptionPrevious value: -"YYYY-MM for 'freeze' action (cold archive)."New value: +"YYYY-MM string for \"freeze\"." - changed
Input schema / properties / platform / descriptionPrevious value: -"Filter by source platform (reddit, x, github, hn). Empty = all."New value: +"Filter source platform — \"reddit\", \"x\", \"github\", \"hn\". Empty = all." - changed
Input schema / properties / priority / descriptionPrevious value: -"Priority for the promoted ledger item (P0/P1/P2)."New value: +"Priority for promoted item — \"P0\", \"P1\", \"P2\"." - changed
Input schema / properties / signal_id / descriptionPrevious value: -"Signal id (SIG-XXXX) for 'show' and 'promote'."New value: +"SIG-XXXX id for \"show\" / \"promote\"." - changed
Input schema / properties / since_days / descriptionPrevious value: -"Lookback window in days (query/digest). Default 1 = last 24h."New value: +"Lookback window in days (query/digest). Default 1."
- Changed
delimit_sensor_github_issue3 fields changed- changed
Input schema / properties / issue_number / descriptionPrevious value: -"The issue number to monitor."New value: +"Issue number to monitor. Must be > 0." - changed
Input schema / properties / repo / descriptionPrevious value: -"GitHub repository in owner/repo format (e.g. \"owner/repo\")."New value: +"\"owner/repo\" GitHub repository. Required." - changed
Input schema / properties / since_comment_id / descriptionPrevious value: -"Last seen comment ID. Pass 0 to get all comments."New value: +"Last seen comment id. 0 = all comments."
- Changed
delimit_sensor_github_migrations1 field changed- changed
Input schema / properties / repos / descriptionPrevious value: -"List of GitHub repos in owner/repo format (e.g. [\"chatwoot/chatwoot\", \"cal-com/cal.com\"])."New value: +"List of GitHub repos in owner/repo format (e.g. [\"chatwoot/chatwoot\", \"cal-com/cal.com\"]). Required."
- Changed
delimit_session_handoff4 fields changed- changed
Input schema / properties / items_added / descriptionPrevious value: -"List of newly added item IDs."New value: +"Newly added item ids as list or comma string." - changed
Input schema / properties / items_completed / descriptionPrevious value: -"List of completed ledger item IDs (e.g. [\"LED-164\", \"LED-165\"])."New value: +"Completed ledger item ids (e.g. [\"LED-164\"]) as list or comma string." - changed
Input schema / properties / summary / descriptionPrevious value: -"2-3 sentence summary of what happened this session."New value: +"2-3 sentence summary of the session. Required." - changed
Input schema / properties / venture / descriptionPrevious value: -"Venture context. Auto-detects if empty."New value: +"Venture context. Empty = auto-detect."
- Changed
delimit_session_history1 field changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Number of recent sessions to return (default 5)."New value: +"Number of recent sessions to return. Default 5."
- Changed
delimit_siem5 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"status, configure, test, or forward"New value: +"One of \"status\" (default), \"configure\", \"test\", \"forward\"." - changed
Input schema / properties / enabled / descriptionPrevious value: -"\"true\" or \"false\" to enable/disable (for configure)"New value: +"\"true\" or \"false\" (for configure)." - changed
Input schema / properties / event / descriptionPrevious value: -"JSON string of event to forward (for forward/test)"New value: +"JSON string of an event (for forward / test)." - changed
Input schema / properties / integration / descriptionPrevious value: -"splunk, datadog, eventbridge, or webhook (for configure)"New value: +"One of \"splunk\", \"datadog\", \"eventbridge\", \"webhook\" (for configure)." - changed
Input schema / properties / settings / descriptionPrevious value: -"JSON string of settings to update (for configure)"New value: +"JSON string of settings (for configure)."
- Changed
delimit_social_approve2 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"'list' to show pending drafts, 'approve' to post a draft,\n 'reject' to discard a draft."New value: +"\"list\" (default), \"approve\", or \"reject\"." - changed
Input schema / properties / draft_id / descriptionPrevious value: -"Required for approve/reject actions. The draft ID from save_draft()."New value: +"Required for approve / reject. Returned by delimit_social_post(draft=True)."
- Changed
delimit_social_daemon1 field changed- changed
Input schema / properties / action / descriptionPrevious value: -"'start' (begin scanning), 'stop' (halt scanning),\n 'status' (show daemon state, last scan, targets found)."New value: +"\"start\", \"stop\", or \"status\" (default)."
- Changed
delimit_social_generate1 field changed- added
Input schema / properties / category / descriptionAdded value: +"Post category — \"tip\" (default), \"changelog\", \"insight\", or \"engagement\"."
- Changed
delimit_social_history2 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Max entries to return."New value: +"Max entries to return. Default 20." - changed
Input schema / properties / platform / descriptionPrevious value: -"Filter by platform - \"twitter\" or \"reddit\"."New value: +"Filter by \"twitter\" or \"reddit\". Empty = all."
- Changed
delimit_social_target_config5 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"status, detect, update, add_subreddits"New value: +"\"status\" (default), \"detect\", \"update\", \"add_subreddits\"." - changed
Input schema / properties / enabled / descriptionPrevious value: -"Enable/disable the platform (used with update action)"New value: +"Enable/disable on update. Default True." - changed
Input schema / properties / platform / descriptionPrevious value: -"Platform to configure (x, reddit, github, hn, devto, namepros)"New value: +"Platform key — \"x\", \"reddit\", \"github\", \"hn\", \"devto\", \"namepros\"." - changed
Input schema / properties / provider / descriptionPrevious value: -"Provider to use, e.g. twttr241, xai, proxy, gh_cli (used with update action)"New value: +"Provider name — \"twttr241\", \"xai\", \"proxy\", \"gh_cli\", etc., for update." - changed
Input schema / properties / subreddits / descriptionPrevious value: -"Comma-separated subreddits to add (with add_subreddits action)"New value: +"Comma-separated subreddits for add_subreddits."
- Changed
delimit_soul_capture2 fields changed- changed
Input schema / properties / context_fullness / descriptionPrevious value: -"0.0-1.0 how full the context window is."New value: +"0.0-1.0 representing context-window fullness." - changed
Input schema / properties / task_status / descriptionPrevious value: -"in_progress, blocked, or almost_done."New value: +"One of \"in_progress\", \"blocked\", \"almost_done\"."
- Changed
delimit_story_accessibility2 fields changed- changed
Input schema / properties / project_path / descriptionPrevious value: -"Project path to scan."New value: +"Project path to scan. Required." - changed
Input schema / properties / standards / descriptionPrevious value: -"Accessibility standard (WCAG2A/WCAG2AA/WCAG2AAA)."New value: +"WCAG standard — \"WCAG2A\", \"WCAG2AA\" (default), \"WCAG2AAA\"."
- Changed
delimit_story_build2 fields changed- changed
Input schema / properties / output_dir / descriptionPrevious value: -"Output directory."New value: +"Output directory. None = Storybook default." - changed
Input schema / properties / project_path / descriptionPrevious value: -"Project path."New value: +"Project path. Required."
- Changed
delimit_story_generate3 fields changed- changed
Input schema / properties / component_path / descriptionPrevious value: -"Path to the component file."New value: +"Path to the component (.tsx) file. Required." - changed
Input schema / properties / story_name / descriptionPrevious value: -"Custom story name. Defaults to component name."New value: +"Custom story name. Default = component name." - changed
Input schema / properties / variants / descriptionPrevious value: -"Variants to generate. Defaults to [Default, WithChildren]."New value: +"Variants to generate (e.g. \"Default,WithChildren\"). Default = [\"Default\", \"WithChildren\"]."
- Changed
delimit_story_visual_test1 field changed- changed
Input schema / properties / threshold / descriptionPrevious value: -"Diff threshold (0.0-1.0)."New value: +"Diff threshold (0.0-1.0). Default 0.05."
- Added
delimit_substantive_content_check - Changed
delimit_task_complete4 fields changed- changed
Input schema / properties / cost_incurred / descriptionPrevious value: -"Estimated cost of this iteration (dollars)."New value: +"Estimated cost (USD)." - changed
Input schema / properties / error / descriptionPrevious value: -"If the task failed, describe the error."New value: +"If task failed, describe error." - changed
Input schema / properties / session_id / descriptionPrevious value: -"The loop session to update."New value: +"Loop session to update." - changed
Input schema / properties / task_id / descriptionPrevious value: -"The ledger item ID that was completed (e.g. LED-042)."New value: +"Ledger item id completed (e.g. \"LED-042\")."
- Added
delimit_tdqs_lint - Changed
delimit_test_coverage2 fields changed- changed
Input schema / properties / project_path / descriptionPrevious value: -"Project path."New value: +"Path to the project root. Required." - changed
Input schema / properties / threshold / descriptionPrevious value: -"Coverage threshold percentage."New value: +"Coverage percentage threshold for pass/fail. Default 80."
- Changed
delimit_test_generate3 fields changed- changed
Input schema / properties / framework / descriptionPrevious value: -"Test framework (jest/pytest/vitest)."New value: +"Test framework — \"jest\" (default), \"pytest\", \"vitest\"." - changed
Input schema / properties / project_path / descriptionPrevious value: -"Project path."New value: +"Project path. Required." - changed
Input schema / properties / source_files / descriptionPrevious value: -"Specific files to generate tests for."New value: +"Specific files to generate tests for. None = all detectable public functions."
- Changed
delimit_test_smoke5 fields changed- added
Input schema / properties / extra_argsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional extra arguments to pass to the test runner." +} - added
Input schema / properties / fail_fastAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": false, + "description": "Stop execution immediately on first failure." +} - changed
Input schema / properties / project_path / descriptionPrevious value: -"Project path."New value: +"Project path. Required." - changed
Input schema / properties / test_suite / descriptionPrevious value: -"Specific test suite to run."New value: +"Optional specific test suite or pattern." - added
Input schema / properties / timeout_secondsAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": 120, + "description": "Optional execution timeout in seconds. Default is 120." +}
- Changed
delimit_toolcard_cache3 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"One of: status, register, delta, clear, estimate, flush"New value: +"One of \"status\" (default), \"register\", \"delta\", \"clear\", \"estimate\", \"flush\", \"usage\" (durable tool utilization + dormancy report)." - changed
Input schema / properties / tool_names / descriptionPrevious value: -"Comma-separated tool names (for delta)"New value: +"Comma-separated tool names (for delta)." - changed
Input schema / properties / tool_schemas / descriptionPrevious value: -"JSON array of tool schema objects (for register/estimate)"New value: +"JSON array of tool schema objects (for register/ estimate)."
- Changed
delimit_tracker_sync2 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Max issues to sync (default 10)."New value: +"Max issues to sync. Default 10." - changed
Input schema / properties / repo / descriptionPrevious value: -"GitHub repository in owner/repo format. Auto-detects from git remote if empty."New value: +"\"owner/repo\" GitHub repo. Empty = auto-detect from git remote."
- Changed
delimit_vault_search1 field changed- changed
Input schema / properties / query / descriptionPrevious value: -"Search query for vault entries."New value: +"Search query string. Required."
- Added
delimit_vendor_news_draft - Added
delimit_vendor_news_health - Added
delimit_vendor_news_scan - Changed
delimit_webhook_manage3 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"list, add, remove, or test."New value: +"One of \"list\" (default), \"add\", \"remove\", \"test\"." - changed
Input schema / properties / events / descriptionPrevious value: -"Comma-separated event filter: \"all\", \"blocked\", \"critical\", \"security\"."New value: +"Comma-separated event filter — \"all\" (default), \"blocked\", \"critical\", \"security\"." - changed
Input schema / properties / url / descriptionPrevious value: -"Webhook URL (Slack, Discord, or any HTTP endpoint)."New value: +"Webhook URL (Slack, Discord, or any HTTP endpoint). Required for add / remove / test (test uses all configured if not specified)."
- Changed
delimit_work_orders4 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"'list' (show pending), 'show' (read one), 'complete' (mark done)."New value: +"One of \"list\" (default), \"show\", \"complete\"." - changed
Input schema / properties / note / descriptionPrevious value: -"Completion note for 'complete'."New value: +"Completion note (used by \"complete\")." - changed
Input schema / properties / status / descriptionPrevious value: -"Filter for list: 'pending', 'completed', 'all'."New value: +"Filter for list — \"pending\" (default), \"completed\", \"all\"." - changed
Input schema / properties / wo_id / descriptionPrevious value: -"Work order ID for 'show' and 'complete'."New value: +"Work order id (required for \"show\" / \"complete\")."
- Added
delimit_x_fetch - Changed
delimit_zero_spec2 fields changed- changed
Input schema / properties / project_dir / descriptionPrevious value: -"Path to the project root directory."New value: +"Project root directory. Default \".\" (cwd)." - changed
Input schema / properties / python_bin / descriptionPrevious value: -"Optional Python binary path (auto-detected if omitted)."New value: +"Optional Python binary path. Empty = auto-detect."
173 tool updates
v4.5.5- Added
_delimit_agent_impl - Added
_delimit_context_impl - Added
_delimit_deploy_impl - Added
_delimit_gov_impl - Added
_delimit_obs_impl - Added
_delimit_release_impl - Added
_delimit_secret_impl - Changed
delimit_activate5 fields changed- added
Input schema / properties / auto_permissionsAdded value: +{ + "default": true, + "description": "Auto-configure AI assistant permissions for Delimit tools (default True).", + "type": "boolean" +} - added
Input schema / properties / license_key / defaultAdded value: +"" - added
Input schema / properties / license_key / descriptionAdded value: +"Optional license key to activate Pro (e.g. DELIMIT-XXXX-XXXX-XXXX). Leave empty to check free-tier readiness." - added
Input schema / properties / project_pathAdded value: +{ + "default": ".", + "description": "Project directory to check.", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "license_key" -]
- Added
delimit_agent_check - Added
delimit_agent_complete - Added
delimit_agent_dashboard - Added
delimit_agent_dispatch - Added
delimit_agent_handoff - Added
delimit_agent_link - Added
delimit_agent_policy - Added
delimit_agent_status - Added
delimit_audit - Added
delimit_build_loop - Added
delimit_build_loop_daemon - Added
delimit_changelog - Added
delimit_collision_check - Added
delimit_config_export - Added
delimit_config_import - Added
delimit_content_publish - Added
delimit_content_queue - Added
delimit_content_schedule - Added
delimit_context_branch - Added
delimit_context_init - Added
delimit_context_list - Added
delimit_context_read - Added
delimit_context_snapshot - Added
delimit_context_write - Changed
delimit_cost_alert4 fields changed- added
Input schema / properties / action / descriptionAdded value: +"Action (list/create/delete/toggle)." - added
Input schema / properties / alert_id / descriptionAdded value: +"Alert ID (required for delete/toggle)." - added
Input schema / properties / name / descriptionAdded value: +"Alert name (required for create)." - added
Input schema / properties / threshold / descriptionAdded value: +"Cost threshold in USD (required for create)."
- Changed
delimit_cost_analyze1 field changed- added
Input schema / properties / target / descriptionAdded value: +"Project or infrastructure path to analyze."
- Added
delimit_cost_controls - Changed
delimit_cost_optimize1 field changed- added
Input schema / properties / target / descriptionAdded value: +"Project or infrastructure path to analyze."
- Added
delimit_daemon_classify - Added
delimit_daemon_run - Added
delimit_daemon_status - Changed
delimit_data_backup1 field changed- added
Input schema / properties / target / descriptionAdded value: +"Directory or file to back up."
- Changed
delimit_data_migrate1 field changed- added
Input schema / properties / target / descriptionAdded value: +"Project path to scan for migration files."
- Changed
delimit_data_validate1 field changed- added
Input schema / properties / target / descriptionAdded value: +"Directory or file path containing data files."
- Changed
delimit_deliberate6 fields changed- added
Input schema / properties / context / descriptionAdded value: +"Background context for all models." - added
Input schema / properties / max_rounds / descriptionAdded value: +"Maximum rounds (default 3 for debate, 6 for dialogue)." - added
Input schema / properties / mode / descriptionAdded value: +"\"dialogue\" (short turns) or \"debate\" (long essays)." - added
Input schema / properties / question / descriptionAdded value: +"The question to reach consensus on." - added
Input schema / properties / save_path / descriptionAdded value: +"Optional file path to save the full transcript." - added
Input schema / properties / scopeAdded value: +{ + "default": "", + "description": "Optional scope override — \"strategic\", \"social\", or\n\"operational\". When empty, the engine classifies from\nkeywords in the question and context. Strategic and social\nscopes enforce the 3-model minimum (charter consensus-thresholds)\nand allow Grok as a tiebreaker on deadlock.", + "type": "string" +}
- Added
delimit_deliberation_status - Changed
delimit_deploy_build2 fields changed- added
Input schema / properties / app / defaultAdded value: +"" - removed
Input schema / requiredRemoved value: -[ - "app" -]
- Changed
delimit_deploy_plan3 fields changed- added
Input schema / properties / app / defaultAdded value: +"" - added
Input schema / properties / env / defaultAdded value: +"" - removed
Input schema / requiredRemoved value: -[ - "app", - "env" -]
- Changed
delimit_deploy_publish2 fields changed- added
Input schema / properties / app / defaultAdded value: +"" - removed
Input schema / requiredRemoved value: -[ - "app" -]
- Changed
delimit_deploy_rollback3 fields changed- added
Input schema / properties / app / defaultAdded value: +"" - added
Input schema / properties / env / defaultAdded value: +"" - removed
Input schema / requiredRemoved value: -[ - "app", - "env" -]
- Changed
delimit_deploy_status3 fields changed- added
Input schema / properties / app / defaultAdded value: +"" - added
Input schema / properties / env / defaultAdded value: +"" - removed
Input schema / requiredRemoved value: -[ - "app", - "env" -]
- Added
delimit_deploy_verify - Changed
delimit_design_component_library2 fields changed- added
Input schema / properties / output_format / descriptionAdded value: +"Output format (json/markdown)." - added
Input schema / properties / project_path / descriptionAdded value: +"Project path to scan."
- Changed
delimit_design_extract_tokens4 fields changed- added
Input schema / properties / figma_file_key / descriptionAdded value: +"Optional Figma file key (auto-uses Figma API if a token is available)." - added
Input schema / properties / project_path / descriptionAdded value: +"Project directory to scan. Defaults to cwd." - changed
Input schema / properties / token_types / anyOfPrevious value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } +] - added
Input schema / properties / token_types / descriptionAdded value: +"Token types to extract (colors, typography, spacing, breakpoints)."
- Changed
delimit_design_generate_component4 fields changed- added
Input schema / properties / component_name / descriptionAdded value: +"Component name (PascalCase)." - added
Input schema / properties / figma_node_id / descriptionAdded value: +"Optional Figma node ID (reserved for future use)." - added
Input schema / properties / output_path / descriptionAdded value: +"Output file path. Defaults to components/<Name>/<Name>.tsx." - added
Input schema / properties / project_path / descriptionAdded value: +"Project root for Tailwind detection."
- Changed
delimit_design_generate_tailwind3 fields changed- added
Input schema / properties / figma_file_key / descriptionAdded value: +"Optional Figma file key (reserved for future use)." - added
Input schema / properties / output_path / descriptionAdded value: +"Output file path for generated config." - added
Input schema / properties / project_path / descriptionAdded value: +"Project root to scan for existing config or CSS tokens."
- Changed
delimit_design_validate_responsive3 fields changed- changed
Input schema / properties / check_types / anyOfPrevious value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } +] - added
Input schema / properties / check_types / descriptionAdded value: +"Check types (breakpoints, containers, fluid-type, etc.)." - added
Input schema / properties / project_path / descriptionAdded value: +"Project path to validate."
- Changed
delimit_diagnose3 fields changed- added
Input schema / properties / dry_runAdded value: +{ + "default": false, + "description": "If True, return a preview of what doctor would create/modify without executing changes.", + "type": "boolean" +} - added
Input schema / properties / project_path / descriptionAdded value: +"Project to diagnose." - added
Input schema / properties / undoAdded value: +{ + "default": false, + "description": "If True, revert changes from the last doctor --fix run using the saved manifest.", + "type": "boolean" +}
- Changed
delimit_diff2 fields changed- added
Input schema / properties / new_spec / descriptionAdded value: +"Path to the new OpenAPI spec file." - added
Input schema / properties / old_spec / descriptionAdded value: +"Path to the old OpenAPI spec file."
- Added
delimit_diff_report - Added
delimit_digest - Changed
delimit_docs_generate1 field changed- added
Input schema / properties / target / descriptionAdded value: +"Project path."
- Changed
delimit_docs_validate1 field changed- added
Input schema / properties / target / descriptionAdded value: +"Project path."
- Added
delimit_drift_check - Added
delimit_drift_history - Changed
delimit_evidence_collect2 fields changed- added
Input schema / properties / evidence_typeAdded value: +{ + "default": "", + "description": "Type of evidence (e.g. \"deploy\", \"security\", \"test\", \"audit\"). Stored in bundle metadata.", + "type": "string" +} - added
Input schema / properties / target / descriptionAdded value: +"Repository or task path."
- Changed
delimit_evidence_verify2 fields changed- added
Input schema / properties / bundle_id / descriptionAdded value: +"Evidence bundle ID to verify." - added
Input schema / properties / bundle_path / descriptionAdded value: +"Path to evidence bundle file."
- Added
delimit_executor - Changed
delimit_explain6 fields changed- added
Input schema / properties / api_name / descriptionAdded value: +"API/service name for context." - added
Input schema / properties / new_spec / descriptionAdded value: +"Path to the new OpenAPI spec file." - added
Input schema / properties / new_version / descriptionAdded value: +"New version string." - added
Input schema / properties / old_spec / descriptionAdded value: +"Path to the old OpenAPI spec file." - added
Input schema / properties / old_version / descriptionAdded value: +"Previous version string." - added
Input schema / properties / template / descriptionAdded value: +"Template name (default: developer)."
- Added
delimit_external_pr_check - Changed
delimit_generate_scaffold4 fields changed- added
Input schema / properties / name / descriptionAdded value: +"Project name." - changed
Input schema / properties / packages / anyOfPrevious value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } +] - added
Input schema / properties / packages / descriptionAdded value: +"Packages to include." - added
Input schema / properties / project_type / descriptionAdded value: +"Project type (nextjs, api, library, etc.)."
- Changed
delimit_generate_template6 fields changed- changed
Input schema / properties / features / anyOfPrevious value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } +] - added
Input schema / properties / features / descriptionAdded value: +"Optional feature flags." - added
Input schema / properties / framework / descriptionAdded value: +"Target framework." - added
Input schema / properties / name / descriptionAdded value: +"Name for the generated code." - added
Input schema / properties / targetAdded value: +{ + "default": ".", + "description": "Directory to write the generated file into. Defaults to current directory.", + "type": "string" +} - added
Input schema / properties / template_type / descriptionAdded value: +"Template type (component, page, api, etc.)."
- Added
delimit_github_scan - Changed
delimit_gov_evaluate3 fields changed- added
Input schema / properties / action / defaultAdded value: +"" - changed
Input schema / properties / context / anyOfPrevious value: -[ - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "type": "string" + }, + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } +] - removed
Input schema / requiredRemoved value: -[ - "action" -]
- Changed
delimit_gov_new_task3 fields changed- added
Input schema / properties / scope / defaultAdded value: +"" - added
Input schema / properties / title / defaultAdded value: +"" - removed
Input schema / requiredRemoved value: -[ - "title", - "scope" -]
- Changed
delimit_gov_run2 fields changed- added
Input schema / properties / task_id / defaultAdded value: +"" - removed
Input schema / requiredRemoved value: -[ - "task_id" -]
- Changed
delimit_gov_verify2 fields changed- added
Input schema / properties / task_id / defaultAdded value: +"" - removed
Input schema / requiredRemoved value: -[ - "task_id" -]
- Added
delimit_handoff_acknowledge - Added
delimit_handoff_create - Added
delimit_handoff_list - Changed
delimit_help1 field changed- added
Input schema / properties / tool_name / descriptionAdded value: +"Tool name (e.g. 'lint', 'gov_health'). Leave empty for overview."
- Changed
delimit_impact2 fields changed- added
Input schema / properties / api_name / descriptionAdded value: +"The API that changed." - added
Input schema / properties / dependency_file / descriptionAdded value: +"Optional path to dependency manifest."
- Added
delimit_inbox_daemon - Changed
delimit_init3 fields changed- added
Input schema / properties / no_permissionsAdded value: +{ + "default": false, + "description": "Skip the filesystem permission auto-config (LED-269).", + "type": "boolean" +} - added
Input schema / properties / preset / descriptionAdded value: +"Policy preset - strict, default, or relaxed." - added
Input schema / properties / project_path / descriptionAdded value: +"Project root directory."
- Changed
delimit_intel_dataset_freeze1 field changed- added
Input schema / properties / dataset_id / descriptionAdded value: +"Dataset identifier."
- Changed
delimit_intel_dataset_register4 fields changed- added
Input schema / properties / description / descriptionAdded value: +"Human-readable description." - added
Input schema / properties / name / descriptionAdded value: +"Dataset name." - changed
Input schema / properties / schema / anyOfPrevious value: -[ - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "type": "string" + }, + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } +] - added
Input schema / properties / schema / descriptionAdded value: +"Optional JSON schema for the dataset."
- Changed
delimit_intel_query4 fields changed- added
Input schema / properties / dataset_id / descriptionAdded value: +"Optional dataset to filter by." - changed
Input schema / properties / parameters / anyOfPrevious value: -[ - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "type": "string" + }, + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } +] - added
Input schema / properties / parameters / descriptionAdded value: +"Optional params (date_from, date_to, limit)." - added
Input schema / properties / query / descriptionAdded value: +"Keyword search string."
- Changed
delimit_intel_snapshot_ingest6 fields changed- removed
Input schema / properties / data / additionalPropertiesRemoved value: -true - added
Input schema / properties / data / anyOfAdded value: +[ + { + "type": "string" + }, + { + "additionalProperties": true, + "type": "object" + } +] - added
Input schema / properties / data / descriptionAdded value: +"Snapshot data (any JSON-serializable dict)." - removed
Input schema / properties / data / typeRemoved value: -"object" - changed
Input schema / properties / provenance / anyOfPrevious value: -[ - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "type": "string" + }, + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } +] - added
Input schema / properties / provenance / descriptionAdded value: +"Optional provenance metadata (source, author, etc.)."
- Changed
delimit_ledger4 fields changed- added
Input schema / properties / api_name / descriptionAdded value: +"Filter events by API name." - added
Input schema / properties / ledger_path / descriptionAdded value: +"Path to the ledger JSONL file (e.g. .delimit/ledger/operations.jsonl)." - added
Input schema / properties / repository / descriptionAdded value: +"Filter events by repository." - added
Input schema / properties / validate_chain / descriptionAdded value: +"Validate hash chain integrity."
- Changed
delimit_ledger_add13 fields changed- added
Input schema / properties / acceptance_criteriaAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "List of testable \"done when\" conditions (e.g. \"tests pass\", \"coverage > 80%\")." +} - added
Input schema / properties / contextAdded value: +{ + "default": "", + "description": "Background info an AI agent needs to work on this item.", + "type": "string" +} - added
Input schema / properties / description / descriptionAdded value: +"Details." - added
Input schema / properties / estimated_complexityAdded value: +{ + "default": "", + "description": "small, medium, or large.", + "type": "string" +} - added
Input schema / properties / item_type / descriptionAdded value: +"task, fix, feat, strategy, consensus." - added
Input schema / properties / ledger / descriptionAdded value: +"\"ops\" (tasks, bugs, features) or \"strategy\" (decisions, direction)." - added
Input schema / properties / priority / descriptionAdded value: +"P0 (urgent), P1 (important), P2 (nice to have)." - added
Input schema / properties / source / descriptionAdded value: +"Where this came from (session, consensus, focus-group, etc)." - added
Input schema / properties / tagsAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Labels/tags (e.g. [\"deploy-ready\", \"ship\"] or \"deploy-ready,ship\")." +} - added
Input schema / properties / title / descriptionAdded value: +"What needs to be done." - added
Input schema / properties / tools_neededAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Delimit tools needed (e.g. \"delimit_lint\", \"delimit_test_coverage\")." +} - added
Input schema / properties / venture / descriptionAdded value: +"Project name or path (e.g. \"my-project\", \"./path/to/project\"). Auto-detects if empty." - added
Input schema / properties / worked_byAdded value: +{ + "default": "", + "description": "Which AI model is working on this. Auto-detected if empty.", + "type": "string" +}
- Changed
delimit_ledger_context1 field changed- added
Input schema / properties / venture / descriptionAdded value: +"Project name or path. Auto-detects if empty."
- Changed
delimit_ledger_done3 fields changed- added
Input schema / properties / item_id / descriptionAdded value: +"The item ID (e.g. LED-001 or STR-001)." - added
Input schema / properties / note / descriptionAdded value: +"Optional completion note." - added
Input schema / properties / venture / descriptionAdded value: +"Project name or path. Auto-detects if empty."
- Added
delimit_ledger_link - Added
delimit_ledger_links - Changed
delimit_ledger_list5 fields changed- added
Input schema / properties / ledger / descriptionAdded value: +"\"ops\", \"strategy\", or \"both\"." - added
Input schema / properties / limit / descriptionAdded value: +"Max items to return." - added
Input schema / properties / priority / descriptionAdded value: +"Filter by priority - \"P0\", \"P1\", \"P2\", or empty for all." - added
Input schema / properties / status / descriptionAdded value: +"Filter by status - \"open\", \"done\", \"in_progress\", or empty for all." - added
Input schema / properties / venture / descriptionAdded value: +"Project name or path. Auto-detects if empty."
- Added
delimit_ledger_propose - Added
delimit_ledger_query - Added
delimit_ledger_update - Changed
delimit_lint4 fields changed- added
Input schema / properties / dry_runAdded value: +{ + "default": false, + "description": "If True, return violations without side effects (no evidence, no chains).", + "type": "boolean" +} - added
Input schema / properties / new_spec / descriptionAdded value: +"Path to the new (proposed) OpenAPI spec file." - added
Input schema / properties / old_spec / descriptionAdded value: +"Path to the old (baseline) OpenAPI spec file." - added
Input schema / properties / policy_file / descriptionAdded value: +"Optional path to a .delimit/policies.yml file."
- Added
delimit_loop_config - Added
delimit_loop_status - Changed
delimit_memory_recent1 field changed- added
Input schema / properties / limit / descriptionAdded value: +"Number of recent entries to return."
- Changed
delimit_memory_search2 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Maximum results to return." - added
Input schema / properties / query / descriptionAdded value: +"Natural language search query."
- Changed
delimit_memory_store4 fields changed- added
Input schema / properties / content / descriptionAdded value: +"The content to remember." - added
Input schema / properties / context / descriptionAdded value: +"Optional context about when/why this was stored." - changed
Input schema / properties / tags / anyOfPrevious value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } +] - added
Input schema / properties / tags / descriptionAdded value: +"Optional categorization tags."
- Changed
delimit_models4 fields changed- added
Input schema / properties / action / descriptionAdded value: +"list, detect, add, or remove." - added
Input schema / properties / api_key / descriptionAdded value: +"API key for the provider (only used with action=add)." - added
Input schema / properties / model_name / descriptionAdded value: +"Optional model name override (e.g. \"gpt-4o\", \"claude-sonnet-4-5-20250514\")." - added
Input schema / properties / provider / descriptionAdded value: +"Model provider for add/remove (grok, gemini, openai, anthropic, codex)."
- Added
delimit_next_task - Added
delimit_notify - Added
delimit_notify_inbox - Added
delimit_notify_routing - Added
delimit_obs_alerts - Changed
delimit_os_gates1 field changed- added
Input schema / properties / plan_id / descriptionAdded value: +"The plan ID (e.g. \"PLAN-A1B2C3D4\")."
- Changed
delimit_os_plan5 fields changed- added
Input schema / properties / operation / descriptionAdded value: +"Operation to plan (e.g. \"deploy\", \"migrate\")." - changed
Input schema / properties / parameters / anyOfPrevious value: -[ - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "type": "string" + }, + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } +] - added
Input schema / properties / parameters / descriptionAdded value: +"Operation parameters." - added
Input schema / properties / require_approval / descriptionAdded value: +"Whether to require approval before execution." - added
Input schema / properties / target / descriptionAdded value: +"Target component or service."
- Added
delimit_playbook - Changed
delimit_policy5 fields changed- added
Input schema / properties / actionAdded value: +{ + "default": "inspect", + "description": "\"inspect\" or \"simulate\".", + "type": "string" +} - added
Input schema / properties / new_specAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Path to proposed spec (required for simulate)." +} - added
Input schema / properties / old_specAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Path to baseline spec (required for simulate)." +} - added
Input schema / properties / policy_file / descriptionAdded value: +"Optional custom policy file path." - added
Input schema / properties / spec_files / descriptionAdded value: +"List of spec file paths."
- Added
delimit_project_config - Added
delimit_prompt_drift - Added
delimit_quickstart - Added
delimit_redact - Added
delimit_reddit_scan - Added
delimit_release_history - Added
delimit_release_rollback - Added
delimit_release_validate - Added
delimit_repo_analyze - Added
delimit_repo_config_audit - Added
delimit_repo_config_validate - Added
delimit_repo_diagnose - Added
delimit_resource_drivers - Added
delimit_resource_get - Added
delimit_resource_list - Added
delimit_review - Added
delimit_revive - Changed
delimit_scan1 field changed- added
Input schema / properties / project_path / descriptionAdded value: +"Path to the project to scan."
- Added
delimit_screen_record - Added
delimit_screenshot - Added
delimit_secret_access_log - Added
delimit_secret_get - Added
delimit_secret_list - Added
delimit_secret_revoke - Added
delimit_secret_store - Changed
delimit_security_audit1 field changed- added
Input schema / properties / target / descriptionAdded value: +"Repository or file path to audit."
- Added
delimit_security_deliberate - Added
delimit_security_ingest - Changed
delimit_security_scan1 field changed- added
Input schema / properties / target / descriptionAdded value: +"Repository or file path."
- Changed
delimit_semver3 fields changed- added
Input schema / properties / current_version / descriptionAdded value: +"Optional current version (e.g. \"1.2.3\") to compute next version." - added
Input schema / properties / new_spec / descriptionAdded value: +"Path to the new OpenAPI spec file." - added
Input schema / properties / old_spec / descriptionAdded value: +"Path to the old OpenAPI spec file."
- Added
delimit_sense - Changed
delimit_sensor_github_issue3 fields changed- added
Input schema / properties / issue_number / descriptionAdded value: +"The issue number to monitor." - added
Input schema / properties / repo / descriptionAdded value: +"GitHub repository in owner/repo format (e.g. \"owner/repo\")." - added
Input schema / properties / since_comment_id / descriptionAdded value: +"Last seen comment ID. Pass 0 to get all comments."
- Added
delimit_sensor_github_migrations - Added
delimit_session_handoff - Added
delimit_session_history - Added
delimit_siem - Added
delimit_social_accounts - Added
delimit_social_approve - Added
delimit_social_daemon - Added
delimit_social_generate - Added
delimit_social_history - Added
delimit_social_post - Added
delimit_social_target - Added
delimit_social_target_config - Added
delimit_soul_capture - Added
delimit_spec_health - Changed
delimit_story_accessibility2 fields changed- added
Input schema / properties / project_path / descriptionAdded value: +"Project path to scan." - added
Input schema / properties / standards / descriptionAdded value: +"Accessibility standard (WCAG2A/WCAG2AA/WCAG2AAA)."
- Added
delimit_story_build - Changed
delimit_story_generate4 fields changed- added
Input schema / properties / component_path / descriptionAdded value: +"Path to the component file." - added
Input schema / properties / story_name / descriptionAdded value: +"Custom story name. Defaults to component name." - changed
Input schema / properties / variants / anyOfPrevious value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } +] - added
Input schema / properties / variants / descriptionAdded value: +"Variants to generate. Defaults to [Default, WithChildren]."
- Changed
delimit_story_visual_test3 fields changed- added
Input schema / properties / project_path / descriptionAdded value: +"Project path for baseline storage." - added
Input schema / properties / threshold / descriptionAdded value: +"Diff threshold (0.0-1.0)." - added
Input schema / properties / url / descriptionAdded value: +"URL to screenshot."
- Added
delimit_swarm - Added
delimit_task_complete - Added
delimit_test_coverage - Changed
delimit_test_generate3 fields changed- added
Input schema / properties / framework / descriptionAdded value: +"Test framework (jest/pytest/vitest)." - added
Input schema / properties / project_path / descriptionAdded value: +"Project path." - added
Input schema / properties / source_files / descriptionAdded value: +"Specific files to generate tests for."
- Changed
delimit_test_smoke2 fields changed- added
Input schema / properties / project_path / descriptionAdded value: +"Project path." - added
Input schema / properties / test_suite / descriptionAdded value: +"Specific test suite to run."
- Added
delimit_toolcard_cache - Added
delimit_tracker_sync - Changed
delimit_vault_search1 field changed- added
Input schema / properties / query / descriptionAdded value: +"Search query for vault entries."
- Added
delimit_webhook_manage - Added
delimit_work_orders - Changed
delimit_zero_spec2 fields changed- added
Input schema / properties / project_dir / descriptionAdded value: +"Path to the project root directory." - added
Input schema / properties / python_bin / descriptionAdded value: +"Optional Python binary path (auto-detected if omitted)."
81 tool updates
v0.1.0- First observed
delimit_activate - First observed
delimit_cost_alert - First observed
delimit_cost_analyze - First observed
delimit_cost_optimize - First observed
delimit_data_backup - First observed
delimit_data_migrate - First observed
delimit_data_validate - First observed
delimit_deliberate - First observed
delimit_deploy_build - First observed
delimit_deploy_npm - First observed
delimit_deploy_plan - First observed
delimit_deploy_publish - First observed
delimit_deploy_rollback - First observed
delimit_deploy_site - First observed
delimit_deploy_status - First observed
delimit_design_component_library - First observed
delimit_design_extract_tokens - First observed
delimit_design_generate_component - First observed
delimit_design_generate_tailwind - First observed
delimit_design_validate_responsive - First observed
delimit_diagnose - First observed
delimit_diff - First observed
delimit_docs_generate - First observed
delimit_docs_validate - First observed
delimit_evidence_collect - First observed
delimit_evidence_verify - First observed
delimit_explain - First observed
delimit_generate_scaffold - First observed
delimit_generate_template - First observed
delimit_gov_evaluate - First observed
delimit_gov_health - First observed
delimit_gov_new_task - First observed
delimit_gov_policy - First observed
delimit_gov_run - First observed
delimit_gov_status - First observed
delimit_gov_verify - First observed
delimit_help - First observed
delimit_impact - First observed
delimit_init - First observed
delimit_intel_dataset_freeze - First observed
delimit_intel_dataset_list - First observed
delimit_intel_dataset_register - First observed
delimit_intel_query - First observed
delimit_intel_snapshot_ingest - First observed
delimit_ledger - First observed
delimit_ledger_add - First observed
delimit_ledger_context - First observed
delimit_ledger_done - First observed
delimit_ledger_list - First observed
delimit_license_status - First observed
delimit_lint - First observed
delimit_memory_recent - First observed
delimit_memory_search - First observed
delimit_memory_store - First observed
delimit_models - First observed
delimit_obs_logs - First observed
delimit_obs_metrics - First observed
delimit_obs_status - First observed
delimit_os_gates - First observed
delimit_os_plan - First observed
delimit_os_status - First observed
delimit_policy - First observed
delimit_release_plan - First observed
delimit_release_status - First observed
delimit_release_sync - First observed
delimit_scan - First observed
delimit_security_audit - First observed
delimit_security_scan - First observed
delimit_semver - First observed
delimit_sensor_github_issue - First observed
delimit_story_accessibility - First observed
delimit_story_generate - First observed
delimit_story_visual_test - First observed
delimit_test_generate - First observed
delimit_test_smoke - First observed
delimit_vault_health - First observed
delimit_vault_search - First observed
delimit_vault_snapshot - First observed
delimit_ventures - First observed
delimit_version - First observed
delimit_zero_spec
TDQS
With 209 tools, there is substantial overlap between similar tools like the many ledger, governance, and deploy variants. The detailed descriptions help, but the boundaries are often subtle, and internal implementation tools (prefixed with underscore) add confusion. An agent would frequently misselect.
The naming mostly follows a consistent verb_noun snake_case pattern (e.g., delimit_agent_dispatch, delimit_ledger_add). However, there are irregularities like delimit_ledger_done instead of delimit_ledger_complete, and internal tools with underscore prefixes break the pattern.
209 tools is far beyond the typical well-scoped range of 3-15. The server attempts to cover an enormous breadth of functionality (governance, deploy, social, design, etc.), making it monolithic and unfocused. This extreme count severely hurts usability.
Given the server's vast scope, it covers many operations (CRUD for ledger, deploy pipeline, governance lifecycle, social posting, etc.). However, many tools are marked experimental or gated behind Pro, and some workflows require chaining multiple tools, indicating room for improvement.
Maintenance
Related MCP Connectors
Cross-agent artifact workspace with provenance across Claude Code, Codex, Cursor, LangGraph.
Coordination hub for AI coding agents: message teammates, ask humans, audit every event.
Real-time chat hub for AI agents — Claude Code, Cursor, Cline, Codex over MCP or REST.
One identity across Claude Code, Codex, Cursor, Gemini, Windsurf: shared inbox and handoffs.
Related MCP Servers
- AlicenseBqualityDmaintenanceGives AI coding assistants persistent memory, safety controls, and project awareness by tracking coding sessions, protecting critical files from modifications, and managing approval workflows with automatic changelog generation.1918MIT
- AlicenseNot gradedqualityNot gradedmaintenanceProvides unified development tools including code analysis, debugging, refactoring, documentation, testing, and project automation through multiple LLM providers (KIMI, GLM, OpenRouter). Features agentic audit capabilities with multi-model consensus for finding issues and generating direct fixes.-
- FlicenseNot gradedqualityNot gradedmaintenanceOrchestrates multiple AI models (Gemini, OpenAI, Claude, local models) within a single conversation context, enabling collaborative workflows like multi-model code reviews, consensus building, and CLI-to-CLI bridging for specialized tasks.-
- AlicenseAqualityCmaintenanceMCP server for memory management with process inspection and cleanup tools.5MIT
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/delimit-ai/delimit-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server