Help us improve
Share bugs, ideas, or general feedback.
From agent-flow
Validates automation config, MCP server connectivity, and tokens in agent-flow pipeline projects. Reports missing or misconfigured sections, optional blocks, and per-tracker rules.
npx claudepluginhub asysta-act/agent-flowHow this skill is triggered — by the user, by Claude, or both
Slash command
/agent-flow:check-setup [--skip-build][--skip-build]This skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Check the project configuration for the agent-flow pipeline. Report: what works, what is missing, what failed.
Validates Claude project MCP configurations: JSON structure in .claude/settings.json, mcpServers object, commands/args/env vars, essential MCPs (memory, filesystem, github), security for hardcoded secrets. Suggests fixes.
Generates .mcp.json and .claude/settings.json to configure MCP servers, tokens, and tool permissions for agent-flow pipeline. Supports CLI flags for tracker type, instance URL, and source control remote.
Audits repository for baseline compliance across 9 categories: configuration, code quality, git hygiene, CI/CD, testing, security, documentation. Outputs Markdown checklist report and JSON sidecar.
Share bugs, ideas, or general feedback.
Check the project configuration for the agent-flow pipeline. Report: what works, what is missing, what failed.
If $ARGUMENTS contains --skip-build, skip running build/test commands.
## Automation Config section → [OK] or [FAIL]| Section | Required keys |
|---|---|
| Issue Tracker | Type (or default youtrack), Instance, Project, Bug query, State transitions, On start set |
| Source Control | Remote, Base branch, Branch naming |
| PR Rules | Labels |
| PR Description Template | (subsection present) |
| Build & Test | Build command, Test command |
Path note:
trackers.mdlives in the plugin installation directory, not in the consuming project. Glob is used to handle CWD-context mismatch.
Locate trackers.md: Glob with pattern .claude/plugins/**/docs/reference/trackers.md first.
If no results, Glob with **/docs/reference/trackers.md. If still none, try docs/reference/trackers.md relative to CWD.
If multiple results, prefer the path containing .claude/plugins/ or agent-flow/; if ambiguous → [WARN] "Multiple trackers.md found — using {path}."
If the file cannot be found → [WARN] "trackers.md not found — per-tracker validation skipped. Verify plugin installation." and skip the rest of Step 3a.
Find the row matching the configured Type in the Validation Rules table.
For each key: verify that the value exists and is NOT a placeholder (<...>)
Verify optional sections (if they exist, check the format):
docker or native → [WARN] if neither; Start command and Stop command must be non-empty → [WARN] if missingRead .mcp.json in the project root:
Compare MCP servers with Automation Config:
Verify that tokens in .mcp.json are not empty or placeholders → [OK] or [FAIL]
gitea AND .mcp.json contains a command field referencing forgejo-mcp: emit [WARN] forgejo-mcp detected in .mcp.json for Type: gitea — re-run /agent-flow:setup-mcp to install gitea-mcp.which curl — if curl is not available, skip probe and emit:
[FAIL] "Issue tracker — TLS error detected. Add NODE_OPTIONS: --use-system-ca to .mcp.json env block. (curl not available for confirmation probe)"curl -s -o /dev/null -w "%{http_code}" --max-time 5 {Instance}env block (first value starting with https:// or http://). If no URL found,
check if the server command/package matches a well-known host (server-github → https://github.com,
server-gitlab → https://gitlab.com). If neither yields a URL, skip the curl probe.
If {sc_base_url} was derived, run a curl probe:
which curl — if curl is not available, skip probe and emit:
[FAIL] "Source control — TLS error detected. Add NODE_OPTIONS: --use-system-ca to .mcp.json env block. (curl not available for confirmation probe)"curl -s -o /dev/null -w "%{http_code}" --max-time 5 {sc_base_url}--skip-build is NOT in $ARGUMENTS:
--skip-build IS in $ARGUMENTS → [SKIP]# Block 4b: Docker dry-build (optional)
if [ -n "$skip_build" ] && [ "$skip_build" = "true" ]; then
echo "[SKIP] Docker - skipped (--skip-build flag)"
elif [ ! -f Dockerfile ]; then
echo "[SKIP] Docker - no Dockerfile"
elif ! command -v docker >/dev/null 2>&1; then
echo "[SKIP] Docker - docker binary not found"
else
# NOTE: --skip-build flag handled at top of block (skips Docker check identically to other build steps)
if docker build --no-cache -t check-setup-test . > /tmp/check-setup-docker.log 2>&1; then
echo "[OK] Docker - build passed"
docker rmi check-setup-test >/dev/null 2>&1 || true
else
err=$(tail -3 /tmp/check-setup-docker.log | tr '\n' ' ')
echo "[FAIL] Docker - $err"
fi
fi
Where $skip_build is set to "true" when --skip-build is present in $ARGUMENTS (same flag used by Block 4). The 4-branch decision tree:
--skip-build flag → [SKIP] Docker - skipped (--skip-build flag)[SKIP] Docker - no Dockerfiledocker binary not on PATH → [SKIP] Docker - docker binary not found (handles CI environments without Docker)[OK] Docker - build passed (image cleaned up with docker rmi)[FAIL] Docker - {last 3 lines of build log}## Setup report — {Remote from Automation Config}
### Automation Config
[OK] ## Automation Config found in CLAUDE.md
[OK] Issue Tracker — all keys filled (Type: {type})
[OK] Source Control — all keys filled
[FAIL] PR Description Template — section missing
[FAIL] Build & Test — Test command is empty
### MCP servers
[OK] .mcp.json found
[OK] Issue tracker MCP server configured ({instance})
[FAIL] Source control MCP server not found for remote {owner/repo}
### Connectivity
[OK] Issue tracker — connection OK, project {PROJECT} found, X bugs
[FAIL] Issue tracker — server reachable but MCP connection failed (likely TLS) — add NODE_OPTIONS: --use-system-ca to the env block in .mcp.json
[FAIL] Source control — authentication failed. Token needs repository:read scope.
### Build & Test
[SKIP] Skipped (--skip-build)
### Docker
[SKIP] Docker - no Dockerfile
---
Result: {N} FAIL, {M} WARN — {verdict}
Verdict:
.claude/plugins.json, .claude-plugins, or another file with plugin metadata (exact location depends on the Claude Code version — if none of these files exist → [SKIP] "Plugin registry not found — conflict detection skipped")hooks/validate-dispatch.sh exists in the plugin installation directory.
.claude/plugins/**/hooks/validate-dispatch.sh; if not found, try hooks/validate-dispatch.sh relative to CWD.~/.claude/settings.json contains a PostToolUse hook entry referencing validate-dispatch.~/.claude/settings.json (if accessible).validate-dispatch → [OK] "PostToolUse hook wired in ~/.claude/settings.json"After all primary checks complete, scan for deprecated config sections and emit advisories. These do NOT change the exit code — they're warnings only.
# Deprecated section detector
if grep -q '^### Extra labels' "$CLAUDE_MD" 2>/dev/null; then
echo "[WARN] Deprecated config section detected: ### Extra labels"
echo " Move any labels into ### PR Rules → Labels"
echo " (which fully supports the use case). See CHANGELOG.md."
fi
This warning does NOT change the exit code (no exit 1, no FAIL, no fail(), no return 1). It is purely advisory.
<...> in values = FAIL