| name | cli-agent-runner |
| description | Use this skill when you need to invoke another Claude Code session via the cli-agent-runner.sh script to perform specialized, potentially long-running tasks in a simplified way. This wrapper handles session management, result extraction, and can be run in background with polling support. |
CLI Agent Runner Skill
Intro
This skill provides guidance on using the cli-agent-runner.sh script to delegate work to Claude Code sessions.
Use this when you need to:
- Delegate a task to a specialized session for long-running operations
- Resume tasks later using a simple session name (no session ID management needed)
- Run sessions in the background with polling support
- Get clean result output without manual JSON parsing
- Optionally use agent definitions for specialized behavior
Key Benefits:
- Session names instead of session IDs (simpler to track and resume)
- Automatic session file management in
.cli-agent-runner/agent-sessions/directory - Built-in result extraction (no need for head/tail/jq commands)
- Clean output to stdout, errors to stderr
- Optional agent associations for specialized capabilities
Terminology
- Session: A named, running conversation with Claude Code
- Agent: A reusable configuration/definition that provides specialized behavior for sessions
- Session Name: The unique identifier you give to a conversation (e.g.,
architect,reviewer) - Agent Name: The identifier for a reusable agent definition (e.g.,
system-architect,security-reviewer)
Variables
The following variables are used in the commands and instructions:
<session-name>: A unique identifier for the session (alphanumeric, dash, underscore only; max 30 chars)<agent-name>: Optional agent definition to use for the session<initial-prompt>: The prompt or task description for a new session<resume-prompt>: The prompt or task description to continue an existing session's work<POLL_INTERVAL>: The interval in seconds to wait between polling attempts. Default is 60 seconds.
Script Location
IMPORTANT: The cli-agent-runner.sh script is located in the same directory as this SKILL.md file.
So it is in the root folder of the skill plugin.
Before using the script for the first time in a conversation, you MUST locate it:
- Identify the root folder of the plugin skill and append the script name:
<path-to-skill-root-folder>/cli-agent-runner.sh - Store this path mentally for the rest of the conversation: <absolute-path-to-cli-agent-runner.sh>
- Use the absolute path in all subsequent commands
Example:
# Use that exact path in all commands:
<absolute-path-to-cli-agent-runner.sh> new <session-name> -p "<prompt>"
Note: In all examples below, cli-agent-runner.sh represents the absolute path <absolute-path-to-cli-agent-runner.sh> you discovered. Replace it with the actual path when executing commands.
Commands Overview
The cli-agent-runner.sh supports five commands:
- new - Create a new session (optionally with an agent)
- resume - Resume an existing session by name
- list - List all sessions with their session IDs
- list-agents - List all available agent definitions
- clean - Remove all sessions
Usage Patterns
Pattern 1: Synchronous Execution (Wait for Completion)
Use this when you want to wait for the session to complete and get the result immediately.
Creating a new session:
./cli-agent-runner.sh new <session-name> -p "<initial-prompt>"
Creating a new session with an agent:
./cli-agent-runner.sh new <session-name> --agent <agent-name> -p "<initial-prompt>"
Creating a new session with prompt from file/stdin:
This should be considered when the prompt is large or complex or already a prompt file exists potentially created by another session.
cat prompt.md | ./cli-agent-runner.sh new <session-name>
Resuming an existing session:
./cli-agent-runner.sh resume <session-name> -p "<resume-prompt>"
Example:
# Create new session with agent
./cli-agent-runner.sh new architect --agent system-architect -p "Create a high-level architecture document for a user authentication system"
# The script blocks until completion and outputs the result
# Output: <result from session>
# Resume the session later (agent association is remembered)
./cli-agent-runner.sh resume architect -p "Add API endpoint specifications to the architecture"
Pattern 2: Background Execution with Polling
Use this when you want to start the session in the background and poll for completion.
Instructions:
1. Start the session in the background:
- Use Bash tool with
run_in_background: true - Use either
neworresumecommand - Important: Note the bash_id returned by the Bash tool
Example for new session:
./cli-agent-runner.sh new <session-name> -p "<initial-prompt>"
Example for new session with agent:
./cli-agent-runner.sh new <session-name> --agent <agent-name> -p "<initial-prompt>"
Example for resuming session:
./cli-agent-runner.sh resume <session-name> -p "<resume-prompt>"
2. Initial Polling Wait:
- Use Bash tool (NOT background):
sleep <POLL_INTERVAL> - Default POLL_INTERVAL is 60 seconds
3. Check if background process is still running:
- Use BashOutput tool with the bash_id from step 1
- The tool returns shell status showing if process is running or completed
- If status shows still running: continue to step 4
- If status shows completed: continue to step 5
- Do NOT use: kill -0, pgrep, ps, or any other process checking commands
4. Polling Wait Loop:
- Use Bash tool (NOT background):
sleep <POLL_INTERVAL> - Return to step 3
5. Process Completed - Get Results:
- The result is already captured in the Bash tool's output when the process completes
- Simply read the output from the completed Bash execution
- The output will be the session's result (already extracted by the script)
Full Background Example:
# Step 1: Start in background
./cli-agent-runner.sh new architect --agent system-architect -p "Design authentication system"
# Returns bash_id: abc123
# Step 2: Initial wait
sleep 60
# Step 3: Check status
# Use BashOutput with bash_id: abc123
# If status: running, continue to step 4
# If status: completed, read the output - it contains the result
# Step 4: If still running, wait and check again
sleep 60
# Return to step 3
Pattern 3: Listing Sessions
Use this to see all existing sessions and their status.
./cli-agent-runner.sh list
Output format:
session-name (session: session-id)
architect (session: 3db5dca9-6829-4cb7-a645-c64dbd98244d)
reviewer (session: initializing)
- "initializing" means the session file exists but hasn't started yet (empty file)
- "unknown" means the session ID couldn't be extracted
- Otherwise, shows the actual session ID
Pattern 4: Listing Available Agent Definitions
Use this to discover what agent definitions are available before creating a session.
./cli-agent-runner.sh list-agents
Output format:
agent-name:
description
---
next-agent-name:
description
---
another-agent-name:
description
Example output:
code-reviewer:
Reviews code for best practices, bugs, and potential improvements
---
documentation-writer:
Creates comprehensive technical documentation and guides
---
system-architect:
Expert in designing scalable system architectures
Use Case:
- Discover available agents before creating a new session
- Understand what specialized capabilities are available
- Choose the appropriate agent for your task
Important Notes:
- Each agent definition is separated by
---for clear parsing - Agent names can be used with
--agentflag when creating sessions - If no agents exist, outputs: "No agent definitions found"
Pattern 5: Cleaning All Sessions
Use this to remove all sessions and start fresh.
./cli-agent-runner.sh clean
Behavior:
- Removes the entire
.cli-agent-runner/agent-sessions/directory - All session files and history are permanently deleted
- No confirmation prompt - immediate deletion
- Safe to run even if no sessions exist
Output:
All sessions removed
or
No sessions to remove
Prompt Input Methods
The script supports flexible prompt input:
- Via
-pflag only:./cli-agent-runner.sh new architect -p "Your prompt here" - Via stdin only:
echo "Your prompt" | ./cli-agent-runner.sh new architect - Both combined:
cat file.md | ./cli-agent-runner.sh new architect -p "Context:"
Concatenation: If both -p and stdin are provided, they are concatenated with -p content first, then a newline, then stdin content. This is useful for adding context before piping in a file.
IMPORTANT STDIN should be used if it is neccessarry to provide a a large complex promt to the agent or the result of another command output. e.g. tree for listing a directory structure.
Example:
cat requirements.md | ./cli-agent-runner.sh new architect -p "Create an architecture document based on these requirements:"
Results in prompt:
Create an architecture document based on these requirements:
<contents of requirements.md>
Error Handling
All errors are output to stderr and the script exits with code 1:
Session name validation errors:
- Empty name
- Name too long (>30 characters)
- Invalid characters (only alphanumeric, dash, underscore allowed)
Session lifecycle errors:
- Creating session that already exists → Use
resumeinstead - Resuming session that doesn't exist → Use
newinstead
- Creating session that already exists → Use
Agent errors:
- Agent definition not found
- Invalid agent configuration
Prompt errors:
- No prompt provided (neither
-pnor stdin)
- No prompt provided (neither
Execution errors:
- Claude command failed
- Could not extract session_id or result
Session Files
- Location:
.cli-agent-runner/agent-sessions/<session-name>.jsonl - Metadata:
.cli-agent-runner/agent-sessions/<session-name>.meta.json(tracks agent association) - Format: Line-delimited JSON (JSONL)
- Management: Fully automatic - you don't need to manage these files
Agent Definitions
- Location:
.cli-agent-runner/agents/<agent-name>.json(configuration) - Prompts:
.cli-agent-runner/agents/<agent-name>.prompt.md(system prompt) - Format: Hybrid JSON + Markdown
- Usage: Optional - sessions can run without agents
Best Practices
- Session naming: Use descriptive names like
architect,reviewer,dev-agent,po-agent - Agent discovery: Use
list-agentsto discover available agents before creating sessions - Agent selection: Use agents for specialized behavior, skip for generic tasks
- Background execution: Use for long-running tasks (>1 minute expected)
- Synchronous execution: Use for quick tasks (<1 minute expected)
- Polling interval: Start with 60 seconds, adjust based on expected task duration
- Resume strategy: Use meaningful resume prompts that build on previous work
Example Workflow
# 1. Discover available agents
./cli-agent-runner.sh list-agents
# Output shows:
# system-architect:
# Expert in designing scalable system architectures
# ---
# code-reviewer:
# Reviews code for best practices, bugs, and potential improvements
# ---
# documentation-writer:
# Creates comprehensive technical documentation and guides
# 2. Create new architect session with agent in background
# Use Bash tool with run_in_background: true
./cli-agent-runner.sh new architect --agent system-architect -p "Create architecture for microservices-based e-commerce system"
# Note bash_id: xyz789
# 3. Wait 60 seconds
sleep 60
# 4. Check if completed using BashOutput with bash_id xyz789
# Status: running
# 5. Wait another 60 seconds
sleep 60
# 6. Check again with BashOutput
# Status: completed
# Output contains the architecture document result
# 7. Later, resume the session for additional work (agent association remembered)
./cli-agent-runner.sh resume architect -p "Add security considerations to the architecture"
# 8. List all sessions to see status
./cli-agent-runner.sh list
# Output: architect (session: 3db5dca9-6829-4cb7-a645-c64dbd98244d)
Important: Working Directory Requirements
The cli-agent-runner.sh script must be run from your project root where the .cli-agent-runner/ directory exists or will be created.
Common Pitfall
If you change directories during your workflow, the script will look for .cli-agent-runner/ relative to your current location and may fail silently.
Example - What NOT to do:
cd .cli-agent-runner/agent-sessions # Changed directory
cli-agent-runner.sh clean # ❌ Returns "No sessions to remove"
# Script looks for: .cli-agent-runner/agent-sessions/.cli-agent-runner/agent-sessions/
Example - Correct approach:
cd /path/to/your/project # ✅ Back to project root
cli-agent-runner.sh clean # ✅ Works correctly
# Script looks for: /path/to/your/project/.cli-agent-runner/agent-sessions/
Best Practice
Always use absolute paths when running the script from non-root directories:
# Safe - works from any directory
cd /path/to/your/project && /path/to/cli-agent-runner.sh clean
# Or explicitly change to project root first
cd "$(git rev-parse --show-toplevel)" && cli-agent-runner.sh clean
Shell Persistence Note
In background shells or long-running terminal sessions, cd commands persist across multiple commands. Always verify your working directory with pwd before running cli-agent-runner.sh
commands.
## Additional Documentation
**Creating Custom Agents**: See `references/EXAMPLE-AGENTS.md` for a complete agent definition example showing how to create agents with JSON configuration, system prompts, and MCP server integration.
**Architecture & Design Details**: See `references/CLI-AGENT-RUNNER.md` for comprehensive documentation on the CLI Agent Runner's architecture, design philosophy, directory structure, and advanced usage patterns.