{"generatedAt":"2026-04-12T03:01:30.953Z","version":"1.0.0","toolCount":191,"common":{"errorHandling":"# Error Handling\n\n- Treat `ok=false` as a hard failure in agent loops.\n- Map `INVALID_INPUT`, `UNSUPPORTED_OPTION`, and `INPUT_TOO_LARGE` to immediate prompt/input fixes.\n- Map `RATE_LIMITED` to bounded retry with jitter and exponential backoff.\n- Map `TIMEOUT` and `INTERNAL_ERROR` to one retry and then fallback.\n- Never retry destructive actions without explicit human confirmation.","invocationPatterns":"# Invocation Patterns\n\n- Discovery first: query `/api/tools.json` for the full catalog.\n- Contract next: query `/api/tool/{id}.json` for the canonical contract.\n- Runtime invoke: POST to `/api/tools/run/` with `{toolId, input}` for deterministic envelopes.\n- Dedicated APIs: route directly to the tool's API endpoint when available.\n- Always emit machine-safe JSON when operating in autonomous loops.","safetyDefaults":"# Safety Defaults\n\n- Keep payloads minimal and deterministic.\n- Respect risk class limits (`L/M/H`) and runtime timeouts.\n- Do not assume streaming support unless `supportsStreaming=true`.\n- Capture request/response traces with redaction for sensitive fields.\n- Stop on repeated 4xx or 5xx patterns and escalate."},"tools":[{"toolId":"agent-skill-validator","modeLabel":"local-only","remoteMode":"client_only","riskClass":"M","remoteCallable":false,"files":{"skillMd":"# Agent Skill Validator Skill\n\n- Tool ID: `agent-skill-validator`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `M`\n\n## Purpose / when-to-use\nValidate skill definitions across OpenClaw, Claude, Codex, and MCP with portability scoring and exact fixes.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/agent-skill-validator.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe agent-skill-validator --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"agent-skill-validator","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"agent-skill-validator","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"agent-skill-validator","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"skill-spec-converter","modeLabel":"local-only","remoteMode":"client_only","riskClass":"M","remoteCallable":false,"files":{"skillMd":"# SkillSpec Converter Skill\n\n- Tool ID: `skill-spec-converter`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `M`\n\n## Purpose / when-to-use\nConvert one canonical skill definition into OpenClaw SKILL.md, Claude blocks, Codex scaffolds, and MCP manifest snippets.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/skill-spec-converter.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe skill-spec-converter --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"skill-spec-converter","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"skill-spec-converter","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"skill-spec-converter","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"skill-regression-suite-builder","modeLabel":"local-only","remoteMode":"client_only","riskClass":"M","remoteCallable":false,"files":{"skillMd":"# Skill Regression Suite Builder Skill\n\n- Tool ID: `skill-regression-suite-builder`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `M`\n\n## Purpose / when-to-use\nBuild deterministic regression suites for skill updates with risk-weighted pass-rate gates and CI-ready case definitions.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/skill-regression-suite-builder.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe skill-regression-suite-builder --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"skill-regression-suite-builder","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"skill-regression-suite-builder","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"skill-regression-suite-builder","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"skill-scope-collision-detector","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# Skill Scope Collision Detector Skill\n\n- Tool ID: `skill-scope-collision-detector`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nDetect cross-scope skill version and enabled-state collisions across global, user, project, and local configuration layers.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/skill-scope-collision-detector.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe skill-scope-collision-detector --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"skill-scope-collision-detector","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"skill-scope-collision-detector","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"skill-scope-collision-detector","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"skill-payload-budget-optimizer","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# Skill Payload Budget Optimizer Skill\n\n- Tool ID: `skill-payload-budget-optimizer`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nOptimize skill pack token and byte budgets against context windows with deterministic compress, defer, and keep recommendations.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/skill-payload-budget-optimizer.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe skill-payload-budget-optimizer --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"skill-payload-budget-optimizer","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"skill-payload-budget-optimizer","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"skill-payload-budget-optimizer","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"tool-approval-matrix-compiler","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# Tool Approval Matrix Compiler Skill\n\n- Tool ID: `tool-approval-matrix-compiler`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nCompile cross-platform allow, ask, and deny decisions for tool capabilities across Codex, Claude, and managed MCP policies.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/tool-approval-matrix-compiler.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe tool-approval-matrix-compiler --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"tool-approval-matrix-compiler","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"tool-approval-matrix-compiler","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"tool-approval-matrix-compiler","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"skill-release-canary-planner","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# Skill Release Canary Planner Skill\n\n- Tool ID: `skill-release-canary-planner`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nGenerate staged canary rollout plans for skill updates with deterministic stop conditions and rollback checklists.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/skill-release-canary-planner.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe skill-release-canary-planner --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"skill-release-canary-planner","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"skill-release-canary-planner","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"skill-release-canary-planner","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"trace-failure-classifier","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# Trace Failure Classifier Skill\n\n- Tool ID: `trace-failure-classifier`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nClassify failed trace events into root-cause buckets and output deterministic remediation guidance for agent incident triage.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/trace-failure-classifier.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe trace-failure-classifier --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"trace-failure-classifier","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"trace-failure-classifier","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"trace-failure-classifier","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"cli-ux-linter","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# CLI UX Linter Skill\n\n- Tool ID: `cli-ux-linter`\n- Category: `devtools`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nAudit your CLI --help output for discoverability, flag consistency, examples, and error guidance.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/cli-ux-linter.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe cli-ux-linter --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"cli-ux-linter","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"cli-ux-linter","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"cli-ux-linter","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"ai-cli-generator","modeLabel":"local-only","remoteMode":"client_only","riskClass":"M","remoteCallable":false,"files":{"skillMd":"# AI CLI Generator Skill\n\n- Tool ID: `ai-cli-generator`\n- Category: `devtools`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `M`\n\n## Purpose / when-to-use\nGenerate Node or Python CLI scaffolds from OpenAPI with auth wiring, retries, pagination, and shell completion stubs.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/ai-cli-generator.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe ai-cli-generator --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"ai-cli-generator","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"ai-cli-generator","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"ai-cli-generator","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"csv-endpoint-builder","modeLabel":"local-only","remoteMode":"client_only","riskClass":"M","remoteCallable":false,"files":{"skillMd":"# CSV Endpoint Builder Skill\n\n- Tool ID: `csv-endpoint-builder`\n- Category: `devtools`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `M`\n\n## Purpose / when-to-use\nTurn CSV data into endpoint-ready mock responses, OpenAPI snippets, and production starter templates.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/csv-endpoint-builder.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe csv-endpoint-builder --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"csv-endpoint-builder","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"csv-endpoint-builder","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"csv-endpoint-builder","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"llm-crawl-policy-validator","modeLabel":"local-only","remoteMode":"client_only","riskClass":"M","remoteCallable":false,"files":{"skillMd":"# LLM Crawl Policy Validator Skill\n\n- Tool ID: `llm-crawl-policy-validator`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `M`\n\n## Purpose / when-to-use\nValidate robots.txt and llms.txt files, detect conflicts, simulate AI bot access, and export corrected policies.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/llm-crawl-policy-validator.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe llm-crawl-policy-validator --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"llm-crawl-policy-validator","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"llm-crawl-policy-validator","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"llm-crawl-policy-validator","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"mcp-governance-composer","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# MCP Governance Composer Skill\n\n- Tool ID: `mcp-governance-composer`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nCompose managed MCP governance packs with allow/deny lists, approval boundaries, and operator rollout checklists.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/mcp-governance-composer.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe mcp-governance-composer --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"mcp-governance-composer","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"mcp-governance-composer","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"mcp-governance-composer","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"mcp-tool-search-budget-simulator","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# MCP Tool Search Budget Simulator Skill\n\n- Tool ID: `mcp-tool-search-budget-simulator`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nSimulate context-window usage for full MCP tool injection versus search-first retrieval strategies.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/mcp-tool-search-budget-simulator.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe mcp-tool-search-budget-simulator --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"mcp-tool-search-budget-simulator","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"mcp-tool-search-budget-simulator","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"mcp-tool-search-budget-simulator","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"claude-settings-scope-diff","modeLabel":"local-only","remoteMode":"client_only","riskClass":"H","remoteCallable":false,"files":{"skillMd":"# Claude Settings Scope Diff Skill\n\n- Tool ID: `claude-settings-scope-diff`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `H`\n\n## Purpose / when-to-use\nDiff managed, user, project, and local settings scopes and compute the effective merged Claude configuration.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/claude-settings-scope-diff.json`\n- Max input bytes: `524288`\n- Timeout budget: `8000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe claude-settings-scope-diff --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"claude-settings-scope-diff","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"claude-settings-scope-diff","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"claude-settings-scope-diff","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"claude-hook-policy-simulator","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# Claude Hook Policy Simulator Skill\n\n- Tool ID: `claude-hook-policy-simulator`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nSimulate Claude hook decisions for pre/post tool events and validate policy rule coverage before rollout.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/claude-hook-policy-simulator.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe claude-hook-policy-simulator --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"claude-hook-policy-simulator","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"claude-hook-policy-simulator","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"claude-hook-policy-simulator","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"openprose-flow-linter","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# OpenProse Flow Linter Skill\n\n- Tool ID: `openprose-flow-linter`\n- Category: `devtools`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nLint OpenProse flow graphs for unreachable stages, dangling edges, privileged paths, and approval gaps.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/openprose-flow-linter.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe openprose-flow-linter --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"openprose-flow-linter","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"openprose-flow-linter","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"openprose-flow-linter","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"openclaw-skill-trust-scanner","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# OpenClaw Skill Trust Scanner Skill\n\n- Tool ID: `openclaw-skill-trust-scanner`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nScan SKILL.md instructions for destructive command patterns, missing safety boundaries, and trust posture.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/openclaw-skill-trust-scanner.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe openclaw-skill-trust-scanner --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"openclaw-skill-trust-scanner","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"openclaw-skill-trust-scanner","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"openclaw-skill-trust-scanner","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"agent-tool-blast-radius-mapper","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# Agent Tool Blast Radius Mapper Skill\n\n- Tool ID: `agent-tool-blast-radius-mapper`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nMap tool capability blast radius, score operational risk, and produce least-privilege policy buckets.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/agent-tool-blast-radius-mapper.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe agent-tool-blast-radius-mapper --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"agent-tool-blast-radius-mapper","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"agent-tool-blast-radius-mapper","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"agent-tool-blast-radius-mapper","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"trace-context-validator","modeLabel":"local-only","remoteMode":"client_only","riskClass":"M","remoteCallable":false,"files":{"skillMd":"# Trace Context Validator Skill\n\n- Tool ID: `trace-context-validator`\n- Category: `devtools`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `M`\n\n## Purpose / when-to-use\nValidate W3C traceparent and tracestate headers for distributed tracing correctness and propagation safety.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/trace-context-validator.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe trace-context-validator --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"trace-context-validator","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"trace-context-validator","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"trace-context-validator","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"retry-idempotency-contract-builder","modeLabel":"local-only","remoteMode":"client_only","riskClass":"M","remoteCallable":false,"files":{"skillMd":"# Retry & Idempotency Contract Builder Skill\n\n- Tool ID: `retry-idempotency-contract-builder`\n- Category: `devtools`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `M`\n\n## Purpose / when-to-use\nGenerate endpoint-level retry and idempotency contracts with deterministic test vectors and rollout guidance.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/retry-idempotency-contract-builder.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe retry-idempotency-contract-builder --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"retry-idempotency-contract-builder","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"retry-idempotency-contract-builder","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"retry-idempotency-contract-builder","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"csp-sri-policy-builder","modeLabel":"local-only","remoteMode":"client_only","riskClass":"M","remoteCallable":false,"files":{"skillMd":"# CSP & SRI Policy Builder Skill\n\n- Tool ID: `csp-sri-policy-builder`\n- Category: `devtools`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `M`\n\n## Purpose / when-to-use\nBuild strict CSP header templates and SRI tag snippets for frontend script hardening and safer deployments.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/csp-sri-policy-builder.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe csp-sri-policy-builder --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"csp-sri-policy-builder","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"csp-sri-policy-builder","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"csp-sri-policy-builder","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"ai-model-comparison","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# AI Model Comparison Skill\n\n- Tool ID: `ai-model-comparison`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nCompare AI models: pricing, context windows, benchmarks, and specs side by side.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/ai-model-comparison.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe ai-model-comparison --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"ai-model-comparison","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"ai-model-comparison","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"ai-model-comparison","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"json-formatter","modeLabel":"local-only","remoteMode":"client_only","riskClass":"M","remoteCallable":false,"files":{"skillMd":"# JSON Formatter & Validator Skill\n\n- Tool ID: `json-formatter`\n- Category: `formatter`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `M`\n\n## Purpose / when-to-use\nFormat, validate, and beautify JSON with syntax highlighting.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/json-formatter.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe json-formatter --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"json-formatter","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"json-formatter","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"json-formatter","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"mcp-directory","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# MCP Server Directory Skill\n\n- Tool ID: `mcp-directory`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nCurated directory of Model Context Protocol servers with install commands and categories.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/mcp-directory.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe mcp-directory --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"mcp-directory","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"mcp-directory","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"mcp-directory","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"flexbox-playground","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# CSS Flexbox & Grid Playground Skill\n\n- Tool ID: `flexbox-playground`\n- Category: `generator`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nInteractive CSS Flexbox and Grid playground with live visual preview and code output.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/flexbox-playground.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe flexbox-playground --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"flexbox-playground","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"flexbox-playground","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"flexbox-playground","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"regex-tester","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"H","remoteCallable":true,"files":{"skillMd":"# Regex Tester Skill\n\n- Tool ID: `regex-tester`\n- Category: `devtools`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `H`\n\n## Purpose / when-to-use\nTest and debug regular expressions with live matching, capture group extraction, plain-English explanations, and ReDoS vulnerability detection. Supports JavaScript, Python, and Go regex flavors..\n\n## Input contract summary\n- Canonical contract source: `/api/tool/regex-tester.json`\n- Max input bytes: `524288`\n- Timeout budget: `8000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run regex-tester --input '{\"a\":\"example-input\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/regex-tester//api/regex-tester/\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"regex-tester","input":{"a":"example-input"},"expected":{"ok":true}},"edgeCase":{"toolId":"regex-tester","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"regex-tester","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"qr-code-generator","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"M","remoteCallable":true,"files":{"skillMd":"# QR Code Generator Skill\n\n- Tool ID: `qr-code-generator`\n- Category: `generator`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `M`\n\n## Purpose / when-to-use\nGenerate QR codes for URLs, text, WiFi, and app flows — export SVG/PNG or automate generation via free API.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/qr-code-generator.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run qr-code-generator --input '{\"a\":\"example-input\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/qr-code//api/qr-code/\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"qr-code-generator","input":{"a":"example-input"},"expected":{"ok":true}},"edgeCase":{"toolId":"qr-code-generator","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"qr-code-generator","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"agent-comparison","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# AI Agent Framework Comparison Skill\n\n- Tool ID: `agent-comparison`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nCompare AI agent frameworks: LangChain, CrewAI, AutoGen, Mastra, and more side by side.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/agent-comparison.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe agent-comparison --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"agent-comparison","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"agent-comparison","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"agent-comparison","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"tailwind-converter","modeLabel":"local-only","remoteMode":"client_only","riskClass":"M","remoteCallable":false,"files":{"skillMd":"# CSS to Tailwind Converter Skill\n\n- Tool ID: `tailwind-converter`\n- Category: `converter`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `M`\n\n## Purpose / when-to-use\nConvert vanilla CSS to Tailwind CSS utility classes with property mapping and spacing scale conversion.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/tailwind-converter.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe tailwind-converter --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"tailwind-converter","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"tailwind-converter","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"tailwind-converter","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"password-generator","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"M","remoteCallable":true,"files":{"skillMd":"# Password Generator Skill\n\n- Tool ID: `password-generator`\n- Category: `generator`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `M`\n\n## Purpose / when-to-use\nGenerate strong, cryptographically secure passwords with customizable length, character sets, and entropy meter.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/password-generator.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run password-generator --input '{\"a\":\"example-input\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=password-generator&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"password-generator","input":{"a":"example-input"},"expected":{"ok":true}},"edgeCase":{"toolId":"password-generator","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"password-generator","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"ai-pricing","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# AI Pricing Calculator Skill\n\n- Tool ID: `ai-pricing`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nCompare AI API costs across providers for your specific workload.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/ai-pricing.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe ai-pricing --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"ai-pricing","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"ai-pricing","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"ai-pricing","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"html-to-jsx","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"L","remoteCallable":true,"files":{"skillMd":"# HTML to JSX Converter Skill\n\n- Tool ID: `html-to-jsx`\n- Category: `converter`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `L`\n\n## Purpose / when-to-use\nConvert HTML to JSX with automatic attribute renaming, style objects, self-closing tags, and comment conversion.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/html-to-jsx.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run html-to-jsx --input '{\"a\":\"example-input\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=html-to-jsx&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"html-to-jsx","input":{"a":"example-input"},"expected":{"ok":true}},"edgeCase":{"toolId":"html-to-jsx","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"html-to-jsx","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"box-shadow-generator","modeLabel":"local-only","remoteMode":"client_only","riskClass":"M","remoteCallable":false,"files":{"skillMd":"# CSS Box Shadow Generator Skill\n\n- Tool ID: `box-shadow-generator`\n- Category: `generator`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `M`\n\n## Purpose / when-to-use\nVisual CSS box-shadow generator with multiple layers, live preview, presets, and instant CSS copy.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/box-shadow-generator.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe box-shadow-generator --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"box-shadow-generator","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"box-shadow-generator","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"box-shadow-generator","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"token-counter","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"H","remoteCallable":true,"files":{"skillMd":"# LLM Token Counter Skill\n\n- Tool ID: `token-counter`\n- Category: `ai`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `H`\n\n## Purpose / when-to-use\nCount tokens and estimate model costs across GPT, Claude, Gemini, Llama, and more — with optional free API access for apps and agents.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/token-counter.json`\n- Max input bytes: `524288`\n- Timeout budget: `8000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run token-counter --input '{\"a\":\"example-input\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/token-counter//api/token-counter/\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"token-counter","input":{"a":"example-input"},"expected":{"ok":true}},"edgeCase":{"toolId":"token-counter","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"token-counter","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"color-palette-generator","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"M","remoteCallable":true,"files":{"skillMd":"# Color Palette Generator Skill\n\n- Tool ID: `color-palette-generator`\n- Category: `generator`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `M`\n\n## Purpose / when-to-use\nGenerate accessible color palettes and convert HEX/RGB/HSL for UI systems, design tokens, and branding workflows.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/color-palette-generator.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run color-palette-generator --input '{\"a\":\"example-input\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/color-palette//api/color-palette/generate/\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"color-palette-generator","input":{"a":"example-input"},"expected":{"ok":true}},"edgeCase":{"toolId":"color-palette-generator","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"color-palette-generator","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"mermaid-viewer","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# Mermaid Diagram Viewer Skill\n\n- Tool ID: `mermaid-viewer`\n- Category: `devtools`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nRender Mermaid diagrams instantly — flowcharts, sequence diagrams, and more with SVG/PNG export.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/mermaid-viewer.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe mermaid-viewer --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"mermaid-viewer","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"mermaid-viewer","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"mermaid-viewer","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"docker-compose-validator","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"H","remoteCallable":true,"files":{"skillMd":"# Docker Compose Validator Skill\n\n- Tool ID: `docker-compose-validator`\n- Category: `devtools`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `H`\n\n## Purpose / when-to-use\nValidate Docker Compose YAML with structural checks, dependency validation, and common mistake detection.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/docker-compose-validator.json`\n- Max input bytes: `524288`\n- Timeout budget: `8000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run docker-compose-validator --input '{\"a\":\"example-input\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=docker-compose-validator&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"docker-compose-validator","input":{"a":"example-input"},"expected":{"ok":true}},"edgeCase":{"toolId":"docker-compose-validator","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"docker-compose-validator","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"jwt-decoder","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"L","remoteCallable":true,"files":{"skillMd":"# JWT Decoder & Inspector Skill\n\n- Tool ID: `jwt-decoder`\n- Category: `devtools`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `L`\n\n## Purpose / when-to-use\nDecode and inspect JSON Web Tokens — header, payload, claims, and expiration.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/jwt-decoder.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run jwt-decoder --input '{\"a\":\"example-input\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=jwt-decoder&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"jwt-decoder","input":{"a":"example-input"},"expected":{"ok":true}},"edgeCase":{"toolId":"jwt-decoder","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"jwt-decoder","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"rules-file-generator","modeLabel":"local-only","remoteMode":"client_only","riskClass":"M","remoteCallable":false,"files":{"skillMd":"# CLAUDE.md / Rules File Generator Skill\n\n- Tool ID: `rules-file-generator`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `M`\n\n## Purpose / when-to-use\nGenerate CLAUDE.md, .cursorrules, and copilot-instructions.md files for your project with templates.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/rules-file-generator.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe rules-file-generator --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"rules-file-generator","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"rules-file-generator","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"rules-file-generator","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"openapi-preview","modeLabel":"local-only","remoteMode":"client_only","riskClass":"H","remoteCallable":false,"files":{"skillMd":"# OpenAPI / Swagger Preview Skill\n\n- Tool ID: `openapi-preview`\n- Category: `devtools`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `H`\n\n## Purpose / when-to-use\nPaste an OpenAPI or Swagger spec and see interactive API documentation instantly.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/openapi-preview.json`\n- Max input bytes: `524288`\n- Timeout budget: `8000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe openapi-preview --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"openapi-preview","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"openapi-preview","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"openapi-preview","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"github-actions-builder","modeLabel":"local-only","remoteMode":"client_only","riskClass":"M","remoteCallable":false,"files":{"skillMd":"# GitHub Actions YAML Builder Skill\n\n- Tool ID: `github-actions-builder`\n- Category: `devtools`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `M`\n\n## Purpose / when-to-use\nBuild GitHub Actions workflows visually — templates for Node, Python, Docker, deployment, and matrix strategies.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/github-actions-builder.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe github-actions-builder --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"github-actions-builder","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"github-actions-builder","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"github-actions-builder","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"color-converter","modeLabel":"local-only","remoteMode":"client_only","riskClass":"M","remoteCallable":false,"files":{"skillMd":"# Color Converter Skill\n\n- Tool ID: `color-converter`\n- Category: `converter`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `M`\n\n## Purpose / when-to-use\nConvert colors between HEX, RGB, HSL, HSV, CMYK, and Tailwind CSS with contrast checker.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/color-converter.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe color-converter --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"color-converter","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"color-converter","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"color-converter","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"cron-builder","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"M","remoteCallable":true,"files":{"skillMd":"# Cron Expression Builder Skill\n\n- Tool ID: `cron-builder`\n- Category: `devtools`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `M`\n\n## Purpose / when-to-use\nBuild and validate cron expressions with human-readable schedule descriptions, next-run previews, timezone support, and a free REST API for automation workflows..\n\n## Input contract summary\n- Canonical contract source: `/api/tool/cron-builder.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run cron-builder --input '{\"a\":\"example-input\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/cron-expression//api/cron-expression/parse/\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"cron-builder","input":{"a":"example-input"},"expected":{"ok":true}},"edgeCase":{"toolId":"cron-builder","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"cron-builder","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"svg-path-editor","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# SVG Path Editor Skill\n\n- Tool ID: `svg-path-editor`\n- Category: `generator`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nInteractive SVG path editor with visual canvas, operations, and command reference.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/svg-path-editor.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe svg-path-editor --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"svg-path-editor","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"svg-path-editor","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"svg-path-editor","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"ai-model-picker","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# AI Model Picker Quiz Skill\n\n- Tool ID: `ai-model-picker`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nAnswer 7 questions and get personalized AI model recommendations — compare GPT, Claude, Gemini, Llama, and more.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/ai-model-picker.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe ai-model-picker --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"ai-model-picker","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"ai-model-picker","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"ai-model-picker","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"diff-checker","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"H","remoteCallable":true,"files":{"skillMd":"# Text & Code Diff Checker Skill\n\n- Tool ID: `diff-checker`\n- Category: `devtools`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `H`\n\n## Purpose / when-to-use\nCompare text, JSON, and YAML with structured change detection for reviews, debugging, and CI pipelines.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/diff-checker.json`\n- Max input bytes: `524288`\n- Timeout budget: `8000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run diff-checker --input '{\"a\":\"example-input\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/structured-diff//api/structured-diff/\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"diff-checker","input":{"a":"example-input"},"expected":{"ok":true}},"edgeCase":{"toolId":"diff-checker","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"diff-checker","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"sql-formatter","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"M","remoteCallable":true,"files":{"skillMd":"# SQL Formatter & Beautifier Skill\n\n- Tool ID: `sql-formatter`\n- Category: `formatter`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `M`\n\n## Purpose / when-to-use\nFormat, beautify, and minify SQL queries with keyword capitalization.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/sql-formatter.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run sql-formatter --input '{\"a\":\"example-input\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=sql-formatter&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"sql-formatter","input":{"a":"example-input"},"expected":{"ok":true}},"edgeCase":{"toolId":"sql-formatter","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"sql-formatter","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"favicon-generator","modeLabel":"local-only","remoteMode":"client_only","riskClass":"M","remoteCallable":false,"files":{"skillMd":"# Favicon Generator Skill\n\n- Tool ID: `favicon-generator`\n- Category: `generator`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `M`\n\n## Purpose / when-to-use\nGenerate favicons from text or emoji in all standard sizes with HTML and PWA manifest snippets.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/favicon-generator.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe favicon-generator --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"favicon-generator","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"favicon-generator","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"favicon-generator","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"prompt-library","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# System Prompt Library Skill\n\n- Tool ID: `prompt-library`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nCurated collection of system prompts for coding, writing, analysis, and more.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/prompt-library.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe prompt-library --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"prompt-library","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"prompt-library","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"prompt-library","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"json-to-go","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"L","remoteCallable":true,"files":{"skillMd":"# JSON to Go Struct Skill\n\n- Tool ID: `json-to-go`\n- Category: `converter`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `L`\n\n## Purpose / when-to-use\nConvert JSON to idiomatic Go struct definitions with json tags, nested structs, omitempty, and pointer options.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/json-to-go.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run json-to-go --input '{\"a\":\"example-input\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=json-to-go&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"json-to-go","input":{"a":"example-input"},"expected":{"ok":true}},"edgeCase":{"toolId":"json-to-go","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"json-to-go","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"json-to-python","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"L","remoteCallable":true,"files":{"skillMd":"# JSON to Python Dataclass Skill\n\n- Tool ID: `json-to-python`\n- Category: `converter`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `L`\n\n## Purpose / when-to-use\nConvert JSON to Python dataclass or TypedDict definitions with type hints, nested classes, and Optional types.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/json-to-python.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run json-to-python --input '{\"a\":\"example-input\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=json-to-python&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"json-to-python","input":{"a":"example-input"},"expected":{"ok":true}},"edgeCase":{"toolId":"json-to-python","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"json-to-python","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"json-to-typescript","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"L","remoteCallable":true,"files":{"skillMd":"# JSON to TypeScript Converter Skill\n\n- Tool ID: `json-to-typescript`\n- Category: `converter`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `L`\n\n## Purpose / when-to-use\nConvert JSON to TypeScript interfaces and types with smart type inference, nested objects, and union types.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/json-to-typescript.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run json-to-typescript --input '{\"a\":\"example-input\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=json-to-typescript&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"json-to-typescript","input":{"a":"example-input"},"expected":{"ok":true}},"edgeCase":{"toolId":"json-to-typescript","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"json-to-typescript","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"json-to-zod","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"L","remoteCallable":true,"files":{"skillMd":"# JSON to Zod Schema Skill\n\n- Tool ID: `json-to-zod`\n- Category: `converter`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `L`\n\n## Purpose / when-to-use\nConvert JSON to Zod schema definitions with optional/required inference, coerce mode, and nested schema support.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/json-to-zod.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run json-to-zod --input '{\"a\":\"example-input\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=json-to-zod&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"json-to-zod","input":{"a":"example-input"},"expected":{"ok":true}},"edgeCase":{"toolId":"json-to-zod","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"json-to-zod","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"json-to-kotlin","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"L","remoteCallable":true,"files":{"skillMd":"# JSON to Kotlin Data Class Skill\n\n- Tool ID: `json-to-kotlin`\n- Category: `converter`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `L`\n\n## Purpose / when-to-use\nConvert JSON to Kotlin data classes with @Serializable annotations — supports kotlinx.serialization, Gson, and Moshi.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/json-to-kotlin.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run json-to-kotlin --input '{\"a\":\"example-input\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=json-to-kotlin&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"json-to-kotlin","input":{"a":"example-input"},"expected":{"ok":true}},"edgeCase":{"toolId":"json-to-kotlin","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"json-to-kotlin","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"json-to-rust-serde","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"L","remoteCallable":true,"files":{"skillMd":"# JSON to Rust Serde Skill\n\n- Tool ID: `json-to-rust-serde`\n- Category: `converter`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `L`\n\n## Purpose / when-to-use\nConvert JSON to Rust structs with Serde derive macros — includes rename strategies, Option types, and field visibility control.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/json-to-rust-serde.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run json-to-rust-serde --input '{\"a\":\"example-input\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=json-to-rust-serde&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"json-to-rust-serde","input":{"a":"example-input"},"expected":{"ok":true}},"edgeCase":{"toolId":"json-to-rust-serde","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"json-to-rust-serde","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"mcp-config-generator","modeLabel":"local-only","remoteMode":"client_only","riskClass":"M","remoteCallable":false,"files":{"skillMd":"# MCP Server Config Generator Skill\n\n- Tool ID: `mcp-config-generator`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `M`\n\n## Purpose / when-to-use\nGenerate MCP server configurations for Claude Desktop, Cursor, and Windsurf with visual editor and presets.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/mcp-config-generator.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe mcp-config-generator --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"mcp-config-generator","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"mcp-config-generator","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"mcp-config-generator","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"diff-merge-tool","modeLabel":"local-only","remoteMode":"client_only","riskClass":"H","remoteCallable":false,"files":{"skillMd":"# 3-Way Diff & Merge Tool Skill\n\n- Tool ID: `diff-merge-tool`\n- Category: `devtools`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `H`\n\n## Purpose / when-to-use\n3-way merge with conflict resolution — compare Base, Theirs, and Mine versions to resolve merge conflicts.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/diff-merge-tool.json`\n- Max input bytes: `524288`\n- Timeout budget: `8000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe diff-merge-tool --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"diff-merge-tool","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"diff-merge-tool","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"diff-merge-tool","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"json-schema-generator","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"M","remoteCallable":true,"files":{"skillMd":"# JSON Schema Generator Skill\n\n- Tool ID: `json-schema-generator`\n- Category: `ai`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `M`\n\n## Purpose / when-to-use\nGenerate production-ready JSON Schemas from examples for function calling, structured output, and agent tool contracts.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/json-schema-generator.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run json-schema-generator --input '{\"a\":\"example-input\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/schema-generator//api/schema-generator/\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"json-schema-generator","input":{"a":"example-input"},"expected":{"ok":true}},"edgeCase":{"toolId":"json-schema-generator","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"json-schema-generator","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"css-gradient-generator","modeLabel":"local-only","remoteMode":"client_only","riskClass":"M","remoteCallable":false,"files":{"skillMd":"# CSS Gradient Generator Skill\n\n- Tool ID: `css-gradient-generator`\n- Category: `generator`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `M`\n\n## Purpose / when-to-use\nVisual gradient builder with live preview — create linear, radial, and conic gradients with color stops and CSS output.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/css-gradient-generator.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe css-gradient-generator --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"css-gradient-generator","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"css-gradient-generator","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"css-gradient-generator","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"prompt-template-builder","modeLabel":"local-only","remoteMode":"client_only","riskClass":"M","remoteCallable":false,"files":{"skillMd":"# Prompt Template Builder Skill\n\n- Tool ID: `prompt-template-builder`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `M`\n\n## Purpose / when-to-use\nBuild AI prompt templates with variables, live preview, and export to JSON/YAML.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/prompt-template-builder.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe prompt-template-builder --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"prompt-template-builder","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"prompt-template-builder","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"prompt-template-builder","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"tailwind-reference","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# Tailwind CSS Reference Skill\n\n- Tool ID: `tailwind-reference`\n- Category: `devtools`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nInteractive Tailwind CSS cheat sheet with 500+ utilities — search, browse by category, view live previews, and copy class names.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/tailwind-reference.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe tailwind-reference --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"tailwind-reference","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"tailwind-reference","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"tailwind-reference","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"meta-tag-generator","modeLabel":"local-only","remoteMode":"client_only","riskClass":"M","remoteCallable":false,"files":{"skillMd":"# Meta Tag Generator & Previewer Skill\n\n- Tool ID: `meta-tag-generator`\n- Category: `generator`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `M`\n\n## Purpose / when-to-use\nGenerate SEO meta tags with live Google, Facebook, and Twitter card previews.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/meta-tag-generator.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe meta-tag-generator --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"meta-tag-generator","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"meta-tag-generator","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"meta-tag-generator","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"ai-cost-estimator","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# AI Cost Estimator Skill\n\n- Tool ID: `ai-cost-estimator`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nEstimate total AI API costs for real-world workloads across all major providers.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/ai-cost-estimator.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe ai-cost-estimator --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"ai-cost-estimator","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"ai-cost-estimator","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"ai-cost-estimator","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"system-prompt-editor","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# System Prompt Editor Skill\n\n- Tool ID: `system-prompt-editor`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nWrite and analyze AI system prompts with live token counting, variable detection, and XML highlighting.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/system-prompt-editor.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe system-prompt-editor --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"system-prompt-editor","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"system-prompt-editor","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"system-prompt-editor","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"graphql-schema-viewer","modeLabel":"local-only","remoteMode":"client_only","riskClass":"M","remoteCallable":false,"files":{"skillMd":"# GraphQL Schema Viewer Skill\n\n- Tool ID: `graphql-schema-viewer`\n- Category: `devtools`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `M`\n\n## Purpose / when-to-use\nPaste a GraphQL schema and explore types, fields, and relationships — no server needed, all client-side.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/graphql-schema-viewer.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe graphql-schema-viewer --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"graphql-schema-viewer","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"graphql-schema-viewer","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"graphql-schema-viewer","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"llm-output-diff","modeLabel":"local-only","remoteMode":"client_only","riskClass":"H","remoteCallable":false,"files":{"skillMd":"# LLM Output Diff Tool Skill\n\n- Tool ID: `llm-output-diff`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `H`\n\n## Purpose / when-to-use\nCompare outputs from different AI models side-by-side with diff highlighting.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/llm-output-diff.json`\n- Max input bytes: `524288`\n- Timeout budget: `8000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe llm-output-diff --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"llm-output-diff","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"llm-output-diff","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"llm-output-diff","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"context-window-visualizer","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# AI Context Window Visualizer Skill\n\n- Tool ID: `context-window-visualizer`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nVisualize how your AI model's context window is allocated across system prompt, tools, conversation, and RAG.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/context-window-visualizer.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe context-window-visualizer --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"context-window-visualizer","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"context-window-visualizer","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"context-window-visualizer","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"test-data-generator","modeLabel":"local-only","remoteMode":"client_only","riskClass":"M","remoteCallable":false,"files":{"skillMd":"# Test Data Generator Skill\n\n- Tool ID: `test-data-generator`\n- Category: `generator`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `M`\n\n## Purpose / when-to-use\nGenerate realistic test data in JSON, CSV, and SQL — names, emails, addresses, and 25+ types with custom schemas.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/test-data-generator.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe test-data-generator --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"test-data-generator","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"test-data-generator","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"test-data-generator","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"markdown-preview","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# Markdown Preview Skill\n\n- Tool ID: `markdown-preview`\n- Category: `formatter`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nLive Markdown preview with GitHub Flavored Markdown support.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/markdown-preview.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe markdown-preview --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"markdown-preview","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"markdown-preview","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"markdown-preview","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"yaml-json","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"L","remoteCallable":true,"files":{"skillMd":"# YAML ↔ JSON Converter Skill\n\n- Tool ID: `yaml-json`\n- Category: `converter`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `L`\n\n## Purpose / when-to-use\nConvert between YAML and JSON formats with validation and configurable formatting.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/yaml-json.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run yaml-json --input '{\"a\":\"example-input\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=yaml-json&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"yaml-json","input":{"a":"example-input"},"expected":{"ok":true}},"edgeCase":{"toolId":"yaml-json","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"yaml-json","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"text-case-converter","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"M","remoteCallable":true,"files":{"skillMd":"# Text Case Converter Skill\n\n- Tool ID: `text-case-converter`\n- Category: `converter`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `M`\n\n## Purpose / when-to-use\nConvert text between camelCase, snake_case, PascalCase, kebab-case, and 10+ more formats instantly.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/text-case-converter.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run text-case-converter --input '{\"a\":\"example-input\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=text-case-converter&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"text-case-converter","input":{"a":"example-input"},"expected":{"ok":true}},"edgeCase":{"toolId":"text-case-converter","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"text-case-converter","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"ai-prompt-comparator","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# AI Prompt Tester & Comparator Skill\n\n- Tool ID: `ai-prompt-comparator`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nCompare AI prompt variations side-by-side with token counting, diff highlighting, and variable tracking — test prompts before deployment.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/ai-prompt-comparator.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe ai-prompt-comparator --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"ai-prompt-comparator","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"ai-prompt-comparator","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"ai-prompt-comparator","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"toml-editor","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# TOML Editor & Converter Skill\n\n- Tool ID: `toml-editor`\n- Category: `converter`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nParse, validate, and convert TOML to/from JSON and YAML — essential for Rust, Python, and config files.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/toml-editor.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe toml-editor --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"toml-editor","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"toml-editor","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"toml-editor","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"placeholder-image","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# Placeholder Image Generator Skill\n\n- Tool ID: `placeholder-image`\n- Category: `generator`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nGenerate custom placeholder images with configurable dimensions, colors, and text — download as PNG.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/placeholder-image.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe placeholder-image --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"placeholder-image","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"placeholder-image","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"placeholder-image","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"format-detective","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"L","remoteCallable":true,"files":{"skillMd":"# Format Detective Skill\n\n- Tool ID: `format-detective`\n- Category: `converter`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `L`\n\n## Purpose / when-to-use\nDetect unknown data formats and convert between JSON, YAML, XML, CSV, TOML, and text with browser + API workflows.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/format-detective.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run format-detective --input '{\"a\":\"example-input\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/format-detective//api/format-detective/detect/\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"format-detective","input":{"a":"example-input"},"expected":{"ok":true}},"edgeCase":{"toolId":"format-detective","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"format-detective","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"csv-json","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"L","remoteCallable":true,"files":{"skillMd":"# CSV ↔ JSON Converter Skill\n\n- Tool ID: `csv-json`\n- Category: `converter`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `L`\n\n## Purpose / when-to-use\nConvert between CSV and JSON with auto-delimiter detection and proper escaping.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/csv-json.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run csv-json --input '{\"a\":\"example-input\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=csv-json&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"csv-json","input":{"a":"example-input"},"expected":{"ok":true}},"edgeCase":{"toolId":"csv-json","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"csv-json","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"api-header-builder","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"M","remoteCallable":true,"files":{"skillMd":"# API Header Builder & cURL Generator Skill\n\n- Tool ID: `api-header-builder`\n- Category: `devtools`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `M`\n\n## Purpose / when-to-use\nBuild HTTP requests visually and generate code for cURL, fetch, axios, and Python with headers, auth, and query params.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/api-header-builder.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run api-header-builder --input '{\"a\":\"example-input\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=api-header-builder&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"api-header-builder","input":{"a":"example-input"},"expected":{"ok":true}},"edgeCase":{"toolId":"api-header-builder","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"api-header-builder","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"jsonpath-tester","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# JSONPath Tester Skill\n\n- Tool ID: `jsonpath-tester`\n- Category: `devtools`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nTest JSONPath expressions with real-time results — interactive JSON tree with click-to-path, syntax help, and examples.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/jsonpath-tester.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe jsonpath-tester --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"jsonpath-tester","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"jsonpath-tester","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"jsonpath-tester","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"http-status-codes","modeLabel":"local-only","remoteMode":"client_only","riskClass":"H","remoteCallable":false,"files":{"skillMd":"# HTTP Status Code Reference Skill\n\n- Tool ID: `http-status-codes`\n- Category: `devtools`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `H`\n\n## Purpose / when-to-use\nInteractive searchable reference for all HTTP status codes with descriptions and use cases.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/http-status-codes.json`\n- Max input bytes: `524288`\n- Timeout budget: `8000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe http-status-codes --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"http-status-codes","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"http-status-codes","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"http-status-codes","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"xml-formatter","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"M","remoteCallable":true,"files":{"skillMd":"# XML Formatter & Viewer Skill\n\n- Tool ID: `xml-formatter`\n- Category: `formatter`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `M`\n\n## Purpose / when-to-use\nFormat, beautify, and validate XML with syntax highlighting, tree view toggle, and minification.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/xml-formatter.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run xml-formatter --input '{\"a\":\"example-input\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=xml-formatter&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"xml-formatter","input":{"a":"example-input"},"expected":{"ok":true}},"edgeCase":{"toolId":"xml-formatter","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"xml-formatter","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"log-parser","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"M","remoteCallable":true,"files":{"skillMd":"# Log Parser & Highlighter Skill\n\n- Tool ID: `log-parser`\n- Category: `formatter`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `M`\n\n## Purpose / when-to-use\nParse and analyze logs with syntax highlighting, level filtering, and search. Auto-detects JSONL, Python, syslog, nginx formats.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/log-parser.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run log-parser --input '{\"a\":\"example-input\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=log-parser&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"log-parser","input":{"a":"example-input"},"expected":{"ok":true}},"edgeCase":{"toolId":"log-parser","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"log-parser","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"jsonl-viewer","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# NDJSON/JSONL Viewer Skill\n\n- Tool ID: `jsonl-viewer`\n- Category: `devtools`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nParse and view JSONL (newline-delimited JSON) with interactive table, filtering, sorting, and export.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/jsonl-viewer.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe jsonl-viewer --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"jsonl-viewer","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"jsonl-viewer","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"jsonl-viewer","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"markdown-to-html","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"L","remoteCallable":true,"files":{"skillMd":"# Markdown to HTML Converter Skill\n\n- Tool ID: `markdown-to-html`\n- Category: `converter`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `L`\n\n## Purpose / when-to-use\nConvert Markdown ↔ HTML with GitHub Flavored Markdown support, clean output, and optional API automation.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/markdown-to-html.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run markdown-to-html --input '{\"a\":\"example-input\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/html-markdown//api/html-markdown/\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"markdown-to-html","input":{"a":"example-input"},"expected":{"ok":true}},"edgeCase":{"toolId":"markdown-to-html","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"markdown-to-html","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"token-budget-planner","modeLabel":"local-only","remoteMode":"client_only","riskClass":"H","remoteCallable":false,"files":{"skillMd":"# Prompt Token Budget Planner Skill\n\n- Tool ID: `token-budget-planner`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `H`\n\n## Purpose / when-to-use\nPlan your AI system prompt token budget visually across sections against model context limits.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/token-budget-planner.json`\n- Max input bytes: `524288`\n- Timeout budget: `8000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe token-budget-planner --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"token-budget-planner","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"token-budget-planner","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"token-budget-planner","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"subnet-calculator","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"L","remoteCallable":true,"files":{"skillMd":"# IP & Subnet Calculator Skill\n\n- Tool ID: `subnet-calculator`\n- Category: `devtools`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `L`\n\n## Purpose / when-to-use\nCalculate subnets, CIDR ranges, network addresses, and host counts for IPv4 with visual binary breakdown.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/subnet-calculator.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run subnet-calculator --input '{\"a\":\"example-input\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=subnet-calculator&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"subnet-calculator","input":{"a":"example-input"},"expected":{"ok":true}},"edgeCase":{"toolId":"subnet-calculator","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"subnet-calculator","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"ai-tool-schema-builder","modeLabel":"local-only","remoteMode":"client_only","riskClass":"M","remoteCallable":false,"files":{"skillMd":"# AI Tool Schema Builder Skill\n\n- Tool ID: `ai-tool-schema-builder`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `M`\n\n## Purpose / when-to-use\nVisual schema builder for AI tool definitions with export to OpenAI, Anthropic, MCP, and JSON Schema formats.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/ai-tool-schema-builder.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe ai-tool-schema-builder --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"ai-tool-schema-builder","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"ai-tool-schema-builder","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"ai-tool-schema-builder","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"nginx-config-generator","modeLabel":"local-only","remoteMode":"client_only","riskClass":"M","remoteCallable":false,"files":{"skillMd":"# Nginx Config Generator Skill\n\n- Tool ID: `nginx-config-generator`\n- Category: `generator`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `M`\n\n## Purpose / when-to-use\nGenerate nginx configurations for reverse proxy, SSL, static sites, and load balancers with security headers.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/nginx-config-generator.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe nginx-config-generator --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"nginx-config-generator","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"nginx-config-generator","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"nginx-config-generator","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"base64","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# Base64 Encoder/Decoder Skill\n\n- Tool ID: `base64`\n- Category: `converter`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nEncode and decode Base64 strings and files.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/base64.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe base64 --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"base64","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"base64","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"base64","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"url-encoder","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# URL Encoder/Decoder Skill\n\n- Tool ID: `url-encoder`\n- Category: `converter`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nEncode and decode URL components and full URLs.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/url-encoder.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe url-encoder --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"url-encoder","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"url-encoder","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"url-encoder","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"unicode-inspector","modeLabel":"local-only","remoteMode":"client_only","riskClass":"M","remoteCallable":false,"files":{"skillMd":"# Unicode Character Inspector Skill\n\n- Tool ID: `unicode-inspector`\n- Category: `converter`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `M`\n\n## Purpose / when-to-use\nInspect any text character-by-character: code points, UTF-8/16/32 bytes, HTML entities, JS escapes, and Unicode categories.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/unicode-inspector.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe unicode-inspector --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"unicode-inspector","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"unicode-inspector","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"unicode-inspector","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"timestamp-converter","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"M","remoteCallable":true,"files":{"skillMd":"# Unix Timestamp Converter Skill\n\n- Tool ID: `timestamp-converter`\n- Category: `converter`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `M`\n\n## Purpose / when-to-use\nConvert between Unix timestamps and human-readable dates.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/timestamp-converter.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run timestamp-converter --input '{\"a\":\"example-input\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=timestamp-converter&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"timestamp-converter","input":{"a":"example-input"},"expected":{"ok":true}},"edgeCase":{"toolId":"timestamp-converter","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"timestamp-converter","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"js-minifier","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# JavaScript Minifier & Beautifier Skill\n\n- Tool ID: `js-minifier`\n- Category: `formatter`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nMinify or beautify JavaScript code with compression ratio stats.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/js-minifier.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe js-minifier --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"js-minifier","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"js-minifier","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"js-minifier","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"css-minifier","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# CSS Minifier & Beautifier Skill\n\n- Tool ID: `css-minifier`\n- Category: `formatter`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nMinify or beautify CSS with size reduction stats and comment removal options.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/css-minifier.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe css-minifier --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"css-minifier","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"css-minifier","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"css-minifier","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"html-formatter","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"M","remoteCallable":true,"files":{"skillMd":"# HTML Formatter & Viewer Skill\n\n- Tool ID: `html-formatter`\n- Category: `formatter`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `M`\n\n## Purpose / when-to-use\nFormat, beautify, and validate HTML with live preview, syntax highlighting, and minification.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/html-formatter.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run html-formatter --input '{\"a\":\"example-input\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=html-formatter&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"html-formatter","input":{"a":"example-input"},"expected":{"ok":true}},"edgeCase":{"toolId":"html-formatter","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"html-formatter","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"structured-output-validator","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"M","remoteCallable":true,"files":{"skillMd":"# LLM Structured Output Validator Skill\n\n- Tool ID: `structured-output-validator`\n- Category: `ai`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `M`\n\n## Purpose / when-to-use\nValidate structured outputs and tool schemas for OpenAI, Anthropic, MCP, and JSON Schema with detailed errors and fix guidance.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/structured-output-validator.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run structured-output-validator --input '{\"a\":\"example-input\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/schema-validator//api/schema-validator/\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"structured-output-validator","input":{"a":"example-input"},"expected":{"ok":true}},"edgeCase":{"toolId":"structured-output-validator","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"structured-output-validator","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"ssh-config-generator","modeLabel":"local-only","remoteMode":"client_only","riskClass":"M","remoteCallable":false,"files":{"skillMd":"# SSH Config Generator Skill\n\n- Tool ID: `ssh-config-generator`\n- Category: `devtools`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `M`\n\n## Purpose / when-to-use\nGenerate SSH config files with jump hosts, port forwarding, and identity keys — visual editor with presets.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/ssh-config-generator.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe ssh-config-generator --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"ssh-config-generator","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"ssh-config-generator","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"ssh-config-generator","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"openapi-to-typescript","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"H","remoteCallable":true,"files":{"skillMd":"# OpenAPI to TypeScript Generator Skill\n\n- Tool ID: `openapi-to-typescript`\n- Category: `converter`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `H`\n\n## Purpose / when-to-use\nGenerate TypeScript types and API clients from OpenAPI 3.x specs — handles $ref, allOf, oneOf, discriminators.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/openapi-to-typescript.json`\n- Max input bytes: `524288`\n- Timeout budget: `8000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run openapi-to-typescript --input '{\"a\":\"example-input\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=openapi-to-typescript&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"openapi-to-typescript","input":{"a":"example-input"},"expected":{"ok":true}},"edgeCase":{"toolId":"openapi-to-typescript","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"openapi-to-typescript","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"shell-command-explainer","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"L","remoteCallable":true,"files":{"skillMd":"# Shell Command Explainer Skill\n\n- Tool ID: `shell-command-explainer`\n- Category: `devtools`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `L`\n\n## Purpose / when-to-use\nBreak down and explain shell commands with annotated syntax highlighting and dangerous pattern detection.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/shell-command-explainer.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run shell-command-explainer --input '{\"a\":\"example-input\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=shell-command-explainer&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"shell-command-explainer","input":{"a":"example-input"},"expected":{"ok":true}},"edgeCase":{"toolId":"shell-command-explainer","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"shell-command-explainer","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"config-validator","modeLabel":"local-only","remoteMode":"client_only","riskClass":"M","remoteCallable":false,"files":{"skillMd":"# YAML/JSON5 Config Validator Skill\n\n- Tool ID: `config-validator`\n- Category: `devtools`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `M`\n\n## Purpose / when-to-use\nValidate YAML, JSON5, and JSON configs with instant error detection, linting, and format conversion.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/config-validator.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe config-validator --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"config-validator","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"config-validator","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"config-validator","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"webhook-inspector","modeLabel":"local-only","remoteMode":"client_only","riskClass":"M","remoteCallable":false,"files":{"skillMd":"# Webhook Payload Inspector Skill\n\n- Tool ID: `webhook-inspector`\n- Category: `devtools`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `M`\n\n## Purpose / when-to-use\nAnalyze webhook payloads with formatted JSON view, HMAC signature verification, timestamp detection, and cURL reconstruction.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/webhook-inspector.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe webhook-inspector --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"webhook-inspector","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"webhook-inspector","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"webhook-inspector","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"robots-txt-generator","modeLabel":"local-only","remoteMode":"client_only","riskClass":"M","remoteCallable":false,"files":{"skillMd":"# robots.txt Generator & Validator Skill\n\n- Tool ID: `robots-txt-generator`\n- Category: `generator`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `M`\n\n## Purpose / when-to-use\nGenerate and validate robots.txt with user-agent rules, sitemap URLs, and AI scraper blocking — download or copy instantly.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/robots-txt-generator.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe robots-txt-generator --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"robots-txt-generator","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"robots-txt-generator","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"robots-txt-generator","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"git-commit-message-generator","modeLabel":"local-only","remoteMode":"client_only","riskClass":"M","remoteCallable":false,"files":{"skillMd":"# Git Commit Message Generator Skill\n\n- Tool ID: `git-commit-message-generator`\n- Category: `generator`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `M`\n\n## Purpose / when-to-use\nGenerate conventional commit messages with proper formatting — supports types, scopes, breaking changes, and issue references.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/git-commit-message-generator.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe git-commit-message-generator --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"git-commit-message-generator","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"git-commit-message-generator","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"git-commit-message-generator","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"ascii-art-generator","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"M","remoteCallable":true,"files":{"skillMd":"# ASCII Art Generator Skill\n\n- Tool ID: `ascii-art-generator`\n- Category: `generator`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `M`\n\n## Purpose / when-to-use\nConvert text to ASCII art with 10 unique fonts — perfect for README files, terminal banners, and code comments.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/ascii-art-generator.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run ascii-art-generator --input '{\"a\":\"example-input\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=ascii-art-generator&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"ascii-art-generator","input":{"a":"example-input"},"expected":{"ok":true}},"edgeCase":{"toolId":"ascii-art-generator","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"ascii-art-generator","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"html-entities","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# HTML Entity Encoder Skill\n\n- Tool ID: `html-entities`\n- Category: `converter`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nEncode and decode HTML entities and special characters.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/html-entities.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe html-entities --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"html-entities","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"html-entities","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"html-entities","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"image-to-base64","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# Image to Base64 Converter Skill\n\n- Tool ID: `image-to-base64`\n- Category: `converter`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nConvert PNG, JPG, GIF, WebP, and SVG images to Base64 encoding with data URI, CSS, and HTML formats.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/image-to-base64.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe image-to-base64 --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"image-to-base64","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"image-to-base64","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"image-to-base64","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"number-base-converter","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"M","remoteCallable":true,"files":{"skillMd":"# Number Base Converter Skill\n\n- Tool ID: `number-base-converter`\n- Category: `converter`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `M`\n\n## Purpose / when-to-use\nConvert between hex, binary, decimal, and octal with bit visualization and bitwise operations.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/number-base-converter.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run number-base-converter --input '{\"a\":\"example-input\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=number-base-converter&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"number-base-converter","input":{"a":"example-input"},"expected":{"ok":true}},"edgeCase":{"toolId":"number-base-converter","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"number-base-converter","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"byte-converter","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"M","remoteCallable":true,"files":{"skillMd":"# Byte & Data Unit Converter Skill\n\n- Tool ID: `byte-converter`\n- Category: `converter`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `M`\n\n## Purpose / when-to-use\nConvert between bytes, KB, MB, GB, TB with SI and binary standards — includes transfer time estimator.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/byte-converter.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run byte-converter --input '{\"a\":\"example-input\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=byte-converter&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"byte-converter","input":{"a":"example-input"},"expected":{"ok":true}},"edgeCase":{"toolId":"byte-converter","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"byte-converter","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"json-sorter-cleaner","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# JSON Sorter & Cleaner Skill\n\n- Tool ID: `json-sorter-cleaner`\n- Category: `devtools`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nSort JSON keys, remove null values, deduplicate arrays, flatten nested objects — multiple operations in one tool.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/json-sorter-cleaner.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe json-sorter-cleaner --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"json-sorter-cleaner","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"json-sorter-cleaner","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"json-sorter-cleaner","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"glob-pattern-tester","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# Glob Pattern Tester Skill\n\n- Tool ID: `glob-pattern-tester`\n- Category: `devtools`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nTest glob patterns against file paths with real-time matching — supports gitignore, tsconfig, and shell syntax.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/glob-pattern-tester.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe glob-pattern-tester --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"glob-pattern-tester","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"glob-pattern-tester","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"glob-pattern-tester","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"uuid-generator","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"M","remoteCallable":true,"files":{"skillMd":"# UUID Generator Skill\n\n- Tool ID: `uuid-generator`\n- Category: `generator`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `M`\n\n## Purpose / when-to-use\nGenerate UUID v4 and UUID v7 with bulk output and format controls.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/uuid-generator.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run uuid-generator --input '{\"a\":\"example-input\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=uuid-generator&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"uuid-generator","input":{"a":"example-input"},"expected":{"ok":true}},"edgeCase":{"toolId":"uuid-generator","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"uuid-generator","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"memory-file-builder","modeLabel":"local-only","remoteMode":"client_only","riskClass":"M","remoteCallable":false,"files":{"skillMd":"# Markdown Memory File Builder Skill\n\n- Tool ID: `memory-file-builder`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `M`\n\n## Purpose / when-to-use\nCreate structured markdown memory files for AI agents — SOUL.md, USER.md, AGENTS.md, daily logs, decision records, and more.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/memory-file-builder.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe memory-file-builder --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"memory-file-builder","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"memory-file-builder","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"memory-file-builder","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"api-response-mocker","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"L","remoteCallable":true,"files":{"skillMd":"# API Response Mocker Skill\n\n- Tool ID: `api-response-mocker`\n- Category: `devtools`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `L`\n\n## Purpose / when-to-use\nGenerate mock API responses for testing — get instant code for fetch, MSW, Express, curl, and Python without spinning up a server.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/api-response-mocker.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run api-response-mocker --input '{\"a\":\"example-input\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=api-response-mocker&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"api-response-mocker","input":{"a":"example-input"},"expected":{"ok":true}},"edgeCase":{"toolId":"api-response-mocker","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"api-response-mocker","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"embedding-similarity-calculator","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# Embedding Similarity Calculator Skill\n\n- Tool ID: `embedding-similarity-calculator`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nCalculate cosine similarity, dot product, and distance between embedding vectors from OpenAI, Cohere, and more.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/embedding-similarity-calculator.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe embedding-similarity-calculator --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"embedding-similarity-calculator","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"embedding-similarity-calculator","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"embedding-similarity-calculator","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"rag-chunk-calculator","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# RAG Chunk Size Calculator Skill\n\n- Tool ID: `rag-chunk-calculator`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nCalculate optimal chunk size and overlap for RAG pipelines based on document type and embedding model.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/rag-chunk-calculator.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe rag-chunk-calculator --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"rag-chunk-calculator","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"rag-chunk-calculator","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"rag-chunk-calculator","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"agent-trace-viewer","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# Agent Trace Viewer Skill\n\n- Tool ID: `agent-trace-viewer`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nVisualize AI agent execution traces with timeline, table, and detail views for debugging LangChain and OpenAI agents.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/agent-trace-viewer.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe agent-trace-viewer --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"agent-trace-viewer","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"agent-trace-viewer","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"agent-trace-viewer","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"prompt-version-diff","modeLabel":"local-only","remoteMode":"client_only","riskClass":"H","remoteCallable":false,"files":{"skillMd":"# Prompt Version Diff Skill\n\n- Tool ID: `prompt-version-diff`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `H`\n\n## Purpose / when-to-use\nCompare AI prompt versions with semantic diff — track variable changes, instruction modifications, and token deltas.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/prompt-version-diff.json`\n- Max input bytes: `524288`\n- Timeout budget: `8000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe prompt-version-diff --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"prompt-version-diff","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"prompt-version-diff","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"prompt-version-diff","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"guardrail-rule-tester","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# AI Guardrail Rule Tester Skill\n\n- Tool ID: `guardrail-rule-tester`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nBuild and test AI guardrail rules with instant feedback — preset PII, injection, and safety patterns.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/guardrail-rule-tester.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe guardrail-rule-tester --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"guardrail-rule-tester","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"guardrail-rule-tester","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"guardrail-rule-tester","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"function-call-simulator","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# Function Call Flow Simulator Skill\n\n- Tool ID: `function-call-simulator`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nSimulate AI function calling and tool use flows without API calls — test multi-step agent conversations.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/function-call-simulator.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe function-call-simulator --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"function-call-simulator","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"function-call-simulator","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"function-call-simulator","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"api-format-converter","modeLabel":"local-only","remoteMode":"client_only","riskClass":"M","remoteCallable":false,"files":{"skillMd":"# OpenAI ↔ Anthropic Format Converter Skill\n\n- Tool ID: `api-format-converter`\n- Category: `converter`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `M`\n\n## Purpose / when-to-use\nConvert between OpenAI and Anthropic API formats — messages, tool definitions, and responses bidirectionally.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/api-format-converter.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe api-format-converter --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"api-format-converter","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"api-format-converter","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"api-format-converter","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"chmod-calculator","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"L","remoteCallable":true,"files":{"skillMd":"# chmod Calculator Skill\n\n- Tool ID: `chmod-calculator`\n- Category: `devtools`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `L`\n\n## Purpose / when-to-use\nVisual Unix permission calculator with bidirectional numeric and symbolic chmod conversion.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/chmod-calculator.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run chmod-calculator --input '{\"a\":\"example-input\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=chmod-calculator&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"chmod-calculator","input":{"a":"example-input"},"expected":{"ok":true}},"edgeCase":{"toolId":"chmod-calculator","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"chmod-calculator","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"env-file-manager","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# Env File Manager Skill\n\n- Tool ID: `env-file-manager`\n- Category: `devtools`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nParse, validate, edit, and convert .env files between JSON, YAML, Docker, and Shell formats.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/env-file-manager.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe env-file-manager --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"env-file-manager","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"env-file-manager","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"env-file-manager","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"ai-api-key-tester","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# AI API Key Tester Skill\n\n- Tool ID: `ai-api-key-tester`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nValidate AI API keys from Anthropic, OpenAI, OpenRouter, Groq, and more — detect provider, check format, get config snippets.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/ai-api-key-tester.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe ai-api-key-tester --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"ai-api-key-tester","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"ai-api-key-tester","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"ai-api-key-tester","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"cron-tester","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# Cron Expression Tester Skill\n\n- Tool ID: `cron-tester`\n- Category: `devtools`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nTest cron expressions and see next run times in your timezone. Generate cron from natural language like 'every Monday at 9am'. Free, private, no signup..\n\n## Input contract summary\n- Canonical contract source: `/api/tool/cron-tester.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe cron-tester --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"cron-tester","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"cron-tester","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"cron-tester","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"markdown-table-generator","modeLabel":"local-only","remoteMode":"client_only","riskClass":"M","remoteCallable":false,"files":{"skillMd":"# Markdown Table Generator Skill\n\n- Tool ID: `markdown-table-generator`\n- Category: `generator`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `M`\n\n## Purpose / when-to-use\nVisual spreadsheet-like table editor that outputs clean Markdown tables with CSV import and alignment controls.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/markdown-table-generator.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe markdown-table-generator --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"markdown-table-generator","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"markdown-table-generator","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"markdown-table-generator","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"htaccess-generator","modeLabel":"local-only","remoteMode":"client_only","riskClass":"M","remoteCallable":false,"files":{"skillMd":"# htaccess Generator Skill\n\n- Tool ID: `htaccess-generator`\n- Category: `generator`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `M`\n\n## Purpose / when-to-use\nVisual Apache .htaccess file generator with redirects, rewrites, security headers, caching rules, and access control.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/htaccess-generator.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe htaccess-generator --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"htaccess-generator","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"htaccess-generator","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"htaccess-generator","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"launchd-plist-generator","modeLabel":"local-only","remoteMode":"client_only","riskClass":"M","remoteCallable":false,"files":{"skillMd":"# launchd Plist Generator Skill\n\n- Tool ID: `launchd-plist-generator`\n- Category: `generator`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `M`\n\n## Purpose / when-to-use\nVisual macOS launchd plist XML file generator for daemons and scheduled tasks with calendar intervals and install commands.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/launchd-plist-generator.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe launchd-plist-generator --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"launchd-plist-generator","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"launchd-plist-generator","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"launchd-plist-generator","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"hash-generator","modeLabel":"local-only","remoteMode":"client_only","riskClass":"M","remoteCallable":false,"files":{"skillMd":"# Hash Generator Skill\n\n- Tool ID: `hash-generator`\n- Category: `devtools`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `M`\n\n## Purpose / when-to-use\nGenerate MD5, SHA-1, SHA-256, SHA-384, and SHA-512 hashes for text or files.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/hash-generator.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe hash-generator --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"hash-generator","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"hash-generator","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"hash-generator","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"lorem-ipsum","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# Lorem Ipsum Generator Skill\n\n- Tool ID: `lorem-ipsum`\n- Category: `generator`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nGenerate placeholder text in various formats.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/lorem-ipsum.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe lorem-ipsum --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"lorem-ipsum","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"lorem-ipsum","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"lorem-ipsum","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"ai-token-pricing-calculator","modeLabel":"local-only","remoteMode":"client_only","riskClass":"H","remoteCallable":false,"files":{"skillMd":"# AI Token + Pricing Calculator Skill\n\n- Tool ID: `ai-token-pricing-calculator`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `H`\n\n## Purpose / when-to-use\nPaste text, count tokens, and compare LLM API costs across GPT, Claude, Gemini and more with batch estimation and CSV export.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/ai-token-pricing-calculator.json`\n- Max input bytes: `524288`\n- Timeout budget: `8000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe ai-token-pricing-calculator --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"ai-token-pricing-calculator","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"ai-token-pricing-calculator","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"ai-token-pricing-calculator","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"env-file-validator","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"M","remoteCallable":true,"files":{"skillMd":"# ENV File Validator Skill\n\n- Tool ID: `env-file-validator`\n- Category: `devtools`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `M`\n\n## Purpose / when-to-use\nValidate .env files against .env.example — catch missing variables, empty values, and type mismatches.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/env-file-validator.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run env-file-validator --input '{\"a\":\"example-input\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=env-file-validator&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"env-file-validator","input":{"a":"example-input"},"expected":{"ok":true}},"edgeCase":{"toolId":"env-file-validator","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"env-file-validator","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"env-generator","modeLabel":"local-only","remoteMode":"client_only","riskClass":"M","remoteCallable":false,"files":{"skillMd":"# Environment Variable Generator Skill\n\n- Tool ID: `env-generator`\n- Category: `devtools`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `M`\n\n## Purpose / when-to-use\nGenerate .env files from Docker Compose, Kubernetes configs, or framework presets. Create documented environment variable templates instantly..\n\n## Input contract summary\n- Canonical contract source: `/api/tool/env-generator.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe env-generator --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"env-generator","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"env-generator","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"env-generator","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"system-design-simulator","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# System Design Simulator Skill\n\n- Tool ID: `system-design-simulator`\n- Category: `devtools`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nVisual drag-and-drop system architecture builder with components, connections, templates, and export — perfect for interview prep.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/system-design-simulator.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe system-design-simulator --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"system-design-simulator","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"system-design-simulator","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"system-design-simulator","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"webmcp-playground","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# WebMCP Playground Skill\n\n- Tool ID: `webmcp-playground`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nTest and validate WebMCP tool definitions — paste manifest JSON, simulate agent tool calls, validate against the W3C spec, preview tool discovery..\n\n## Input contract summary\n- Canonical contract source: `/api/tool/webmcp-playground.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe webmcp-playground --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"webmcp-playground","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"webmcp-playground","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"webmcp-playground","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"mcp-generator","modeLabel":"local-only","remoteMode":"client_only","riskClass":"M","remoteCallable":false,"files":{"skillMd":"# MCP Server Starter Generator Skill\n\n- Tool ID: `mcp-generator`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `M`\n\n## Purpose / when-to-use\nGenerate complete MCP server projects with tools, resources, and auth — TypeScript, Python, or Go.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/mcp-generator.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe mcp-generator --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"mcp-generator","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"mcp-generator","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"mcp-generator","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"extension-guard","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# Extension Guard Skill\n\n- Tool ID: `extension-guard`\n- Category: `devtools`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nScan Chrome extension permissions for security risks with risk scoring, dangerous combination detection, and plain-English explanations.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/extension-guard.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe extension-guard --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"extension-guard","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"extension-guard","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"extension-guard","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"url-metadata-extractor","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"H","remoteCallable":true,"files":{"skillMd":"# URL Metadata Extractor Skill\n\n- Tool ID: `url-metadata-extractor`\n- Category: `devtools`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `H`\n\n## Purpose / when-to-use\nExtract OG tags, canonical URLs, meta descriptions, and JSON-LD from pasted HTML.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/url-metadata-extractor.json`\n- Max input bytes: `524288`\n- Timeout budget: `8000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run url-metadata-extractor --input '{\"a\":\"<html><head><title>Example</title><meta property=\\\"og:title\\\" content=\\\"Example OG\\\"><meta name=\\\"description\\\" content=\\\"Example description\\\"><link rel=\\\"canonical\\\" href=\\\"https://example.com\\\"></head><body>Hello</body></html>\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=url-metadata-extractor&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"url-metadata-extractor","input":{"a":"<html><head><title>Example</title><meta property=\"og:title\" content=\"Example OG\"><meta name=\"description\" content=\"Example description\"><link rel=\"canonical\" href=\"https://example.com\"></head><body>Hello</body></html>"},"expected":{"ok":true}},"edgeCase":{"toolId":"url-metadata-extractor","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"url-metadata-extractor","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"tech-stack-detector","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"H","remoteCallable":true,"files":{"skillMd":"# Website Tech Stack Detector Skill\n\n- Tool ID: `tech-stack-detector`\n- Category: `devtools`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `H`\n\n## Purpose / when-to-use\nDetect website frameworks and platforms from pasted HTML, headers, and script URLs.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/tech-stack-detector.json`\n- Max input bytes: `524288`\n- Timeout budget: `8000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run tech-stack-detector --input '{\"a\":\"<script src=\\\"/_next/static/chunks/main.js\\\"></script><div id=\\\"__NEXT_DATA__\\\"></div>\",\"b\":\"server: cloudflare\\\\nx-powered-by: Next.js\",\"c\":\"https://cdn.shopify.com/shop.js\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=tech-stack-detector&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"tech-stack-detector","input":{"a":"<script src=\"/_next/static/chunks/main.js\"></script><div id=\"__NEXT_DATA__\"></div>","b":"server: cloudflare\\nx-powered-by: Next.js","c":"https://cdn.shopify.com/shop.js"},"expected":{"ok":true}},"edgeCase":{"toolId":"tech-stack-detector","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"tech-stack-detector","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"rss-feed-validator","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"H","remoteCallable":true,"files":{"skillMd":"# RSS Feed Validator Skill\n\n- Tool ID: `rss-feed-validator`\n- Category: `devtools`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `H`\n\n## Purpose / when-to-use\nValidate RSS/Atom XML and preview feed entries with parser diagnostics.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/rss-feed-validator.json`\n- Max input bytes: `524288`\n- Timeout budget: `8000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run rss-feed-validator --input '{\"a\":\"<?xml version=\\\"1.0\\\"?><rss version=\\\"2.0\\\"><channel><title>Example Feed</title><item><title>Hello</title><link>https://example.com/hello</link></item></channel></rss>\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=rss-feed-validator&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"rss-feed-validator","input":{"a":"<?xml version=\"1.0\"?><rss version=\"2.0\"><channel><title>Example Feed</title><item><title>Hello</title><link>https://example.com/hello</link></item></channel></rss>"},"expected":{"ok":true}},"edgeCase":{"toolId":"rss-feed-validator","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"rss-feed-validator","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"dns-lookup","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"H","remoteCallable":true,"files":{"skillMd":"# DNS Lookup Parser Skill\n\n- Tool ID: `dns-lookup`\n- Category: `devtools`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `H`\n\n## Purpose / when-to-use\nParse dig and nslookup output into structured DNS record views.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/dns-lookup.json`\n- Max input bytes: `524288`\n- Timeout budget: `8000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run dns-lookup --input '{\"a\":\"example.com. 300 IN A 93.184.216.34\\\\nexample.com. 300 IN MX 10 mail.example.com.\\\\nexample.com. 300 IN TXT \\\"v=spf1 -all\\\"\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=dns-lookup&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"dns-lookup","input":{"a":"example.com. 300 IN A 93.184.216.34\\nexample.com. 300 IN MX 10 mail.example.com.\\nexample.com. 300 IN TXT \"v=spf1 -all\""},"expected":{"ok":true}},"edgeCase":{"toolId":"dns-lookup","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"dns-lookup","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"http-header-inspector","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"H","remoteCallable":true,"files":{"skillMd":"# HTTP Header Inspector Skill\n\n- Tool ID: `http-header-inspector`\n- Category: `devtools`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `H`\n\n## Purpose / when-to-use\nInspect HTTP response headers for security, caching, and CORS posture.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/http-header-inspector.json`\n- Max input bytes: `524288`\n- Timeout budget: `8000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run http-header-inspector --input '{\"a\":\"content-type: text/html\\\\nstrict-transport-security: max-age=31536000\\\\ncontent-security-policy: default-src '\\''self'\\''\\\\ncache-control: public, max-age=60\\\\naccess-control-allow-origin: *\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=http-header-inspector&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"http-header-inspector","input":{"a":"content-type: text/html\\nstrict-transport-security: max-age=31536000\\ncontent-security-policy: default-src 'self'\\ncache-control: public, max-age=60\\naccess-control-allow-origin: *"},"expected":{"ok":true}},"edgeCase":{"toolId":"http-header-inspector","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"http-header-inspector","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"ssl-checker","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"H","remoteCallable":true,"files":{"skillMd":"# SSL Certificate Checker Skill\n\n- Tool ID: `ssl-checker`\n- Category: `devtools`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `H`\n\n## Purpose / when-to-use\nParse certificate text and check issuer, SANs, and expiry risk.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/ssl-checker.json`\n- Max input bytes: `524288`\n- Timeout budget: `8000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run ssl-checker --input '{\"a\":\"subject=CN = example.com\\\\nissuer=CN = R3\\\\nNot Before: Jan  1 00:00:00 2026 GMT\\\\nNot After : Jan  1 00:00:00 2027 GMT\\\\nX509v3 Subject Alternative Name: DNS:example.com, DNS:www.example.com\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=ssl-checker&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"ssl-checker","input":{"a":"subject=CN = example.com\\nissuer=CN = R3\\nNot Before: Jan  1 00:00:00 2026 GMT\\nNot After : Jan  1 00:00:00 2027 GMT\\nX509v3 Subject Alternative Name: DNS:example.com, DNS:www.example.com"},"expected":{"ok":true}},"edgeCase":{"toolId":"ssl-checker","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"ssl-checker","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"cursor-rules-generator","modeLabel":"local-only","remoteMode":"client_only","riskClass":"M","remoteCallable":false,"files":{"skillMd":"# Cursor Rules Generator Skill\n\n- Tool ID: `cursor-rules-generator`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `M`\n\n## Purpose / when-to-use\nGenerate .cursorrules and .windsurfrules files for AI coding assistants.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/cursor-rules-generator.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe cursor-rules-generator --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"cursor-rules-generator","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"cursor-rules-generator","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"cursor-rules-generator","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"ai-response-comparator","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# AI Response Comparator Skill\n\n- Tool ID: `ai-response-comparator`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nCompare model outputs side-by-side with diff and analysis modes.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/ai-response-comparator.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe ai-response-comparator --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"ai-response-comparator","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"ai-response-comparator","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"ai-response-comparator","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"openapi-changelog","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"H","remoteCallable":true,"files":{"skillMd":"# OpenAPI Changelog Generator Skill\n\n- Tool ID: `openapi-changelog`\n- Category: `devtools`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `H`\n\n## Purpose / when-to-use\nGenerate endpoint-level changelogs by diffing two OpenAPI specs.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/openapi-changelog.json`\n- Max input bytes: `524288`\n- Timeout budget: `8000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run openapi-changelog --input '{\"a\":\"{\\\"openapi\\\":\\\"3.0.0\\\",\\\"paths\\\":{\\\"/users\\\":{\\\"get\\\":{\\\"summary\\\":\\\"list\\\"}}}}\",\"b\":\"{\\\"openapi\\\":\\\"3.0.0\\\",\\\"paths\\\":{\\\"/users\\\":{\\\"get\\\":{\\\"summary\\\":\\\"list users\\\"}},\\\"/users/{id}\\\":{\\\"get\\\":{\\\"summary\\\":\\\"get user\\\"}}}}\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=openapi-changelog&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"openapi-changelog","input":{"a":"{\"openapi\":\"3.0.0\",\"paths\":{\"/users\":{\"get\":{\"summary\":\"list\"}}}}","b":"{\"openapi\":\"3.0.0\",\"paths\":{\"/users\":{\"get\":{\"summary\":\"list users\"}},\"/users/{id}\":{\"get\":{\"summary\":\"get user\"}}}}"},"expected":{"ok":true}},"edgeCase":{"toolId":"openapi-changelog","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"openapi-changelog","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"webhook-signature-verifier","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# Webhook Signature Verifier Skill\n\n- Tool ID: `webhook-signature-verifier`\n- Category: `devtools`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nVerify webhook signatures and inspect payload integrity before processing.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/webhook-signature-verifier.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe webhook-signature-verifier --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"webhook-signature-verifier","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"webhook-signature-verifier","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"webhook-signature-verifier","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"gitignore-generator","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"M","remoteCallable":true,"files":{"skillMd":"# .gitignore Generator Skill\n\n- Tool ID: `gitignore-generator`\n- Category: `devtools`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `M`\n\n## Purpose / when-to-use\nGenerate stack-aware .gitignore templates for modern projects.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/gitignore-generator.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run gitignore-generator --input '{\"a\":\"node\\\\nmacos\\\\nvscode\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=gitignore-generator&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"gitignore-generator","input":{"a":"node\\nmacos\\nvscode"},"expected":{"ok":true}},"edgeCase":{"toolId":"gitignore-generator","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"gitignore-generator","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"package-json-generator","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"M","remoteCallable":true,"files":{"skillMd":"# Package.json Generator Skill\n\n- Tool ID: `package-json-generator`\n- Category: `devtools`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `M`\n\n## Purpose / when-to-use\nGenerate package.json scaffolds for apps and libraries.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/package-json-generator.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run package-json-generator --input '{\"a\":\"my-app\",\"b\":\"Fast app scaffold\",\"mode\":\"app\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=package-json-generator&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"package-json-generator","input":{"a":"my-app","b":"Fast app scaffold","mode":"app"},"expected":{"ok":true}},"edgeCase":{"toolId":"package-json-generator","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"package-json-generator","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"license-compatibility-checker","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# License Compatibility Checker Skill\n\n- Tool ID: `license-compatibility-checker`\n- Category: `devtools`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nCheck whether open source licenses are compatible and get recommended outbound licenses.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/license-compatibility-checker.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe license-compatibility-checker --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"license-compatibility-checker","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"license-compatibility-checker","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"license-compatibility-checker","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"semver-calculator","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"L","remoteCallable":true,"files":{"skillMd":"# Semver Calculator Skill\n\n- Tool ID: `semver-calculator`\n- Category: `devtools`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `L`\n\n## Purpose / when-to-use\nCompare semantic versions and test range expressions.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/semver-calculator.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run semver-calculator --input '{\"a\":\"1.3.0\",\"b\":\"^1.2.3\",\"mode\":\"range\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=semver-calculator&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"semver-calculator","input":{"a":"1.3.0","b":"^1.2.3","mode":"range"},"expected":{"ok":true}},"edgeCase":{"toolId":"semver-calculator","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"semver-calculator","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"dockerfile-generator","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"H","remoteCallable":true,"files":{"skillMd":"# Dockerfile Generator Skill\n\n- Tool ID: `dockerfile-generator`\n- Category: `devtools`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `H`\n\n## Purpose / when-to-use\nGenerate safer Dockerfile templates for Node, Python, and Go.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/dockerfile-generator.json`\n- Max input bytes: `524288`\n- Timeout budget: `8000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run dockerfile-generator --input '{\"a\":\"npm run start\",\"mode\":\"node\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=dockerfile-generator&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"dockerfile-generator","input":{"a":"npm run start","mode":"node"},"expected":{"ok":true}},"edgeCase":{"toolId":"dockerfile-generator","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"dockerfile-generator","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"readme-generator","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"M","remoteCallable":true,"files":{"skillMd":"# README Generator Skill\n\n- Tool ID: `readme-generator`\n- Category: `generator`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `M`\n\n## Purpose / when-to-use\nGenerate clean README.md templates with project structure and usage sections.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/readme-generator.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run readme-generator --input '{\"a\":\"Spec Factory\",\"b\":\"Ship deterministic tooling fast.\",\"c\":\"Fast build loop\\\\nDeterministic outputs\\\\nClient-side privacy\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=readme-generator&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"readme-generator","input":{"a":"Spec Factory","b":"Ship deterministic tooling fast.","c":"Fast build loop\\nDeterministic outputs\\nClient-side privacy"},"expected":{"ok":true}},"edgeCase":{"toolId":"readme-generator","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"readme-generator","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"cors-debugger","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"L","remoteCallable":true,"files":{"skillMd":"# CORS Debugger Skill\n\n- Tool ID: `cors-debugger`\n- Category: `devtools`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `L`\n\n## Purpose / when-to-use\nAnalyze CORS failures and output concrete server-side fixes.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/cors-debugger.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run cors-debugger --input '{\"a\":\"Access to fetch at '\\''https://api.example.com'\\'' from origin '\\''https://app.example.com'\\'' has been blocked by CORS policy: No '\\''Access-Control-Allow-Origin'\\'' header is present.\",\"b\":\"content-type: application/json\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=cors-debugger&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"cors-debugger","input":{"a":"Access to fetch at 'https://api.example.com' from origin 'https://app.example.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present.","b":"content-type: application/json"},"expected":{"ok":true}},"edgeCase":{"toolId":"cors-debugger","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"cors-debugger","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"api-key-generator","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"M","remoteCallable":true,"files":{"skillMd":"# API Key Generator Skill\n\n- Tool ID: `api-key-generator`\n- Category: `devtools`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `M`\n\n## Purpose / when-to-use\nGenerate secure, format-aware API keys and tokens for local development, testing, and CI pipelines. Supports custom lengths, prefixes, and character sets..\n\n## Input contract summary\n- Canonical contract source: `/api/tool/api-key-generator.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run api-key-generator --input '{\"a\":\"sk-test-\",\"b\":\"32\",\"mode\":\"generic\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=api-key-generator&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"api-key-generator","input":{"a":"sk-test-","b":"32","mode":"generic"},"expected":{"ok":true}},"edgeCase":{"toolId":"api-key-generator","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"api-key-generator","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"tailwind-previewer","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# Tailwind Previewer Skill\n\n- Tool ID: `tailwind-previewer`\n- Category: `converter`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nPreview Tailwind utility output and conversion results.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/tailwind-previewer.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe tailwind-previewer --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"tailwind-previewer","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"tailwind-previewer","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"tailwind-previewer","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"regex-explainer","modeLabel":"local-only","remoteMode":"client_only","riskClass":"H","remoteCallable":false,"files":{"skillMd":"# Regex Explainer Skill\n\n- Tool ID: `regex-explainer`\n- Category: `devtools`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `H`\n\n## Purpose / when-to-use\nExplain regex matches, groups, and behavior interactively.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/regex-explainer.json`\n- Max input bytes: `524288`\n- Timeout budget: `8000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe regex-explainer --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"regex-explainer","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"regex-explainer","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"regex-explainer","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"json-patch-builder","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"M","remoteCallable":true,"files":{"skillMd":"# JSON Patch Builder Skill\n\n- Tool ID: `json-patch-builder`\n- Category: `devtools`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `M`\n\n## Purpose / when-to-use\nBuild RFC 6902 patch arrays from source and target JSON.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/json-patch-builder.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run json-patch-builder --input '{\"a\":\"{\\\"name\\\":\\\"Alice\\\",\\\"role\\\":\\\"dev\\\",\\\"tags\\\":[\\\"a\\\"]}\",\"b\":\"{\\\"name\\\":\\\"Alice\\\",\\\"role\\\":\\\"lead\\\",\\\"active\\\":true,\\\"tags\\\":[\\\"a\\\",\\\"b\\\"]}\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=json-patch-builder&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"json-patch-builder","input":{"a":"{\"name\":\"Alice\",\"role\":\"dev\",\"tags\":[\"a\"]}","b":"{\"name\":\"Alice\",\"role\":\"lead\",\"active\":true,\"tags\":[\"a\",\"b\"]}"},"expected":{"ok":true}},"edgeCase":{"toolId":"json-patch-builder","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"json-patch-builder","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"env-template-generator","modeLabel":"local-only","remoteMode":"client_only","riskClass":"M","remoteCallable":false,"files":{"skillMd":"# ENV Template Generator Skill\n\n- Tool ID: `env-template-generator`\n- Category: `devtools`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `M`\n\n## Purpose / when-to-use\nGenerate structured .env templates and environment docs.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/env-template-generator.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe env-template-generator --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"env-template-generator","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"env-template-generator","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"env-template-generator","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"graphql-query-builder","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"M","remoteCallable":true,"files":{"skillMd":"# GraphQL Query Builder Skill\n\n- Tool ID: `graphql-query-builder`\n- Category: `devtools`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `M`\n\n## Purpose / when-to-use\nBuild GraphQL queries and mutations from field and variable inputs.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/graphql-query-builder.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run graphql-query-builder --input '{\"a\":\"GetUser\",\"b\":\"user.id\\\\nuser.name\\\\nuser.profile.avatarUrl\",\"c\":\"id: ID!\",\"mode\":\"query\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=graphql-query-builder&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"graphql-query-builder","input":{"a":"GetUser","b":"user.id\\nuser.name\\nuser.profile.avatarUrl","c":"id: ID!","mode":"query"},"expected":{"ok":true}},"edgeCase":{"toolId":"graphql-query-builder","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"graphql-query-builder","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"validation-schema-generator","modeLabel":"local-only","remoteMode":"client_only","riskClass":"M","remoteCallable":false,"files":{"skillMd":"# Validation Schema Generator Skill\n\n- Tool ID: `validation-schema-generator`\n- Category: `devtools`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `M`\n\n## Purpose / when-to-use\nGenerate validation schemas from representative JSON examples.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/validation-schema-generator.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe validation-schema-generator --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"validation-schema-generator","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"validation-schema-generator","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"validation-schema-generator","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"changelog-generator","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"M","remoteCallable":true,"files":{"skillMd":"# Changelog Generator Skill\n\n- Tool ID: `changelog-generator`\n- Category: `generator`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `M`\n\n## Purpose / when-to-use\nGenerate categorized changelog documents from commit lists.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/changelog-generator.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run changelog-generator --input '{\"a\":\"feat: add oauth playground\\\\nfix: handle missing header\\\\ndocs: update readme\\\\nchore: bump deps\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=changelog-generator&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"changelog-generator","input":{"a":"feat: add oauth playground\\nfix: handle missing header\\ndocs: update readme\\nchore: bump deps"},"expected":{"ok":true}},"edgeCase":{"toolId":"changelog-generator","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"changelog-generator","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"system-prompt-analyzer","modeLabel":"local-only","remoteMode":"client_only","riskClass":"M","remoteCallable":false,"files":{"skillMd":"# System Prompt Analyzer Skill\n\n- Tool ID: `system-prompt-analyzer`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `M`\n\n## Purpose / when-to-use\nAnalyze system prompts for clarity, structure, and token posture.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/system-prompt-analyzer.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe system-prompt-analyzer --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"system-prompt-analyzer","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"system-prompt-analyzer","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"system-prompt-analyzer","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"mcp-tool-tester","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# MCP Tool Tester Skill\n\n- Tool ID: `mcp-tool-tester`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nValidate and test MCP/WebMCP tool definitions.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/mcp-tool-tester.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe mcp-tool-tester --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"mcp-tool-tester","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"mcp-tool-tester","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"mcp-tool-tester","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"rate-limit-calculator","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"L","remoteCallable":true,"files":{"skillMd":"# Rate Limit Calculator Skill\n\n- Tool ID: `rate-limit-calculator`\n- Category: `devtools`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `L`\n\n## Purpose / when-to-use\nCalculate allowed throughput and headroom for API quotas.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/rate-limit-calculator.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run rate-limit-calculator --input '{\"a\":\"100\",\"b\":\"60\",\"c\":\"140\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=rate-limit-calculator&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"rate-limit-calculator","input":{"a":"100","b":"60","c":"140"},"expected":{"ok":true}},"edgeCase":{"toolId":"rate-limit-calculator","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"rate-limit-calculator","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"oauth-playground","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"L","remoteCallable":true,"files":{"skillMd":"# OAuth Playground Skill\n\n- Tool ID: `oauth-playground`\n- Category: `devtools`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `L`\n\n## Purpose / when-to-use\nGenerate OAuth authorization URLs and token exchange requests.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/oauth-playground.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run oauth-playground --input '{\"a\":\"https://provider.example.com/oauth/authorize\",\"b\":\"client_123\",\"c\":\"https://app.example.com/callback\",\"mode\":\"authorization-url\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=oauth-playground&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"oauth-playground","input":{"a":"https://provider.example.com/oauth/authorize","b":"client_123","c":"https://app.example.com/callback","mode":"authorization-url"},"expected":{"ok":true}},"edgeCase":{"toolId":"oauth-playground","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"oauth-playground","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"nginx-config-converter","modeLabel":"local-only","remoteMode":"client_only","riskClass":"M","remoteCallable":false,"files":{"skillMd":"# Nginx Config Converter Skill\n\n- Tool ID: `nginx-config-converter`\n- Category: `devtools`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `M`\n\n## Purpose / when-to-use\nConvert and generate Nginx configuration patterns.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/nginx-config-converter.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe nginx-config-converter --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"nginx-config-converter","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"nginx-config-converter","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"nginx-config-converter","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"web-to-markdown","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"H","remoteCallable":true,"files":{"skillMd":"# Web-to-Markdown Converter Skill\n\n- Tool ID: `web-to-markdown`\n- Category: `ai`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `H`\n\n## Purpose / when-to-use\nConvert webpage HTML to markdown and estimate token savings.\n\n## Input contract summary\n- Canonical contract source: `/api/tool/web-to-markdown.json`\n- Max input bytes: `524288`\n- Timeout budget: `8000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run web-to-markdown --input '{\"a\":\"<html><body><h1>Example</h1><p>Hello world.</p><a href=\\\"https://example.com/docs\\\">Docs</a></body></html>\",\"mode\":\"html\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=web-to-markdown&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"web-to-markdown","input":{"a":"<html><body><h1>Example</h1><p>Hello world.</p><a href=\"https://example.com/docs\">Docs</a></body></html>","mode":"html"},"expected":{"ok":true}},"edgeCase":{"toolId":"web-to-markdown","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"web-to-markdown","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"color-contrast-checker","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"L","remoteCallable":true,"files":{"skillMd":"# Color Contrast Checker Skill\n\n- Tool ID: `color-contrast-checker`\n- Category: `devtools`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `L`\n\n## Purpose / when-to-use\nCheck WCAG 2.1 color contrast ratios between foreground and background colors. Shows AA/AAA pass/fail for normal and large text..\n\n## Input contract summary\n- Canonical contract source: `/api/tool/color-contrast-checker.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run color-contrast-checker --input '{\"a\":\"example-input\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=color-contrast-checker&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"color-contrast-checker","input":{"a":"example-input"},"expected":{"ok":true}},"edgeCase":{"toolId":"color-contrast-checker","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"color-contrast-checker","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"css-animation-generator","modeLabel":"local-only","remoteMode":"client_only","riskClass":"M","remoteCallable":false,"files":{"skillMd":"# CSS Animation Generator Skill\n\n- Tool ID: `css-animation-generator`\n- Category: `generator`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `M`\n\n## Purpose / when-to-use\nVisual CSS keyframe animation builder. Define keyframes, set timing functions, duration, delay, iteration count. Live preview and copy generated CSS..\n\n## Input contract summary\n- Canonical contract source: `/api/tool/css-animation-generator.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe css-animation-generator --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"css-animation-generator","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"css-animation-generator","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"css-animation-generator","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"css-units-converter","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"M","remoteCallable":true,"files":{"skillMd":"# CSS Units Converter Skill\n\n- Tool ID: `css-units-converter`\n- Category: `converter`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `M`\n\n## Purpose / when-to-use\nConvert between CSS units: px, rem, em, vw, vh, %, and pt. Bidirectional with configurable base font size and viewport dimensions..\n\n## Input contract summary\n- Canonical contract source: `/api/tool/css-units-converter.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run css-units-converter --input '{\"a\":\"example-input\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=css-units-converter&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"css-units-converter","input":{"a":"example-input"},"expected":{"ok":true}},"edgeCase":{"toolId":"css-units-converter","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"css-units-converter","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"css-specificity-calculator","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"L","remoteCallable":true,"files":{"skillMd":"# CSS Specificity Calculator Skill\n\n- Tool ID: `css-specificity-calculator`\n- Category: `devtools`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `L`\n\n## Purpose / when-to-use\nCalculate and visualize CSS selector specificity. Paste selectors to see specificity scores, compare multiple selectors, and understand which styles win..\n\n## Input contract summary\n- Canonical contract source: `/api/tool/css-specificity-calculator.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run css-specificity-calculator --input '{\"a\":\"example-input\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=css-specificity-calculator&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"css-specificity-calculator","input":{"a":"example-input"},"expected":{"ok":true}},"edgeCase":{"toolId":"css-specificity-calculator","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"css-specificity-calculator","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"curl-converter","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"M","remoteCallable":true,"files":{"skillMd":"# cURL Converter Skill\n\n- Tool ID: `curl-converter`\n- Category: `converter`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `M`\n\n## Purpose / when-to-use\nConvert cURL commands to JavaScript fetch, Axios, Python requests, Node.js http, PHP, and Go. Supports headers, JSON body, form data, and auth..\n\n## Input contract summary\n- Canonical contract source: `/api/tool/curl-converter.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run curl-converter --input '{\"a\":\"example-input\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=curl-converter&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"curl-converter","input":{"a":"example-input"},"expected":{"ok":true}},"edgeCase":{"toolId":"curl-converter","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"curl-converter","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"text-shadow-generator","modeLabel":"local-only","remoteMode":"client_only","riskClass":"M","remoteCallable":false,"files":{"skillMd":"# CSS Text Shadow Generator Skill\n\n- Tool ID: `text-shadow-generator`\n- Category: `generator`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `M`\n\n## Purpose / when-to-use\nBuild and preview CSS text-shadow effects interactively. Stack multiple shadow layers, use presets like neon or retro, and copy the ready-to-use CSS..\n\n## Input contract summary\n- Canonical contract source: `/api/tool/text-shadow-generator.json`\n- Max input bytes: `262144`\n- Timeout budget: `4000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe text-shadow-generator --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"text-shadow-generator","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"text-shadow-generator","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"text-shadow-generator","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"basic-auth-encoder","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# Basic Auth Encoder / Decoder Skill\n\n- Tool ID: `basic-auth-encoder`\n- Category: `devtools`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nEncode and decode HTTP Basic Authentication credentials. Generate the Authorization header or curl flag from username and password, or decode a token back to plaintext..\n\n## Input contract summary\n- Canonical contract source: `/api/tool/basic-auth-encoder.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe basic-auth-encoder --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"basic-auth-encoder","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"basic-auth-encoder","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"basic-auth-encoder","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"http-cookie-builder","modeLabel":"constrained","remoteMode":"dedicated_api","riskClass":"H","remoteCallable":true,"files":{"skillMd":"# HTTP Cookie Builder Skill\n\n- Tool ID: `http-cookie-builder`\n- Category: `devtools`\n- Mode label: `constrained`\n- Execution surface: `dedicated_api`\n- Risk class: `H`\n\n## Purpose / when-to-use\nBuild and validate Set-Cookie headers interactively. Configure all cookie attributes — Secure, HttpOnly, SameSite, Path, Domain, Expires, Max-Age, Partitioned..\n\n## Input contract summary\n- Canonical contract source: `/api/tool/http-cookie-builder.json`\n- Max input bytes: `524288`\n- Timeout budget: `8000ms`\n- Streaming support: `false`\n- Runtime request shape: `{ toolId, input: { a, b?, c?, mode? } }`.\n\n## Invocation examples\n### CLI\n```bash\naidevhub run http-cookie-builder --input '{\"a\":\"example-input\"}' --json\n```\n\n### API\n```text\nhttps://aidevhub.io/api/tools/run/?toolId=http-cookie-builder&a=...\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"http-cookie-builder","input":{"a":"example-input"},"expected":{"ok":true}},"edgeCase":{"toolId":"http-cookie-builder","input":{"a":""},"expectedErrorCode":"INVALID_INPUT"},"expectedOutput":{"toolId":"http-cookie-builder","successEnvelope":{"ok":true,"result":{"output":"...","details":[],"warnings":[]}},"failureEnvelope":{"ok":false,"errorCode":"INVALID_INPUT"}}}}},{"toolId":"word-counter","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# Word & Character Counter Skill\n\n- Tool ID: `word-counter`\n- Category: `devtools`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nCount words, characters, sentences, paragraphs, and lines. Get instant reading time and speaking time estimates, plus top word frequency analysis..\n\n## Input contract summary\n- Canonical contract source: `/api/tool/word-counter.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe word-counter --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"word-counter","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"word-counter","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"word-counter","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"ai-code-smell-detector","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# AI Code Smell Detector Skill\n\n- Tool ID: `ai-code-smell-detector`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nDetect AI-generated code anti-patterns — hallucinated imports, over-abstraction, verbose error handling, redundant logic, and AI tells. Instant scored analysis..\n\n## Input contract summary\n- Canonical contract source: `/api/tool/ai-code-smell-detector.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe ai-code-smell-detector --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"ai-code-smell-detector","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"ai-code-smell-detector","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"ai-code-smell-detector","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"llm-workflow-cost-calculator","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# LLM Workflow Cost Calculator Skill\n\n- Tool ID: `llm-workflow-cost-calculator`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nModel multi-step AI pipelines — embed, retrieve, generate, validate — and see total cost per execution across providers with caching simulation..\n\n## Input contract summary\n- Canonical contract source: `/api/tool/llm-workflow-cost-calculator.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe llm-workflow-cost-calculator --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"llm-workflow-cost-calculator","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"llm-workflow-cost-calculator","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"llm-workflow-cost-calculator","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"codebase-context-packer","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# Codebase Context Packer Skill\n\n- Tool ID: `codebase-context-packer`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nPack code files into optimized LLM context with smart truncation, token budgeting, and XML/markdown/plain output formats. Ready to paste into Claude or GPT..\n\n## Input contract summary\n- Canonical contract source: `/api/tool/codebase-context-packer.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe codebase-context-packer --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"codebase-context-packer","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"codebase-context-packer","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"codebase-context-packer","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"ai-prompt-injection-tester","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# AI Prompt Injection Tester Skill\n\n- Tool ID: `ai-prompt-injection-tester`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nTest system prompts against 50+ known injection attack patterns — role hijacking, instruction override, delimiter abuse, encoding attacks, and jailbreaks..\n\n## Input contract summary\n- Canonical contract source: `/api/tool/ai-prompt-injection-tester.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe ai-prompt-injection-tester --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"ai-prompt-injection-tester","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"ai-prompt-injection-tester","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"ai-prompt-injection-tester","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"ai-api-error-decoder","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# AI API Error Decoder Skill\n\n- Tool ID: `ai-api-error-decoder`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nPaste an error response from Claude, OpenAI, Gemini, or Mistral API — get a human-readable explanation, fix with code snippet, and retry strategy..\n\n## Input contract summary\n- Canonical contract source: `/api/tool/ai-api-error-decoder.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe ai-api-error-decoder --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"ai-api-error-decoder","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"ai-api-error-decoder","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"ai-api-error-decoder","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"ai-agent-cost-simulator","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# AI Agent Cost Simulator Skill\n\n- Tool ID: `ai-agent-cost-simulator`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nConfigure multi-agent architectures and visualize cost explosion curves. Compare multi-agent vs single-agent with context growth modeling and monthly projections..\n\n## Input contract summary\n- Canonical contract source: `/api/tool/ai-agent-cost-simulator.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe ai-agent-cost-simulator --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"ai-agent-cost-simulator","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"ai-agent-cost-simulator","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"ai-agent-cost-simulator","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"env-security-scanner","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# .env Security Scanner Skill\n\n- Tool ID: `env-security-scanner`\n- Category: `devtools`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nDetect exposed API keys, high-entropy secrets, and insecure defaults in .env files. Recognizes 40+ key formats from OpenAI, AWS, Stripe, GitHub, and more..\n\n## Input contract summary\n- Canonical contract source: `/api/tool/env-security-scanner.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe env-security-scanner --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"env-security-scanner","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"env-security-scanner","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"env-security-scanner","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"openapi-to-mcp","modeLabel":"local-only","remoteMode":"client_only","riskClass":"H","remoteCallable":false,"files":{"skillMd":"# OpenAPI to MCP Generator Skill\n\n- Tool ID: `openapi-to-mcp`\n- Category: `converter`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `H`\n\n## Purpose / when-to-use\nConvert OpenAPI 3.x specs into MCP tool definitions — one tool per endpoint with proper input schemas. Export as config JSON, TypeScript, or Python server..\n\n## Input contract summary\n- Canonical contract source: `/api/tool/openapi-to-mcp.json`\n- Max input bytes: `524288`\n- Timeout budget: `8000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe openapi-to-mcp --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"openapi-to-mcp","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"openapi-to-mcp","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"openapi-to-mcp","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"ai-rules-linter","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# AI Rules Linter Skill\n\n- Tool ID: `ai-rules-linter`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nLint CLAUDE.md, .cursorrules, and copilot-instructions files for redundancy, conflicting instructions, missing sections, and token efficiency..\n\n## Input contract summary\n- Canonical contract source: `/api/tool/ai-rules-linter.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe ai-rules-linter --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"ai-rules-linter","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"ai-rules-linter","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"ai-rules-linter","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"git-diff-token-counter","modeLabel":"local-only","remoteMode":"client_only","riskClass":"H","remoteCallable":false,"files":{"skillMd":"# Git Diff Token Counter Skill\n\n- Tool ID: `git-diff-token-counter`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `H`\n\n## Purpose / when-to-use\nPaste a git diff and see token counts per file, cost across AI models for code review, and chunking suggestions when diffs exceed context limits..\n\n## Input contract summary\n- Canonical contract source: `/api/tool/git-diff-token-counter.json`\n- Max input bytes: `524288`\n- Timeout budget: `8000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe git-diff-token-counter --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"git-diff-token-counter","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"git-diff-token-counter","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"git-diff-token-counter","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"llm-latency-estimator","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# LLM Latency Estimator Skill\n\n- Tool ID: `llm-latency-estimator`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nEstimate time-to-first-token, generation time, and total latency for any AI model. Get UX recommendations for spinners, streaming, and background jobs..\n\n## Input contract summary\n- Canonical contract source: `/api/tool/llm-latency-estimator.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe llm-latency-estimator --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"llm-latency-estimator","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"llm-latency-estimator","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"llm-latency-estimator","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"prompt-ab-test-designer","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# Prompt A/B Test Designer Skill\n\n- Tool ID: `prompt-ab-test-designer`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nDesign rigorous prompt experiments with sample size calculation, statistical significance, cost estimation, and evaluation framework export..\n\n## Input contract summary\n- Canonical contract source: `/api/tool/prompt-ab-test-designer.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe prompt-ab-test-designer --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"prompt-ab-test-designer","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"prompt-ab-test-designer","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"prompt-ab-test-designer","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"mcp-permission-auditor","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# MCP Permission Auditor Skill\n\n- Tool ID: `mcp-permission-auditor`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nAudit MCP server configurations for security risks — permission surface analysis, risk scoring, dangerous capability combinations, and least-privilege recommendations..\n\n## Input contract summary\n- Canonical contract source: `/api/tool/mcp-permission-auditor.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe mcp-permission-auditor --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"mcp-permission-auditor","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"mcp-permission-auditor","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"mcp-permission-auditor","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"ai-doc-readability-scorer","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# AI Doc Readability Scorer Skill\n\n- Tool ID: `ai-doc-readability-scorer`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nScore documentation for human and AI-agent readability across 6 dimensions — structure, code examples, API discoverability, schema coverage, LLM parseability..\n\n## Input contract summary\n- Canonical contract source: `/api/tool/ai-doc-readability-scorer.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe ai-doc-readability-scorer --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"ai-doc-readability-scorer","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"ai-doc-readability-scorer","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"ai-doc-readability-scorer","outcome":"local_ui_required","remoteCallable":false}}}},{"toolId":"ai-model-sunset-tracker","modeLabel":"local-only","remoteMode":"client_only","riskClass":"L","remoteCallable":false,"files":{"skillMd":"# AI Model Sunset Tracker Skill\n\n- Tool ID: `ai-model-sunset-tracker`\n- Category: `ai`\n- Mode label: `local-only`\n- Execution surface: `client_only`\n- Risk class: `L`\n\n## Purpose / when-to-use\nTrack AI model deprecation dates, migration paths, and breaking changes across OpenAI, Anthropic, Google, Meta, and Mistral. Filterable and searchable..\n\n## Input contract summary\n- Canonical contract source: `/api/tool/ai-model-sunset-tracker.json`\n- Max input bytes: `131072`\n- Timeout budget: `2000ms`\n- Streaming support: `false`\n- Execution path: open the browser tool page and run locally.\n\n## Invocation examples\n### CLI\n```bash\naidevhub describe ai-model-sunset-tracker --json\n```\n\n### API\n```text\nNo remote runtime endpoint. Use client-side tool page only.\n```\n\n### Runtime\n- POST to `https://aidevhub.io/api/tools/run/` with `{\"toolId\": \"<id>\", \"input\": {\"a\": \"...\"}}`.\n\n## Typical failure modes\n- `TOOL_DISABLED`: runtime path unavailable; use local UI path.\n- `INVALID_INPUT`: malformed or missing required fields.\n- `INPUT_TOO_LARGE`: payload exceeds risk envelope.\n- `UNSUPPORTED_OPTION`: invalid mode/option combination.\n- `RATE_LIMITED`: quota exceeded; retry with backoff.\n- `TIMEOUT` or `INTERNAL_ERROR`: transient runtime or upstream issue.\n\n## Safe defaults\n- Keep `input.a` concise and deterministic.\n- Prefer explicit mode values when the tool exposes mode selection.\n- Handle 429 with exponential backoff and jitter.\n- Abort autonomous retries after two consecutive runtime failures.\n\n## Recovery/fallback steps\n1. Re-fetch `/api/tool/{id}.json` and validate the request envelope.\n2. Retry once after a bounded delay for transient runtime failures.\n3. If still failing, use the tool page UI and capture a minimal repro payload.\n4. Escalate with tool id, error code, and redacted input summary.","examples":{"basic":{"toolId":"ai-model-sunset-tracker","modeLabel":"local-only","localOnly":true,"note":"Use the browser tool page for execution."},"edgeCase":{"toolId":"ai-model-sunset-tracker","localOnly":true,"attemptedRemoteCall":true,"expectedErrorCode":"TOOL_DISABLED"},"expectedOutput":{"toolId":"ai-model-sunset-tracker","outcome":"local_ui_required","remoteCallable":false}}}}]}