Files
gh-joshuaoliphant-claude-pl…/skills/adw-bootstrap/docs/principles.md
2025-11-30 08:28:42 +08:00

301 lines
8.5 KiB
Markdown

# AI Developer Workflows (ADWs): Core Principles
## What Are ADWs?
**AI Developer Workflows (ADWs)** are executable scripts that combine deterministic code with non-deterministic, compute-scalable AI agents to perform complex development tasks programmatically.
Instead of directly modifying code yourself, you **template your engineering patterns** and **teach agents how to operate your codebase**. This allows you to scale impact by scaling compute, not just effort.
## The Two-Layer Architecture
### Agentic Layer
**Purpose**: Template engineering patterns and teach agents how to operate
**Components**:
- `adws/` - AI Developer Workflow scripts and modules
- `.claude/` - Slash commands, skills, hooks, agent configurations
- `specs/` - Implementation plans and specifications
- `agents/` - Agent execution outputs (observability)
**Role**: Provides the programmatic interface for AI-driven development
### Application Layer
**Purpose**: The actual application code that agents operate on
**Components**:
- `apps/`, `src/`, `lib/`, etc. - Your application code
- `tests/` - Your test suites
- Application-specific configuration and resources
**Role**: What the agents modify, test, and deploy
## The 12 Leverage Points of Agentic Coding
### In Agent (Core Four)
These directly control agent behavior during execution:
1. **Context** - What information the agent has access to
2. **Model** - Which AI model processes the prompt (Sonnet vs Opus)
3. **Prompt** - The specific instructions given to the agent
4. **Tools** - What actions the agent can take (Read, Write, Bash, etc.)
### Through Agent (Structural Eight)
These shape how you structure work for agents:
5. **Standard Output** - Structured agent outputs for observability
6. **Types** - Data models and schemas that define interfaces
7. **Docs** - Documentation that provides context to agents
8. **Tests** - Validation that ensures agent work is correct
9. **Architecture** - System design that guides agent decisions
10. **Plans** - Specifications that break work into steps
11. **Templates** - Reusable prompt patterns (slash commands)
12. **AI Developer Workflows** - Orchestrated multi-agent processes
## Core Patterns
### Pattern 1: Subprocess-Based Execution
**When to use**: Simple prompts, shell compatibility, lower dependencies
```python
from agent import prompt_claude_code, AgentPromptRequest
request = AgentPromptRequest(
prompt="Analyze this module",
adw_id="abc12345",
agent_name="analyzer",
model="sonnet",
output_file="agents/abc12345/analyzer/cc_raw_output.jsonl"
)
response = prompt_claude_code(request)
if response.success:
print(response.output)
```
**Characteristics**:
- Invokes Claude Code CLI as subprocess
- Streams output to JSONL files
- Parses results into structured JSON
- Implements retry logic for transient failures
- Works with both subscription and API modes
### Pattern 2: SDK-Based Execution
**When to use**: Interactive sessions, better type safety, async workflows
```python
from agent_sdk import simple_query
response = await simple_query("Implement feature X")
print(response)
```
**Characteristics**:
- Native Python async/await
- Typed message objects
- SDK-specific error handling
- Interactive session support
- Better IDE integration
### Pattern 3: Template-Based Development
**Slash commands** are reusable prompt templates:
```markdown
# .claude/commands/chore.md
Create a plan using this format:
## Variables
adw_id: $1
description: $2
## Instructions
1. Analyze the codebase starting with README.md
2. Create a step-by-step plan
3. Save to specs/chore-{adw_id}-{name}.md
```
Execute: `./adws/adw_slash_command.py /chore abc123 "add logging"`
### Pattern 4: Workflow Orchestration
**Compound workflows** chain multiple agent invocations:
```python
# Phase 1: Planning
chore_response = execute_template(
slash_command="/chore",
args=[adw_id, description]
)
# Extract plan path from response
plan_path = extract_plan_path(chore_response.output)
# Phase 2: Implementation
implement_response = execute_template(
slash_command="/implement",
args=[plan_path]
)
```
## Observability First
Every ADW execution creates structured outputs:
```
agents/{adw_id}/{agent_name}/
cc_raw_output.jsonl # Raw streaming JSONL
cc_raw_output.json # Parsed JSON array
cc_final_object.json # Final result object
custom_summary_output.json # High-level summary
```
**Why this matters**:
- Debug agent behavior by reading raw outputs
- Programmatically process results from JSON
- Track lineage with unique IDs
- Audit what agents did and why
## Progressive Enhancement
Start simple, add complexity as needed:
### Minimal (Always)
- Core subprocess execution (`agent.py`)
- Basic prompt wrapper (`adw_prompt.py`)
- Essential slash commands (chore, implement)
- Spec directory for plans
**Good for**: Proof of concepts, simple automation, getting started
### Enhanced (Recommended)
- SDK support (`agent_sdk.py`)
- Compound workflows (`adw_chore_implement.py`)
- Rich slash commands (feature, test, prime)
- Slash command executor
**Good for**: Active development, team collaboration, feature automation
### Scaled (Production)
- State management across phases
- Git worktree isolation
- Trigger systems (webhooks, cron)
- Testing infrastructure
- Comprehensive observability
**Good for**: Production systems, enterprise teams, complex SDLC
## Best Practices
### 1. Environment Safety
```python
# Filter environment variables
def get_safe_subprocess_env():
return {
"ANTHROPIC_API_KEY": os.getenv("ANTHROPIC_API_KEY"),
"HOME": os.getenv("HOME"),
"PATH": os.getenv("PATH"),
# Only essential variables
}
```
**Why**: Prevents environment variable leakage, security isolation
### 2. Retry Logic
```python
def prompt_claude_code_with_retry(request, max_retries=3):
for attempt in range(max_retries + 1):
response = prompt_claude_code(request)
if response.success or response.retry_code == RetryCode.NONE:
return response
time.sleep(retry_delays[attempt])
```
**Why**: Handle transient failures (network issues, rate limits, timeouts)
### 3. Error Truncation
```python
def truncate_output(output, max_length=500):
if len(output) <= max_length:
return output
return output[:max_length-15] + "... (truncated)"
```
**Why**: Prevent console flooding from huge error messages
### 4. Unique ID Tracking
```python
def generate_short_id():
return str(uuid.uuid4())[:8]
adw_id = generate_short_id() # abc12345
# All outputs go to: agents/abc12345/
```
**Why**: Track execution lineage, associate outputs, debug flows
### 5. Type Safety
```python
from pydantic import BaseModel
class AgentPromptRequest(BaseModel):
prompt: str
adw_id: str
model: Literal["sonnet", "opus"]
output_file: str
```
**Why**: Catch errors early, better IDE support, self-documenting
## Usage Modes
### Mode A: Claude Max Subscription
- User has Claude Max subscription
- No API key needed
- Claude Code authenticates through subscription
- Perfect for interactive development
### Mode B: API-Based Automation
- Requires `ANTHROPIC_API_KEY`
- Enables headless automation
- Required for CI/CD, webhooks, cron jobs
- Programmatic agent execution
**Both modes work with the same ADW infrastructure.** The code detects which mode to use automatically.
## Philosophy: Scale Compute, Not Just Effort
Traditional development: **You write the code**
- Linear scaling: More features = more time
- Bottleneck: Your available hours
- Hard to parallelize
Agentic development: **You template patterns, agents write the code**
- Compute scaling: More features = more parallel agents
- Bottleneck: Compute availability
- Easy to parallelize
**This is the fundamental shift.** ADWs enable this paradigm.
## Key Insights
1. **Separation of Concerns**: Agentic layer (how to operate) vs Application layer (what to operate on)
2. **Progressive Enhancement**: Start minimal, add features as needed, scale when required
3. **Observability**: Structured outputs make agent behavior transparent and debuggable
4. **Intelligence Over Templating**: Provide patterns, let Claude adapt intelligently
5. **Mode Flexibility**: Support both interactive (subscription) and automated (API) workflows
6. **Compute as Leverage**: Scale impact by scaling compute, not just working harder
## Further Reading
- `architecture.md` - Detailed architecture patterns
- `usage-modes.md` - Deep dive on subscription vs API modes
- Reference implementations in `reference/` directory
- Main skill logic in `SKILL.md`