Skills project-manager-agent
Monitors active sub-agents, detects stalls, provides status updates, and steers stuck agents via sessions_send.
git clone https://github.com/openclaw/skills
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/austindixson/project-manager-agent" ~/.claude/skills/clawdbot-skills-project-manager-agent && rm -rf "$T"
skills/austindixson/project-manager-agent/SKILL.mdProject Manager Agent
Description
Monitors active sub-agents, detects stalls, provides status updates, and steers stuck agents via sessions_send.
Project Manager Agent
This skill provides oversight for your OpenClaw sub-agents. It proactively checks the status of running sub-agents, identifies potential stalls or failures, and can steer stalled sub-agents by sending a continue message via the sessions_send tool.
Usage
Running the monitor
python3 <skill-dir>/scripts/project_manager.py
Options
: Minutes after which a sub-agent is considered stalled (default from config or 10).--staleness_threshold_minutes <int>
: Check all sessions, not just subagents of the current main session.--check_all_sessions
: Print human summary then a JSON line with--json
,stalledSessionKeys
, andsteerMessage
for agent steering.summary
: Output all stalled keys (ignore 15-minute cooldown).--no_cooldown
: Record these session keys as just steered (for cooldown). Run after calling sessions_send.--record-steered KEY [KEY ...]
Example (Status check, human-only)
python3 /Users/ghost/.openclaw/workspace/skills/project-manager-agent/scripts/project_manager.py --staleness_threshold_minutes 15
Example (Agent run with steering)
python3 /Users/ghost/.openclaw/workspace/skills/project-manager-agent/scripts/project_manager.py --json --staleness_threshold_minutes 10
Then parse the last line (JSON), call sessions_send for each key in
stalledSessionKeys, and optionally run --record-steered <keys>.
Features
- Sub-agent Monitoring: Lists all active sub-agents (file-based; no gateway API in the script).
- Stall Detection: Flags sub-agents that haven't updated their status within a configurable time period.
- Failure Identification: Reports on sub-agents that have aborted their last run.
- Status Reports: Human-readable summaries and optional JSON with
for steering.stalledSessionKeys - Automated Steering: When you run the skill with
, parse the output and call sessions_send for each stalled session (see Agent instructions below).--json
Agent instructions (mandatory when running this skill)
When the user or a cron asks you to run the project-manager-agent skill:
- Run the script with
(and existing args as needed):--jsonpython3 /Users/ghost/.openclaw/workspace/skills/project-manager-agent/scripts/project_manager.py --json --staleness_threshold_minutes 10 - Parse the script stdout: The last line is a single JSON object with
,stalledSessionKeys
, andsteerMessage
. Parse it (e.g. take the last line that starts withsummary
and ends with{
).} - If
is non-empty:stalledSessionKeys- For each session key in
(cap at 5 per run to avoid spam), call sessions_send(stalledSessionKeys
,sessionKey
from JSON orsteerMessage
,"Please continue working on your task."
) (fire-and-forget;0
).timeoutSeconds=0 - Optionally run the script again to record cooldown so the same session is not steered again for 15 minutes:
python3 /Users/ghost/.openclaw/workspace/skills/project-manager-agent/scripts/project_manager.py --record-steered <key1> <key2> ...
- For each session key in
- Reply to the user/cron with the status summary (the human-readable part of the script output) and, if you steered any, add: "Steered N stalled subagent(s)."
You have access to sessions_list and sessions_send; the script only produces the list of session keys to steer. Steering is done by you in the same turn via the sessions_send tool.
Config (optional)
See
config.json for: staleness_threshold_minutes, steer_cooldown_minutes, steer_message, max_steer_per_run.
Integration as a Cron Job
This skill is ideal for a cron job, running periodically (e.g., every 5 minutes). The agent runs the script with
--json, steers stalled subagents via sessions_send, and announces the status.
Example Cron Job Payload:
{ "payload": { "kind": "agentTurn", "message": "Run project-manager-agent skill and report status of all sub-agents.", "model": "openrouter/google/gemini-2.5-flash", "thinking": "low", "timeoutSeconds": 60 }, "schedule": { "kind": "every", "everyMs": 300000 }, "delivery": { "mode": "announce" }, "sessionTarget": "isolated", "name": "Project Manager (Sub-agent Monitor)" }
version: 0.2.0