Claude Code Plugins

Community-maintained marketplace

Feedback

Design gateway scripts as entry points for agentic coding. Use when creating CLI entry points for agents, designing subprocess-based agent invocation, or building script interfaces for agentic workflows.

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name gateway-script-design
description Design gateway scripts as entry points for agentic coding. Use when creating CLI entry points for agents, designing subprocess-based agent invocation, or building script interfaces for agentic workflows.
allowed-tools Read, Grep, Glob

Gateway Script Design Skill

Guide creation of gateway scripts - the entry points into agentic coding.

When to Use

  • Creating new CLI entry points for agents
  • Building programmatic agent invocation
  • Designing composed workflows
  • Setting up automation scripts

Core Concept

"This script is the gateway into agentic coding. It's distinctly different from any other type of code - it's calling an agent."

Gateway scripts move you from conversation to automation.

Three Gateway Patterns

Pattern 1: Direct Prompt

Execute ad-hoc prompts:

# adw_prompt.py
@click.command()
@click.argument("prompt")
@click.option("--model", default="opus")
def main(prompt: str, model: str):
    request = AgentPromptRequest(
        prompt=prompt,
        model=model,
        agent_name="oneoff"
    )
    response = prompt_claude_code(request)

Use case: Quick one-offs, testing, exploration

Pattern 2: Slash Command Wrapper

Execute slash commands programmatically:

# adw_slash_command.py
@click.command()
@click.argument("command")
@click.argument("args", nargs=-1)
def main(command: str, args: tuple):
    request = AgentTemplateRequest(
        slash_command=f"/{command}",
        args=list(args)
    )
    response = execute_template(request)

Use case: Scheduled commands, triggers, external integration

Pattern 3: Composed Workflow

Chain multiple agents:

# adw_chore_implement.py
def main(description: str):
    # Phase 1: Plan
    plan_response = execute_template("/chore", description)
    plan_path = extract_plan_path(plan_response)

    # Phase 2: Implement
    impl_response = execute_template("/implement", plan_path)
    return impl_response

Use case: Multi-step automation, full workflows

Design Checklist

1. CLI Interface

import click

@click.command()
@click.argument("input", required=True)
@click.option("--model", default="opus", help="Model to use")
@click.option("--verbose", is_flag=True, help="Verbose output")
def main(input: str, model: str, verbose: bool):
    ...

2. Unique Identification

def generate_short_id() -> str:
    return uuid.uuid4().hex[:8]

adw_id = generate_short_id()  # e.g., "a1b2c3d4"

3. Output Organization

output_dir = f"agents/{adw_id}/{agent_name}"
os.makedirs(output_dir, exist_ok=True)

output_file = f"{output_dir}/cc_raw_output.jsonl"

4. Safe Environment

def get_safe_env() -> dict:
    return {
        "ANTHROPIC_API_KEY": os.getenv("ANTHROPIC_API_KEY"),
        "PATH": os.getenv("PATH"),
        # Only essential vars
    }

5. Error Handling

try:
    response = prompt_claude_code(request)
except TimeoutError:
    log_error("Agent timed out")
    sys.exit(1)
except ExecutionError as e:
    log_error(f"Execution failed: {e}")
    sys.exit(1)

6. Rich Output

from rich.console import Console
from rich.panel import Panel

console = Console()

console.print(Panel(
    response.output,
    title=f"[bold green]{agent_name}[/]",
    border_style="green"
))

Request/Response Models

class AgentPromptRequest(BaseModel):
    prompt: str
    adw_id: str
    model: str = "opus"
    agent_name: str = "oneoff"
    output_file: Optional[str] = None

class AgentPromptResponse(BaseModel):
    output: str
    success: bool
    error: Optional[str] = None
    output_file: str

Output File Structure

Every gateway produces:

agents/{adw_id}/{agent_name}/
├── cc_raw_output.jsonl     # Streaming messages
├── cc_raw_output.json      # Parsed array
├── cc_final_object.json    # Last message
└── custom_summary.json     # Metadata

Key Memory References

  • @gateway-script-patterns.md - Pattern examples
  • @agentic-layer-structure.md - Where scripts live
  • @programmable-claude-patterns.md - CLI invocation

Output Format

## Gateway Script Design

**Script Name:** adw_{purpose}.py
**Pattern:** [Direct | Wrapper | Composed]

### CLI Interface
- Arguments: {required args}
- Options: --model, --verbose

### Agent Configuration
- Name: {agent_name}
- Model: opus (default)
- Output: agents/{adw_id}/{agent_name}/

### Execution Flow
1. Parse arguments
2. Generate ADW ID
3. Create output directory
4. Build request
5. Execute agent
6. Handle response
7. Display results

### Error Handling
- Timeout: Log and exit 1
- Execution error: Log reason and exit 1
- Success: Display panel with results

### Files Generated
- cc_raw_output.jsonl
- cc_raw_output.json
- cc_final_object.json
- custom_summary.json

Anti-Patterns

  • Passing full environment to subprocess
  • Not generating unique IDs (collision risk)
  • No error handling (silent failures)
  • Inline output instead of files (not auditable)
  • No CLI interface (hard to use)

Version History

  • v1.0.0 (2025-12-26): Initial release

Last Updated

Date: 2025-12-26 Model: claude-opus-4-5-20251101