- Merged CODING-CONVENTIONS.md content into single authoritative document - Part 1: Agent development principles (autonomy, verification, PM pattern) - Part 2: Coding conventions (Red/Green/Refactor TDD, naming, commit patterns) - Part 3: Operations (cron jobs, repo structure) - Part 4: Agent/skill development workflow - CLAUDE.md is now the single source of truth for agent development
8.3 KiB
CLAUDE.md — Agent Development Foundation
This document is THE foundation for developing Claude agents and autonomous systems in Gravl.
Together with the actual codebase, this is your north star.
Part 1: Agent Development Principles
1. Autonomy with Verification
- Agents execute tasks independently
- Always verify results after delegation (no hallucinations)
- Verification pattern:
git status,git log,ls, diff before checkpoint update - Never report completion without checking actual work
2. Checkpoint-Based Self-Monitoring
All long-running tasks use checkpoint files:
{
"lastRun": "2026-03-02T08:00:00Z",
"status": "completed|blocked|interrupted|error",
"result": "Summary of work",
"nextCheck": "What to do next"
}
Recovery logic:
- If
lastRun > 60minORstatus ≠ "completed"→ trigger recovery - Log recovery attempts to help debugging
- Use simple JSON for checkpoint files (no complex parsing)
3. PM (Project Manager) Autonomy
The Gravl PM agent:
- Plans sprints/phases autonomously
- Spawns specialized agents (frontend-dev, backend-dev, etc.)
- Verifies their work before checkpoint completion
- Reports progress to Telegram (not silent failures)
- Timeout: 15 minutes (900s) per cron cycle
4. Generalized Agents (Reusable)
NEVER create project-specific agents.
Use generalized agents instead:
frontend-dev— React/CSS specialistbackend-dev— Node.js/PostgreSQL specialistarchitect— System designreviewer— Code review + quality gatesbrowser-tester— E2E testing + QA
These live in ~/clawd/claude-agents-skills/agents/ and symlink to ~/clawd/agents/.
5. Single Source of Truth
All skills and agents in ONE central repo:
- Hub location:
~/clawd/claude-agents-skills/ - Symlinks from:
~/clawd/skills/and~/clawd/agents/ - Commit all changes to hub repo
- Enables sharing, versioning, and collaboration
6. Communication Pattern
- PM drives autonomously
- Silence = approval (no blocking)
- Report only at milestones or blocking issues
- Use Telegram for delivery (explicit
"channel: telegram")
Part 2: Coding Conventions (MANDATORY)
Red/Green/Refactor TDD (OBLIGATORY)
All new code follows the TDD cycle:
🔴 RED → 🟢 GREEN → 🔄 REFACTOR
Step 1: 🔴 RED - Write Failing Test First
// test/feature.test.js
describe('Feature', () => {
it('should do expected behavior', async () => {
const result = await feature.doSomething();
expect(result).toBe(expected);
});
});
Run the test - it MUST fail!
npm test -- --grep "Feature"
# ❌ FAIL (this is correct!)
Step 2: 🟢 GREEN - Minimal Implementation
Write just enough code to pass the test:
// src/feature.js
export function doSomething() {
return expected; // Minimal solution
}
Run the test again:
npm test -- --grep "Feature"
# ✅ PASS
Step 3: 🔄 REFACTOR - Improve
Now you can:
- Refactor for clean code
- Extract functions
- Improve naming
- Remove duplication
Run tests continuously:
npm test
# ✅ All tests must still pass
Test Structure
/workspace/gravl/
├── src/
│ └── components/
├── server/
│ └── routes/
└── test/
├── unit/ # Unit tests
├── integration/ # API tests
└── e2e/ # End-to-end (Playwright)
Naming Conventions
Test Files
[feature].test.js— Unit tests[feature].integration.test.js— Integration tests- Describe block: Noun (what is tested)
- It block: "should [verb] [expected outcome]"
Commits
test: add failing test for [feature]
feat: implement [feature] to pass tests
refactor: clean up [feature] implementation
Agent Workflow (Step-by-Step)
When spawned with a coding task:
- Read the spec → Check docs/current-task.md
- Write failing test → Show to PM that you understand the requirement
- Implement code → Make the test pass (minimal solution)
- Refactor → Clean code if needed
- Run full test suite → Ensure nothing broke
- Commit with proper prefix →
test:,feat:,refactor: - Report to PM → Include git log, test results
- Verification → PM checks
git status,git log, diffs
Part 3: Operations
Cron Jobs (3 Active)
| Job | Schedule | Timeout | Checkpoint | Status |
|---|---|---|---|---|
| Gravl PM | Every 30m | 15 min | /workspace/gravl/.pm-checkpoint.json |
Active |
| Vietnam Flights | Daily 09:00 | 2 min | ~/.checkpoint-vietnam-flights.json |
Active |
| System Updates | Daily 10:00 | 5 min | ~/.checkpoint-system-updates.json |
Active |
All use explicit "channel: telegram" for Telegram delivery.
Repository Structure
/workspace/gravl/
├── frontend/ # React app
├── backend/ # Express API
├── db/ # Database setup + migrations
├── scripts/ # Automation scripts
├── docker/ # Compose files
├── test/ # Test suites
├── docs/
│ └── CODING-CONVENTIONS.md # (Deprecated, see CLAUDE.md)
├── README.md # Project overview
├── CLAUDE.md # THIS FILE — Agent & coding foundation
└── .gitignore # Excludes node_modules, planning docs
Local-Only Files (Not in Git)
These stay on disk but excluded via .gitignore:
.planning/— research, requirements, roadmapTODO.md— task trackingfrontend/tasks/— feature tasksdocs/plans/— planning notes
This keeps the repo clean while preserving planning work locally.
Part 4: Agent Development Workflow
Adding a New Agent
- Create in hub:
~/clawd/claude-agents-skills/agents/my-agent/ - Write
SOUL.md(agent definition, personality, expertise) - Optional: Add
README.md, scripts, config files - Symlink automatically created:
~/clawd/agents/my-agent - Commit to hub repo
Example SOUL.md:
# My Agent SOUL
## Core Identity
- Name: [Agent Name]
- Expertise: [Domain]
- Personality: [Vibe]
## Instructions
1. [Guideline 1]
2. [Guideline 2]
## Communication
- Report at milestones
- Verify before completion
Adding a New Skill
- Create in hub:
~/clawd/claude-agents-skills/skills/my-skill/ - Write
SKILL.md(documentation, usage, examples) - Add code/scripts
- Symlink automatically created:
~/clawd/skills/my-skill - Commit to hub repo
Verification Pattern (CRITICAL)
After any subagent completes work:
# 1. Check git status
git status
# 2. Verify files changed
git log --oneline -3
# 3. Inspect actual changes
git diff HEAD~1
# 4. ONLY THEN update checkpoint
echo '{
"lastRun": "'$(date -Iseconds)'",
"status": "completed",
"result": "Summary..."
}' > checkpoint.json
This prevents hallucination bugs where agents claim work they didn't do.
Key Decisions
- Generalized agents — Reusable, maintainable, shareable
- Single hub repo — Centralized versioning
- Symlinks for discovery — OpenClaw finds everything automatically
- TDD mandatory — Red → Green → Refactor
- Verification protocol — No hallucinations allowed
- Checkpoint-based recovery — Self-healing cron jobs
- Telegram delivery — Explicit channel routing
PM Agent Playbook (30-minute cycles)
- Plan → Identify phase tasks, delegate to agents
- Execute → Spawn agents with tasks, monitor progress
- Verify → Check
git status, diffs, test results (NO ASSUMPTIONS) - Report → Send Telegram update (success or blocking issue)
- Checkpoint → Update
.pm-checkpoint.jsonwith status + nextCheck
PM runs autonomously every 30 minutes. No human approval needed unless blocked.
References
- Agent Symlink Hub:
~/clawd/claude-agents-skills/ - Frontend Stack: React + Vite + Tailwind
- Backend Stack: Express + PostgreSQL
- Testing: Jest (unit), Playwright (E2E)
- Database: PostgreSQL with migrations
- Deployment: Docker Compose (local), staging via Traefik
Last Updated: 2026-03-02
Version: 1.0
Audience: All Claude agents, PM, developers
Remember: This document is your north star. Follow it. Extend it. Improve it.