chore: Remove openspec from tracking and add to gitignore

- Add openspec/ to .gitignore
- Keep local files but exclude from version control
This commit is contained in:
Luong NGUYEN
2025-12-26 13:45:15 +01:00
parent bb2a0fda42
commit 31e779c0e5
43 changed files with 1 additions and 3066 deletions
+1
View File
@@ -64,3 +64,4 @@ __pycache__/
dist/
build/
blog-post/
openspec/
-456
View File
@@ -1,456 +0,0 @@
# OpenSpec Instructions
Instructions for AI coding assistants using OpenSpec for spec-driven development.
## TL;DR Quick Checklist
- Search existing work: `openspec spec list --long`, `openspec list` (use `rg` only for full-text search)
- Decide scope: new capability vs modify existing capability
- Pick a unique `change-id`: kebab-case, verb-led (`add-`, `update-`, `remove-`, `refactor-`)
- Scaffold: `proposal.md`, `tasks.md`, `design.md` (only if needed), and delta specs per affected capability
- Write deltas: use `## ADDED|MODIFIED|REMOVED|RENAMED Requirements`; include at least one `#### Scenario:` per requirement
- Validate: `openspec validate [change-id] --strict` and fix issues
- Request approval: Do not start implementation until proposal is approved
## Three-Stage Workflow
### Stage 1: Creating Changes
Create proposal when you need to:
- Add features or functionality
- Make breaking changes (API, schema)
- Change architecture or patterns
- Optimize performance (changes behavior)
- Update security patterns
Triggers (examples):
- "Help me create a change proposal"
- "Help me plan a change"
- "Help me create a proposal"
- "I want to create a spec proposal"
- "I want to create a spec"
Loose matching guidance:
- Contains one of: `proposal`, `change`, `spec`
- With one of: `create`, `plan`, `make`, `start`, `help`
Skip proposal for:
- Bug fixes (restore intended behavior)
- Typos, formatting, comments
- Dependency updates (non-breaking)
- Configuration changes
- Tests for existing behavior
**Workflow**
1. Review `openspec/project.md`, `openspec list`, and `openspec list --specs` to understand current context.
2. Choose a unique verb-led `change-id` and scaffold `proposal.md`, `tasks.md`, optional `design.md`, and spec deltas under `openspec/changes/<id>/`.
3. Draft spec deltas using `## ADDED|MODIFIED|REMOVED Requirements` with at least one `#### Scenario:` per requirement.
4. Run `openspec validate <id> --strict` and resolve any issues before sharing the proposal.
### Stage 2: Implementing Changes
Track these steps as TODOs and complete them one by one.
1. **Read proposal.md** - Understand what's being built
2. **Read design.md** (if exists) - Review technical decisions
3. **Read tasks.md** - Get implementation checklist
4. **Implement tasks sequentially** - Complete in order
5. **Confirm completion** - Ensure every item in `tasks.md` is finished before updating statuses
6. **Update checklist** - After all work is done, set every task to `- [x]` so the list reflects reality
7. **Approval gate** - Do not start implementation until the proposal is reviewed and approved
### Stage 3: Archiving Changes
After deployment, create separate PR to:
- Move `changes/[name]/``changes/archive/YYYY-MM-DD-[name]/`
- Update `specs/` if capabilities changed
- Use `openspec archive <change-id> --skip-specs --yes` for tooling-only changes (always pass the change ID explicitly)
- Run `openspec validate --strict` to confirm the archived change passes checks
## Before Any Task
**Context Checklist:**
- [ ] Read relevant specs in `specs/[capability]/spec.md`
- [ ] Check pending changes in `changes/` for conflicts
- [ ] Read `openspec/project.md` for conventions
- [ ] Run `openspec list` to see active changes
- [ ] Run `openspec list --specs` to see existing capabilities
**Before Creating Specs:**
- Always check if capability already exists
- Prefer modifying existing specs over creating duplicates
- Use `openspec show [spec]` to review current state
- If request is ambiguous, ask 12 clarifying questions before scaffolding
### Search Guidance
- Enumerate specs: `openspec spec list --long` (or `--json` for scripts)
- Enumerate changes: `openspec list` (or `openspec change list --json` - deprecated but available)
- Show details:
- Spec: `openspec show <spec-id> --type spec` (use `--json` for filters)
- Change: `openspec show <change-id> --json --deltas-only`
- Full-text search (use ripgrep): `rg -n "Requirement:|Scenario:" openspec/specs`
## Quick Start
### CLI Commands
```bash
# Essential commands
openspec list # List active changes
openspec list --specs # List specifications
openspec show [item] # Display change or spec
openspec validate [item] # Validate changes or specs
openspec archive <change-id> [--yes|-y] # Archive after deployment (add --yes for non-interactive runs)
# Project management
openspec init [path] # Initialize OpenSpec
openspec update [path] # Update instruction files
# Interactive mode
openspec show # Prompts for selection
openspec validate # Bulk validation mode
# Debugging
openspec show [change] --json --deltas-only
openspec validate [change] --strict
```
### Command Flags
- `--json` - Machine-readable output
- `--type change|spec` - Disambiguate items
- `--strict` - Comprehensive validation
- `--no-interactive` - Disable prompts
- `--skip-specs` - Archive without spec updates
- `--yes`/`-y` - Skip confirmation prompts (non-interactive archive)
## Directory Structure
```
openspec/
├── project.md # Project conventions
├── specs/ # Current truth - what IS built
│ └── [capability]/ # Single focused capability
│ ├── spec.md # Requirements and scenarios
│ └── design.md # Technical patterns
├── changes/ # Proposals - what SHOULD change
│ ├── [change-name]/
│ │ ├── proposal.md # Why, what, impact
│ │ ├── tasks.md # Implementation checklist
│ │ ├── design.md # Technical decisions (optional; see criteria)
│ │ └── specs/ # Delta changes
│ │ └── [capability]/
│ │ └── spec.md # ADDED/MODIFIED/REMOVED
│ └── archive/ # Completed changes
```
## Creating Change Proposals
### Decision Tree
```
New request?
├─ Bug fix restoring spec behavior? → Fix directly
├─ Typo/format/comment? → Fix directly
├─ New feature/capability? → Create proposal
├─ Breaking change? → Create proposal
├─ Architecture change? → Create proposal
└─ Unclear? → Create proposal (safer)
```
### Proposal Structure
1. **Create directory:** `changes/[change-id]/` (kebab-case, verb-led, unique)
2. **Write proposal.md:**
```markdown
# Change: [Brief description of change]
## Why
[1-2 sentences on problem/opportunity]
## What Changes
- [Bullet list of changes]
- [Mark breaking changes with **BREAKING**]
## Impact
- Affected specs: [list capabilities]
- Affected code: [key files/systems]
```
3. **Create spec deltas:** `specs/[capability]/spec.md`
```markdown
## ADDED Requirements
### Requirement: New Feature
The system SHALL provide...
#### Scenario: Success case
- **WHEN** user performs action
- **THEN** expected result
## MODIFIED Requirements
### Requirement: Existing Feature
[Complete modified requirement]
## REMOVED Requirements
### Requirement: Old Feature
**Reason**: [Why removing]
**Migration**: [How to handle]
```
If multiple capabilities are affected, create multiple delta files under `changes/[change-id]/specs/<capability>/spec.md`—one per capability.
4. **Create tasks.md:**
```markdown
## 1. Implementation
- [ ] 1.1 Create database schema
- [ ] 1.2 Implement API endpoint
- [ ] 1.3 Add frontend component
- [ ] 1.4 Write tests
```
5. **Create design.md when needed:**
Create `design.md` if any of the following apply; otherwise omit it:
- Cross-cutting change (multiple services/modules) or a new architectural pattern
- New external dependency or significant data model changes
- Security, performance, or migration complexity
- Ambiguity that benefits from technical decisions before coding
Minimal `design.md` skeleton:
```markdown
## Context
[Background, constraints, stakeholders]
## Goals / Non-Goals
- Goals: [...]
- Non-Goals: [...]
## Decisions
- Decision: [What and why]
- Alternatives considered: [Options + rationale]
## Risks / Trade-offs
- [Risk] → Mitigation
## Migration Plan
[Steps, rollback]
## Open Questions
- [...]
```
## Spec File Format
### Critical: Scenario Formatting
**CORRECT** (use #### headers):
```markdown
#### Scenario: User login success
- **WHEN** valid credentials provided
- **THEN** return JWT token
```
**WRONG** (don't use bullets or bold):
```markdown
- **Scenario: User login** ❌
**Scenario**: User login ❌
### Scenario: User login ❌
```
Every requirement MUST have at least one scenario.
### Requirement Wording
- Use SHALL/MUST for normative requirements (avoid should/may unless intentionally non-normative)
### Delta Operations
- `## ADDED Requirements` - New capabilities
- `## MODIFIED Requirements` - Changed behavior
- `## REMOVED Requirements` - Deprecated features
- `## RENAMED Requirements` - Name changes
Headers matched with `trim(header)` - whitespace ignored.
#### When to use ADDED vs MODIFIED
- ADDED: Introduces a new capability or sub-capability that can stand alone as a requirement. Prefer ADDED when the change is orthogonal (e.g., adding "Slash Command Configuration") rather than altering the semantics of an existing requirement.
- MODIFIED: Changes the behavior, scope, or acceptance criteria of an existing requirement. Always paste the full, updated requirement content (header + all scenarios). The archiver will replace the entire requirement with what you provide here; partial deltas will drop previous details.
- RENAMED: Use when only the name changes. If you also change behavior, use RENAMED (name) plus MODIFIED (content) referencing the new name.
Common pitfall: Using MODIFIED to add a new concern without including the previous text. This causes loss of detail at archive time. If you arent explicitly changing the existing requirement, add a new requirement under ADDED instead.
Authoring a MODIFIED requirement correctly:
1) Locate the existing requirement in `openspec/specs/<capability>/spec.md`.
2) Copy the entire requirement block (from `### Requirement: ...` through its scenarios).
3) Paste it under `## MODIFIED Requirements` and edit to reflect the new behavior.
4) Ensure the header text matches exactly (whitespace-insensitive) and keep at least one `#### Scenario:`.
Example for RENAMED:
```markdown
## RENAMED Requirements
- FROM: `### Requirement: Login`
- TO: `### Requirement: User Authentication`
```
## Troubleshooting
### Common Errors
**"Change must have at least one delta"**
- Check `changes/[name]/specs/` exists with .md files
- Verify files have operation prefixes (## ADDED Requirements)
**"Requirement must have at least one scenario"**
- Check scenarios use `#### Scenario:` format (4 hashtags)
- Don't use bullet points or bold for scenario headers
**Silent scenario parsing failures**
- Exact format required: `#### Scenario: Name`
- Debug with: `openspec show [change] --json --deltas-only`
### Validation Tips
```bash
# Always use strict mode for comprehensive checks
openspec validate [change] --strict
# Debug delta parsing
openspec show [change] --json | jq '.deltas'
# Check specific requirement
openspec show [spec] --json -r 1
```
## Happy Path Script
```bash
# 1) Explore current state
openspec spec list --long
openspec list
# Optional full-text search:
# rg -n "Requirement:|Scenario:" openspec/specs
# rg -n "^#|Requirement:" openspec/changes
# 2) Choose change id and scaffold
CHANGE=add-two-factor-auth
mkdir -p openspec/changes/$CHANGE/{specs/auth}
printf "## Why\n...\n\n## What Changes\n- ...\n\n## Impact\n- ...\n" > openspec/changes/$CHANGE/proposal.md
printf "## 1. Implementation\n- [ ] 1.1 ...\n" > openspec/changes/$CHANGE/tasks.md
# 3) Add deltas (example)
cat > openspec/changes/$CHANGE/specs/auth/spec.md << 'EOF'
## ADDED Requirements
### Requirement: Two-Factor Authentication
Users MUST provide a second factor during login.
#### Scenario: OTP required
- **WHEN** valid credentials are provided
- **THEN** an OTP challenge is required
EOF
# 4) Validate
openspec validate $CHANGE --strict
```
## Multi-Capability Example
```
openspec/changes/add-2fa-notify/
├── proposal.md
├── tasks.md
└── specs/
├── auth/
│ └── spec.md # ADDED: Two-Factor Authentication
└── notifications/
└── spec.md # ADDED: OTP email notification
```
auth/spec.md
```markdown
## ADDED Requirements
### Requirement: Two-Factor Authentication
...
```
notifications/spec.md
```markdown
## ADDED Requirements
### Requirement: OTP Email Notification
...
```
## Best Practices
### Simplicity First
- Default to <100 lines of new code
- Single-file implementations until proven insufficient
- Avoid frameworks without clear justification
- Choose boring, proven patterns
### Complexity Triggers
Only add complexity with:
- Performance data showing current solution too slow
- Concrete scale requirements (>1000 users, >100MB data)
- Multiple proven use cases requiring abstraction
### Clear References
- Use `file.ts:42` format for code locations
- Reference specs as `specs/auth/spec.md`
- Link related changes and PRs
### Capability Naming
- Use verb-noun: `user-auth`, `payment-capture`
- Single purpose per capability
- 10-minute understandability rule
- Split if description needs "AND"
### Change ID Naming
- Use kebab-case, short and descriptive: `add-two-factor-auth`
- Prefer verb-led prefixes: `add-`, `update-`, `remove-`, `refactor-`
- Ensure uniqueness; if taken, append `-2`, `-3`, etc.
## Tool Selection Guide
| Task | Tool | Why |
|------|------|-----|
| Find files by pattern | Glob | Fast pattern matching |
| Search code content | Grep | Optimized regex search |
| Read specific files | Read | Direct file access |
| Explore unknown scope | Task | Multi-step investigation |
## Error Recovery
### Change Conflicts
1. Run `openspec list` to see active changes
2. Check for overlapping specs
3. Coordinate with change owners
4. Consider combining proposals
### Validation Failures
1. Run with `--strict` flag
2. Check JSON output for details
3. Verify spec file format
4. Ensure scenarios properly formatted
### Missing Context
1. Read project.md first
2. Check related specs
3. Review recent archives
4. Ask for clarification
## Quick Reference
### Stage Indicators
- `changes/` - Proposed, not yet built
- `specs/` - Built and deployed
- `archive/` - Completed changes
### File Purposes
- `proposal.md` - Why and what
- `tasks.md` - Implementation steps
- `design.md` - Technical decisions
- `spec.md` - Requirements and behavior
### CLI Essentials
```bash
openspec list # What's in progress?
openspec show [item] # View details
openspec validate --strict # Is it correct?
openspec archive <change-id> [--yes|-y] # Mark complete (add --yes for automation)
```
Remember: Specs are truth. Changes are proposals. Keep them in sync.
@@ -1,163 +0,0 @@
# Design: Context Usage Tracking via Hook Pairs
## Context
Users need visibility into token consumption during Claude Code sessions. While Claude Code provides internal context management, users lack tools to:
- Track token usage per request
- Monitor cumulative context growth
- Understand when they're approaching context limits
The existing `Stop` hook example provides cumulative usage but not per-request deltas.
## Goals / Non-Goals
### Goals
- Document a reliable method to track per-request token consumption
- Provide a working example users can copy and modify
- Explain the methodology and its limitations clearly
- Use existing hook events (`UserPromptSubmit`, `Stop`) without requiring new capabilities
### Non-Goals
- Implement actual token counting (we use character-based estimation)
- Access internal Claude Code context metrics
- Modify Claude Code's behavior or internal state
- Track system prompt tokens (not in transcript)
## Decisions
### Decision 1: Use UserPromptSubmit + Stop Hook Pair
**What**: Use `UserPromptSubmit` as the "pre-message" hook and `Stop` as the "post-response" hook.
**Why**: These are the natural lifecycle points:
- `UserPromptSubmit` fires before the prompt is sent to the model
- `Stop` fires after Claude completes its response
**Alternatives Considered**:
| Option | Pros | Cons |
|--------|------|------|
| SessionStart + Stop | Captures full session | No per-request granularity |
| PreToolUse + PostToolUse | Captures tool overhead | Missing prompt/response tokens |
| UserPromptSubmit + Stop | Natural request boundaries | Requires temp file for state |
### Decision 2: Use Temp File for State Persistence
**What**: Store pre-message token count in a temp file keyed by session ID.
**Why**: Hooks are stateless processes; we need persistence between the two hook invocations.
**Implementation**:
```python
import tempfile
import os
def get_state_file(session_id: str) -> str:
return os.path.join(tempfile.gettempdir(), f"claude-tokens-{session_id}.json")
```
### Decision 3: Single Script with Mode Detection
**What**: One Python script handles both hooks, detecting mode via `hook_event_name`.
**Why**:
- Reduces file count and complexity
- Ensures consistent token calculation logic
- Easier for users to understand and modify
**Structure**:
```python
def main():
data = json.load(sys.stdin)
event = data.get("hook_event_name")
if event == "UserPromptSubmit":
record_pre_message_count(data)
elif event == "Stop":
report_delta(data)
```
### Decision 4: Two Offline Token Counting Methods (No API Key)
**What**: Provide two offline methods - tiktoken-based and simple character estimation.
**Why**:
- No API key should be required for context tracking hooks
- Anthropic hasn't released an official offline tokenizer
- Users have different dependency tolerance levels
#### Method A: tiktoken with p50k_base (Recommended)
```python
import tiktoken
def count_tokens_tiktoken(text: str) -> int:
enc = tiktoken.get_encoding("p50k_base")
return len(enc.encode(text))
```
**Characteristics**:
- ~90-95% accuracy compared to Claude's actual tokenizer
- Works completely offline
- Requires `tiktoken` dependency
- Fast execution (<10ms)
#### Method B: Character-Based Estimation (Zero Dependencies)
```python
def count_tokens_estimate(text: str) -> int:
return len(text) // 4
```
**Characteristics**:
- ~80-90% accuracy for English text
- No dependencies at all
- Sub-millisecond latency
- Less accurate for code and non-English text
**Trade-off Matrix**:
| Factor | tiktoken | Estimation |
|--------|----------|------------|
| Accuracy | ~90-95% | ~80-90% |
| Speed | <10ms | <1ms |
| Dependencies | tiktoken | None |
| Offline | Yes | Yes |
**Note**: Anthropic hasn't released their official tokenizer publicly. The `tiktoken` approach uses OpenAI's tokenizer with `p50k_base` encoding as a reasonable approximation since both use BPE (byte-pair encoding).
## Token Delta Calculation Flow
```
UserPromptSubmit Stop
| |
v v
Read transcript Read transcript
| |
v v
Count characters Count characters
| |
v v
Estimate tokens (T1) Estimate tokens (T2)
| |
v v
Save T1 to temp file Calculate delta = T2 - T1
|
v
Report: "Request used ~X tokens"
```
## Risks / Trade-offs
| Risk | Mitigation |
|------|------------|
| Temp file not found (hook failures) | Graceful fallback to cumulative-only reporting |
| Inaccurate token estimates | Clear documentation of limitations |
| Race conditions (concurrent sessions) | Session ID in filename for isolation |
| Temp file cleanup | Use system temp directory (auto-cleaned) |
## Example Output Format
```
Context Usage: ~12,500 tokens used (~125,000 remaining)
This request: ~850 tokens (+6.8% of total)
```
## Open Questions
None - design is straightforward given existing hook capabilities.
@@ -1,100 +0,0 @@
# Change: Add Context Usage Tracking Documentation via Pre-Message and Post-Response Hooks
## Why
Users want to monitor token consumption per request and overall context usage throughout a Claude Code session. Currently, the hooks documentation shows a basic context-usage example using the Stop hook, but it doesn't demonstrate how to track **per-request** token consumption by comparing measurements at two points in time.
By documenting how to use `UserPromptSubmit` as a "pre-message" hook and `Stop` as a "post-response" hook, users can calculate the delta in token usage for each request, enabling accurate per-request consumption metrics.
## What Changes
- **ADDED**: Documentation for using `UserPromptSubmit` and `Stop` hooks together for context tracking
- **ADDED**: A new example demonstrating token delta calculation between pre-message and post-response
- **MODIFIED**: Enhance the existing context usage reporting requirement with delta-based tracking approach
- **ADDED**: Detailed explanation of token estimation methodology and its limitations
## Impact
- Affected specs: `hooks-documentation`
- Affected code: `06-hooks/README.md` (documentation updates)
- No breaking changes - purely additive documentation
## Technical Analysis
### Current Hook Events Mapping
| Desired Hook | Claude Code Event | Trigger Point |
|--------------|-------------------|---------------|
| Pre-Message Hook | `UserPromptSubmit` | Before user prompt is processed by the model |
| Post-Response Hook | `Stop` | After model completes its full response |
### Token Counting Methods (Offline, No API Key)
Since we need offline token counting without an API key, we offer **two local approaches**:
#### Method 1: tiktoken with p50k_base (More Accurate)
Use OpenAI's `tiktoken` library with the `p50k_base` encoding as an approximation for Claude's tokenizer:
```python
import tiktoken
enc = tiktoken.get_encoding("p50k_base")
tokens = enc.encode(text)
token_count = len(tokens)
```
**Pros:**
- More accurate than character estimation (~90-95% accuracy)
- Works completely offline
- No API key required
- Fast execution
**Cons:**
- Requires `tiktoken` dependency (`pip install tiktoken`)
- Not Claude's exact tokenizer (approximation)
#### Method 2: Character-Based Estimation (Simplest)
For zero-dependency estimation:
```python
estimated_tokens = len(text) // 4
```
**Pros:**
- No dependencies at all
- Works offline
- Extremely fast
**Cons:**
- Less accurate (~80-90% for English text)
- Varies more with code and non-English text
### Token Delta Calculation Approach
1. **Pre-Message (UserPromptSubmit)**: Read transcript, count tokens (via tiktoken or estimation)
2. **Post-Response (Stop)**: Read transcript again, calculate new total, compute delta
**Accuracy Evaluation:**
| Factor | tiktoken Method | Character Estimation |
|--------|-----------------|---------------------|
| Token accuracy | ~90-95% | ~80-90% |
| Dependencies | tiktoken | None |
| Speed | Fast (<10ms) | Very fast (<1ms) |
| Offline | Yes | Yes |
### Limitations
- **No official offline Claude tokenizer exists** - Anthropic hasn't released their tokenizer publicly
- System prompts and internal Claude Code context are NOT in the transcript
- The delta includes: user prompt + Claude's response + any tool outputs
- Both methods are approximations; actual API token counts may differ slightly
## Open Questions
1. Should we persist the pre-message count to a file, or can we rely on the hook's transient state?
- **Recommendation**: Use a simple temp file in the session directory for reliability
2. Should the example be a single Python script handling both hooks, or two separate scripts?
- **Recommendation**: Single script with mode detection based on `hook_event_name`
@@ -1,106 +0,0 @@
# hooks-documentation Spec Delta
## ADDED Requirements
### Requirement: Pre-Message and Post-Response Hook Pairs Documentation
The hooks lesson SHALL document how to use `UserPromptSubmit` and `Stop` hooks together for context/token usage tracking.
#### Scenario: Understanding hook event timing for context tracking
- **WHEN** a user wants to track per-request token consumption
- **THEN** they find documentation explaining that `UserPromptSubmit` fires before the prompt is processed (pre-message)
- **AND** they find documentation explaining that `Stop` fires after Claude completes its response (post-response)
- **AND** they understand how to calculate the delta between these two points
#### Scenario: Token delta calculation methodology
- **WHEN** a user implements a context tracking hook pair
- **THEN** they find documentation explaining how to:
- Record token count at `UserPromptSubmit` time
- Calculate new token count at `Stop` time
- Compute the delta representing per-request consumption
### Requirement: Context Tracking Hook Pair Example
The hooks lesson SHALL provide a working example script that tracks context usage using pre-message and post-response hooks.
#### Scenario: Single script handles both hook events
- **WHEN** a user copies the context-tracker.py example
- **THEN** the script detects the hook event type via `hook_event_name`
- **AND** handles `UserPromptSubmit` by saving current token estimate to a temp file
- **AND** handles `Stop` by loading the saved count, calculating delta, and reporting usage
#### Scenario: Complete configuration for hook pair
- **WHEN** a user wants to configure both hooks
- **THEN** they find a complete settings.json example showing:
- `UserPromptSubmit` hook configuration pointing to the context tracker script
- `Stop` hook configuration pointing to the same script
- Both hooks using the same script for consistent token calculation
#### Scenario: Per-request usage reporting
- **WHEN** the context tracking hooks execute
- **THEN** the Stop hook outputs a report showing:
- Total estimated tokens used in session
- Tokens consumed by the current request (delta)
- Remaining capacity estimate
### Requirement: Token Counting Methods Documentation
The hooks lesson SHALL document two offline token counting methods that require no API key.
#### Scenario: tiktoken-based token counting documented
- **WHEN** a user wants more accurate offline token counts
- **THEN** they find documentation for using `tiktoken` with `p50k_base` encoding
- **AND** they see a Python example using `tiktoken.get_encoding("p50k_base")`
- **AND** they understand it provides ~90-95% accuracy compared to Claude's tokenizer
- **AND** they learn it requires the `tiktoken` dependency
#### Scenario: Character estimation token counting documented
- **WHEN** a user wants zero-dependency token estimation
- **THEN** they find documentation for the ~4 characters per token estimation ratio
- **AND** they understand this provides ~80-90% accuracy for English text
- **AND** they learn it works with no external dependencies
#### Scenario: Method comparison provided
- **WHEN** a user needs to choose between token counting methods
- **THEN** they find a comparison showing:
- tiktoken method: ~90-95% accuracy, requires tiktoken, <10ms latency
- Estimation method: ~80-90% accuracy, no dependencies, <1ms latency
- **AND** both methods work completely offline without API keys
#### Scenario: Transcript contents explained
- **WHEN** a user wants to understand what's included in token counts
- **THEN** they find documentation explaining that the transcript includes:
- User prompts
- Claude's responses
- Tool inputs and outputs
- **AND** they understand that system prompts and internal context are NOT included
#### Scenario: No official Claude tokenizer caveat
- **WHEN** a user reads about token counting accuracy
- **THEN** they understand that Anthropic hasn't released an official offline tokenizer
- **AND** they understand both methods are approximations based on similar BPE tokenizers
## MODIFIED Requirements
### Requirement: Context Usage Reporting Hook Example
The hooks lesson SHALL include a correct, working example showing how to create a hook that reports context/token usage after each Claude response.
#### Scenario: Token calculation is correct
- **WHEN** a user copies the context-usage.py example
- **AND** runs it as a Stop hook
- **THEN** the hook correctly calculates estimated tokens from total character count
- **AND** displays a non-zero token count proportional to conversation length
#### Scenario: User learns to create context monitoring hook
- **WHEN** a user reads the context usage reporter example
- **THEN** they find a complete Python script that reads the transcript file
- **AND** they understand how to estimate token usage from conversation history
- **AND** they see the configuration for Stop hooks
- **AND** they understand the limitations of token estimation
#### Scenario: Hook output format is documented
- **WHEN** a user implements the context usage hook
- **THEN** they can generate a one-line report showing used tokens and remaining capacity
- **AND** the output shows realistic token counts based on conversation size
#### Scenario: Delta-based tracking is documented
- **WHEN** a user wants per-request token consumption
- **THEN** they find documentation pointing to the pre-message/post-response hook pair approach
- **AND** they understand how to use `UserPromptSubmit` + `Stop` for delta calculation
@@ -1,36 +0,0 @@
# Tasks: Add Context Usage Tracking Documentation
## 1. Documentation Updates
- [x] 1.1 Add "Context Tracking Hook Pairs" section to README explaining pre-message/post-response concept
- [x] 1.2 Document how UserPromptSubmit serves as pre-message hook
- [x] 1.3 Document how Stop serves as post-response hook
- [x] 1.4 Explain token delta calculation methodology
## 2. Example Scripts
- [x] 2.1 Create `context-tracker.py` example script with character estimation (zero dependencies)
- [x] 2.2 Create `context-tracker-tiktoken.py` example script with tiktoken method (more accurate)
- [x] 2.3 Implement UserPromptSubmit handler (save pre-message count)
- [x] 2.4 Implement Stop handler (calculate and report delta)
- [x] 2.5 Add clear inline comments explaining both approaches
## 3. Configuration Examples
- [x] 3.1 Add hook configuration example for UserPromptSubmit event
- [x] 3.2 Add hook configuration example for Stop event
- [x] 3.3 Provide combined configuration showing both hooks together
## 4. Token Counting Methods Documentation
- [x] 4.1 Document tiktoken with p50k_base method (more accurate, ~90-95%)
- [x] 4.2 Document character-based estimation method (simple, ~80-90%)
- [x] 4.3 Create comparison table of both offline methods
- [x] 4.4 Explain what's included/excluded from transcript
- [x] 4.5 Add caveat that no official Claude offline tokenizer exists
## 5. Validation
- [x] 5.1 Test example script with sample JSON input
- [x] 5.2 Verify configuration examples have valid JSON syntax
- [x] 5.3 Run openspec validate to confirm proposal is complete
@@ -1,41 +0,0 @@
# Change: Add CLI Reference Lesson
## Why
The Claude How To repository covers nine major Claude Code features (01-09), but lacks a dedicated lesson for the CLI reference - the command-line interface that users interact with directly. Understanding CLI commands, flags, and options is fundamental to using Claude Code effectively. Users need a comprehensive reference to leverage features like model selection, output formats, permission management, and session handling via CLI.
## What Changes
- **NEW** `10-cli/` directory with comprehensive CLI reference lesson
- **NEW** `10-cli/README.md` - Main lesson content following established structure
- **UPDATE** Root `README.md` - Add CLI lesson to navigation and learning path
- **UPDATE** Root `README.md` - Add CLI to feature comparison and use case matrix
- **UPDATE** `LEARNING-ROADMAP.md` - Include CLI lesson in learning progression
## Key Content Areas
1. **CLI Commands** - Start interactive REPL, query mode, continue/resume sessions, updates
2. **Core Flags** - Print mode, continue, resume, version
3. **Model Configuration** - Model selection, fallback models, agent configuration
4. **System Prompt Customization** - Replace, append, file-based prompts
5. **Tool & Permission Management** - Allowed/disallowed tools, permission modes
6. **Output & Format** - JSON, stream-JSON, text formats
7. **MCP Configuration** - Server loading, strict mode
8. **Session Management** - Session IDs, forking, resumption
9. **Advanced Features** - Chrome integration, IDE connection, debug mode
## High-Value Use Cases
1. **CI/CD Integration** - Headless mode with JSON output for automation pipelines
2. **Script Piping** - Process files, logs, and data through Claude
3. **Multi-Session Workflows** - Resume and fork sessions for complex projects
4. **Custom Agent Configurations** - Define specialized subagents via CLI
5. **Batch Processing** - Process multiple queries with consistent settings
6. **Security-Conscious Development** - Permission modes and tool restrictions
7. **API Integration** - Structured JSON output for programmatic consumption
## Impact
- Affected specs: None (new capability)
- Affected code: Root README.md, LEARNING-ROADMAP.md
- New files: `10-cli/README.md`
@@ -1,99 +0,0 @@
## ADDED Requirements
### Requirement: CLI Reference Lesson
The repository SHALL provide a comprehensive CLI reference lesson at `10-cli/` that documents all command-line interface options, flags, and usage patterns for Claude Code.
#### Scenario: User learns CLI basics
- **WHEN** a user navigates to `10-cli/README.md`
- **THEN** they find an overview of CLI capabilities with architecture diagram
- **AND** a quick reference table of all CLI commands
- **AND** examples demonstrating common usage patterns
#### Scenario: User looks up specific CLI flag
- **WHEN** a user needs to understand a specific CLI flag (e.g., `--output-format`)
- **THEN** they find the flag documented with description, options, and example usage
- **AND** related flags are cross-referenced
#### Scenario: User integrates Claude Code in CI/CD
- **WHEN** a user wants to use Claude Code in automation
- **THEN** they find practical examples for CI/CD integration
- **AND** examples show headless mode, JSON output, and error handling
### Requirement: CLI Commands Documentation
The CLI lesson SHALL document all primary CLI commands with their syntax and use cases.
#### Scenario: Interactive mode commands documented
- **WHEN** a user reads the CLI commands section
- **THEN** they find `claude` for starting interactive REPL
- **AND** `claude "query"` for starting with initial prompt
- **AND** `claude -c` for continuing recent conversation
- **AND** `claude -r` for resuming specific session
#### Scenario: Print mode commands documented
- **WHEN** a user reads the print mode section
- **THEN** they find `claude -p "query"` for non-interactive queries
- **AND** pipe input examples like `cat file | claude -p "query"`
- **AND** output format options (text, json, stream-json)
### Requirement: CLI Flags Documentation
The CLI lesson SHALL document all CLI flags organized by category with examples.
#### Scenario: Core flags documented
- **WHEN** a user reads the core flags section
- **THEN** they find `-p/--print`, `-c/--continue`, `-r/--resume`, `-v/--version`
- **AND** each flag has description and example usage
#### Scenario: Model configuration flags documented
- **WHEN** a user reads the model configuration section
- **THEN** they find `--model`, `--fallback-model`, `--agent`, `--agents`
- **AND** examples show model selection and custom agent definitions
#### Scenario: Permission flags documented
- **WHEN** a user reads the permission section
- **THEN** they find `--tools`, `--allowedTools`, `--disallowedTools`
- **AND** `--dangerously-skip-permissions`, `--permission-mode`
- **AND** examples demonstrate security-conscious configurations
### Requirement: High-Value Use Cases
The CLI lesson SHALL include practical use case examples that demonstrate real-world CLI value.
#### Scenario: CI/CD integration example provided
- **WHEN** a user reads the CI/CD use case
- **THEN** they find a complete GitHub Actions or Jenkins example
- **AND** the example demonstrates headless mode with JSON output
- **AND** error handling and exit codes are explained
#### Scenario: Script piping example provided
- **WHEN** a user reads the script piping use case
- **THEN** they find examples of piping file contents to Claude
- **AND** examples show log analysis, code review via pipe
- **AND** output processing patterns are demonstrated
#### Scenario: Multi-session workflow example provided
- **WHEN** a user reads the session management use case
- **THEN** they find examples of resuming and forking sessions
- **AND** session naming and organization patterns are shown
### Requirement: Navigation Integration
The root documentation SHALL be updated to include the CLI lesson in all navigation elements.
#### Scenario: CLI appears in Quick Navigation
- **WHEN** a user views the README Quick Navigation table
- **THEN** they see CLI Reference listed with link to `10-cli/`
#### Scenario: CLI appears in Learning Path
- **WHEN** a user views the Learning Path table
- **THEN** they see CLI Reference at position 10 with appropriate difficulty and timing
#### Scenario: CLI appears in Feature Comparison
- **WHEN** a user views the Feature Comparison table
- **THEN** CLI Reference is included with invocation, persistence, and use case columns
#### Scenario: CLI appears in Directory Structure
- **WHEN** a user views the Directory Structure tree
- **THEN** `10-cli/` directory is shown with `README.md`
@@ -1,50 +0,0 @@
# Tasks: Add CLI Reference Lesson
## 1. Create CLI Lesson Content
- [x] 1.1 Create `10-cli/` directory
- [x] 1.2 Create `10-cli/README.md` with:
- Overview section with architecture diagram
- CLI commands table (claude, claude "query", claude -p, etc.)
- Core flags section with examples
- Model & configuration flags
- System prompt customization section
- Tool & permission management section
- Output & format options
- Workspace & directory flags
- MCP configuration options
- Session management commands
- Advanced features (chrome, ide, debug)
- Agents flag format with JSON examples
- High-value use cases section with practical examples
- Installation/usage quick reference
- Troubleshooting section
- Related concepts links
## 2. Add Use Case Examples
- [x] 2.1 CI/CD integration example (GitHub Actions, Jenkins)
- [x] 2.2 Script piping example (log analysis, code processing)
- [x] 2.3 Multi-session workflow example
- [x] 2.4 Custom agent configuration example
- [x] 2.5 Batch processing example
- [x] 2.6 Security-conscious development example
- [x] 2.7 JSON API integration example
## 3. Update Root Documentation
- [x] 3.1 Add CLI to Quick Navigation table in `README.md`
- [x] 3.2 Add CLI to Learning Path table in `README.md`
- [x] 3.3 Add CLI section (section 10) in `README.md`
- [x] 3.4 Add CLI to Feature Comparison table
- [x] 3.5 Add CLI to Use Case Matrix
- [x] 3.6 Add CLI to Directory Structure tree
- [x] 3.7 Add CLI to Installation Quick Reference
- [x] 3.8 Update `LEARNING-ROADMAP.md` with CLI lesson
## 4. Quality Assurance
- [x] 4.1 Verify all code examples are valid and tested
- [x] 4.2 Ensure consistent style with other lessons (mermaid diagrams, tables)
- [x] 4.3 Check all internal links work correctly
- [x] 4.4 Review against official documentation for accuracy
@@ -1,18 +0,0 @@
# Change: Add Context Usage Reporting Hook Example
## Why
Users want to monitor their context window usage during Claude Code sessions. The hooks documentation currently lacks a practical example showing how to create a hook that reports context/token usage after each user request. This is valuable for understanding when context is getting full and when auto-compaction might occur.
## What Changes
- Add a detailed example hook that reports context usage after each user prompt
- The hook will read the transcript file and estimate token usage
- Include step-by-step explanation of how the hook works
- Document the limitations (estimation vs exact token counts)
## Impact
- **Affected specs**: hooks-documentation (add new example)
- **Affected code**: `06-hooks/README.md` (add new example section)
- **User impact**: Users gain a practical example for monitoring context usage
@@ -1,18 +0,0 @@
# Hooks Documentation Specification
## ADDED Requirements
### Requirement: Context Usage Reporting Hook Example
The hooks lesson SHALL include a detailed example showing how to create a hook that reports context/token usage after each user request.
#### Scenario: User learns to create context monitoring hook
- **WHEN** a user reads the context usage reporter example
- **THEN** they find a complete Python script that reads the transcript file
- **AND** they understand how to estimate token usage from conversation history
- **AND** they see the configuration for UserPromptSubmit or Stop hooks
- **AND** they understand the limitations of token estimation
#### Scenario: Hook output format is documented
- **WHEN** a user implements the context usage hook
- **THEN** they can generate a one-line report showing used tokens and remaining capacity
- **AND** they understand the report is an estimate based on transcript analysis
@@ -1,9 +0,0 @@
# Tasks: Add Context Usage Reporting Hook Example
## 1. Documentation Update
- [x] 1.1 Add new example section "Context Usage Reporter" to 06-hooks/README.md
- [x] 1.2 Write Python hook script that reads transcript and estimates tokens
- [x] 1.3 Add configuration example for UserPromptSubmit hook
- [x] 1.4 Document how transcript_path provides access to conversation history
- [x] 1.5 Explain token estimation approach and limitations
- [x] 1.6 Show sample output format for the one-line report
@@ -1,44 +0,0 @@
# Change: Fix Context Usage Hook Token Calculation
## Why
The context-usage hook (Stop event) always reports 0 tokens because of a bug in line 68 of `context-usage.py`:
```python
estimated_tokens = estimate_tokens(str(total_chars))
```
This converts the integer `total_chars` (e.g., `156789`) to a string `"156789"` and then calculates tokens from that 6-character string, resulting in `6 // 4 = 1` token instead of `156789 // 4 = ~39,197` tokens.
**Current behavior:**
```
Stop says: Context: ~0/200,000 tokens (100.0% remaining)
```
**Expected behavior:**
```
Stop says: Context: ~39,197/200,000 tokens (80.4% remaining)
```
## What
Fix the token calculation bug in the context-usage.py example hook:
1. Remove the erroneous `str()` conversion
2. Calculate estimated tokens directly from character count
## Scope
- **Files affected:**
- `06-hooks/README.md` - Update the example code
- User's `~/.claude/hooks/context-usage.py` - Not managed by this repo, but fix will be documented
## Out of Scope
- Improving transcript parsing logic
- Adding more sophisticated token estimation
- Adding new hook features
## Risks
- **Low:** Simple bug fix with clear expected behavior
- Users who copied the broken example will need to update their hook manually
@@ -1,24 +0,0 @@
# hooks-documentation Specification Delta
## MODIFIED Requirements
### Requirement: Context Usage Reporting Hook Example
The hooks lesson SHALL include a correct, working example showing how to create a hook that reports context/token usage after each Claude response.
#### Scenario: Token calculation is correct
- **WHEN** a user copies the context-usage.py example
- **AND** runs it as a Stop hook
- **THEN** the hook correctly calculates estimated tokens from total character count
- **AND** displays a non-zero token count proportional to conversation length
#### Scenario: User learns to create context monitoring hook
- **WHEN** a user reads the context usage reporter example
- **THEN** they find a complete Python script that reads the transcript file
- **AND** they understand how to estimate token usage from conversation history
- **AND** they see the configuration for Stop hooks
- **AND** they understand the limitations of token estimation
#### Scenario: Hook output format is documented
- **WHEN** a user implements the context usage hook
- **THEN** they can generate a one-line report showing used tokens and remaining capacity
- **AND** the output shows realistic token counts based on conversation size
@@ -1,20 +0,0 @@
# Tasks: Fix Context Usage Hook Token Calculation
## Implementation Tasks
### 1. Fix the bug in 06-hooks/README.md example
- [x] Update line 564 in the context-usage.py example: change `estimate_tokens(str(total_chars))` to `total_chars // 4`
- [x] Remove the now-unused `estimate_tokens()` function from the example
### 2. Update user's local hook file
- [x] Fix `~/.claude/hooks/context-usage.py` with the same correction
### 3. Verification
- [x] Test the hook by running Claude Code and confirming non-zero token count is displayed
- [x] Verify the percentage calculation is reasonable (should show usage increasing during conversation)
## Acceptance Criteria
- [x] After Claude responds, the Stop hook displays a non-zero token estimate
- [x] The displayed percentage decreases as conversation grows
- [x] Example in README.md matches the corrected implementation
@@ -1,36 +0,0 @@
# Change: Update Hooks Lesson Based on Official Documentation
## Why
The current hooks lesson (`blog-posts/06-hooks.md`) contains outdated and inaccurate information that doesn't match the official Claude Code hooks documentation. Key issues include:
1. **Incorrect hook event names**: Uses `PreToolUse:Write`, `PreCommit`, `PostCommit`, `PrePush` which don't exist
2. **Missing hook events**: Doesn't cover `PermissionRequest`, `Stop`, `SubagentStop`, `PreCompact`, `SessionStart` (with matchers), `SessionEnd`
3. **Wrong configuration format**: Shows string-based hook commands instead of the array-based matcher/hooks structure
4. **Missing hook input/output**: Doesn't explain JSON stdin input or structured JSON output
5. **Missing exit code semantics**: Exit code 2 for blocking vs other non-zero codes
6. **Missing prompt-based hooks**: No coverage of `type: "prompt"` hooks for LLM-based evaluation
7. **Missing security considerations**: No disclaimer or security best practices from official docs
8. **Incorrect variable references**: Uses `${file_path}`, `${command}` instead of JSON stdin input
## What Changes
- **BREAKING**: Complete rewrite of hook event types and configuration format
- Update all code examples to use correct array-based configuration structure
- Add coverage of all 9 hook events: `PreToolUse`, `PermissionRequest`, `PostToolUse`, `Notification`, `UserPromptSubmit`, `Stop`, `SubagentStop`, `PreCompact`, `SessionStart`, `SessionEnd`
- Add JSON hook input/output documentation with examples
- Add hook matchers (tool patterns, regex support)
- Add prompt-based hooks for `Stop`/`SubagentStop`
- Add security considerations section with official disclaimer
- Add environment variables section (`CLAUDE_PROJECT_DIR`, `CLAUDE_ENV_FILE`, `CLAUDE_CODE_REMOTE`)
- Add plugin hooks documentation
- Add MCP tool hook patterns (`mcp__<server>__<tool>`)
- Update debugging section with `claude --debug` and verbose mode
- Remove incorrect/non-existent hook types (`PreCommit`, `PostCommit`, `PrePush`)
## Impact
- **Affected specs**: hooks-documentation (new capability)
- **Affected code**: `blog-posts/06-hooks.md` (complete rewrite)
- **Affected examples**: Any example hook scripts in the repo need updating to use JSON stdin
- **User impact**: Users following the current guide will have non-functional hooks; this update provides correct, working examples
@@ -1,124 +0,0 @@
# Hooks Documentation Specification
## ADDED Requirements
### Requirement: Hook Event Types Documentation
The hooks lesson SHALL document all 9 official hook events with their correct names, matchers, and behavior.
#### Scenario: Complete hook event coverage
- **WHEN** a user reads the hooks lesson
- **THEN** they find documentation for PreToolUse, PermissionRequest, PostToolUse, Notification, UserPromptSubmit, Stop, SubagentStop, PreCompact, SessionStart, and SessionEnd events
#### Scenario: No deprecated hook events
- **WHEN** a user searches for PreCommit, PostCommit, or PrePush hooks
- **THEN** they do not find these as they are not valid Claude Code hook events
### Requirement: Hook Configuration Format
The hooks lesson SHALL document the correct array-based configuration format with matchers and hooks arrays.
#### Scenario: Configuration structure
- **WHEN** a user views hook configuration examples
- **THEN** they see the structure: `{ "hooks": { "EventName": [{ "matcher": "Pattern", "hooks": [{ "type": "command", "command": "..." }] }] } }`
#### Scenario: Matcher patterns
- **WHEN** a user needs to match specific tools
- **THEN** they find documentation for exact string matching, regex patterns, and wildcards
### Requirement: Hook Input Documentation
The hooks lesson SHALL document the JSON stdin input that hooks receive.
#### Scenario: JSON input structure
- **WHEN** a user writes a hook script
- **THEN** they understand the input includes session_id, transcript_path, cwd, permission_mode, hook_event_name, tool_name, tool_input, and tool_use_id
#### Scenario: Event-specific input fields
- **WHEN** a user writes a hook for a specific event
- **THEN** they find documentation for event-specific input fields (e.g., stop_hook_active for Stop event)
### Requirement: Hook Output Documentation
The hooks lesson SHALL document hook output semantics including exit codes and JSON stdout structure.
#### Scenario: Exit code semantics
- **WHEN** a user implements a hook
- **THEN** they understand exit code 0 means success, exit code 2 means blocking error (stderr used as error message), and other codes mean non-blocking error
#### Scenario: JSON output format
- **WHEN** a hook needs to control behavior
- **THEN** the user can output JSON with continue, stopReason, suppressOutput, systemMessage, and hookSpecificOutput fields
#### Scenario: Event-specific output
- **WHEN** a user writes a PreToolUse hook
- **THEN** they can output permissionDecision (allow/deny/ask), permissionDecisionReason, and updatedInput
### Requirement: Prompt-Based Hooks Documentation
The hooks lesson SHALL document type="prompt" hooks for LLM-based evaluation on Stop and SubagentStop events.
#### Scenario: Prompt hook configuration
- **WHEN** a user wants intelligent stop evaluation
- **THEN** they find documentation for configuring type="prompt" hooks with prompt text and timeout
#### Scenario: LLM response schema
- **WHEN** using prompt-based hooks
- **THEN** the user understands the expected response schema with decision (approve/block), reason, continue, stopReason, and systemMessage
### Requirement: Environment Variables Documentation
The hooks lesson SHALL document all environment variables available to hooks.
#### Scenario: Standard environment variables
- **WHEN** a user writes a hook script
- **THEN** they can use CLAUDE_PROJECT_DIR for the absolute project path
#### Scenario: SessionStart environment persistence
- **WHEN** using SessionStart hooks
- **THEN** the user can persist environment variables via CLAUDE_ENV_FILE
#### Scenario: Remote environment detection
- **WHEN** running in web environment
- **THEN** hooks can check CLAUDE_CODE_REMOTE to detect this
### Requirement: Security Documentation
The hooks lesson SHALL include security considerations and best practices from the official documentation.
#### Scenario: Security disclaimer
- **WHEN** a user reads about hooks
- **THEN** they see a clear disclaimer that hooks execute arbitrary shell commands at their own risk
#### Scenario: Security best practices
- **WHEN** a user implements hooks
- **THEN** they find guidance on input validation, shell variable quoting, path traversal prevention, and sensitive file handling
### Requirement: MCP Tool Hook Patterns
The hooks lesson SHALL document how to create hooks for MCP tools.
#### Scenario: MCP tool matching
- **WHEN** a user wants to hook into MCP tool calls
- **THEN** they find documentation for the pattern `mcp__<server>__<tool>` and regex matching
### Requirement: Plugin Hooks Documentation
The hooks lesson SHALL document how plugins can provide hooks.
#### Scenario: Plugin hook configuration
- **WHEN** a plugin needs to provide hooks
- **THEN** documentation covers hooks/hooks.json structure and ${CLAUDE_PLUGIN_ROOT} variable
### Requirement: Debugging Documentation
The hooks lesson SHALL document how to debug hook execution.
#### Scenario: Debug mode
- **WHEN** hooks are not working as expected
- **THEN** users can enable `claude --debug` for detailed hook execution logs
#### Scenario: Verbose mode
- **WHEN** using Claude Code interactively
- **THEN** users can enable verbose mode (ctrl+o) to see hook execution progress
### Requirement: Working Example Scripts
The hooks lesson SHALL provide working example scripts that use JSON stdin input.
#### Scenario: Bash command validator
- **WHEN** a user wants to validate bash commands
- **THEN** they find a working Python script that reads JSON stdin and validates commands
#### Scenario: Intelligent stop hook
- **WHEN** a user wants automatic task completion verification
- **THEN** they find a working prompt-based stop hook example
@@ -1,69 +0,0 @@
# Tasks: Update Hooks Lesson
## 1. Content Structure Update
- [x] 1.1 Update introduction to explain hooks as event-driven automation scripts
- [x] 1.2 Replace hook architecture diagram with correct event flow
- [x] 1.3 Update hook types table with all 9 official hook events
## 2. Configuration Format
- [x] 2.1 Rewrite configuration section with array-based matcher/hooks structure
- [x] 2.2 Add hook matcher documentation (exact match, regex patterns, wildcards)
- [x] 2.3 Add timeout configuration examples
## 3. Hook Events Documentation
- [x] 3.1 Document PreToolUse event (matchers, decision control, updatedInput)
- [x] 3.2 Document PermissionRequest event (decision behavior, messages)
- [x] 3.3 Document PostToolUse event (block decision, additionalContext)
- [x] 3.4 Document Notification event (matchers: permission_prompt, idle_prompt, etc.)
- [x] 3.5 Document UserPromptSubmit event (block decision, context addition)
- [x] 3.6 Document Stop event (block continuation, stop_hook_active)
- [x] 3.7 Document SubagentStop event (subagent completion handling)
- [x] 3.8 Document PreCompact event (manual vs auto matchers)
- [x] 3.9 Document SessionStart event (startup/resume/clear/compact matchers, CLAUDE_ENV_FILE)
- [x] 3.10 Document SessionEnd event (reason field)
## 4. Hook Input/Output
- [x] 4.1 Document JSON stdin input structure (session_id, transcript_path, cwd, etc.)
- [x] 4.2 Document exit code semantics (0=success, 2=blocking error, other=non-blocking)
- [x] 4.3 Document JSON stdout output structure (continue, stopReason, hookSpecificOutput)
- [x] 4.4 Add examples for each hook event's specific output format
## 5. Prompt-Based Hooks
- [x] 5.1 Add section on type="prompt" hooks for Stop/SubagentStop
- [x] 5.2 Document LLM response schema (decision, reason, continue, stopReason)
- [x] 5.3 Add practical examples of intelligent stop hooks
## 6. Environment Variables
- [x] 6.1 Document CLAUDE_PROJECT_DIR usage
- [x] 6.2 Document CLAUDE_ENV_FILE for SessionStart env persistence
- [x] 6.3 Document CLAUDE_CODE_REMOTE for web environment detection
- [x] 6.4 Document plugin hook variables (${CLAUDE_PLUGIN_ROOT})
## 7. Security Section
- [x] 7.1 Add official security disclaimer (USE AT YOUR OWN RISK)
- [x] 7.2 Document security best practices (input validation, quoting, path traversal)
- [x] 7.3 Add configuration safety notes (snapshot at startup, modification warnings)
## 8. Advanced Features
- [x] 8.1 Add MCP tool hook patterns (mcp__<server>__<tool>)
- [x] 8.2 Add plugin hooks documentation
- [x] 8.3 Add project-specific hook script examples
## 9. Debugging and Troubleshooting
- [x] 9.1 Update debugging section with claude --debug flag
- [x] 9.2 Add verbose mode (ctrl+o) documentation
- [x] 9.3 Update troubleshooting with correct error scenarios
## 10. Example Scripts
- [x] 10.1 Rewrite format-code hook to use JSON stdin
- [x] 10.2 Rewrite security-scan hook with proper JSON input parsing
- [x] 10.3 Rewrite bash command validator example from official docs
- [x] 10.4 Add intelligent stop hook example with prompt type
- [x] 10.5 Remove non-existent PreCommit/PostCommit/PrePush examples
## 11. Final Cleanup
- [x] 11.1 Update Mermaid diagrams for accuracy
- [x] 11.2 Update variable reference table to reflect JSON input
- [x] 11.3 Update best practices table
- [x] 11.4 Update directory structure section
- [x] 11.5 Verify all links and references
@@ -1,32 +0,0 @@
# Change: Update Memory Lesson with Latest Documentation
## Why
The current memory lesson (`blog-posts/02-memory.md`) is based on older Claude Code documentation. The official documentation at `https://code.claude.com/docs/en/memory` includes several new features and updates that the lesson doesn't cover, making it incomplete for readers who want to learn about Claude Code's full memory capabilities.
## What Changes
### New Features to Add
- **Project Rules** (`.claude/rules/*.md`) - Modular, topic-specific markdown files for organizing instructions
- **Path-Specific Rules** - YAML frontmatter with `paths:` to scope rules to specific file patterns
- **Glob Pattern Support** - Examples of glob patterns for path-specific rules
- **Project Local Memory** (`CLAUDE.local.md`) - Personal project preferences that are auto-gitignored
- **Symlink Support** - Sharing rules across projects using symbolic links
### Updates to Existing Content
- **Memory Hierarchy Table** - Update to include Project Rules and Project Local as additional memory types
- **Enterprise Policy Windows Path** - Correct to `C:\Program Files\ClaudeCode\CLAUDE.md` (currently shows `C:\ProgramData\ClaudeCode\CLAUDE.md`)
- **Memory Lookup Algorithm** - Add detailed explanation of recursive upward search behavior
- **Best Practices Section** - Add guidelines for `.claude/rules/` organization
### Structure Improvements
- Add new section: "Modular Rules with `.claude/rules/`"
- Add new section: "Path-Specific Rules"
- Update directory structure example to show `.claude/rules/` organization
- Improve organization of content to match official documentation structure
## Impact
- **Affected files**: `blog-posts/02-memory.md`
- **User benefit**: Readers will learn about complete memory capabilities including modular rules and path-specific scoping
- **No breaking changes**: All existing content remains valid; this adds new sections and updates outdated information
@@ -1,69 +0,0 @@
## MODIFIED Requirements
### Requirement: Memory Hierarchy Documentation
The memory lesson SHALL document the complete 5-level memory hierarchy including Enterprise Policy, Project Memory, Project Rules, User Memory, and Project Local memory types.
#### Scenario: Complete hierarchy explanation
- **WHEN** a reader views the memory hierarchy section
- **THEN** they SHALL see all 5 memory levels with their locations, scopes, and sharing capabilities
#### Scenario: Enterprise Policy Windows path
- **WHEN** a reader views the Enterprise Policy location for Windows
- **THEN** the path SHALL be `C:\Program Files\ClaudeCode\CLAUDE.md`
#### Scenario: Memory type comparison table
- **WHEN** a reader views the memory type comparison table
- **THEN** it SHALL include Project Rules (`.claude/rules/*.md`) and Project Local (`CLAUDE.local.md`) as distinct types
## ADDED Requirements
### Requirement: Modular Rules Documentation
The memory lesson SHALL document the `.claude/rules/` directory for organizing instructions into topic-specific markdown files.
#### Scenario: Rules directory structure
- **WHEN** a reader views the modular rules section
- **THEN** they SHALL see an example directory structure showing `.claude/rules/` with subdirectories
#### Scenario: Benefits explanation
- **WHEN** a reader views the modular rules section
- **THEN** they SHALL understand the benefits of topic-specific rule files for organization
### Requirement: Path-Specific Rules Documentation
The memory lesson SHALL document how to use YAML frontmatter with `paths:` directive to scope rules to specific file patterns.
#### Scenario: YAML frontmatter example
- **WHEN** a reader views the path-specific rules section
- **THEN** they SHALL see an example of YAML frontmatter with `paths:` directive
#### Scenario: Glob pattern table
- **WHEN** a reader views the path-specific rules section
- **THEN** they SHALL see a table of glob pattern examples with explanations
### Requirement: Project Local Memory Documentation
The memory lesson SHALL document `CLAUDE.local.md` files for personal project preferences that are auto-gitignored.
#### Scenario: Local memory explanation
- **WHEN** a reader views the project local memory section
- **THEN** they SHALL understand that `CLAUDE.local.md` is for personal preferences on shared projects
#### Scenario: Auto-gitignore behavior
- **WHEN** a reader views the project local memory section
- **THEN** they SHALL understand that these files are automatically excluded from git
### Requirement: Symlink Support Documentation
The memory lesson SHALL document how to share rules across projects using symbolic links.
#### Scenario: Symlink examples
- **WHEN** a reader views the symlink support section
- **THEN** they SHALL see bash examples for creating symlinks to shared rule files and directories
### Requirement: Memory Lookup Algorithm Documentation
The memory lesson SHALL document how Claude Code discovers and loads memory files recursively.
#### Scenario: Recursive search explanation
- **WHEN** a reader views the memory lookup section
- **THEN** they SHALL understand the recursive upward search from current directory to root
#### Scenario: Subtree discovery
- **WHEN** a reader views the memory lookup section
- **THEN** they SHALL understand that subtree files are discovered when those files are accessed
@@ -1,46 +0,0 @@
## 1. Update Memory Hierarchy Section
- [x] 1.1 Update the memory hierarchy table to include 5 levels (Enterprise, Project, Project Rules, User, Project Local)
- [x] 1.2 Update the mermaid diagram to show the complete hierarchy
- [x] 1.3 Fix Windows Enterprise Policy path from `C:\ProgramData\ClaudeCode\CLAUDE.md` to `C:\Program Files\ClaudeCode\CLAUDE.md`
- [x] 1.4 Add explanation of precedence and loading order
## 2. Add Modular Rules Section
- [x] 2.1 Create new section "Modular Rules with `.claude/rules/`"
- [x] 2.2 Add directory structure example showing `.claude/rules/` organization
- [x] 2.3 Explain benefits of topic-specific rule files
- [x] 2.4 Add examples of modular rule filenames (code-style.md, testing.md, security.md)
## 3. Add Path-Specific Rules Section
- [x] 3.1 Create new section "Path-Specific Rules with Glob Patterns"
- [x] 3.2 Explain YAML frontmatter with `paths:` directive
- [x] 3.3 Add table of glob pattern examples (`**/*.ts`, `src/**/*`, etc.)
- [x] 3.4 Include practical example of path-scoped API rules
## 4. Add Project Local Memory Section
- [x] 4.1 Add explanation of `CLAUDE.local.md` file
- [x] 4.2 Explain auto-gitignore behavior
- [x] 4.3 Add use case examples (personal preferences on shared projects)
## 5. Add Symlink Support Section
- [x] 5.1 Add section on sharing rules across projects using symlinks
- [x] 5.2 Include bash examples for creating symlinks to shared rules
## 6. Update Memory Lookup Algorithm
- [x] 6.1 Add detailed explanation of recursive upward search
- [x] 6.2 Explain subtree discovery behavior
- [x] 6.3 Add example of which files are loaded from different directories
## 7. Update Best Practices
- [x] 7.1 Add best practices for `.claude/rules/` organization
- [x] 7.2 Add guidelines for using path-specific rules sparingly
- [x] 7.3 Add tips for symlink-based rule sharing
## 8. Update Directory Structure Example
- [x] 8.1 Update the directory structure to show `.claude/rules/` hierarchy
- [x] 8.2 Include subdirectory examples (frontend/, backend/)
## 9. Review and Polish
- [x] 9.1 Ensure all mermaid diagrams are updated
- [x] 9.2 Review table formatting consistency
- [x] 9.3 Update "Official Documentation" links if needed
- [x] 9.4 Verify all code examples are accurate
@@ -1,48 +0,0 @@
# Change: Update Agent Skills Lesson with Latest Documentation
## Why
The current Agent Skills lesson (03-skills) is missing several key features and best practices from the latest official Claude Code documentation at https://code.claude.com/docs/en/skills#agent-skills. Users need up-to-date information to effectively create, manage, debug, and share skills.
## What Changes
### Documentation Updates (README.md and blog-posts/03-skills.md)
1. **Enhanced Managing Skills Section** - Add comprehensive guidance for:
- Viewing available skills (via Claude and filesystem)
- Testing skills effectively
- Updating skills (with restart requirements)
- Removing skills properly
2. **Improved Debugging Section** - Add detailed troubleshooting for:
- Skills being skipped or non-functional
- Invalid YAML frontmatter detection
- Script permission issues
- Path format requirements (forward slashes)
- Multiple skills conflicting
3. **Version History Best Practice** - Add guidance on documenting skill versions in SKILL.md
4. **Enhanced allowed-tools Documentation** - Expand explanation of tool access control with:
- Use cases for read-only skills
- Security-sensitive workflow examples
- Note about permission prompts when not specified
5. **Multi-File Skill Example** - Add comprehensive example showing:
- Directory structure for complex skills
- Multiple reference files
- Scripts subdirectory
- Templates organization
6. **Plugin Skills Clarification** - Better explain how plugin-bundled skills work
### Example Updates (03-skills/ directory)
7. **Add Version History Example** - Update code-review SKILL.md to include version history section
## Impact
- Affected docs: `03-skills/README.md`, `blog-posts/03-skills.md`
- Affected examples: `03-skills/code-review/SKILL.md`
- No breaking changes - purely additive documentation improvements
- Improves user experience for skill creation and debugging
@@ -1,64 +0,0 @@
## ADDED Requirements
### Requirement: Managing Skills Documentation
The skills lesson SHALL provide comprehensive guidance for managing skills including viewing available skills, testing skills, updating skills with restart requirements, and removing skills.
#### Scenario: User wants to view available skills
- **WHEN** a user wants to see what skills are available
- **THEN** the documentation provides both CLI method (asking Claude "What Skills are available?") and filesystem method (ls ~/.claude/skills/ and ls .claude/skills/)
#### Scenario: User wants to test a skill
- **WHEN** a user wants to test if their skill works
- **THEN** the documentation explains that skills activate automatically based on matching descriptions, with example test queries
#### Scenario: User wants to update a skill
- **WHEN** a user modifies a SKILL.md file
- **THEN** the documentation explains that changes take effect on next Claude Code startup and restart is required if already running
#### Scenario: User wants to remove a skill
- **WHEN** a user wants to remove a skill
- **THEN** the documentation provides rm -rf commands for both personal and project skills, with git commit for project skills
### Requirement: Enhanced Debugging Guidance
The skills lesson SHALL provide detailed debugging guidance for common skill issues including skipped skills, YAML errors, script permissions, and path formats.
#### Scenario: Skill not being discovered
- **WHEN** Claude doesn't use a user's skill
- **THEN** the documentation explains to check: description specificity, YAML syntax validity (opening/closing ---, no tabs), and correct file path location
#### Scenario: Skill has errors
- **WHEN** a skill has runtime errors
- **THEN** the documentation explains to check: dependency installation, script execute permissions (chmod +x), and forward slash usage in paths
#### Scenario: Multiple skills conflict
- **WHEN** multiple skills are activated unexpectedly
- **THEN** the documentation explains using distinct trigger terms in descriptions to help Claude choose the right skill
### Requirement: Version History Documentation
The skills lesson SHALL include a best practice example for documenting skill version history in SKILL.md files.
#### Scenario: User wants to track skill versions
- **WHEN** a user maintains a skill over time
- **THEN** the documentation provides a version history markdown template with date and description format
### Requirement: Enhanced Tool Access Control Documentation
The skills lesson SHALL provide expanded documentation for the allowed-tools feature including use cases, security examples, and behavior when not specified.
#### Scenario: User wants a read-only skill
- **WHEN** a user wants to create a skill that cannot modify files
- **THEN** the documentation provides an example with allowed-tools: Read, Grep, Glob
#### Scenario: User wants security-sensitive workflow
- **WHEN** a user has a security-sensitive skill
- **THEN** the documentation explains how allowed-tools restricts Claude's capabilities within that skill context
#### Scenario: allowed-tools not specified
- **WHEN** a user doesn't specify allowed-tools
- **THEN** the documentation explains that Claude will ask for permission as normal
### Requirement: Multi-File Skill Example
The skills lesson SHALL include a comprehensive example of a multi-file skill showing directory structure with multiple reference files, scripts, and templates.
#### Scenario: User wants to create complex skill
- **WHEN** a user needs a skill with supporting files
- **THEN** the documentation provides a complete directory structure example showing SKILL.md, reference files (FORMS.md, REFERENCE.md), scripts subdirectory, and progressive disclosure explanation
@@ -1,27 +0,0 @@
# Tasks: Update Agent Skills Lesson
## 1. Update Main README (03-skills/README.md)
- [x] 1.1 Add "Managing Skills" section with viewing, testing, updating, removing guidance
- [x] 1.2 Expand "Troubleshooting Guide" with debugging tips for skipped skills, YAML errors, script permissions, path formats
- [x] 1.3 Add "Version History Best Practice" section with example
- [x] 1.4 Enhance "allowed-tools" documentation with use cases and security examples
- [x] 1.5 Add "Multi-File Skill Example" showing complex skill structure with multiple reference files
## 2. Update Blog Post (blog-posts/03-skills.md)
- [x] 2.1 Add "Managing Skills" section mirroring README updates
- [x] 2.2 Expand troubleshooting with debugging guidance from official docs
- [x] 2.3 Add version history best practice
- [x] 2.4 Enhance allowed-tools explanation
- [x] 2.5 Add multi-file skill example
## 3. Update Example Skills
- [x] 3.1 Add version history section to `03-skills/code-review/SKILL.md`
## 4. Validation
- [x] 4.1 Verify all code examples are syntactically correct
- [x] 4.2 Ensure consistency between README and blog post
- [x] 4.3 Test that existing examples still work with updated documentation
@@ -1,33 +0,0 @@
# Change: Update Slash Commands Documentation
## Why
The current slash commands documentation in `01-slash-commands/README.md` is outdated compared to the official Claude Code documentation at https://code.claude.com/docs/en/slash-commands. Several new features, built-in commands, and capabilities have been added that users should know about.
## What Changes
### Documentation Updates
- **Add comprehensive built-in commands table** - Document all 40+ built-in slash commands with their purposes
- **Update custom command features** - Document new argument handling (`$ARGUMENTS`, `$1`, `$2`, etc.)
- **Add bash execution syntax** - Document the `!` prefix for executing bash commands within slash commands
- **Update frontmatter fields** - Document `allowed-tools`, `argument-hint`, `description`, `model`, `disable-model-invocation`
- **Add file reference syntax** - Document the `@` prefix for including file contents
- **Add Plugin commands section** - Document `/plugin-name:command-name` pattern
- **Add MCP slash commands section** - Document `/mcp__<server-name>__<prompt-name>` pattern
- **Add SlashCommand Tool section** - Document programmatic invocation from Claude
- **Add Skills vs Slash Commands comparison** - Help users choose the right tool
### Example Updates
- Add example command with bash execution (`!git status`)
- Add example with file references (`@src/utils/helpers.js`)
- Add example with complete frontmatter
- Update existing examples to use official syntax
## Impact
- Affected specs: `slash-commands` (new capability spec to be created)
- Affected code: `01-slash-commands/README.md`, potentially new example files
- No breaking changes - additive documentation improvements
- Benefits all users learning about Claude Code slash commands
@@ -1,147 +0,0 @@
## ADDED Requirements
### Requirement: Slash Command Types Documentation
The documentation SHALL describe the four types of slash commands:
1. Built-in commands provided by Claude Code
2. Custom user-defined commands (project and personal)
3. Plugin commands
4. MCP (Model Context Protocol) slash commands
#### Scenario: User learns about command types
- **WHEN** a user reads the slash commands documentation
- **THEN** they understand the different types of slash commands available
- **AND** they know when to use each type
---
### Requirement: Built-in Commands Reference
The documentation SHALL include a comprehensive reference table of all built-in slash commands with their purposes, including but not limited to:
- `/add-dir` - Add additional working directories
- `/agents` - Manage custom AI subagents
- `/clear` - Clear conversation history
- `/compact` - Compact conversation with optional focus instructions
- `/config` - Open Settings interface
- `/context` - Visualize current context usage
- `/cost` - Show token usage statistics
- `/doctor` - Check installation health
- `/export` - Export conversation to file or clipboard
- `/help` - Get usage help
- `/hooks` - Manage hook configurations
- `/init` - Initialize project with CLAUDE.md
- `/mcp` - Manage MCP server connections
- `/memory` - Edit CLAUDE.md memory files
- `/model` - Select or change AI model
- `/permissions` - View or update permissions
- `/resume` - Resume conversation by ID or name
- `/review` - Request code review
- `/sandbox` - Enable sandboxed bash tool
- `/vim` - Enter vim mode
#### Scenario: User finds built-in command
- **WHEN** a user needs to perform a common operation
- **THEN** they can find the appropriate built-in command in the reference table
- **AND** they understand what the command does
---
### Requirement: Argument Handling
The documentation SHALL explain both argument handling methods:
1. `$ARGUMENTS` - Receives all arguments as a single string
2. `$1`, `$2`, `$3`, etc. - Individual positional arguments
#### Scenario: User uses $ARGUMENTS placeholder
- **WHEN** a user creates a command with `$ARGUMENTS` placeholder
- **AND** invokes it with `/fix-issue 123 high-priority`
- **THEN** `$ARGUMENTS` contains "123 high-priority"
#### Scenario: User uses positional arguments
- **WHEN** a user creates a command with `$1`, `$2`, `$3` placeholders
- **AND** invokes it with `/review-pr 456 high alice`
- **THEN** `$1` is "456", `$2` is "high", `$3` is "alice"
---
### Requirement: Bash Command Execution
The documentation SHALL explain the `!` prefix for executing bash commands within slash command files before the command runs.
#### Scenario: User includes dynamic context
- **WHEN** a user adds `!git status` in their command file
- **THEN** the git status output is included in the command context
- **AND** Claude receives the current repository state
---
### Requirement: File Reference Syntax
The documentation SHALL explain the `@` prefix for including file contents in slash commands.
#### Scenario: User references a file
- **WHEN** a user adds `@src/utils/helpers.js` in their command file
- **THEN** the contents of that file are included in the command context
---
### Requirement: Frontmatter Fields
The documentation SHALL document all supported frontmatter fields:
- `allowed-tools` - List of tools the command can use
- `argument-hint` - Expected arguments for auto-completion
- `description` - Brief description of the command
- `model` - Specific model to use for this command
- `disable-model-invocation` - Prevent SlashCommand tool from calling this command
#### Scenario: User creates command with frontmatter
- **WHEN** a user creates a command with frontmatter fields
- **THEN** Claude Code respects those configuration options
- **AND** the command behaves according to the specified settings
---
### Requirement: Plugin Commands Documentation
The documentation SHALL explain the plugin command format: `/plugin-name:command-name` or simply `/command-name` when there are no naming conflicts.
#### Scenario: User invokes plugin command
- **WHEN** a user types `/frontend-design:frontend-design`
- **THEN** the corresponding plugin command executes
---
### Requirement: MCP Slash Commands Documentation
The documentation SHALL explain the MCP slash command format: `/mcp__<server-name>__<prompt-name> [arguments]`
#### Scenario: User invokes MCP command
- **WHEN** a user types `/mcp__github__list_prs`
- **THEN** the MCP server's prompt is executed
---
### Requirement: SlashCommand Tool Documentation
The documentation SHALL explain how Claude can programmatically invoke slash commands using the SlashCommand tool, including:
- How to enable this via prompt or CLAUDE.md references
- How to disable via permissions
- The character budget limit (default 15,000, configurable via `SLASH_COMMAND_TOOL_CHAR_BUDGET`)
#### Scenario: User enables programmatic invocation
- **WHEN** a user adds "Run /write-unit-test when writing tests" to CLAUDE.md
- **THEN** Claude can automatically invoke that command when appropriate
---
### Requirement: Skills vs Slash Commands Comparison
The documentation SHALL include a comparison table helping users choose between Skills and Slash Commands based on:
- Best use cases for each
- File structure differences
- Invocation method (explicit vs automatic)
- Complexity level
#### Scenario: User decides between skill and command
- **WHEN** a user needs to create a reusable capability
- **THEN** they can use the comparison to decide whether a slash command or skill is more appropriate
@@ -1,42 +0,0 @@
## 1. Documentation Structure Updates
- [x] 1.1 Add "Types of Slash Commands" section with overview of built-in, custom, plugin, and MCP commands
- [x] 1.2 Create comprehensive built-in commands reference table (40+ commands)
- [x] 1.3 Update custom commands section with new features
## 2. Custom Command Features
- [x] 2.1 Document `$ARGUMENTS` placeholder for all arguments
- [x] 2.2 Document individual argument placeholders (`$1`, `$2`, `$3`, etc.)
- [x] 2.3 Document bash execution with `!` prefix (e.g., `!git status`)
- [x] 2.4 Document file references with `@` prefix (e.g., `@src/file.js`)
- [x] 2.5 Document thinking mode trigger via keywords
## 3. Frontmatter Updates
- [x] 3.1 Update frontmatter section with official fields
- [x] 3.2 Document `allowed-tools` field with examples
- [x] 3.3 Document `argument-hint` field for auto-completion
- [x] 3.4 Document `description` field
- [x] 3.5 Document `model` field for specific model selection
- [x] 3.6 Document `disable-model-invocation` field
## 4. New Sections
- [x] 4.1 Add "Plugin Commands" section with `/plugin-name:command-name` pattern
- [x] 4.2 Add "MCP Slash Commands" section with `/mcp__<server-name>__<prompt-name>` pattern
- [x] 4.3 Add "SlashCommand Tool" section for programmatic invocation
- [x] 4.4 Add "Skills vs Slash Commands" comparison table
## 5. Example Files
- [x] 5.1 Create new example showing bash execution feature (commit.md)
- [x] 5.2 Create new example showing file references (commit.md includes @package.json example in README)
- [x] 5.3 Update existing examples to use official frontmatter format (removed name/tags, added allowed-tools)
- [x] 5.4 Add commit command example (from official docs)
## 6. Validation
- [x] 6.1 Verify all links work correctly
- [x] 6.2 Test example commands format
- [x] 6.3 Review for consistency with official documentation
@@ -1,98 +0,0 @@
# Proposal: update-subagents-lesson
## Why
The existing subagents lesson lacks critical features documented in the official docs and uses outdated configuration formats.
## What Changes
- Update README with all official features (built-in subagents, /agents command, CLI config, resumable agents)
- Update example files to new YAML frontmatter format
- Add new example subagents (debugger, data-scientist)
## Motivation
The existing subagents lesson lacks critical features documented in the official docs:
1. **Missing `/agents` command** - The interactive management interface
2. **Incomplete configuration fields** - Missing `model`, `permissionMode`, `skills` fields
3. **No built-in subagents section** - General-Purpose, Plan, and Explore agents not documented
4. **Missing resumable agents feature** - Agent continuation with `agentId`
5. **No CLI-based configuration** - `--agents` flag for session-specific agents
6. **Outdated file format** - Uses `system_prompt` instead of YAML frontmatter with markdown body
7. **Missing thoroughness levels** - Quick, Medium, Very thorough for Explore agent
8. **No proactive invocation guidance** - "use PROACTIVELY" description patterns
## Scope
### In Scope
- Update `04-subagents/README.md` with all official documentation features
- Update example subagent files to use correct YAML frontmatter format
- Add new example subagents (debugger, data-scientist) from official docs
- Document built-in subagents (General-Purpose, Plan, Explore)
- Add `/agents` command documentation
- Add CLI-based configuration section
- Document resumable agents feature
- Update installation and usage instructions
### Out of Scope
- Plugin subagents in `07-plugins/` (separate concern)
- Creating new advanced tutorials
- Video or interactive content
## Key Changes
### 1. Configuration Format Update
**Current** (incorrect):
```yaml
---
name: agent-name
description: Brief description
tools: read, grep, diff
---
```
**Updated** (per official docs):
```yaml
---
name: agent-name
description: Description of when this subagent should be invoked
tools: tool1, tool2, tool3 # Optional - inherits all tools if omitted
model: sonnet # Optional - specify model alias or 'inherit'
permissionMode: default # Optional - permission mode
skills: skill1, skill2 # Optional - skills to auto-load
---
Your subagent's system prompt goes here in markdown.
```
### 2. Built-in Subagents Documentation
Add new section documenting:
- **General-Purpose** - Sonnet model, all tools, complex tasks
- **Plan** - Sonnet model, research tools, plan mode
- **Explore** - Haiku model, read-only, fast codebase searching with thoroughness levels
### 3. Management Features
- `/agents` command for interactive management
- CLI `--agents` flag for session-specific configuration
- Resumable agents with `agentId`
### 4. Example Updates
Update existing examples and add:
- Debugger subagent (from official docs)
- Data Scientist subagent (from official docs)
## Success Criteria
- [ ] README covers all features from official documentation
- [ ] Configuration examples use correct YAML frontmatter format
- [ ] All 5 existing example agents updated to new format
- [ ] 2 new example agents added (debugger, data-scientist)
- [ ] Built-in subagents documented
- [ ] `/agents` command documented
- [ ] Resumable agents feature documented
- [ ] Installation instructions updated
@@ -1,101 +0,0 @@
# Spec: Subagents Lesson Content
## ADDED Requirements
### Requirement: Configuration Format
The subagent configuration MUST use YAML frontmatter with all supported fields.
#### Scenario: Complete configuration example
- **Given**: A user wants to create a subagent
- **When**: They view the configuration documentation
- **Then**: The example shows all fields: name, description, tools (optional), model (optional), permissionMode (optional), skills (optional)
#### Scenario: Tools field omission
- **Given**: A subagent configuration omits the tools field
- **When**: The documentation explains this
- **Then**: It states the subagent inherits all tools from the main agent
### Requirement: Built-in Subagents Documentation
The lesson MUST document the three built-in subagents.
#### Scenario: General-Purpose subagent
- **Given**: A user reads about built-in subagents
- **When**: They view the General-Purpose section
- **Then**: They learn it uses Sonnet model, has all tools, and handles complex multi-step tasks
#### Scenario: Plan subagent
- **Given**: A user reads about built-in subagents
- **When**: They view the Plan section
- **Then**: They learn it uses Sonnet model, has Read/Glob/Grep/Bash tools, and is used in plan mode
#### Scenario: Explore subagent
- **Given**: A user reads about built-in subagents
- **When**: They view the Explore section
- **Then**: They learn it uses Haiku model, is read-only, fast, and supports thoroughness levels (quick, medium, very thorough)
### Requirement: /agents Command
The lesson MUST document the interactive /agents command.
#### Scenario: User discovers management interface
- **Given**: A user wants to manage subagents interactively
- **When**: They read the documentation
- **Then**: They learn about `/agents` command to create, edit, delete, and view subagents
### Requirement: Resumable Agents
The lesson MUST document agent continuation with agentId.
#### Scenario: User learns about resuming agents
- **Given**: A user wants to continue a previous agent conversation
- **When**: They read the resumable agents section
- **Then**: They learn agents return an agentId and can be resumed with full context
### Requirement: CLI Configuration
The lesson MUST document session-specific agent configuration via CLI.
#### Scenario: User defines agents via command line
- **Given**: A user wants to define agents for a single session
- **When**: They read the CLI configuration section
- **Then**: They learn to use `--agents` flag with JSON configuration
## ADDED Requirements
### Requirement: Example Subagent - Debugger
The lesson MUST include a debugger subagent example.
#### Scenario: User needs debugging specialist
- **Given**: A user wants a debugging-focused subagent
- **When**: They view the examples
- **Then**: They find a complete debugger.md example with root cause analysis approach
### Requirement: Example Subagent - Data Scientist
The lesson MUST include a data scientist subagent example.
#### Scenario: User needs data analysis specialist
- **Given**: A user wants a data analysis subagent
- **When**: They view the examples
- **Then**: They find a complete data-scientist.md example with SQL/BigQuery focus
### Requirement: File Location Documentation
The lesson MUST document where subagent files can be stored.
#### Scenario: User learns storage locations
- **Given**: A user wants to know where to put subagent files
- **When**: They read the file locations section
- **Then**: They learn about project (.claude/agents/), user (~/.claude/agents/), plugin, and CLI locations with priority order
### Requirement: Proactive Invocation Guidance
The lesson MUST explain how to encourage automatic subagent use.
#### Scenario: User wants subagent used automatically
- **Given**: A user wants Claude to proactively use their subagent
- **When**: They read the usage section
- **Then**: They learn to include "use PROACTIVELY" or "MUST BE USED" in the description field
@@ -1,90 +0,0 @@
# Tasks: update-subagents-lesson
## Phase 1: Update README.md Structure
1. [x] **Update Overview section**
- Add `/agents` command mention
- Add built-in subagents overview
- Update key benefits with official wording
2. [x] **Add File Locations section**
- Document project subagents (`.claude/agents/`)
- Document user subagents (`~/.claude/agents/`)
- Document plugin agents
- Document CLI-defined agents
3. [x] **Update Configuration section**
- Update YAML frontmatter format with all fields
- Add configuration fields table (name, description, tools, model, permissionMode, skills)
- Add CLI-based configuration with `--agents` flag
## Phase 2: Add New Sections
4. [x] **Add Built-in Subagents section**
- Document General-Purpose subagent (Sonnet, all tools)
- Document Plan subagent (Sonnet, research tools)
- Document Explore subagent (Haiku, read-only, thoroughness levels)
5. [x] **Add /agents Command section**
- Document interactive menu options
- Create, edit, delete operations
- View available subagents
6. [x] **Add Resumable Agents section**
- Document agentId concept
- Show resume syntax
- List use cases
7. [x] **Add Chaining Subagents section**
- Multi-agent workflows
- Sequential delegation
## Phase 3: Update Example Files
8. [x] **Update `code-reviewer.md`**
- Add model field
- Update to match official example format
- Add proactive usage hints
9. [x] **Update `test-engineer.md`**
- Add model field
- Update system prompt format
10. [x] **Update `documentation-writer.md`**
- Add model field
- Update format
11. [x] **Update `secure-reviewer.md`**
- Update to minimal permission pattern
12. [x] **Update `implementation-agent.md`**
- Update tool list format
## Phase 4: Add New Example Files
13. [x] **Create `debugger.md`**
- Copy from official docs example
- Adapt to project style
14. [x] **Create `data-scientist.md`**
- Copy from official docs example
- Adapt to project style
## Phase 5: Finalize
15. [x] **Update Installation Instructions**
- Add `/agents` method
- Update verification steps
16. [x] **Update Related Concepts**
- Link to new sections
- Update comparison table
17. [x] **Update last modified date**
## Validation
- [x] All YAML frontmatter validates correctly
- [x] No broken internal links
- [x] Examples use consistent formatting
- [x] Built-in agents documented accurately
@@ -1,23 +0,0 @@
# Change: Add Blog Post - 4 Essential Slash Commands for Development Workflow
## Why
The claude-howto project provides excellent reference documentation but lacks blog-style content that showcases real-world usage patterns. Users have found 4 slash commands particularly valuable across their development workflow, and a blog post explaining when/where/how to use each would help others adopt these productivity tools.
## What Changes
- Create new `blog-post/` directory for blog content
- Add blog post: "4 Essential Slash Commands I Use in Every Project"
- Cover 4 commands with practical guidance:
- `/push-all` - Quick deployment of coherent changes
- `/setup-ci-cd` - Post-POC quality infrastructure
- `/doc-refactor` - Post-MVP documentation polish
- `/unit-test-expand` - Milestone-driven test expansion
- Reference the first slash commands blog: [Discovering Claude Code Slash Commands](https://medium.com/@luongnv89/discovering-claude-code-slash-commands-cdc17f0dfb29)
- Link to full command files when content exceeds 30 lines
## Impact
- Affected specs: None (new capability)
- Affected code: New `blog-post/` directory and content
- No breaking changes
@@ -1,41 +0,0 @@
## ADDED Requirements
### Requirement: Blog Post Directory Structure
The project SHALL provide a `blog-post/` directory for hosting blog-style content that complements the reference documentation.
#### Scenario: Blog post directory exists
- **WHEN** a user navigates to the project root
- **THEN** a `blog-post/` directory is present containing blog content
### Requirement: Slash Commands Usage Blog Post
The blog SHALL document 4 essential slash commands with practical usage guidance covering when, where, and how to use each command in a development workflow.
#### Scenario: Complete command coverage
- **WHEN** a user reads the blog post
- **THEN** they find documentation for `/push-all`, `/setup-ci-cd`, `/doc-refactor`, and `/unit-test-expand`
#### Scenario: Command file linking for long content
- **WHEN** a command file exceeds 30 lines
- **THEN** the blog SHALL provide a link to the full command file in the claude-howto project
#### Scenario: Inline content for short commands
- **WHEN** a command file is 30 lines or fewer
- **THEN** the blog MAY include the command content inline
### Requirement: Development Workflow Context
Each command section SHALL explain when to use the command in the development lifecycle (POC, MVP, milestone phases).
#### Scenario: Workflow phase guidance
- **WHEN** a user reads a command section
- **THEN** they understand which development phase the command is most appropriate for
### Requirement: Reference to First Blog
The blog post SHALL reference the introductory slash commands blog: "Discovering Claude Code Slash Commands" for foundational context.
#### Scenario: Blog reference present
- **WHEN** a user reads the introduction
- **THEN** they find a link to the original slash commands blog post on Medium
@@ -1,25 +0,0 @@
## 1. Setup
- [x] 1.1 Create `blog-post/` directory at project root
## 2. Blog Post Creation
- [x] 2.1 Create blog post markdown file with proper structure
- [x] 2.2 Write introduction referencing first slash commands blog
- [x] 2.3 Document `/push-all` with link to full command (152 lines)
- [x] 2.4 Document `/setup-ci-cd` with inline content (25 lines)
- [x] 2.5 Document `/doc-refactor` with inline content (23 lines)
- [x] 2.6 Document `/unit-test-expand` with inline content (24 lines)
- [x] 2.7 Add workflow diagram showing when to use each command
- [x] 2.8 Write conclusion with development lifecycle integration
## 3. Integration
- [x] 3.1 Add blog-post to main README navigation
- [x] 3.2 Cross-reference from slash-commands README
## 4. Verification
- [x] 4.1 Verify all internal links work
- [x] 4.2 Verify external links are valid
- [x] 4.3 Review content for clarity and accuracy
@@ -1,20 +0,0 @@
# Change: Update Slash Commands README with New Commands
## Why
The `01-slash-commands/README.md` is outdated and needs to reflect:
1. Updated `push-all.md` command with enhanced safety checks (API key validation, confirmation workflow)
2. Three new slash commands added to the folder: `doc-refactor.md`, `setup-ci-cd.md`, `unit-test-expand.md`
## What Changes
- **Update push-all documentation**: Reflect the enhanced workflow including safety checks, API key validation, and confirmation prompts
- **Add doc-refactor command**: Document the new documentation restructuring command
- **Add setup-ci-cd command**: Document the new CI/CD pipeline setup command
- **Add unit-test-expand command**: Document the new test coverage expansion command
- Update "Available Commands" section count from 4 to 7 commands
## Impact
- Affected specs: `slash-commands`
- Affected code: `01-slash-commands/README.md`
@@ -1,66 +0,0 @@
## ADDED Requirements
### Requirement: Push-All Command with Safety Checks
The documentation SHALL describe the `/push-all` command with its comprehensive safety workflow including:
1. Change analysis (git status, diff, log)
2. Safety checks for secrets, API keys, large files, build artifacts
3. API key validation distinguishing real keys from placeholders
4. Confirmation prompt before proceeding
5. Conventional commit message generation
6. Error handling guidance
#### Scenario: User learns push-all safety workflow
- **WHEN** a user reads the push-all command documentation
- **THEN** they understand the multi-step safety workflow
- **AND** they know what types of files trigger warnings
- **AND** they understand they must confirm before execution
---
### Requirement: Doc-Refactor Command Documentation
The documentation SHALL describe the `/doc-refactor` command for restructuring project documentation including:
1. Project type analysis (library, API, web app, CLI, microservices)
2. Documentation centralization in `docs/` folder
3. Root README streamlining
4. Component-level documentation
5. Guide creation based on project type
#### Scenario: User uses doc-refactor command
- **WHEN** a user reads the doc-refactor documentation
- **THEN** they understand how to invoke the command
- **AND** they know what documentation structure changes to expect
- **AND** they understand the command adapts to project type
---
### Requirement: Setup-CI-CD Command Documentation
The documentation SHALL describe the `/setup-ci-cd` command for implementing quality gates including:
1. Project analysis for language and tooling detection
2. Pre-commit hook configuration with language-specific tools
3. GitHub Actions workflow creation
4. Pipeline verification steps
#### Scenario: User uses setup-ci-cd command
- **WHEN** a user reads the setup-ci-cd documentation
- **THEN** they understand the command creates pre-commit hooks
- **AND** they know GitHub Actions workflows will be generated
- **AND** they understand tools are selected based on project language
---
### Requirement: Unit-Test-Expand Command Documentation
The documentation SHALL describe the `/unit-test-expand` command for increasing test coverage including:
1. Coverage analysis to identify gaps
2. Gap identification (branches, error paths, boundaries)
3. Framework-specific test generation
4. Coverage verification
#### Scenario: User uses unit-test-expand command
- **WHEN** a user reads the unit-test-expand documentation
- **THEN** they understand the command analyzes existing coverage
- **AND** they know it targets untested branches and edge cases
- **AND** they understand it works with their project's testing framework
@@ -1,7 +0,0 @@
## 1. Implementation
- [x] 1.1 Update `/push-all` section in README to reflect enhanced safety checks (API key validation, confirmation workflow, detailed error handling)
- [x] 1.2 Add `/doc-refactor` section documenting the documentation restructuring command
- [x] 1.3 Add `/setup-ci-cd` section documenting the CI/CD pipeline setup command
- [x] 1.4 Add `/unit-test-expand` section documenting the test coverage expansion command
- [x] 1.5 Update section heading to reflect 8 available commands (was 4, added 4 new)
-125
View File
@@ -1,125 +0,0 @@
# Project Context
## Purpose
**Claude How To** is a comprehensive educational repository providing examples and documentation for Claude Code features and concepts. The project serves as:
- A learning resource for developers new to Claude Code
- A reference collection of example configurations (slash commands, memory, skills, subagents, MCP, hooks, plugins, checkpoints, advanced features)
- A tool for generating offline documentation (EPUB format)
**Goals:**
1. Provide clear, numbered learning paths (01-09) for Claude Code features
2. Include ready-to-use example configurations users can copy to their projects
3. Generate an EPUB ebook from the documentation for offline reading
4. Maintain high-quality Python tooling with CI/CD automation
## Tech Stack
### Primary Technologies
- **Python 3.10+** - EPUB builder script and tooling
- **Markdown** - Documentation content (all guides and examples)
- **JSON/YAML** - Configuration files (MCP configs, plugin definitions)
- **Shell Scripts** - Hook examples in `06-hooks/`
### Python Dependencies
- `ebooklib` - EPUB generation
- `markdown` - Markdown to HTML conversion
- `beautifulsoup4` - HTML parsing/manipulation
- `httpx` - HTTP client (for Mermaid diagram rendering)
- `pillow` - Image processing
- `tenacity` - Retry logic for external API calls
### Development Tools
- `uv` - Python package manager and virtual environment
- `ruff` - Linting and formatting (replaces black, isort, flake8)
- `bandit` - Security scanning
- `pytest` / `pytest-asyncio` - Testing framework
- `pre-commit` - Git hooks for code quality
### CI/CD
- **GitHub Actions** - Automated linting, security scanning, testing, and EPUB builds
- Workflows in `.github/workflows/ci.yml` and `.github/workflows/release.yml`
## Project Conventions
### Code Style
- **Python**: Ruff for linting and formatting
- Line length: 88 characters
- Target: Python 3.10
- Double quotes, space indentation
- Import sorting: isort rules via Ruff
- **Markdown**: Standard GitHub-Flavored Markdown
- **YAML/JSON**: Validated via pre-commit hooks
### Architecture Patterns
- **Numbered directories** (01-09) for learning progression
- **Each feature folder** contains:
- Example files demonstrating the feature
- `README.md` with detailed explanations
- **Scripts directory** contains Python tooling:
- `build_epub.py` - Main EPUB builder with async Mermaid rendering
- `tests/` - pytest test suite
### Testing Strategy
- **Unit tests** in `scripts/tests/`
- **Pytest** with `pytest-asyncio` for async code
- **CI runs tests** on every push/PR to `main`
- **Test coverage** focused on EPUB builder functionality
### Git Workflow
- **Main branch**: `main`
- **PRs required** for contributions
- **Pre-commit hooks** enforce:
- Ruff lint and format
- Bandit security scan
- YAML/TOML validation
- Trailing whitespace and EOF fixes
- **Commit messages**: Descriptive, no co-author attribution required
- **No time estimates** in commits or PRs
## Domain Context
### Claude Code Concepts
This repository covers nine major Claude Code features:
1. **Slash Commands** - User-invoked shortcuts (`/optimize`, `/pr`)
2. **Memory** - Persistent context via `CLAUDE.md` files
3. **Skills** - Auto-invoked reusable capabilities
4. **Subagents** - Specialized AI assistants with isolated contexts
5. **MCP Protocol** - External tool/API access
6. **Hooks** - Event-driven shell command automation
7. **Plugins** - Bundled feature collections
8. **Checkpoints** - Session snapshots and rewind
9. **Advanced Features** - Planning mode, extended thinking, background tasks
### Installation Targets
Examples are designed to be copied to:
- `~/.claude/` - Personal/global configurations
- `.claude/` - Project-specific configurations
- Root project directory - For `CLAUDE.md` memory files
## Important Constraints
- **Python 3.10+** required for all scripts
- **Virtual environment** must be activated before running Python (configured in `~/.claude/CLAUDE.md`)
- **No Claude co-author** in commit messages (per user preferences)
- **No auto-commits/pushes** without explicit user request
- **Large files** limited to 1MB (pre-commit hook)
- **Security scans** must pass (Bandit)
## External Dependencies
### External Services
- **Mermaid.ink API** - Renders Mermaid diagrams to images for EPUB
- Used in `build_epub.py` with retry logic via `tenacity`
- Rate limiting handled with exponential backoff
### GitHub Integration
- **GitHub Actions** for CI/CD
- **GitHub Releases** for versioned EPUB distribution
- Example MCP configurations reference GitHub API tokens
### No Runtime External Dependencies
- Documentation is static markdown
- EPUB can be built offline (diagrams cached or skip rendering)
-44
View File
@@ -1,44 +0,0 @@
# blog-post Specification
## Purpose
TBD - created by archiving change add-blog-post-slash-commands. Update Purpose after archive.
## Requirements
### Requirement: Blog Post Directory Structure
The project SHALL provide a `blog-post/` directory for hosting blog-style content that complements the reference documentation.
#### Scenario: Blog post directory exists
- **WHEN** a user navigates to the project root
- **THEN** a `blog-post/` directory is present containing blog content
### Requirement: Slash Commands Usage Blog Post
The blog SHALL document 4 essential slash commands with practical usage guidance covering when, where, and how to use each command in a development workflow.
#### Scenario: Complete command coverage
- **WHEN** a user reads the blog post
- **THEN** they find documentation for `/push-all`, `/setup-ci-cd`, `/doc-refactor`, and `/unit-test-expand`
#### Scenario: Command file linking for long content
- **WHEN** a command file exceeds 30 lines
- **THEN** the blog SHALL provide a link to the full command file in the claude-howto project
#### Scenario: Inline content for short commands
- **WHEN** a command file is 30 lines or fewer
- **THEN** the blog MAY include the command content inline
### Requirement: Development Workflow Context
Each command section SHALL explain when to use the command in the development lifecycle (POC, MVP, milestone phases).
#### Scenario: Workflow phase guidance
- **WHEN** a user reads a command section
- **THEN** they understand which development phase the command is most appropriate for
### Requirement: Reference to First Blog
The blog post SHALL reference the introductory slash commands blog: "Discovering Claude Code Slash Commands" for foundational context.
#### Scenario: Blog reference present
- **WHEN** a user reads the introduction
- **THEN** they find a link to the original slash commands blog post on Medium
-102
View File
@@ -1,102 +0,0 @@
# cli-reference Specification
## Purpose
TBD - created by archiving change add-cli-lesson. Update Purpose after archive.
## Requirements
### Requirement: CLI Reference Lesson
The repository SHALL provide a comprehensive CLI reference lesson at `10-cli/` that documents all command-line interface options, flags, and usage patterns for Claude Code.
#### Scenario: User learns CLI basics
- **WHEN** a user navigates to `10-cli/README.md`
- **THEN** they find an overview of CLI capabilities with architecture diagram
- **AND** a quick reference table of all CLI commands
- **AND** examples demonstrating common usage patterns
#### Scenario: User looks up specific CLI flag
- **WHEN** a user needs to understand a specific CLI flag (e.g., `--output-format`)
- **THEN** they find the flag documented with description, options, and example usage
- **AND** related flags are cross-referenced
#### Scenario: User integrates Claude Code in CI/CD
- **WHEN** a user wants to use Claude Code in automation
- **THEN** they find practical examples for CI/CD integration
- **AND** examples show headless mode, JSON output, and error handling
### Requirement: CLI Commands Documentation
The CLI lesson SHALL document all primary CLI commands with their syntax and use cases.
#### Scenario: Interactive mode commands documented
- **WHEN** a user reads the CLI commands section
- **THEN** they find `claude` for starting interactive REPL
- **AND** `claude "query"` for starting with initial prompt
- **AND** `claude -c` for continuing recent conversation
- **AND** `claude -r` for resuming specific session
#### Scenario: Print mode commands documented
- **WHEN** a user reads the print mode section
- **THEN** they find `claude -p "query"` for non-interactive queries
- **AND** pipe input examples like `cat file | claude -p "query"`
- **AND** output format options (text, json, stream-json)
### Requirement: CLI Flags Documentation
The CLI lesson SHALL document all CLI flags organized by category with examples.
#### Scenario: Core flags documented
- **WHEN** a user reads the core flags section
- **THEN** they find `-p/--print`, `-c/--continue`, `-r/--resume`, `-v/--version`
- **AND** each flag has description and example usage
#### Scenario: Model configuration flags documented
- **WHEN** a user reads the model configuration section
- **THEN** they find `--model`, `--fallback-model`, `--agent`, `--agents`
- **AND** examples show model selection and custom agent definitions
#### Scenario: Permission flags documented
- **WHEN** a user reads the permission section
- **THEN** they find `--tools`, `--allowedTools`, `--disallowedTools`
- **AND** `--dangerously-skip-permissions`, `--permission-mode`
- **AND** examples demonstrate security-conscious configurations
### Requirement: High-Value Use Cases
The CLI lesson SHALL include practical use case examples that demonstrate real-world CLI value.
#### Scenario: CI/CD integration example provided
- **WHEN** a user reads the CI/CD use case
- **THEN** they find a complete GitHub Actions or Jenkins example
- **AND** the example demonstrates headless mode with JSON output
- **AND** error handling and exit codes are explained
#### Scenario: Script piping example provided
- **WHEN** a user reads the script piping use case
- **THEN** they find examples of piping file contents to Claude
- **AND** examples show log analysis, code review via pipe
- **AND** output processing patterns are demonstrated
#### Scenario: Multi-session workflow example provided
- **WHEN** a user reads the session management use case
- **THEN** they find examples of resuming and forking sessions
- **AND** session naming and organization patterns are shown
### Requirement: Navigation Integration
The root documentation SHALL be updated to include the CLI lesson in all navigation elements.
#### Scenario: CLI appears in Quick Navigation
- **WHEN** a user views the README Quick Navigation table
- **THEN** they see CLI Reference listed with link to `10-cli/`
#### Scenario: CLI appears in Learning Path
- **WHEN** a user views the Learning Path table
- **THEN** they see CLI Reference at position 10 with appropriate difficulty and timing
#### Scenario: CLI appears in Feature Comparison
- **WHEN** a user views the Feature Comparison table
- **THEN** CLI Reference is included with invocation, persistence, and use case columns
#### Scenario: CLI appears in Directory Structure
- **WHEN** a user views the Directory Structure tree
- **THEN** `10-cli/` directory is shown with `README.md`
-146
View File
@@ -1,146 +0,0 @@
# hooks-documentation Specification
## Purpose
TBD - created by archiving change update-hooks-lesson. Update Purpose after archive.
## Requirements
### Requirement: Hook Event Types Documentation
The hooks lesson SHALL document all 9 official hook events with their correct names, matchers, and behavior.
#### Scenario: Complete hook event coverage
- **WHEN** a user reads the hooks lesson
- **THEN** they find documentation for PreToolUse, PermissionRequest, PostToolUse, Notification, UserPromptSubmit, Stop, SubagentStop, PreCompact, SessionStart, and SessionEnd events
#### Scenario: No deprecated hook events
- **WHEN** a user searches for PreCommit, PostCommit, or PrePush hooks
- **THEN** they do not find these as they are not valid Claude Code hook events
### Requirement: Hook Configuration Format
The hooks lesson SHALL document the correct array-based configuration format with matchers and hooks arrays.
#### Scenario: Configuration structure
- **WHEN** a user views hook configuration examples
- **THEN** they see the structure: `{ "hooks": { "EventName": [{ "matcher": "Pattern", "hooks": [{ "type": "command", "command": "..." }] }] } }`
#### Scenario: Matcher patterns
- **WHEN** a user needs to match specific tools
- **THEN** they find documentation for exact string matching, regex patterns, and wildcards
### Requirement: Hook Input Documentation
The hooks lesson SHALL document the JSON stdin input that hooks receive.
#### Scenario: JSON input structure
- **WHEN** a user writes a hook script
- **THEN** they understand the input includes session_id, transcript_path, cwd, permission_mode, hook_event_name, tool_name, tool_input, and tool_use_id
#### Scenario: Event-specific input fields
- **WHEN** a user writes a hook for a specific event
- **THEN** they find documentation for event-specific input fields (e.g., stop_hook_active for Stop event)
### Requirement: Hook Output Documentation
The hooks lesson SHALL document hook output semantics including exit codes and JSON stdout structure.
#### Scenario: Exit code semantics
- **WHEN** a user implements a hook
- **THEN** they understand exit code 0 means success, exit code 2 means blocking error (stderr used as error message), and other codes mean non-blocking error
#### Scenario: JSON output format
- **WHEN** a hook needs to control behavior
- **THEN** the user can output JSON with continue, stopReason, suppressOutput, systemMessage, and hookSpecificOutput fields
#### Scenario: Event-specific output
- **WHEN** a user writes a PreToolUse hook
- **THEN** they can output permissionDecision (allow/deny/ask), permissionDecisionReason, and updatedInput
### Requirement: Prompt-Based Hooks Documentation
The hooks lesson SHALL document type="prompt" hooks for LLM-based evaluation on Stop and SubagentStop events.
#### Scenario: Prompt hook configuration
- **WHEN** a user wants intelligent stop evaluation
- **THEN** they find documentation for configuring type="prompt" hooks with prompt text and timeout
#### Scenario: LLM response schema
- **WHEN** using prompt-based hooks
- **THEN** the user understands the expected response schema with decision (approve/block), reason, continue, stopReason, and systemMessage
### Requirement: Environment Variables Documentation
The hooks lesson SHALL document all environment variables available to hooks.
#### Scenario: Standard environment variables
- **WHEN** a user writes a hook script
- **THEN** they can use CLAUDE_PROJECT_DIR for the absolute project path
#### Scenario: SessionStart environment persistence
- **WHEN** using SessionStart hooks
- **THEN** the user can persist environment variables via CLAUDE_ENV_FILE
#### Scenario: Remote environment detection
- **WHEN** running in web environment
- **THEN** hooks can check CLAUDE_CODE_REMOTE to detect this
### Requirement: Security Documentation
The hooks lesson SHALL include security considerations and best practices from the official documentation.
#### Scenario: Security disclaimer
- **WHEN** a user reads about hooks
- **THEN** they see a clear disclaimer that hooks execute arbitrary shell commands at their own risk
#### Scenario: Security best practices
- **WHEN** a user implements hooks
- **THEN** they find guidance on input validation, shell variable quoting, path traversal prevention, and sensitive file handling
### Requirement: MCP Tool Hook Patterns
The hooks lesson SHALL document how to create hooks for MCP tools.
#### Scenario: MCP tool matching
- **WHEN** a user wants to hook into MCP tool calls
- **THEN** they find documentation for the pattern `mcp__<server>__<tool>` and regex matching
### Requirement: Plugin Hooks Documentation
The hooks lesson SHALL document how plugins can provide hooks.
#### Scenario: Plugin hook configuration
- **WHEN** a plugin needs to provide hooks
- **THEN** documentation covers hooks/hooks.json structure and ${CLAUDE_PLUGIN_ROOT} variable
### Requirement: Debugging Documentation
The hooks lesson SHALL document how to debug hook execution.
#### Scenario: Debug mode
- **WHEN** hooks are not working as expected
- **THEN** users can enable `claude --debug` for detailed hook execution logs
#### Scenario: Verbose mode
- **WHEN** using Claude Code interactively
- **THEN** users can enable verbose mode (ctrl+o) to see hook execution progress
### Requirement: Working Example Scripts
The hooks lesson SHALL provide working example scripts that use JSON stdin input.
#### Scenario: Bash command validator
- **WHEN** a user wants to validate bash commands
- **THEN** they find a working Python script that reads JSON stdin and validates commands
#### Scenario: Intelligent stop hook
- **WHEN** a user wants automatic task completion verification
- **THEN** they find a working prompt-based stop hook example
### Requirement: Context Usage Reporting Hook Example
The hooks lesson SHALL include a correct, working example showing how to create a hook that reports context/token usage after each Claude response.
#### Scenario: Token calculation is correct
- **WHEN** a user copies the context-usage.py example
- **AND** runs it as a Stop hook
- **THEN** the hook correctly calculates estimated tokens from total character count
- **AND** displays a non-zero token count proportional to conversation length
#### Scenario: User learns to create context monitoring hook
- **WHEN** a user reads the context usage reporter example
- **THEN** they find a complete Python script that reads the transcript file
- **AND** they understand how to estimate token usage from conversation history
- **AND** they see the configuration for Stop hooks
- **AND** they understand the limitations of token estimation
#### Scenario: Hook output format is documented
- **WHEN** a user implements the context usage hook
- **THEN** they can generate a one-line report showing used tokens and remaining capacity
- **AND** the output shows realistic token counts based on conversation size
-67
View File
@@ -1,67 +0,0 @@
# skills-lesson Specification
## Purpose
TBD - created by archiving change update-skills-lesson. Update Purpose after archive.
## Requirements
### Requirement: Managing Skills Documentation
The skills lesson SHALL provide comprehensive guidance for managing skills including viewing available skills, testing skills, updating skills with restart requirements, and removing skills.
#### Scenario: User wants to view available skills
- **WHEN** a user wants to see what skills are available
- **THEN** the documentation provides both CLI method (asking Claude "What Skills are available?") and filesystem method (ls ~/.claude/skills/ and ls .claude/skills/)
#### Scenario: User wants to test a skill
- **WHEN** a user wants to test if their skill works
- **THEN** the documentation explains that skills activate automatically based on matching descriptions, with example test queries
#### Scenario: User wants to update a skill
- **WHEN** a user modifies a SKILL.md file
- **THEN** the documentation explains that changes take effect on next Claude Code startup and restart is required if already running
#### Scenario: User wants to remove a skill
- **WHEN** a user wants to remove a skill
- **THEN** the documentation provides rm -rf commands for both personal and project skills, with git commit for project skills
### Requirement: Enhanced Debugging Guidance
The skills lesson SHALL provide detailed debugging guidance for common skill issues including skipped skills, YAML errors, script permissions, and path formats.
#### Scenario: Skill not being discovered
- **WHEN** Claude doesn't use a user's skill
- **THEN** the documentation explains to check: description specificity, YAML syntax validity (opening/closing ---, no tabs), and correct file path location
#### Scenario: Skill has errors
- **WHEN** a skill has runtime errors
- **THEN** the documentation explains to check: dependency installation, script execute permissions (chmod +x), and forward slash usage in paths
#### Scenario: Multiple skills conflict
- **WHEN** multiple skills are activated unexpectedly
- **THEN** the documentation explains using distinct trigger terms in descriptions to help Claude choose the right skill
### Requirement: Version History Documentation
The skills lesson SHALL include a best practice example for documenting skill version history in SKILL.md files.
#### Scenario: User wants to track skill versions
- **WHEN** a user maintains a skill over time
- **THEN** the documentation provides a version history markdown template with date and description format
### Requirement: Enhanced Tool Access Control Documentation
The skills lesson SHALL provide expanded documentation for the allowed-tools feature including use cases, security examples, and behavior when not specified.
#### Scenario: User wants a read-only skill
- **WHEN** a user wants to create a skill that cannot modify files
- **THEN** the documentation provides an example with allowed-tools: Read, Grep, Glob
#### Scenario: User wants security-sensitive workflow
- **WHEN** a user has a security-sensitive skill
- **THEN** the documentation explains how allowed-tools restricts Claude's capabilities within that skill context
#### Scenario: allowed-tools not specified
- **WHEN** a user doesn't specify allowed-tools
- **THEN** the documentation explains that Claude will ask for permission as normal
### Requirement: Multi-File Skill Example
The skills lesson SHALL include a comprehensive example of a multi-file skill showing directory structure with multiple reference files, scripts, and templates.
#### Scenario: User wants to create complex skill
- **WHEN** a user needs a skill with supporting files
- **THEN** the documentation provides a complete directory structure example showing SKILL.md, reference files (FORMS.md, REFERENCE.md), scripts subdirectory, and progressive disclosure explanation
-150
View File
@@ -1,150 +0,0 @@
# slash-commands Specification
## Purpose
TBD - created by archiving change update-slash-commands-session. Update Purpose after archive.
## Requirements
### Requirement: Slash Command Types Documentation
The documentation SHALL describe the four types of slash commands:
1. Built-in commands provided by Claude Code
2. Custom user-defined commands (project and personal)
3. Plugin commands
4. MCP (Model Context Protocol) slash commands
#### Scenario: User learns about command types
- **WHEN** a user reads the slash commands documentation
- **THEN** they understand the different types of slash commands available
- **AND** they know when to use each type
---
### Requirement: Built-in Commands Reference
The documentation SHALL include a comprehensive reference table of all built-in slash commands with their purposes, including but not limited to:
- `/add-dir` - Add additional working directories
- `/agents` - Manage custom AI subagents
- `/clear` - Clear conversation history
- `/compact` - Compact conversation with optional focus instructions
- `/config` - Open Settings interface
- `/context` - Visualize current context usage
- `/cost` - Show token usage statistics
- `/doctor` - Check installation health
- `/export` - Export conversation to file or clipboard
- `/help` - Get usage help
- `/hooks` - Manage hook configurations
- `/init` - Initialize project with CLAUDE.md
- `/mcp` - Manage MCP server connections
- `/memory` - Edit CLAUDE.md memory files
- `/model` - Select or change AI model
- `/permissions` - View or update permissions
- `/resume` - Resume conversation by ID or name
- `/review` - Request code review
- `/sandbox` - Enable sandboxed bash tool
- `/vim` - Enter vim mode
#### Scenario: User finds built-in command
- **WHEN** a user needs to perform a common operation
- **THEN** they can find the appropriate built-in command in the reference table
- **AND** they understand what the command does
---
### Requirement: Argument Handling
The documentation SHALL explain both argument handling methods:
1. `$ARGUMENTS` - Receives all arguments as a single string
2. `$1`, `$2`, `$3`, etc. - Individual positional arguments
#### Scenario: User uses $ARGUMENTS placeholder
- **WHEN** a user creates a command with `$ARGUMENTS` placeholder
- **AND** invokes it with `/fix-issue 123 high-priority`
- **THEN** `$ARGUMENTS` contains "123 high-priority"
#### Scenario: User uses positional arguments
- **WHEN** a user creates a command with `$1`, `$2`, `$3` placeholders
- **AND** invokes it with `/review-pr 456 high alice`
- **THEN** `$1` is "456", `$2` is "high", `$3` is "alice"
---
### Requirement: Bash Command Execution
The documentation SHALL explain the `!` prefix for executing bash commands within slash command files before the command runs.
#### Scenario: User includes dynamic context
- **WHEN** a user adds `!git status` in their command file
- **THEN** the git status output is included in the command context
- **AND** Claude receives the current repository state
---
### Requirement: File Reference Syntax
The documentation SHALL explain the `@` prefix for including file contents in slash commands.
#### Scenario: User references a file
- **WHEN** a user adds `@src/utils/helpers.js` in their command file
- **THEN** the contents of that file are included in the command context
---
### Requirement: Frontmatter Fields
The documentation SHALL document all supported frontmatter fields:
- `allowed-tools` - List of tools the command can use
- `argument-hint` - Expected arguments for auto-completion
- `description` - Brief description of the command
- `model` - Specific model to use for this command
- `disable-model-invocation` - Prevent SlashCommand tool from calling this command
#### Scenario: User creates command with frontmatter
- **WHEN** a user creates a command with frontmatter fields
- **THEN** Claude Code respects those configuration options
- **AND** the command behaves according to the specified settings
---
### Requirement: Plugin Commands Documentation
The documentation SHALL explain the plugin command format: `/plugin-name:command-name` or simply `/command-name` when there are no naming conflicts.
#### Scenario: User invokes plugin command
- **WHEN** a user types `/frontend-design:frontend-design`
- **THEN** the corresponding plugin command executes
---
### Requirement: MCP Slash Commands Documentation
The documentation SHALL explain the MCP slash command format: `/mcp__<server-name>__<prompt-name> [arguments]`
#### Scenario: User invokes MCP command
- **WHEN** a user types `/mcp__github__list_prs`
- **THEN** the MCP server's prompt is executed
---
### Requirement: SlashCommand Tool Documentation
The documentation SHALL explain how Claude can programmatically invoke slash commands using the SlashCommand tool, including:
- How to enable this via prompt or CLAUDE.md references
- How to disable via permissions
- The character budget limit (default 15,000, configurable via `SLASH_COMMAND_TOOL_CHAR_BUDGET`)
#### Scenario: User enables programmatic invocation
- **WHEN** a user adds "Run /write-unit-test when writing tests" to CLAUDE.md
- **THEN** Claude can automatically invoke that command when appropriate
---
### Requirement: Skills vs Slash Commands Comparison
The documentation SHALL include a comparison table helping users choose between Skills and Slash Commands based on:
- Best use cases for each
- File structure differences
- Invocation method (explicit vs automatic)
- Complexity level
#### Scenario: User decides between skill and command
- **WHEN** a user needs to create a reusable capability
- **THEN** they can use the comparison to decide whether a slash command or skill is more appropriate
-40
View File
@@ -1,40 +0,0 @@
# subagents-lesson Specification
## Purpose
TBD - created by archiving change update-subagents-lesson. Update Purpose after archive.
## Requirements
### Requirement: Example Subagent - Debugger
The lesson MUST include a debugger subagent example.
#### Scenario: User needs debugging specialist
- **Given**: A user wants a debugging-focused subagent
- **When**: They view the examples
- **Then**: They find a complete debugger.md example with root cause analysis approach
### Requirement: Example Subagent - Data Scientist
The lesson MUST include a data scientist subagent example.
#### Scenario: User needs data analysis specialist
- **Given**: A user wants a data analysis subagent
- **When**: They view the examples
- **Then**: They find a complete data-scientist.md example with SQL/BigQuery focus
### Requirement: File Location Documentation
The lesson MUST document where subagent files can be stored.
#### Scenario: User learns storage locations
- **Given**: A user wants to know where to put subagent files
- **When**: They read the file locations section
- **Then**: They learn about project (.claude/agents/), user (~/.claude/agents/), plugin, and CLI locations with priority order
### Requirement: Proactive Invocation Guidance
The lesson MUST explain how to encourage automatic subagent use.
#### Scenario: User wants subagent used automatically
- **Given**: A user wants Claude to proactively use their subagent
- **When**: They read the usage section
- **Then**: They learn to include "use PROACTIVELY" or "MUST BE USED" in the description field