ActionD
Listens to Git events (push, tag) and automatically triggers CI/CD plugin workflows.
ActionD
Local AI Action Execution Engine for LGH (Local Git Hub)
ActionD is a lightweight local CI/CD engine designed for AI agents. It listens to Git events from LGH and automatically triggers plugins to run code checks, tests, builds, and more.
Features
🔌 Dynamic plugin discovery — plugins are discovered automatically via
manifest.json, no code changes required🤖 MCP integration — a built-in MCP server lets AI assistants query and control CI/CD directly
📡 Event-driven — reacts to
git.push,git.tag, and other LGH events🖥️ Web console — live monitoring dashboard at
http://localhost:3000🔄 Real-time streaming output — live logs over SSE (Server-Sent Events)
⚡ Hot reload — reload plugins without a restart
🔄 End-to-end workflow —
dev_cycle_rundoes it all in one call: commit → CI → results⏮️ Rollback — automatically roll back to the previous commit on failure
Related MCP server: jt-mcp-server
Installation
macOS / Linux (Homebrew)
brew install JoeGlenn1213/tap/actiondInstall LGH the same way (brew install JoeGlenn1213/tap/lgh) — ActionD listens to its git events.
Prerequisites
Go 1.25+ (only when building from source)
Python 3.8+ (used by plugins)
LGH running locally
Build from source
git clone https://github.com/JoeGlenn1213/ActionD.git
cd ActionD
make buildNote: ActionD uses SQLite for storage (the pure-Go modernc.org/sqlite build) — no CGO is needed and
make buildcross-compiles freely.
Quick Start
1. One-command setup (recommended)
If this is your first run, use setup to check dependencies, create the directory layout, and verify the environment:
actiond setupTo also start the daemon in the background right after setup:
actiond setup --start2. Start the service and check it
# 1. Make sure LGH is running
lgh serve -d
# 2. Start ActionD (daemon mode; reads LGH mappings automatically)
actiond start -d
# 3. Check status
actiond doctor3. Open the web console
open http://localhost:3000Default directories and auto-detection
Plugin directories are probed in order:
<binary dir>/plugins→<working dir>/plugins→~/.localgithub/pluginsWeb static assets are auto-detected in common locations; the recommended target is publishing
ActionD-Web'sout/to:~/.localgithub/actiond-web/outWithout an explicit
--repo-root, ActionD resolves repositories through LGH mappings first, then falls back to current-directory semantics.
CLI Commands
Command | Description |
| One-command environment initialization (v1.2+) |
| Start in the foreground |
| Start as a background daemon |
| Stop the daemon |
| Restart the service (v1.2+) |
| Show run status + directory info (v1.2+) |
| Re-enable the Go verification plugins |
| View server logs |
| Diagnose system dependencies (tiered checks) |
| Print version information |
| Start the MCP server |
One-command setup (v1.2+)
Recommended on first install:
actiond setupThis automatically:
Creates the directory layout (
~/.localgithub/*)Checks dependencies (Git, Python, Go, Node)
Detects web assets and plugin directories
Verifies the LGH connection
Doctor
actiond doctorRuns 8 categories of tiered checks:
📦 System environment (home/base directories)
🔧 Dependencies (Git, Python, Go, Node, golangci-lint)
🔌 Service status (LGH, ActionD)
🌐 Ports (3000, 8080)
📁 Directories (repos, actions, plugins, web, artifacts)
💾 Storage (DB writability, config files)
🔌 Plugins (directories, core plugin status)
🌐 Web assets
Results come in three levels:
FATAL — the system cannot work
WARN — some functionality is affected
INFO — informational only
If doctor reports that the Go plugins are disabled, restore them directly:
actiond plugins restore-goStatus (v1.2+)
actiond statusShows:
Service run status and PID
All directory paths and their status
LGH connection status
Web assets and plugin directories
Build Notes
make build uses CGO_ENABLED=0 (SQLite is the pure-Go modernc.org/sqlite build), so binaries cross-compile freely.
make release defaults to the current host platform; override RELEASE_PLATFORMS="linux/amd64 linux/arm64 darwin/arm64" to build for other targets.
Start options
actiond start --help
Flags:
-d, --daemon run in the background
--repo-root string repository root directory (optional; LGH mappings take priority when omitted)
--web-dir string web console static file directory (optional; auto-detected by default)Dynamic Plugin Discovery (V1.0.7+)
ActionD supports adding new plugins with zero code. Just create a manifest.json in a plugin directory:
Plugin directories
ActionD scans plugins in this order:
System plugins:
./plugins/(next to the binary)Development plugins:
./plugins/(current working directory)User plugins:
~/.localgithub/plugins/
manifest.json format
{
"apiVersion": "actiond.dev/v1",
"name": "my-plugin",
"version": "1.0.0",
"description": "My custom plugin",
"command": "python3",
"args": ["run.py"],
"triggers": ["git.push"],
"languages": ["python"],
"timeout": "5m",
"artifacts": ["report.json"]
}Field reference
Field | Required | Description |
| ✅ | Unique plugin identifier |
| ✅ | Command to execute |
| - | Command arguments |
| ✅ | Trigger events: |
| - | Supported languages: |
| - | Timeout: |
| - | Ref matching: |
Creating a custom plugin
plugins/
└── my-plugin/
├── manifest.json # plugin metadata
└── run.py # execution scriptExample run.py:
#!/usr/bin/env python3
import json
import sys
# Read stdin input
input_data = json.load(sys.stdin)
event = input_data["event"]
repo_path = input_data["repo_path"]
artifact_dir = input_data.get("artifact_dir")
# Do the work...
print(f"Processing {event['type']} for {repo_path}", file=sys.stderr)
# Output the result (stdout)
result = {
"status": "success", # or "error"
"artifacts": ["report.json"]
}
print(json.dumps(result))Structured Result Protocol — ActionResult (v1.2+)
Plugins can return a standardized ActionResult structure that enables deep AI understanding and downstream decision gating (for example, the Policy Gate plugin reads signals produced by other plugins):
{
"action_id": "act_8a9b2c1d",
"plugin_id": "go-test-fast",
"capability": "test",
"language": "go",
"status": "success",
"decision": "pass",
"timing": {
"started_at": "2025-03-16T10:30:00Z",
"finished_at": "2025-03-16T10:30:02Z",
"duration_ms": 2300
},
"summary": {
"message": "All 25 tests passed",
"counts": {
"tests_run": 25
}
},
"signals": {
"tests_passed": true
},
"hints": [],
"artifacts": [{"name": "test-report.xml", "path": "test-report.xml"}]
}Result fields
Field | Type | Description |
| string | Unique execution ID |
| string |
|
| string |
|
| string | One-line summary |
| object | Core extracted features, e.g. |
| []string | AI/user-friendly fix suggestions |
| []object | Artifact file list |
Returning structured results from a plugin
A plugin can print JSON to stdout — ActionD parses and stores it automatically:
result = {
"status": "failure",
"summary": "Test suite failed",
"hints": ["Run tests locally to reproduce"]
}
print(json.dumps(result))Alternatively, write to $ARTIFACT_DIR/result.json.
Failure Interpreter (v1.2+)
ActionD has built-in failure-pattern recognition that automatically analyzes common errors and suggests fixes:
Recognized error patterns
Category | Pattern | Description |
Dependencies |
| npm install failure |
| package-lock.json out of sync | |
| module not found | |
| go.mod needs tidying | |
| missing Python module | |
| Maven build failure | |
Build |
| Go compile error |
| Gradle build failure | |
Tests |
| Jest test failure |
| Go test failure | |
| pytest failure | |
Generic |
| permission error |
| operation timed out | |
| out of memory | |
| command not found |
Analysis API
Failure analysis is implemented on the Go side in internal/interpreter (failure.go) and produces the category/type classification shown above. There is no actiond Python package — use one of these real interfaces instead:
AI side (recommended): the MCP tool
actiond_diagnose(job_id=...), which returns root cause and fix suggestions.HTTP side: the REST API (see the "API endpoints" section below).
Hot-reloading plugins
# Option 1: API
curl -X POST http://localhost:3000/api/plugins/reload
# Option 2: MCP
# An AI assistant can call the actiond_plugins_reload toolBuilt-in Plugins
Plugin | Trigger | Language | Description |
| all | * | Debug plugin, echoes event info |
|
| Go | golangci-lint code checks |
|
| Go | Fast unit tests |
|
| Go | Cross-platform builds |
|
| Java | Smart test selection |
|
| Java | Checkstyle code style |
|
| Python | pytest + coverage |
|
| Web/Node | Frontend lint checks |
|
| Web/Node | Frontend test script |
|
| Web/Node | Frontend build validation |
MCP Server Integration
ActionD ships with an MCP (Model Context Protocol) server so AI assistants (such as Claude) can query and control CI/CD directly.
Starting the MCP server
actiond mcpTo let the AI start/stop/restart ActionD itself over MCP, set this before launching:
ACTIOND_MCP_ALLOW_LIFECYCLE=1 actiond mcpAvailable tools
Tool | Description |
| Get server status and statistics |
| List all plugins and their configuration |
| List recent CI/CD jobs |
| Get details of a single job |
| Hot-reload plugins |
| Recommend plugins by project profile (language/framework detection + confidence) |
| Enable a plugin for the current project |
| Disable a plugin for the current project |
| View server logs, filterable by job_id and plugin_name |
| Get the current execution profile (fast/full/release) |
| Set the execution profile, controlling which plugins each push triggers |
| Start the ActionD service (requires the lifecycle switch) |
| Stop the ActionD service (protects running jobs by default) |
| Restart the ActionD service (protects running jobs by default) |
| Block until a job finishes and return its result; supports a timeout parameter |
| Cancel a job (validates state; terminal jobs are rejected) |
| Cancel a job (deprecated: prefer |
| Retry a failed job |
| AI failure diagnosis: root-cause analysis + classification + fix suggestions (the first tool to reach for when CI fails) |
| End-to-end dev loop: commit → CI → results (V1.0.8+) |
To approve a blocked job, use the CLI
actiond approve <job_id>or RESTPOST /api/actions/{id}/approve(there is no MCP tool for this).
The dev_cycle_run end-to-end workflow (V1.0.8+)
dev_cycle_run is an aggregate tool that completes the full development loop in a single MCP call:
edit code → lgh up → wait for CI → return structured resultsParameters:
Parameter | Required | Description |
| ✅ | Git commit message |
| - | Repository path (defaults to the current directory) |
| - | Wait timeout in seconds (default 300 = 5 minutes) |
| - | Auto-rollback on failure (default false) |
Returns:
{
"success": true,
"commit": "abc123",
"jobs": [
{"id": "job-1", "plugin": "go-test-fast", "status": "done", "duration": "2.3s"}
],
"summary": "✅ All passed (2 plugins)"
}Typical usage:
User: AI, please fix the code and test it
AI: [edits the code...]
[calls dev_cycle_run(message="fix: address the failing case")]
Result: ✅ All passed (2 plugins)
- go-lint: ✅ 0.5s
- go-test-fast: ✅ 2.3sAvailable resources
actiond://status— server statusactiond://plugins— plugin listactiond://actions— execution records
Configuring Claude Code
Add to ~/.claude/claude_desktop_config.json:
{
"mcpServers": {
"actiond": {
"command": "/path/to/actiond",
"args": ["mcp"],
"env": {
"ACTIOND_MCP_ALLOW_LIFECYCLE": "1"
}
}
}
}AI usage example
User: Check the recent CI jobs
AI: [calls actiond_actions_list]
There are 3 recent jobs:
- test-python (python-pytest): ✅ success (1.3s)
- ActionD (go-lint): ⛔ disabled
- demo-app (java-quicktest): ✅ success (45s)Configuration
Runtime config file: ~/.localgithub/actions/config.json
Disabling a plugin
{
"plugins": {
"java-quicktest": {
"enabled": false
}
}
}The core Go verification chain can also be restored directly via CLI:
actiond plugins restore-goOverriding triggers
{
"plugins": {
"go-lint": {
"triggers": ["git.tag"]
}
}
}Adding a custom plugin (no manifest.json needed)
{
"plugins": {
"my-custom-plugin": {
"enabled": true,
"type": "exec",
"command": "/usr/local/bin/my-script",
"args": ["--verbose"],
"triggers": ["git.push"]
}
}
}Architecture
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ LGH │────▶│ ActionD │────▶│ Plugins │
│ (Events) │ │ (Engine) │ │ (Actions) │
└─────────────┘ └─────────────┘ └─────────────┘
│
┌────────────────┼────────────────┐
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Web Console │ │ MCP Server │ │ API │
│ (Dashboard) │ │(AI-integration)│ │ (RESTful) │
└─────────────┘ └─────────────┘ └─────────────┘API Endpoints
Endpoint | Method | Description |
| GET | List all plugins |
| POST | Create a custom plugin |
| POST | Hot-reload plugins |
| POST | Enable/disable a plugin |
| GET | List execution records |
| GET | Get job details |
| GET | SSE live log stream |
| GET | Download an artifact |
| POST | Cancel a running job (V1.0.8+) |
| POST | Retry a failed job (V1.0.8+) |
| POST | Manually approve a blocked job |
Layered Logging (v1.2+)
ActionD uses a layered logging architecture that targets different audiences with different formats:
Layer | Purpose | Example |
| Event log |
|
| Dispatch log |
|
| Plugin execution | plugin stdout/stderr output |
| User summary |
|
| AI structured summary | JSON, consumed by AI |
AI summary format
{
"timestamp": "2025-03-16T10:30:00Z",
"layer": "ai",
"level": "info",
"job_id": "abc123",
"repo": "my-project",
"plugin": "go-test-fast",
"message": "Tests passed",
"data": {
"status": "success",
"summary": "All 25 tests passed in 2.3s",
"hints": [],
"artifacts": ["test-report.xml"]
}
}File Locations
Path | Description |
| Data directory |
| SQLite job database |
| Daemon PID file |
| User configuration |
| User-defined plugin directory |
| Daemon log |
Development
# Build
go build ./...
# Run tests
go test ./...
# Install to GOPATH
go install ./cmd/actiondLicense
MIT License — see LICENSE
Related Projects
LGH — Local Git Hub
actiond-web — Web console UI
Available Tools
22 toolsactiond_action_getARead-onlyIdempotent
Fetch full detail for one CI/CD job by its ID. Returns id, repo, plugin_name, status, live progress line, created/started/ended timestamps, duration_ms, and the commit map (hash, message, author) that triggered the job. Works for running jobs (poll to watch progress) and for terminal jobs (done/failed/cancelled), whose records are kept for post-mortem review — pair with actiond_log to replay the job's log lines or actiond_diagnose for interpreted failure causes. Errors when the ID does not exist.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The action/job ID to retrieve |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it readOnly, idempotent, and non-destructive. The description adds that it errors when the ID does not exist and notes that terminal job records are kept, which covers relevant behavioral expectations. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but focused: each sentence contributes meaning, including the action, returned fields, use cases, paired tools, and error behavior. It avoids redundancy and is appropriately sized for the information conveyed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although there is no output schema, the description enumerates the returned fields and explains behavior for both running and terminal jobs, plus error conditions. This is sufficient for an agent to understand what the tool does and what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of parameters and the id parameter is described as 'The action/job ID to retrieve'. The description repeats this and adds an error case, but does not add substantial new constraint or format details beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'Fetch full detail for one CI/CD job by its ID', which is a specific verb and resource. It also distinguishes itself by naming paired tools like actiond_log and actiond_diagnose, making its purpose unambiguous relative to siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use it: for running jobs to poll progress, for terminal jobs to review post-mortem, and pairs it with actiond_log for logs and actiond_diagnose for interpretation. It does not explicitly say 'use this instead of X' but provides clear contextual guidance and an error condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
actiond_actions_listARead-onlyIdempotent
List the most recent CI/CD jobs executed by ActionD. Each row carries id, repo, plugin_name, status (done/failed/running/pending/cancelled), created_at, and duration_ms, so failures can be spotted at a glance and filtered client-side by status. Optional limit caps the number of rows (default 20). Use this for an overview; use actiond_action_get for one job's full detail, actiond_job_wait to block on a specific job, and actiond_diagnose for root-cause analysis of failures.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of actions to return (default: 20) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the description does not contradict this. The description adds that results include failure statuses and can be filtered client-side, but does not elaborate on side effects or ordering guarantees. Given the annotations cover the core behavioral attributes, this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, direct, and free of redundant information. It front-loads the core purpose and then provides useful sibling-tool guidance without unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description names the returned fields (id, repo, plugin_name, status, created_at, duration_ms) and statuses, and mentions the default limit. There is no output schema, so this covers the main contextual needs. It does not mention maximum allowed limit or pagination, but for a list-overview tool this is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, 'limit', is fully described in the input schema (maximum number of actions to return, default 20). The description reinforces this by mentioning the optional limit and its default value. Schema coverage is 100% and the description adds the default value context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists recent CI/CD jobs executed by ActionD, using the specific verb 'list' and identifying the resource ('actions'). It also differentiates this tool from siblings by pointing to actiond_action_get for full detail, actiond_job_wait for blocking, and actiond_diagnose for root-cause analysis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool ('for an overview') and when to use alternative tools ('use actiond_action_get for one job's full detail, actiond_job_wait to block on a specific job, and actiond_diagnose for root-cause analysis of failures'). This leaves no ambiguity about selecting the appropriate tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
actiond_cleanupADestructiveIdempotent
Reclaim disk space by deleting terminal CI/CD jobs (done/failed/cancelled) and their artifact directories. Pending and running jobs are never deleted. Default retention is 7 days; pass days=0 or all=true to delete every terminal job. Destructive and irreversible: deleted job records and artifacts cannot be recovered, so confirm intent — especially with all=true — before calling. Returns a summary with deleted_jobs, deleted_dirs, and the retention window applied.
| Name | Required | Description | Default |
|---|---|---|---|
| all | No | Delete all terminal jobs regardless of age | |
| days | No | Retention window in days (default 7; 0 = all terminal jobs) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Explicitly warns of destructive and irreversible nature, reinforcing the destructiveHint annotation. Adds context about confirming intent, which is beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with separate clauses for purpose, parameter usage, and warning. Slightly redundant with days=0 and all=true but overall concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Explains return value (summary with deleted_jobs, deleted_dirs, retention window). Sufficient for operation without output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Parameter descriptions in schema already cover all and days fully. The description repeats these details without adding new semantics, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (deleting), resource (terminal CI/CD jobs and artifact directories), and scope (done/failed/cancelled). Clearly distinct from sibling tools like job_cancel or job_retry.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides usage guidance with default retention and parameter behavior (days=0 or all=true). Does not explicitly name alternatives but implies cleanup purpose. Includes caution to confirm intent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
actiond_diagnoseARead-onlyIdempotent
Diagnose failed CI/CD jobs and turn their logs into actionable fix suggestions. Pass job_id to analyze one job, or omit it to analyze the most recent failures (optional limit caps how many are analyzed, default 5). For each job it extracts the root-cause category (build/test/lint/dependency/permission/timeout/...), error code, severity, confidence, evidence lines, and the files most likely needing changes; the aggregate summary highlights the most common category with concrete next steps. Jobs without error output are reported explicitly as no_error_output instead of being silently dropped. Reach for this first whenever a job fails; use actiond_log for raw logs and actiond_action_get for job metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of failed jobs to analyze when no job_id is given (default 5) | |
| job_id | No | Specific job ID to diagnose (optional - if not provided, analyzes recent failures) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description details behavioral specifics beyond the annotations, such as handling jobs without error output by reporting 'no_error_output' instead of silently dropping them. It also aligns with the readOnlyHint and idempotentHint by describing an analytical, non-mutating operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and informative, but slightly redundant in phrasing (e.g., restating that omitting job_id analyzes recent failures). Still, each sentence contributes useful detail and the structure flows logically from purpose to parameters to output.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description compensates for the absence of an output schema by enumerating what the agent can expect: root-cause category, error code, severity, confidence, evidence lines, likely files to change, and an aggregate summary. It also explains the edge-case behavior for jobs without error output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters are fully described in the schema, and the description adds practical semantics: job_id selects a specific job, while omitting it analyzes recent failures, and limit caps the number analyzed with a default of 5. This goes beyond the schema's basic definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's specific purpose: diagnosing failed CI/CD jobs and generating actionable fix suggestions from logs. It also explicitly distinguishes itself from related sibling tools by directing users to actiond_log for raw logs and actiond_action_get for job metadata.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool ('Reach for this first whenever a job fails') and when to use alternatives (actiond_log for raw logs, actiond_action_get for job metadata). This gives clear decision-making context for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
actiond_handoff_packARead-onlyIdempotent
Generate a handoff package that lets another agent (or human) resume this work with full context, aggregating git log, ActionD CI/CD verdicts, and — when task_id is given — the task report from the connected task management system. Returns structured JSON plus a ready-to-use Markdown document covering: goal, current state (with evidence level), completed work (recent commits), pending work, known failures, decisions, verification state, and a suggested next action. The markdown field alone is designed to give the receiving agent everything it needs without reading the original session; missing information is marked unknown rather than guessed. Optional path (defaults to the current directory), task_id, project_id, from_agent/to_agent, goal, suggested_next_action, pending_work (comma-separated), and ttl_hours for the validity window (default 24).
| Name | Required | Description | Default |
|---|---|---|---|
| goal | No | One-sentence task goal | |
| path | No | Repository path (defaults to the current directory) | |
| task_id | No | Task ID; when provided, the task report is also queried to fill in goal and decisions | |
| to_agent | No | Identity of the agent receiving the work (e.g., 'claude') | |
| ttl_hours | No | How long the handoff stays valid, in hours (default 24) | |
| from_agent | No | Identity of the agent handing off the work (e.g., 'codex') | |
| project_id | No | Project ID in the task management system (defaults to the repository name) | |
| pending_work | No | Comma-separated list of pending work items | |
| suggested_next_action | No | Next step the receiving agent should take |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, non-destructive behavior, and the description adds meaningful behavioral detail by stating it aggregates external data sources and that missing information is marked unknown rather than guessed. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is verbose and redundant, repeating the purpose, output format, and parameter defaults across multiple sentences. It could be condensed into a single clear sentence plus a brief output note without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description explains what the returned JSON and Markdown document contain, including the list of covered sections. It gives enough context for an agent to invoke the tool correctly, especially with all parameters optional.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover all 9 parameters with 100% coverage, including defaults and conditional behavior for task_id. The tool description largely repeats the schema content and adds little new semantic meaning beyond what is already documented in the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool generates a handoff package that aggregates git log, ActionD CI/CD verdicts, and optionally a task report, with the explicit purpose of letting another agent or human resume work with full context. It is distinct from sibling tools like actiond_status or actiond_run_report.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the primary use case explicit: use this when handing off work to another agent or human and needing consolidated context. It also provides conditional guidance ('when task_id is given') and notes defaults for path and ttl_hours, though it does not explicitly contrast with alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
actiond_job_cancelA
Cancel a pending or running CI/CD job. Validates the job's state first and refuses terminal jobs (done/failed) with an explanatory error, so an accidental double-cancel is safe. On success the job transitions to cancelled and its record is kept for later review via actiond_action_get. Use actiond_job_retry to re-queue a cancelled or failed job.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Job ID to cancel |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly=false, destructive=false, idempotent=false), the description discloses that it validates job state, refuses terminal jobs, transitions the job to cancelled, and keeps the record for later review. This gives a clear picture of side effects and error behavior, exceeding the annotation baseline.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise—two sentences that convey the action, state validation, error handling, and post-success behavior. No redundant or verbose language; every clause adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, the description provides all necessary context: what happens on success (transition to cancelled), on refusal (explanatory error), and how to retrieve the record later (actiond_action_get). It is complete for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides a 100% description coverage for the single 'id' parameter ('Job ID to cancel'). The tool description does not add extra semantic meaning to this parameter, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool cancels a pending or running CI/CD job, with a specific verb and resource. It distinguishes itself from siblings by mentioning the alternative retry tool and the action_get tool for review, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool (pending or running jobs) and when not to (terminal jobs like done/failed, as it refuses them). It also points to the sibling tool actiond_job_retry for re-queuing cancelled/failed jobs, providing clear guidance on alternative use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
actiond_job_retryA
Re-queue a failed or cancelled CI/CD job for execution. The job runs again as a fresh execution — every retry takes full time and may fail again, so repeated calls create repeated runs (this is not idempotent). Returns the job ID and plugin name; follow up with actiond_job_wait to block until the retry finishes, or actiond_diagnose if it fails the same way.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Job ID to retry |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already flag readOnlyHint: false, destructiveHint: false, and idempotentHint: false. The description adds valuable context by explaining that retries take full time, may fail again, and are not idempotent, which aligns with the annotations without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: it states the action, the non-idempotent nature, the return value, and suggested follow-ups in just three sentences with no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the purpose, behavior, output (job ID and plugin name), and follow-up actions. Since there is no output schema, this is sufficient for an agent to invoke the tool correctly and understand the next steps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides a full description of the single parameter 'id' as 'Job ID to retry', achieving 100% coverage. The tool description does not add extra meaning beyond this, so it meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (re-queue) and resource (failed or cancelled CI/CD job). It does not explicitly differentiate from sibling tools like actiond_job_cancel or actiond_job_wait, but the purpose is specific enough for an agent to understand what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates when to use the tool (for failed or cancelled jobs) and provides follow-up guidance (use actiond_job_wait, or actiond_diagnose if failure recurs). However, it does not explicitly state when not to use alternatives, leaving some room for inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
actiond_job_waitARead-onlyIdempotent
Block until the given CI/CD job reaches a terminal status (done/failed/error/cancelled), then return the full job detail. Call it right after a push surfaces job IDs — for example, immediately after "lgh up" reports triggered_job_ids. The optional timeout in seconds (default 300) aborts the wait with an error if the job is still unfinished; it never cancels the job itself. Prefer this over polling actiond_action_get; use actiond_job_cancel to abort a stuck job instead.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Job ID to wait for | |
| timeout | No | Timeout in seconds (default 300) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the tool blocks, has a timeout that aborts with an error, and never cancels the job itself. This adds behavioral context beyond the annotations (readOnlyHint, idempotentHint, destructiveHint), which are consistent with these statements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise yet thorough, with each sentence serving a distinct purpose: describing the blocking behavior, specifying when to call it, explaining the timeout effect, and directing to alternatives. No fluff or redundancy is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description fully covers the necessary context: what it does, when to use it, timeout behavior, and related tools. It leaves no ambiguity for an agent to decide when and how to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes both parameters (id and timeout) with 100% coverage, but the description adds the default timeout value (300 seconds) and explains that the timeout aborts with an error without canceling the job. This provides meaningful additional meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool blocks until a CI/CD job reaches terminal status and returns the full job detail, which is a specific verb and resource. It also distinguishes itself from polling actiond_action_get and mentions actiond_job_cancel for aborting, providing clear differentiation from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to call it right after a push surfaces job IDs, with a concrete example ('lgh up' reports triggered_job_ids). It also states when not to use it: prefer over polling and use actiond_job_cancel for aborting, giving clear when-to and when-not-to guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
actiond_logARead-onlyIdempotent
Read recent ActionD server runtime log entries. Each entry carries timestamp, level (info/warn/error/plugin), and message; plugin execution results and system events appear here. Optional limit caps the number of entries returned (default 20). Read-only; use it to inspect raw output after actiond_actions_list or actiond_action_get surfaces a failure, and prefer actiond_diagnose when you want errors interpreted into root cause and fix steps.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of log entries to return (default: 20) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds useful context about log entry content (timestamp, level, message) and that plugin execution results and system events appear, without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with short sentences, no redundant filler, and front-loads the core purpose and output format. It includes just enough guidance without being verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one optional parameter and no output schema, the description provides sufficient context: purpose, output format, use case, and alternative. It is complete enough for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully covers the only parameter (limit, with description and default). The description repeats this information without adding significant new meaning beyond the schema, so it meets but does not exceed the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the action (read recent ActionD server runtime log entries) and the resource (server logs). It distinguishes from sibling tools such as actiond_diagnose (which interprets errors) and actiond_action_get/list (which inspect actions), making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use the tool ('inspect raw output after actiond_actions_list or actiond_action_get surfaces a failure') and when not to ('prefer actiond_diagnose when you want errors interpreted'). This gives concrete usage guidance relative to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
actiond_plugin_disableAIdempotent
Disable a CI/CD plugin for the current project. Once disabled, the plugin no longer triggers even when its event conditions are met — useful for skipping unnecessary checks or shortening CI. The plugin stays registered and can be re-enabled at any time with actiond_plugin_enable; discover exact names with actiond_plugins_list. For broad, preset scope changes prefer actiond_profile_set (fast/full/release).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Plugin name to disable (e.g., 'benchmark', 'coverage_report') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the plugin remains registered after disabling, a behavioral detail beyond what annotations convey (non-destructive, idempotent). It also notes the effect on event triggers and that re-enabling is possible, adding transparency about the operation's impact.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-organized, with a clear statement of purpose followed by behavioral details and usage guidance. It avoids redundancy and includes only essential information, making it easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple interface (one parameter, no output schema), the description sufficiently covers purpose, behavior, and related tools. It even mentions the profile_set alternative for different scenarios, providing enough context for an agent to decide when to invoke this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool description does not elaborate on the parameter beyond what the schema provides. Since schema coverage is 100% with a clear example in the parameter description, baseline score of 3 is appropriate; no additional meaning is added by the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: disabling a CI/CD plugin. It explains the effect (no longer triggers) and provides context for its use (skipping checks, shortening CI). It distinguishes itself from sibling tools by mentioning re-enable and alternative profile_set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises when to use this tool versus alternatives: for broad preset scope changes, prefer actiond_profile_set. It also directs users to discover plugin names via actiond_plugins_list, giving clear guidance on prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
actiond_plugin_enableAIdempotent
Enable a CI/CD plugin for the current project. Once enabled, the plugin fires on its configured trigger events (git.push/git.tag) on every subsequent push. The plugin must already be registered — discover exact names with actiond_plugins_list, or use actiond_plugins_recommend when you want guidance on what suits the project. To change the whole CI scope at once, switch the execution profile with actiond_profile_set instead of toggling many plugins individually.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Plugin name to enable (e.g., 'go-lint', 'security_scan') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, so the safety profile is known. The description adds meaningful behavioral context beyond the annotations by stating the plugin 'fires on its configured trigger events' on every subsequent push, and by noting it must already be registered. It does not mention failure modes or auth requirements, but for a simple enabling action with these annotations the added context is strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tightly packed sentences, each earns its place: purpose, behavioral effect, prerequisite and discovery route, and scoped-out alternative. There is no filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a minimal one-parameter tool with no output schema, the description is complete: it gives the project-context scope, the registration requirement, discovery methods, behavior after enabling, and a routing hint for a broader use case. No output schema is present, so explaining explicit return values is not mandatory, and errors/failures are likely best left to runtime messaging.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides a clear description for the single parameter ('plugin name to enable') with examples. The description adds extra semantic value: the name must correspond to a previously registered plugin, and exact names can be discovered via actiond_plugins_list. This helps the agent supply valid, correct values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action ('Enable a CI/CD plugin') on a specific resource ('for the current project') and immediately clarifies what enabling entails. It further distinguishes itself from related siblings by referencing actiond_plugins_list, actiond_plugins_recommend, and actiond_profile_set, and by being the obvious counterpart to actiond_plugin_disable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance, including a prerequisite ('must already be registered') and names the exact discovery tools ('discover exact names with actiond_plugins_list, or use actiond_plugins_recommend'). It also says when NOT to use it and what to use instead: 'To change the whole CI scope at once, switch the execution profile with actiond_profile_set instead of toggling many plugins individually.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
actiond_plugins_listARead-onlyIdempotent
List every CI/CD plugin registered in ActionD, both enabled and disabled. Each entry includes name, trigger events (git.push/git.tag), supported languages, optional repo filter, type (built-in/custom exec), and current enabled state. Read-only; use it to discover valid plugin names before calling actiond_plugin_enable/actiond_plugin_disable, and actiond_plugins_recommend when you want suggestions instead of a raw inventory.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states the operation is read-only and positions it as a discovery step before mutations. The annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the description reinforces rather than significantly extends this, but it does add helpful context about its role relative to mutation tools.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, two sentences, and front-loads the core purpose. It avoids unnecessary detail while including the key distinctions from sibling tools and the returned entry fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, parameterless list tool, the description is complete: it states what is listed, what each entry contains, that it is read-only, and how it relates to the enable/disable and recommend tools. No additional context is needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, so there are no parameter semantics to explain. The description instead describes the output fields, which is the relevant information for a parameterless list operation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool lists every CI/CD plugin registered in ActionD, including both enabled and disabled plugins, and enumerates the fields returned. It also distinguishes itself from related sibling tools like actiond_plugin_enable, actiond_plugin_disable, and actiond_plugins_recommend.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to use this tool to discover valid plugin names before calling enable/disable, and contrasts it with actiond_plugins_recommend for when suggestions are wanted instead of a raw inventory. This gives clear when-to-use guidance versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
actiond_plugins_recommendARead-onlyIdempotent
Analyze a project directory and recommend which CI/CD plugins to enable or disable. Detects languages (Go, Python, Java, TypeScript, ...), frameworks (React, Next.js, Spring, ...), project type (frontend/backend/fullstack/monorepo), and features (tests, Docker, existing CI) by scanning config files, then returns per-plugin recommendations with category, reasoning, priority, and confidence, plus aggregate enable/disable suggestions and a workflow proposal. Read-only; apply the suggestions with actiond_plugin_enable / actiond_plugin_disable. Optional path defaults to the current directory.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Project path to analyze (defaults to current directory) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false. The description reinforces the read-only nature and adds rich behavioral context: it scans config files, returns per-plugin recommendations with category, reasoning, priority, confidence, plus aggregate suggestions and a workflow proposal. This goes well beyond the annotations and provides a detailed picture of what happens when the tool is invoked.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is informative but concise enough. It front-loads the primary purpose, then details detection capabilities and output structure. Every sentence adds value, and it doesn't repeat the schema or annotations. While slightly long, it's well-organized and not redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description provides a thorough explanation of the return value: per-plugin recommendations with fields, aggregate suggestions, and a workflow proposal. It also covers usage context (read-only, apply via enable/disable) and the optional path. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has only one parameter 'path' with a description 'Project path to analyze (defaults to current directory)'—schema coverage is 100%. The description does not add any additional meaning beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Analyze a project directory and recommend which CI/CD plugins to enable or disable.' It specifies the resource (project directory), the action (analyze and recommend), and what it detects (languages, frameworks, project types, features). It distinguishes itself from sibling tools like actiond_plugin_enable/disable by framing it as a read-only recommendation tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool versus alternatives: 'Read-only; apply the suggestions with actiond_plugin_enable / actiond_plugin_disable.' It also mentions the optional path parameter and its default behavior. This gives clear routing guidance, leaving no ambiguity about how it relates to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
actiond_plugins_reloadAIdempotent
Hot-reload the ActionD plugin registry without restarting the server. Scans the plugin directories for new or changed manifest.json files and updates the registry in place, so newly added plugins become available immediately. Use it after adding, editing, or removing a plugin manifest, then verify the result with actiond_plugins_list. Returns status, the number of loaded plugins, and the plugin list.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes the mechanism (scans plugin directories, updates registry in place) and implies non-destructive behavior consistent with the destructiveHint: false annotation. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences that cover purpose, usage, and return value without any fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Provides a complete picture including what the tool returns ('status, the number of loaded plugins, and the plugin list') and points to a verification step, making it self-contained for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema coverage is complete, so no additional parameter description is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the verb 'Hot-reload' and the resource 'plugin registry', and distinguishes its function from sibling tools like plugin enable/disable and list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly specifies when to use ('after adding, editing, or removing a plugin manifest') and recommends verification with actiond_plugins_list, giving direct guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
actiond_profile_getARead-onlyIdempotent
Get the execution profile that controls which CI/CD plugins run on each push. Returns the active profile name plus a description of what it triggers: "fast" runs minimal CI (core lint and test only, 2-3 jobs per push) for quick feedback during development; "full" adds security scan, coverage, and formatting checks (6-10 jobs) for pre-merge verification; "release" adds build, deploy, and release notes (10-15 jobs) for shipping. Read-only; switch profiles with actiond_profile_set and inspect the concrete plugin inventory with actiond_plugins_list.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds useful context about the return value and the meanings of the 'fast', 'full', and 'release' profiles, but it does not disclose additional behavioral traits such as error conditions, caching, or rate limits. This matches the baseline for annotation-covered read-only tools.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficient and front-loaded: purpose first, then return value, then profile semantics, then related tools. Every sentence adds distinct, useful information without redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full burden of explaining return values, and it does so thoroughly: it names the active profile, describes what each profile triggers with job counts, and routes to related tools. Nothing an agent needs to call this zero-parameter read-only tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema description coverage is 100%, so the schema carries no parameter burden. The description adds value by explaining what the returned profile name means and what each profile triggers, which is more than the empty input schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Get the execution profile that controls which CI/CD plugins run on each push.' It clearly states what the tool returns and differentiates itself from related tools by naming actiond_profile_set and actiond_plugins_list as the tools for switching profiles and inspecting plugin inventory.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when this read-only tool is appropriate and explicitly points to alternatives: 'switch profiles with actiond_profile_set and inspect the concrete plugin inventory with actiond_plugins_list.' It does not state an explicit 'use this when...' rule, but the purpose and alternatives are unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
actiond_profile_setAIdempotent
Switch the execution profile that controls which CI/CD plugins run on each push. Accepts exactly one of: "fast" (minimal CI — core lint and test only, recommended during active development for quick feedback), "full" (complete CI — adds security scan, coverage, and formatting; switch before merging), or "release" (full CI/CD — adds build, deploy, and release notes). The change applies globally and takes effect on the next triggered event. Returns the new profile; verify the current one any time with actiond_profile_get.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | Yes | Execution profile: "fast", "full", or "release" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate idempotent and not destructive. Description adds meaningful context: global application and timing of effect. There is no contradiction between annotations and description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and information-dense. The purpose, allowed values, usage recommendations, scope, timing, and return value are each addressed in a single, well-structured paragraph with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple profile-switching tool, the description covers what it does, what values exist, when to use them, the scope of effect, and the return value. No additional context is needed to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers the enum values, and the description enriches each with its intended use case. Parameter semantics are fully explained beyond the schema's minimal description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the action ('Switch'), the resource ('execution profile'), and the effect ('controls which CI/CD plugins run'). Distinguishes from siblings like actiond_profile_get by specifying the switching behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance for each allowed value: 'fast' for active development, 'full' before merging, 'release' for full CI/CD. Notes that the change applies globally and takes effect on the next event. Does not explicitly contrast with individual plugin controls, but the value-level guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
actiond_run_reportARead-onlyIdempotent
Generate a goal run report for a repository: one structured JSON that reconstructs what a run changed and how well it was verified, without writing any new state. Aggregates git log, ActionD CI/CD job verdicts, and — when a task management system report is available — the task's handoff status into sections that answer: what changed (commits), why (declared task intent), did it work (per-job verdicts pass/fail/unknown), how trustworthy the results are (verification depth and verifier provenance), can someone else continue the work, and can it be rolled back (recovery points with evidence levels). Anything not knowable is reported as an explicit "unknown" — never silently converted to pass/fail — and a Limitations list states what the report cannot yet guarantee. Optional path (defaults to the current directory), commit (focus the report on one commit), task_id/project_id (look up the task report), and limit (commits to include, default 10).
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Repository path (defaults to the current directory) | |
| limit | No | Number of git log commits to include (default 10) | |
| commit | No | Focus the report on a specific commit (default: the most recent N commits) | |
| task_id | No | Task ID; when provided, the report also looks up the task report and its handoff status | |
| project_id | No | Project ID in the task management system (defaults to the repository name) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already mark it read-only and idempotent, and the description reinforces 'without writing any new state.' It also promises explicit 'unknown' values, which prevents agents from assuming false confidence. It does not mention potential error conditions or external dependencies, but the main behavioral guarantees are covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main purpose but becomes a long run-on sentence that enumerates report sections and repeats the 'unknown' behavior. It is understandable but not tightly edited; a more compact structure would improve scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by describing the JSON report's conceptual sections (what changed, why, did it work, trustworthiness, continuation, rollback) and the explicit handling of unknowns. It does not specify exact field names or error behavior, but the overall output contract is clear enough for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter has a meaningful description. The prose repeats those meanings without adding significant constraints or interactions beyond what the schema already states. No additional parameter semantics are needed, but none are provided beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: generate a goal run report as one structured JSON that reconstructs changes, verification, and rollback status. It explicitly distinguishes the tool from write operations by saying it writes no new state. The resource and verb are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains that it aggregates git log, CI/CD job verdicts, and task handoff status, and that task_id triggers a task report lookup. It does not explicitly contrast this with sibling tools like actiond_status or actiond_diagnose, but the aggregation role and conditional task lookup provide practical usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
actiond_server_restartA
Restart the ActionD server daemon (stop, then start again). Requires ACTIOND_MCP_ALLOW_LIFECYCLE=1 in the MCP server environment; the call is refused with a clear error otherwise. By default it protects in-flight work: it refuses and lists the pending/running jobs unless force=true is passed, which restarts even while jobs are executing (those jobs are interrupted). Use it to pick up server-level changes — plugin manifest changes only need actiond_plugins_reload. Returns an action/changed/running/message envelope with combined stop/start output.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | Force restart even when jobs are pending/running |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses important behavior: the ACTIOND_MCP_ALLOW_LIFECYCLE=1 gate, refusal with a clear error, default protection of in-flight jobs, and the force=true side effect of interrupting executing jobs. This is strong transparency and does not contradict the annotations since restart is not marked read-only and destructiveHint=false is consistent with not deleting persistent data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a bit longer than necessary but every sentence conveys essential information: the action, the gate requirement, the default safeguard, the force override, the use case, and the return envelope. It is structured logically and not redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by stating the return shape: an action/changed/running/message envelope with combined stop/start output. It also gives the environment prerequisite and relevant sibling distinction, making the context sufficiently complete for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'force' is fully described in the schema and further clarified in the description: without it, pending/running jobs cause refusal; with it, the restart proceeds and interrupts those jobs. Schema coverage is 100% and no enums or nested objects add ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the verb 'Restart' and the resource 'ActionD server daemon'. It also explicitly differentiates this tool from the plugin reload sibling by saying plugin manifest changes only need actiond_plugins_reload, making its purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage guidance: use it to pick up server-level changes, and use actiond_plugins_reload for plugin manifest changes. It also explains the environment variable requirement and default behavior with pending jobs, so when and when not to use the tool is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
actiond_server_startAIdempotent
Start the ActionD server in daemon mode. Refuses with a clear error unless ACTIOND_MCP_ALLOW_LIFECYCLE=1 is set in the MCP server environment (lifecycle control is disabled by default as a safety gate). Starting an already-running server is a no-op that reports the current state. Returns an action/changed/running/message envelope plus daemon output; verify health afterwards with actiond_status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false. The description adds substantial context beyond these: daemon mode, the safety-gate env var refusal, the no-op on already-running servers, and the returned envelope plus daemon output. The no-op statement directly corroborates idempotentHint=true; no contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: purpose, safety gate, then behavior/return/follow-up. The core action is front-loaded before the conditions, and there is no filler or repetition of the title or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by naming the return shape ('action/changed/running/message envelope plus daemon output') and the recommended verification step. For a 0-param lifecycle tool whose safety profile is already in the annotations, nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and the schema is trivially covered at 100%, so per the baseline for 0-param tools a 4 applies. There are no parameters to explain, and the description does not waste space fabricating parameter detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'Start the ActionD server in daemon mode' — with the daemon-mode qualifier adding precision. It distinguishes itself from the lifecycle siblings actiond_server_restart and actiond_server_stop by being the start operation, so an agent can tell them apart without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context: it is a lifecycle start usable only when ACTIOND_MCP_ALLOW_LIFECYCLE=1 is set, and it directs the agent to verify health afterwards with actiond_status. It does not explicitly name exclusions or contrast against server_restart/server_stop, so it stops short of a 5, but the precondition and follow-up pointer provide solid when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
actiond_server_stopAIdempotent
Stop the ActionD server daemon. Requires ACTIOND_MCP_ALLOW_LIFECYCLE=1 in the MCP server environment; the call is refused with a clear error otherwise. By default it protects in-flight work: it refuses and lists the pending/running jobs unless force=true is passed, which stops the server even while jobs are executing (those jobs are interrupted). Stopping an already-stopped server is a no-op. Returns an action/changed/running/message envelope with the daemon output.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | Force stop even when jobs are pending/running |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Reveals environment variable requirements, default refusal with a list of pending/running jobs, force behavior with job interruption, no-op behavior, and the return envelope. Consistent with idempotentHint and readOnlyHint annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense but relevant sentences cover all key behaviors without unnecessary detail or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even without an output schema, the description states the return envelope format and covers all preconditions, side effects, and edge cases needed to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, force, is fully explained in both the schema and description, including its effect of stopping the server even when jobs are executing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action ('Stop the ActionD server daemon') and clearly distinguishes it from sibling lifecycle tools like start and restart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage conditions: requires ACTIOND_MCP_ALLOW_LIFECYCLE=1, default protects in-flight work, and force=true overrides that protection. Also notes the no-op behavior for an already-stopped server.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
actiond_statusARead-onlyIdempotent
Check whether the ActionD CI/CD server is reachable and capture its vitals in one call. Returns JSON with running state, version, uptime, registered plugin count, and recent action count. Safe to call at any time with no side effects; use it first when diagnosing connectivity, and prefer actiond_log for execution errors or actiond_actions_list for job history.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description states 'Safe to call at any time with no side effects', which aligns with the readOnly/idempotent annotations and adds practical context. It also details the return JSON fields, going beyond annotation-provided info. Minor redundancy with annotations, but still adds value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with the primary purpose front-loaded. No unnecessary words, and every clause adds either purpose, output, or usage context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an empty schema and no output schema, the description fully covers what the tool does, what it returns, and when to use it relative to siblings. No missing information for invocation success.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero parameters and 100% coverage, so the baseline is 4. The description does not need to explain parameters since there are none, and it correctly implies the tool takes no input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the verb 'Check' and the resource 'ActionD CI/CD server', along with the specific goal of capturing vitals. It distinguishes itself from siblings by explicitly naming actiond_log and actiond_actions_list as alternatives for different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to use this tool first when diagnosing connectivity, and directs to actiond_log for execution errors and actiond_actions_list for job history. This provides clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dev_cycle_runA
Run the end-to-end development loop — commit, trigger CI, wait for results, return a summary — in a single aggregated call. Internally it: (1) commits and pushes the working tree via "lgh up" (requires the LGH daemon running), (2) waits for the ActionD CI/CD jobs triggered by that push, and (3) collects every job result into one structured output. Requires a message (the commit text); optional path (repo directory, defaults to the MCP client's working directory), timeout in seconds (default 300), profile (fast/full/release — switched temporarily for this run and restored afterwards; omit to keep the current profile), and auto_rollback (default false; on failure, resets the repo to the pre-push commit). Use it after editing code to commit, test, and verify in one step; the result reports success, the commit sha, per-job statuses with durations, artifacts, rollback info when applicable, and a human-readable summary.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Repository path (defaults to the MCP client's working directory) | |
| message | Yes | Git commit message | |
| profile | No | Execution profile for this run: fast/full/release (default: keep the current setting) - fast: minimal CI, core lint and test only - full: complete CI, adds security scan, coverage, etc. - release: full CI/CD, adds build and deploy | |
| timeout | No | Wait timeout in seconds (default 300 = 5 minutes) | |
| auto_rollback | No | On failure, automatically roll back to the previous commit (default false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the internal sequence (commit/push, wait, collect), the LGH daemon prerequisite, temporary profile switching, and the optional auto-rollback behavior, so an agent can anticipate side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and the numbered internals help structure, but the later parameter summary largely repeats the input schema, making the description longer than necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by listing the result contents (success, commit sha, per-job statuses with durations, artifacts, rollback info, and a human-readable summary) as well as prerequisites and defaults.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and every parameter already has a description, so this is at the baseline; the prose restates the schema fields without adding substantial new semantic detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Run the end-to-end development loop') and explains that it aggregates commit, CI trigger, wait, and summary into one call, making it easy to distinguish from the individual actiond_* sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit usage cue ('Use it after editing code to commit, test, and verify in one step') and highlights the aggregation, though it does not explicitly name alternatives or state when not to use it beyond the single-call framing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
7 tool updates
v0.1.1- Removed
actiond_cancel - Changed
actiond_diagnose1 field changed- changed
Input schema / properties / limit / descriptionPrevious value: -"最多分析的失败任务数量(默认 5)"New value: +"Maximum number of failed jobs to analyze when no job_id is given (default 5)"
- Changed
actiond_handoff_pack9 fields changed- changed
Input schema / properties / from_agent / descriptionPrevious value: -"交接发起方(如 dsh:codex)"New value: +"Identity of the agent handing off the work (e.g., 'codex')" - changed
Input schema / properties / goal / descriptionPrevious value: -"任务目标一句话"New value: +"One-sentence task goal" - changed
Input schema / properties / path / descriptionPrevious value: -"仓库路径(默认当前目录)"New value: +"Repository path (defaults to the current directory)" - changed
Input schema / properties / pending_work / descriptionPrevious value: -"待办清单(逗号分隔)"New value: +"Comma-separated list of pending work items" - added
Input schema / properties / project_idAdded value: +{ + "description": "Project ID in the task management system (defaults to the repository name)", + "type": "string" +} - changed
Input schema / properties / suggested_next_action / descriptionPrevious value: -"建议接手方执行的下一步"New value: +"Next step the receiving agent should take" - changed
Input schema / properties / task_id / descriptionPrevious value: -"任务 id;提供后同时查询 RMS task report 补全 goal/decisions"New value: +"Task ID; when provided, the task report is also queried to fill in goal and decisions" - changed
Input schema / properties / to_agent / descriptionPrevious value: -"接手方(如 dsh:claude-window)"New value: +"Identity of the agent receiving the work (e.g., 'claude')" - changed
Input schema / properties / ttl_hours / descriptionPrevious value: -"交接有效期小时(默认 24)"New value: +"How long the handoff stays valid, in hours (default 24)"
- Changed
actiond_job_wait2 fields changed- changed
Input schema / properties / id / descriptionPrevious value: -"任务 ID"New value: +"Job ID to wait for" - changed
Input schema / properties / timeout / descriptionPrevious value: -"超时秒数(默认 300)"New value: +"Timeout in seconds (default 300)"
- Changed
actiond_profile_set1 field changed- added
Input schema / properties / profile / enumAdded value: +[ + "fast", + "full", + "release" +]
- Changed
actiond_run_report5 fields changed- changed
Input schema / properties / commit / descriptionPrevious value: -"聚焦某个 commit(缺省为最近 N 个提交)"New value: +"Focus the report on a specific commit (default: the most recent N commits)" - changed
Input schema / properties / limit / descriptionPrevious value: -"git log 条数(默认 10)"New value: +"Number of git log commits to include (default 10)" - changed
Input schema / properties / path / descriptionPrevious value: -"仓库路径(默认当前目录)"New value: +"Repository path (defaults to the current directory)" - changed
Input schema / properties / project_id / descriptionPrevious value: -"RMS project id(默认取仓库名)"New value: +"Project ID in the task management system (defaults to the repository name)" - changed
Input schema / properties / task_id / descriptionPrevious value: -"RMS task id;提供后报告会查询任务报告与交接状态"New value: +"Task ID; when provided, the report also looks up the task report and its handoff status"
- Changed
dev_cycle_run6 fields changed- changed
Input schema / properties / auto_rollback / descriptionPrevious value: -"失败时自动回滚到上一个 commit(默认 false)"New value: +"On failure, automatically roll back to the previous commit (default false)" - changed
Input schema / properties / message / descriptionPrevious value: -"提交信息"New value: +"Git commit message" - changed
Input schema / properties / path / descriptionPrevious value: -"仓库路径(默认当前目录)"New value: +"Repository path (defaults to the MCP client's working directory)" - changed
Input schema / properties / profile / descriptionPrevious value: -"执行 profile:fast/full/release(默认不切换,保持当前设置)\n- fast: 最小 CI,只跑核心 lint 和 test\n- full: 完整 CI,加上安全扫描、覆盖率等\n- release: 完整 CI/CD,加上 build 和 deploy"New value: +"Execution profile for this run: fast/full/release (default: keep the current setting)\n- fast: minimal CI, core lint and test only\n- full: complete CI, adds security scan, coverage, etc.\n- release: full CI/CD, adds build and deploy" - added
Input schema / properties / profile / enumAdded value: +[ + "fast", + "full", + "release" +] - changed
Input schema / properties / timeout / descriptionPrevious value: -"等待超时秒数(默认 300 = 5分钟)"New value: +"Wait timeout in seconds (default 300 = 5 minutes)"
23 tool updates
v0.1.0- First observed
actiond_action_get - First observed
actiond_actions_list - First observed
actiond_cancel - First observed
actiond_cleanup - First observed
actiond_diagnose - First observed
actiond_handoff_pack - First observed
actiond_job_cancel - First observed
actiond_job_retry - First observed
actiond_job_wait - First observed
actiond_log - First observed
actiond_plugin_disable - First observed
actiond_plugin_enable - First observed
actiond_plugins_list - First observed
actiond_plugins_recommend - First observed
actiond_plugins_reload - First observed
actiond_profile_get - First observed
actiond_profile_set - First observed
actiond_run_report - First observed
actiond_server_restart - First observed
actiond_server_start - First observed
actiond_server_stop - First observed
actiond_status - First observed
dev_cycle_run
TDQS
Most tools have distinct purposes, but the interchangeable use of 'action' and 'job' (e.g., actiond_action_get vs actiond_job_cancel) and the generic actiond_cleanup could cause misselection. Additionally, actiond_run_report and actiond_handoff_pack both aggregate run information, though with different outputs, adding some overlap.
The majority use the actiond_ prefix, but dev_cycle_run breaks the pattern, and pluralization is inconsistent (actiond_action_get vs actiond_actions_list; actiond_plugin_enable vs actiond_plugins_list). The verb/noun structure is not uniform across the set, mixing get/list/cancel/retry/wait/set/start/stop/restart/recommend/reload etc. without a clear consistent scheme.
22 tools is within the 16-25 range that feels heavy. Each tool has a defined role, but the count is on the higher side, and some could be consolidated (e.g., unifying action/job naming, or combining report tools) without losing functionality.
The set covers the full CI/CD lifecycle: server management (start/stop/restart/status), job operations (list/get/cancel/retry/wait/log/diagnose/cleanup), plugin management (list/enable/disable/recommend/reload), profiles (get/set), and higher-level aggregates (handoff_pack, run_report, dev_cycle_run). No obvious gaps for the stated domain.
Maintenance
Related MCP Connectors
AI-native git hosting — repos, PRs, issues, CI gates, and AI code review over MCP (60 tools).
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Control plane for autonomous software labor. Agents claim objectives over MCP with audit trail.
Zero-setup MCP gateway securely connecting AI to your tools with authentication and workflows
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceA PRD-first multi-agent MCP server that wraps agent definitions, collaboration rules, and staged delivery into a local stdio service for standardized software delivery workflows.MIT
- AlicenseNot gradedqualityCmaintenanceMCP server that equips AI agents with dev workflow tools including GitHub project management, conventional commits, visual regression testing, Jira/Confluence integration, and a persistent memory knowledge graph.21MIT
- AlicenseAqualityCmaintenanceAn intelligent MCP server that gives AI agents full control over GitHub Actions CI/CD pipelines, including real-time monitoring, log analysis, AI-powered failure diagnosis, and deployment management.134281ISC
- AlicenseNot gradedqualityBmaintenanceLocal-first code intelligence and safety layer for AI coding agents. MCP server exposes dependency graph, impact analysis, and AST-compressed repo context, backed by typed local memory, patch-scope safety gates, and git-independent transaction rollback.1MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/JoeGlenn1213/ActionD'
If you have feedback or need assistance with the MCP directory API, please join our Discord server