Initial commit
This commit is contained in:
423
skills/cli-agent-runner/SKILL.md
Normal file
423
skills/cli-agent-runner/SKILL.md
Normal file
@@ -0,0 +1,423 @@
|
||||
---
|
||||
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:
|
||||
|
||||
1. Identify the root folder of the plugin skill and append the script name:
|
||||
```
|
||||
<path-to-skill-root-folder>/cli-agent-runner.sh
|
||||
```
|
||||
2. Store this path mentally for the rest of the conversation: <absolute-path-to-cli-agent-runner.sh>
|
||||
3. Use the absolute path in all subsequent commands
|
||||
|
||||
**Example:**
|
||||
```bash
|
||||
# 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:
|
||||
|
||||
1. **new** - Create a new session (optionally with an agent)
|
||||
2. **resume** - Resume an existing session by name
|
||||
3. **list** - List all sessions with their session IDs
|
||||
4. **list-agents** - List all available agent definitions
|
||||
5. **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:**
|
||||
```bash
|
||||
./cli-agent-runner.sh new <session-name> -p "<initial-prompt>"
|
||||
```
|
||||
|
||||
**Creating a new session with an agent:**
|
||||
```bash
|
||||
./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.
|
||||
|
||||
```bash
|
||||
cat prompt.md | ./cli-agent-runner.sh new <session-name>
|
||||
```
|
||||
|
||||
**Resuming an existing session:**
|
||||
```bash
|
||||
./cli-agent-runner.sh resume <session-name> -p "<resume-prompt>"
|
||||
```
|
||||
|
||||
**Example:**
|
||||
```bash
|
||||
# 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 `new` or `resume` command
|
||||
- **Important:** Note the bash_id returned by the Bash tool
|
||||
|
||||
**Example for new session:**
|
||||
```bash
|
||||
./cli-agent-runner.sh new <session-name> -p "<initial-prompt>"
|
||||
```
|
||||
|
||||
**Example for new session with agent:**
|
||||
```bash
|
||||
./cli-agent-runner.sh new <session-name> --agent <agent-name> -p "<initial-prompt>"
|
||||
```
|
||||
|
||||
**Example for resuming session:**
|
||||
```bash
|
||||
./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:**
|
||||
```bash
|
||||
# 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.
|
||||
|
||||
```bash
|
||||
./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.
|
||||
|
||||
```bash
|
||||
./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 `--agent` flag 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.
|
||||
|
||||
```bash
|
||||
./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:
|
||||
|
||||
1. **Via `-p` flag only:** `./cli-agent-runner.sh new architect -p "Your prompt here"`
|
||||
2. **Via stdin only:** `echo "Your prompt" | ./cli-agent-runner.sh new architect`
|
||||
3. **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:**
|
||||
```bash
|
||||
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 `resume` instead
|
||||
- Resuming session that doesn't exist → Use `new` instead
|
||||
|
||||
- **Agent errors:**
|
||||
- Agent definition not found
|
||||
- Invalid agent configuration
|
||||
|
||||
- **Prompt errors:**
|
||||
- No prompt provided (neither `-p` nor stdin)
|
||||
|
||||
- **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
|
||||
|
||||
1. **Session naming:** Use descriptive names like `architect`, `reviewer`, `dev-agent`, `po-agent`
|
||||
2. **Agent discovery:** Use `list-agents` to discover available agents before creating sessions
|
||||
3. **Agent selection:** Use agents for specialized behavior, skip for generic tasks
|
||||
4. **Background execution:** Use for long-running tasks (>1 minute expected)
|
||||
5. **Synchronous execution:** Use for quick tasks (<1 minute expected)
|
||||
6. **Polling interval:** Start with 60 seconds, adjust based on expected task duration
|
||||
7. **Resume strategy:** Use meaningful resume prompts that build on previous work
|
||||
|
||||
## Example Workflow
|
||||
|
||||
```bash
|
||||
# 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:**
|
||||
```bash
|
||||
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.
|
||||
Reference in New Issue
Block a user