Files
David Blanc Brioir a73ed2d98e chore: Add autonomous agent infrastructure and cleanup old files
- Disable CLAUDE.md confirmation rules for autonomous agent operation
- Add utility scripts: check_linear_status.py, check_meta_issue.py, move_issues_to_todo.py
- Add works filter specification: prompts/app_spec_works_filter.txt
- Update .linear_project.json with works filter issues
- Remove old/stale scripts and documentation files
- Update search.html template

This commit completes the infrastructure for the autonomous agent that
successfully implemented all 13 works filter issues (LRP-136 to LRP-148).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-04 16:42:42 +01:00

265 lines
9.3 KiB
Markdown

# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Comportement de l'assistant
<!--
TEMPORARILY DISABLED FOR AUTONOMOUS AGENT RUNS
To re-enable interactive mode, uncomment this section.
**RÈGLE ABSOLUE** : L'assistant doit **TOUJOURS demander confirmation explicite** avant :
- Créer ou modifier des fichiers
- Exécuter des commandes Bash (sauf lecture: ls, cat, git status, docker ps, etc.)
- Installer des dépendances
- Modifier la configuration Docker
- Effectuer des opérations git (commit, push, pull)
**Mode de travail requis** :
1. **Analyser** : Comprendre la demande de l'utilisateur
2. **Expliquer** : Proposer une solution claire avec les avantages/inconvénients
3. **ATTENDRE** : Ne JAMAIS commencer à coder sans accord explicite ("oui", "ok", "vas-y", "code", etc.)
4. **Implémenter** : Seulement après accord, exécuter les modifications
**Exceptions** (pas besoin de confirmation) :
- Commandes de lecture : `ls`, `cat`, `git status`, `git log`, `docker ps`, `curl` (GET)
- Recherche de fichiers : `grep`, `find`, `Glob`
- Lecture de fichiers : `Read`
- Affichage d'informations : `WebSearch`, `WebFetch`
**En cas de doute** : TOUJOURS demander avant d'agir.
-->
**For Autonomous Agent**: When running via `autonomous_agent_demo.py`, the agent should work autonomously without requesting confirmation for file modifications or code changes. The agent is trusted to implement features according to Linear issue specifications.
## Overview
This is an autonomous coding agent framework that uses Claude Agent SDK with Linear integration for project management. The framework enables long-running autonomous development sessions where agents create complete applications from XML specifications.
**Key Architecture**: Two-agent pattern (Initializer + Coding Agent) with Linear as the single source of truth for project state and progress tracking.
## Common Commands
### Running the Agent
```bash
# Fresh project initialization
python autonomous_agent_demo.py --project-dir ./my_project
# Continue existing project
python autonomous_agent_demo.py --project-dir ./my_project
# Add new features to existing project (Initializer Bis)
python autonomous_agent_demo.py --project-dir ./my_project --new-spec app_spec_theme_customization.txt
# Limit iterations for testing
python autonomous_agent_demo.py --project-dir ./my_project --max-iterations 3
```
### Testing
```bash
# Run security hook tests
python test_security.py
# Test mypy type checking (for library projects)
mypy path/to/module.py
```
### Environment Setup
```bash
# Generate Claude Code OAuth token
claude setup-token
# Install dependencies
pip install -r requirements.txt
```
## High-Level Architecture
### Core Agent Flow
1. **First Run (Initializer Agent)**:
- Reads `prompts/app_spec.txt` specification
- Creates Linear project and ~50 issues (one per `<feature_X>` tag)
- Creates META issue for session tracking
- Initializes project structure with `init.sh`
- Writes `.linear_project.json` marker file
2. **Subsequent Runs (Coding Agent)**:
- Queries Linear for highest-priority Todo issue
- Updates issue status to "In Progress"
- Implements feature using SDK tools
- Tests implementation (Puppeteer for web apps, pytest/mypy for libraries)
- Adds comment to Linear issue with implementation notes
- Marks issue as "Done"
- Updates META issue with session summary
3. **Initializer Bis (Add Features)**:
- Triggered by `--new-spec` flag on existing projects
- Reads new spec file from `prompts/`
- Creates additional Linear issues for new features
- Updates existing project without re-initializing
### Key Design Patterns
**Session Handoff via Linear**: Agents don't use local state files for coordination. All session context, implementation notes, and progress tracking happens through Linear issues and comments. This provides:
- Real-time visibility in Linear workspace
- Persistent history across sessions
- Easy debugging via issue comments
**Defense-in-Depth Security** (see `security.py` and `client.py`):
1. OS-level sandbox for bash command isolation
2. Filesystem restrictions (operations limited to project directory)
3. Bash command allowlist with pre-tool-use hooks
4. Explicit MCP tool permissions
**Project Type Detection** (`agent.py:is_library_project`):
- Detects library/type-safety projects vs full-stack web apps
- Uses different coding prompts (`coding_prompt_library.md` vs `coding_prompt.md`)
- Keywords: "type safety", "docstrings", "mypy", "library rag"
### Module Responsibilities
- **`autonomous_agent_demo.py`**: Entry point, argument parsing, environment validation
- **`agent.py`**: Core agent loop, session orchestration, project type detection
- **`client.py`**: Claude SDK client configuration, MCP server setup (Linear + Puppeteer)
- **`security.py`**: Bash command validation with allowlist, pre-tool-use hooks
- **`prompts.py`**: Prompt loading utilities, spec file copying
- **`progress.py`**: Progress tracking via `.linear_project.json` marker
- **`linear_config.py`**: Linear API configuration constants
### MCP Servers
**Linear** (HTTP transport at `mcp.linear.app/mcp`):
- Project/team management
- Issue CRUD operations
- Comments and status updates
- Requires `LINEAR_API_KEY` in `.env`
**Puppeteer** (stdio transport):
- Browser automation for UI testing
- Navigate, screenshot, click, fill, evaluate
- Used by web app projects, not library projects
## Application Specification Format
Specifications use XML format in `prompts/app_spec.txt`:
```xml
<project_specification>
<project_name>Your App Name</project_name>
<overview>Detailed description...</overview>
<technology_stack>
<frontend>...</frontend>
<backend>...</backend>
</technology_stack>
<core_features>
<feature_1>
<title>Feature title</title>
<description>Detailed description</description>
<priority>1-4 (1=urgent, 4=low)</priority>
<category>frontend|backend|auth|etc</category>
<test_steps>
1. Step one
2. Step two
</test_steps>
</feature_1>
<!-- More features... -->
</core_features>
</project_specification>
```
**Important**: Each `<feature_X>` tag becomes a separate Linear issue. The initializer creates exactly one issue per feature tag.
## Environment Configuration
All configuration via `.env` file (copy from `.env.example`):
```bash
CLAUDE_CODE_OAUTH_TOKEN='your-oauth-token' # From: claude setup-token
LINEAR_API_KEY='lin_api_xxxxx' # From: linear.app/settings/api
LINEAR_TEAM_ID='team-id' # Optional, agent prompts if missing
```
## Security Model
### Allowed Commands (`security.py:ALLOWED_COMMANDS`)
File operations: `ls`, `cat`, `head`, `tail`, `wc`, `grep`, `cp`, `mkdir`, `chmod`
Development: `npm`, `node`, `python`, `python3`, `mypy`, `pytest`
Version control: `git`
Process management: `ps`, `lsof`, `sleep`, `pkill`
Scripts: `init.sh`
### Additional Validation
- **`pkill`**: Only allowed for dev processes (node, npm, vite, next)
- **`chmod`**: Only `+x` mode permitted (making scripts executable)
- **`init.sh`**: Must be `./init.sh` or end with `/init.sh`
### Adding New Commands
Edit `security.py:ALLOWED_COMMANDS` and optionally add validation logic to `bash_security_hook`.
## Generated Project Structure
After initialization, projects contain:
```
my_project/
├── .linear_project.json # Linear state marker (project_id, total_issues, meta_issue_id)
├── .claude_settings.json # Security settings (auto-generated)
├── app_spec.txt # Original specification (copied from prompts/)
├── init.sh # Environment setup script (executable)
└── [generated code] # Application files created by agent
```
## Creating New Applications
1. Create `prompts/app_spec.txt` with your XML specification
2. Use existing spec files as templates (see `prompts/app_spec.txt` for Claude Clone example)
3. Run: `python autonomous_agent_demo.py --project-dir ./new_app`
4. Monitor progress in Linear workspace
See `GUIDE_NEW_APP.md` for detailed guide (French).
## Prompt Templates
Located in `prompts/`:
- **`initializer_prompt.md`**: First session prompt (creates Linear project/issues)
- **`initializer_bis_prompt.md`**: Add features prompt (extends existing project)
- **`coding_prompt.md`**: Standard coding session (web apps with Puppeteer testing)
- **`coding_prompt_library.md`**: Library coding session (focuses on types/docs, uses pytest/mypy)
The framework automatically selects the appropriate prompt based on session type and project detection.
## Important Implementation Notes
### Linear Integration
- All work tracked as Linear issues, not local files
- Session handoff via Linear comments on META issue
- Status workflow: Todo → In Progress → Done
- Early termination: Agent stops when detecting "feature-complete" in responses
### Auto-Continue Behavior
Agent auto-continues with 3-second delay between sessions (`agent.py:AUTO_CONTINUE_DELAY_SECONDS`). Stops when:
- `--max-iterations` limit reached
- Response contains "feature-complete" or "all issues completed"
- Fatal error occurs
### Project Directory Handling
Relative paths automatically placed under `generations/` directory unless absolute path provided.
### Model Selection
Default: `claude-opus-4-5-20251101` (Opus 4.5 for best coding performance)
Override with: `--model claude-sonnet-4-5-20250929`