Skip to main content
Glama

ActionD

Local AI Action Execution Engine for LGH (Local Git Hub)

English | 简体中文

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 workflowdev_cycle_run does 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/actiond

Install 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 build

Note: ActionD uses SQLite for storage (the pure-Go modernc.org/sqlite build) — no CGO is needed and make build cross-compiles freely.

Quick Start

If this is your first run, use setup to check dependencies, create the directory layout, and verify the environment:

actiond setup

To also start the daemon in the background right after setup:

actiond setup --start

2. 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 doctor

3. Open the web console

open http://localhost:3000

Default directories and auto-detection

  • Plugin directories are probed in order: <binary dir>/plugins<working dir>/plugins~/.localgithub/plugins

  • Web static assets are auto-detected in common locations; the recommended target is publishing ActionD-Web's out/ to: ~/.localgithub/actiond-web/out

  • Without an explicit --repo-root, ActionD resolves repositories through LGH mappings first, then falls back to current-directory semantics.

CLI Commands

Command

Description

actiond setup

One-command environment initialization (v1.2+)

actiond start

Start in the foreground

actiond start -d

Start as a background daemon

actiond stop

Stop the daemon

actiond restart

Restart the service (v1.2+)

actiond status

Show run status + directory info (v1.2+)

actiond plugins restore-go

Re-enable the Go verification plugins

actiond log

View server logs

actiond doctor

Diagnose system dependencies (tiered checks)

actiond version

Print version information

actiond mcp

Start the MCP server

One-command setup (v1.2+)

Recommended on first install:

actiond setup

This automatically:

  • Creates the directory layout (~/.localgithub/*)

  • Checks dependencies (Git, Python, Go, Node)

  • Detects web assets and plugin directories

  • Verifies the LGH connection

Doctor

actiond doctor

Runs 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-go

Status (v1.2+)

actiond status

Shows:

  • 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:

  1. System plugins: ./plugins/ (next to the binary)

  2. Development plugins: ./plugins/ (current working directory)

  3. 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

name

Unique plugin identifier

command

Command to execute

args

-

Command arguments

triggers

Trigger events: git.push, git.tag

languages

-

Supported languages: go, java, python, web, node, typescript, javascript, nextjs, *

timeout

-

Timeout: 5m, 30s

refFilter

-

Ref matching: refs/tags/*

Creating a custom plugin

plugins/
└── my-plugin/
    ├── manifest.json    # plugin metadata
    └── run.py           # execution script

Example 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

action_id

string

Unique execution ID

status

string

success, failed, skipped

decision

string

pass, deny (used for gating and AI decisions)

summary.message

string

One-line summary

signals

object

Core extracted features, e.g. tests_passed, lint_error_count

hints

[]string

AI/user-friendly fix suggestions

artifacts

[]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_failed

npm install failure

npm_lockfile_mismatch

package-lock.json out of sync

npm_module_not_found

module not found

go_mod_tidy

go.mod needs tidying

python_module_not_found

missing Python module

maven_build_failed

Maven build failure

Build

go_build_failed

Go compile error

gradle_build_failed

Gradle build failure

Tests

jest_test_failed

Jest test failure

go_test_failed

Go test failure

pytest_failed

pytest failure

Generic

permission_denied

permission error

timeout

operation timed out

out_of_memory

out of memory

command_not_found

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 tool

Built-in Plugins

Plugin

Trigger

Language

Description

echo

all

*

Debug plugin, echoes event info

go-lint

git.push

Go

golangci-lint code checks

go-test-fast

git.push

Go

Fast unit tests

go-build

git.tag

Go

Cross-platform builds

java-quicktest

git.push

Java

Smart test selection

java-checkstyle

git.push

Java

Checkstyle code style

python-pytest

git.push

Python

pytest + coverage

web-lint

git.push

Web/Node

Frontend lint checks

web-test

git.push

Web/Node

Frontend test script

web-build

git.push

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 mcp

To let the AI start/stop/restart ActionD itself over MCP, set this before launching:

ACTIOND_MCP_ALLOW_LIFECYCLE=1 actiond mcp

Available tools

Tool

Description

actiond_status

Get server status and statistics

actiond_plugins_list

List all plugins and their configuration

actiond_actions_list

List recent CI/CD jobs

actiond_action_get

Get details of a single job

actiond_plugins_reload

Hot-reload plugins

actiond_plugins_recommend

Recommend plugins by project profile (language/framework detection + confidence)

actiond_plugin_enable

Enable a plugin for the current project

actiond_plugin_disable

Disable a plugin for the current project

actiond_log

View server logs, filterable by job_id and plugin_name

actiond_profile_get

Get the current execution profile (fast/full/release)

actiond_profile_set

Set the execution profile, controlling which plugins each push triggers

actiond_server_start

Start the ActionD service (requires the lifecycle switch)

actiond_server_stop

Stop the ActionD service (protects running jobs by default)

actiond_server_restart

Restart the ActionD service (protects running jobs by default)

actiond_job_wait

Block until a job finishes and return its result; supports a timeout parameter

actiond_job_cancel

Cancel a job (validates state; terminal jobs are rejected)

actiond_cancel

Cancel a job (deprecated: prefer actiond_job_cancel)

actiond_job_retry

Retry a failed job

actiond_diagnose

AI failure diagnosis: root-cause analysis + classification + fix suggestions (the first tool to reach for when CI fails)

dev_cycle_run

End-to-end dev loop: commit → CI → results (V1.0.8+)

To approve a blocked job, use the CLI actiond approve <job_id> or REST POST /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 results

Parameters:

Parameter

Required

Description

message

Git commit message

path

-

Repository path (defaults to the current directory)

timeout

-

Wait timeout in seconds (default 300 = 5 minutes)

auto_rollback

-

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.3s

Available resources

  • actiond://status — server status

  • actiond://plugins — plugin list

  • actiond://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-go

Overriding 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

/api/plugins

GET

List all plugins

/api/plugins

POST

Create a custom plugin

/api/plugins/reload

POST

Hot-reload plugins

/api/plugins/{name}/toggle

POST

Enable/disable a plugin

/api/actions

GET

List execution records

/api/actions/{id}

GET

Get job details

/api/actions/{id}/stream

GET

SSE live log stream

/api/actions/{id}/artifacts/{file}

GET

Download an artifact

/api/actions/{id}/cancel

POST

Cancel a running job (V1.0.8+)

/api/actions/{id}/retry

POST

Retry a failed job (V1.0.8+)

/api/actions/{id}/approve

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

Event log

📨 Received: git.push [my-repo]

dispatch

Dispatch log

→ Dispatching to: go-lint

plugin

Plugin execution

plugin stdout/stderr output

user

User summary

✅ All 3 plugins passed (5.2s)

ai

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

~/.localgithub/actions/

Data directory

~/.localgithub/actions/actiond.db

SQLite job database

~/.localgithub/actions/actiond.pid

Daemon PID file

~/.localgithub/actions/config.json

User configuration

~/.localgithub/plugins/

User-defined plugin directory

~/.localgithub/actions/actiond.log

Daemon log

Development

# Build
go build ./...

# Run tests
go test ./...

# Install to GOPATH
go install ./cmd/actiond

License

MIT License — see LICENSE

Available Tools

22 tools
actiond_action_getA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe action/job ID to retrieve

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_listA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of actions to return (default: 20)

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_cleanupA
DestructiveIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
allNoDelete all terminal jobs regardless of age
daysNoRetention window in days (default 7; 0 = all terminal jobs)

TDQS

A4.4/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_diagnoseA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of failed jobs to analyze when no job_id is given (default 5)
job_idNoSpecific job ID to diagnose (optional - if not provided, analyzes recent failures)

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_packA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
goalNoOne-sentence task goal
pathNoRepository path (defaults to the current directory)
task_idNoTask ID; when provided, the task report is also queried to fill in goal and decisions
to_agentNoIdentity of the agent receiving the work (e.g., 'claude')
ttl_hoursNoHow long the handoff stays valid, in hours (default 24)
from_agentNoIdentity of the agent handing off the work (e.g., 'codex')
project_idNoProject ID in the task management system (defaults to the repository name)
pending_workNoComma-separated list of pending work items
suggested_next_actionNoNext step the receiving agent should take

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness2/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesJob ID to cancel

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesJob ID to retry

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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_waitA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesJob ID to wait for
timeoutNoTimeout in seconds (default 300)

TDQS

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_logA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of log entries to return (default: 20)

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_disableA
Idempotent

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPlugin name to disable (e.g., 'benchmark', 'coverage_report')

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_enableA
Idempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPlugin name to enable (e.g., 'go-lint', 'security_scan')

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_listA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_recommendA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoProject path to analyze (defaults to current directory)

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_reloadA
Idempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_getA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_setA
Idempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
profileYesExecution profile: "fast", "full", or "release"

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_reportA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoRepository path (defaults to the current directory)
limitNoNumber of git log commits to include (default 10)
commitNoFocus the report on a specific commit (default: the most recent N commits)
task_idNoTask ID; when provided, the report also looks up the task report and its handoff status
project_idNoProject ID in the task management system (defaults to the repository name)

TDQS

A4/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoForce restart even when jobs are pending/running

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_startA
Idempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_stopA
Idempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoForce stop even when jobs are pending/running

TDQS

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_statusA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoRepository path (defaults to the MCP client's working directory)
messageYesGit commit message
profileNoExecution 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
timeoutNoWait timeout in seconds (default 300 = 5 minutes)
auto_rollbackNoOn failure, automatically roll back to the previous commit (default false)

TDQS

A4.3/5.0
Behavior5/5

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.

Conciseness3/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 7 tool updatesv0.1.1
    • Removedactiond_cancel
    • Changedactiond_diagnose1 field changed
      • changedInput schema / properties / limit / description
        Previous value: -"最多分析的失败任务数量(默认 5)"New value: +"Maximum number of failed jobs to analyze when no job_id is given (default 5)"
    • Changedactiond_handoff_pack9 fields changed
      • changedInput schema / properties / from_agent / description
        Previous value: -"交接发起方(如 dsh:codex)"New value: +"Identity of the agent handing off the work (e.g., 'codex')"
      • changedInput schema / properties / goal / description
        Previous value: -"任务目标一句话"New value: +"One-sentence task goal"
      • changedInput schema / properties / path / description
        Previous value: -"仓库路径(默认当前目录)"New value: +"Repository path (defaults to the current directory)"
      • changedInput schema / properties / pending_work / description
        Previous value: -"待办清单(逗号分隔)"New value: +"Comma-separated list of pending work items"
      • addedInput schema / properties / project_id
        Added value: +{
        +  "description": "Project ID in the task management system (defaults to the repository name)",
        +  "type": "string"
        +}
      • changedInput schema / properties / suggested_next_action / description
        Previous value: -"建议接手方执行的下一步"New value: +"Next step the receiving agent should take"
      • changedInput schema / properties / task_id / description
        Previous 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"
      • changedInput schema / properties / to_agent / description
        Previous value: -"接手方(如 dsh:claude-window)"New value: +"Identity of the agent receiving the work (e.g., 'claude')"
      • changedInput schema / properties / ttl_hours / description
        Previous value: -"交接有效期小时(默认 24)"New value: +"How long the handoff stays valid, in hours (default 24)"
    • Changedactiond_job_wait2 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"任务 ID"New value: +"Job ID to wait for"
      • changedInput schema / properties / timeout / description
        Previous value: -"超时秒数(默认 300)"New value: +"Timeout in seconds (default 300)"
    • Changedactiond_profile_set1 field changed
      • addedInput schema / properties / profile / enum
        Added value: +[
        +  "fast",
        +  "full",
        +  "release"
        +]
    • Changedactiond_run_report5 fields changed
      • changedInput schema / properties / commit / description
        Previous value: -"聚焦某个 commit(缺省为最近 N 个提交)"New value: +"Focus the report on a specific commit (default: the most recent N commits)"
      • changedInput schema / properties / limit / description
        Previous value: -"git log 条数(默认 10)"New value: +"Number of git log commits to include (default 10)"
      • changedInput schema / properties / path / description
        Previous value: -"仓库路径(默认当前目录)"New value: +"Repository path (defaults to the current directory)"
      • changedInput schema / properties / project_id / description
        Previous value: -"RMS project id(默认取仓库名)"New value: +"Project ID in the task management system (defaults to the repository name)"
      • changedInput schema / properties / task_id / description
        Previous value: -"RMS task id;提供后报告会查询任务报告与交接状态"New value: +"Task ID; when provided, the report also looks up the task report and its handoff status"
    • Changeddev_cycle_run6 fields changed
      • changedInput schema / properties / auto_rollback / description
        Previous value: -"失败时自动回滚到上一个 commit(默认 false)"New value: +"On failure, automatically roll back to the previous commit (default false)"
      • changedInput schema / properties / message / description
        Previous value: -"提交信息"New value: +"Git commit message"
      • changedInput schema / properties / path / description
        Previous value: -"仓库路径(默认当前目录)"New value: +"Repository path (defaults to the MCP client's working directory)"
      • changedInput schema / properties / profile / description
        Previous 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"
      • addedInput schema / properties / profile / enum
        Added value: +[
        +  "fast",
        +  "full",
        +  "release"
        +]
      • changedInput schema / properties / timeout / description
        Previous value: -"等待超时秒数(默认 300 = 5分钟)"New value: +"Wait timeout in seconds (default 300 = 5 minutes)"
  2. 23 tool updatesv0.1.0
    • First observedactiond_action_get
    • First observedactiond_actions_list
    • First observedactiond_cancel
    • First observedactiond_cleanup
    • First observedactiond_diagnose
    • First observedactiond_handoff_pack
    • First observedactiond_job_cancel
    • First observedactiond_job_retry
    • First observedactiond_job_wait
    • First observedactiond_log
    • First observedactiond_plugin_disable
    • First observedactiond_plugin_enable
    • First observedactiond_plugins_list
    • First observedactiond_plugins_recommend
    • First observedactiond_plugins_reload
    • First observedactiond_profile_get
    • First observedactiond_profile_set
    • First observedactiond_run_report
    • First observedactiond_server_restart
    • First observedactiond_server_start
    • First observedactiond_server_stop
    • First observedactiond_status
    • First observeddev_cycle_run

TDQS

A4/5.0
Disambiguation3/5

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.

Naming Consistency2/5

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.

Tool Count3/5

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.

Completeness5/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Local-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.
    1
    MIT

Latest Blog Posts

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