Long-Running Agent Harness
Skill для управления долгосрочными проектами, которые требуют работы через множество сессий Claude. Основан на исследовании Anthropic.
📚 Источник: Effective harnesses for long-running agents (Anthropic Engineering, Nov 2025)
Проблема, которую решает этот skill
AI-агенты работают в дискретных сессиях без памяти о предыдущей работе. Это приводит к:
- •❌ Попыткам сделать всё за раз (one-shotting)
- •❌ Преждевременному объявлению проекта завершённым
- •❌ Потере контекста между сессиями
- •❌ Багам и недокументированному прогрессу
Решение: Два типа агентов + структурированные артефакты для передачи контекста.
Архитектура оркестрации
┌─────────────────────────────────────────────────────────────────┐ │ ORCHESTRATION FLOW │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ ┌──────────────────┐ FIRST RUN ONLY │ │ │ INITIALIZER │─────────────────────────────┐ │ │ │ AGENT │ │ │ │ │ │ Creates: │ │ │ │ (Claude + this │ • features.json │ │ │ │ skill in init │ • progress.md │ │ │ │ mode) │ • init.sh │ │ │ └──────────────────┘ • Initial git commit │ │ │ │ ▼ │ │ │ ┌─────────────────────────────────┐ │ │ │ │ PROJECT ARTIFACTS │ │ │ │ │ ┌─────────────────────────┐ │ │ │ │ │ │ .claude/ │ │ │ │ │ │ │ ├── features.json │ │ │ │ │ │ │ ├── progress.md │ │ │ │ │ │ │ └── architecture.md │ │ │ │ │ │ │ scripts/init.sh │ │ │ │ │ │ └─────────────────────────┘ │ │ │ │ └─────────────────────────────────┘ │ │ │ ▲ │ │ │ │ │ │ │ │ │ ┌───────────────┘ │ │ │ ▼ │ ▼ │ │ ┌──────────────────┐ ┌──────────────────┐ │ │ │ CODING AGENT │───────────────▶│ CODING AGENT │ │ │ │ Session 1 │ │ Session 2 │ ... │ │ │ │ Reads: │ │ │ │ │ (Claude + this │ • progress.md │ │ │ │ │ skill in │ • features.json │ │ │ │ continue mode) │ • git log │ │ │ │ │ │ │ │ │ │ │ Updates: │ Updates: │ │ │ │ │ • 1 feature │ • 1 feature │ │ │ │ │ • progress.md │ • progress.md │ │ │ │ │ • git commit │ • git commit │ │ │ │ └──────────────────┘ └──────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────┘
Режимы работы
1. init — Инициализация нового проекта
Когда использовать: Первый запуск, новый проект.
Входные данные от пользователя:
| Параметр | Обязательно | Описание |
|---|---|---|
| Описание проекта | ✅ | Что нужно построить |
| Тип проекта | ✅ | web-app | api | cli | library | mobile |
| Стек технологий | ⚪ | React, Python, Rails... (или auto-detect) |
| Приоритеты фич | ⚪ | Какие фичи важнее |
Генерируемые артефакты:
project/ ├── .claude/ │ ├── progress.md # Лог прогресса между сессиями │ ├── features.json # 30-200 фич с статусами │ └── architecture.md # Ключевые архитектурные решения ├── scripts/ │ └── init.sh # Setup окружения + smoke test └── [initial git commit]
2. continue — Продолжение работы
Когда использовать: Каждая последующая сессия.
Входные данные: Не требуются (читаем из артефактов).
Обновляемые артефакты:
- •
progress.md— добавляется новая запись - •
features.json—passes: false → trueдля завершённых фич - •Git commit с описательным сообщением
3. status — Просмотр прогресса
Когда использовать: Посмотреть что сделано/осталось.
Формат артефактов
.claude/features.json
{
"project": "claude-clone",
"type": "web-app",
"created_at": "2025-12-02T10:00:00Z",
"total_features": 47,
"completed": 12,
"features": [
{
"id": "F001",
"category": "core",
"priority": 1,
"description": "User can send message and receive AI response",
"verification_steps": [
"Open app in browser",
"Type message in input field",
"Press Enter or click Send",
"Verify AI response appears within 5 seconds"
],
"passes": false,
"completed_at": null,
"session_id": null
},
{
"id": "F002",
"category": "core",
"priority": 1,
"description": "Conversation history persists after page reload",
"verification_steps": [
"Send a message",
"Reload the page",
"Verify conversation is still visible"
],
"passes": true,
"completed_at": "2025-12-02T14:30:00Z",
"session_id": "session-003"
}
]
}
Правила для features.json:
- •❌ НИКОГДА не удалять фичи
- •❌ НИКОГДА не редактировать description уже существующих фич
- •✅ ТОЛЬКО менять
passes: false → trueпосле верификации - •✅ ТОЛЬКО добавлять новые фичи в конец списка
.claude/progress.md
# Project Progress Log ## Project: claude-clone **Type**: web-app **Stack**: Next.js, TypeScript, Tailwind CSS **Started**: 2025-12-02 --- ## Session 5 | 2025-12-02 14:30 | session-005 **Focus**: Dark mode implementation **Duration**: ~45 min ### Completed Features - ✅ F012: Dark mode toggle button - ✅ F013: Theme persistence in localStorage ### In Progress - 🔄 F014: System theme detection (80% done, need media query listener) ### Blockers - None ### Technical Decisions - Used CSS variables for theming (easier to maintain) - Chose `prefers-color-scheme` media query over JS detection ### Next Session Should 1. Complete F014 (system theme detection) 2. Start F015 (conversation sidebar) 3. Run full E2E test suite ### Git Commits This Session - `a3f2b1c` feat: add dark mode toggle component - `e5d4c3b` feat: persist theme in localStorage - `f7e8d9a` refactor: extract theme utils --- ## Session 4 | 2025-12-02 12:00 | session-004 ...
scripts/init.sh
Назначение: Setup окружения чтобы агент мог сразу начать работу.
НЕ путать с: Запуском dev-сервера. init.sh — это подготовка, не запуск.
Что делает init.sh:
- •Устанавливает зависимости (bundle/npm/yarn)
- •Настраивает базу данных (migrations, seeds)
- •Копирует .env файлы из примеров
- •Запускает smoke tests для проверки что всё работает
- •Выводит инструкции как запустить сервер
Примеры для разных стеков:
- •
examples/init-nodejs.sh— Node.js / JavaScript / TypeScript - •
examples/init-rails.sh— Ruby on Rails
Пример структуры (Ruby on Rails):
#!/bin/bash set -e echo "🔧 Setting up Rails environment..." # 1. Install dependencies bundle install yarn install # 2. Setup database rails db:prepare # 3. Copy env files [ ! -f .env ] && [ -f .env.example ] && cp .env.example .env # 4. Smoke tests rails runner "puts '✅ Rails loads OK'" rails runner "ActiveRecord::Base.connection; puts '✅ DB connection OK'" echo "✅ Environment ready!" echo "To start server: rails server"
Инструкция для человека (оператора)
Как запустить INIT сессию
Человек → Claude: "Инициализируй долгосрочный проект: [описание проекта]. Тип: web-app. Стек: Next.js + TypeScript." Claude выполнит: 1. Создаст структуру .claude/ с артефактами 2. Сгенерирует 30-200 фич на основе описания 3. Создаст init.sh скрипт 4. Сделает initial git commit
Как запустить CONTINUE сессию
Вариант 1 — Простой запуск:
Человек → Claude: "Продолжи работу над проектом" Claude выполнит startup checklist автоматически.
Вариант 2 — С указанием фокуса:
Человек → Claude: "Продолжи проект, сфокусируйся на фичах авторизации"
Вариант 3 — Проверка статуса перед работой:
Человек → Claude: "Покажи статус проекта и что делать дальше"
Когда завершать сессию
Оператор должен завершить сессию когда:
- •⏰ Прошло 30-45 минут активной работы
- •✅ Завершена 1-2 фичи
- •🔄 Claude начинает делать много изменений без коммитов
- •⚠️ Контекст становится длинным (Claude начинает забывать)
Команда для завершения:
Человек → Claude: "Заверши сессию. Обнови progress.md, закоммить изменения, напиши что делать в следующей сессии."
Startup Checklist (автоматический)
При каждом continue Claude ОБЯЗАН выполнить:
┌─────────────────────────────────────────────────────────────┐ │ SESSION STARTUP CHECKLIST │ ├─────────────────────────────────────────────────────────────┤ │ 1. ☐ pwd → подтвердить рабочую директорию │ │ 2. ☐ git status → проверить чистоту репозитория │ │ 3. ☐ git log -5 → последние коммиты │ │ 4. ☐ cat .claude/progress.md → что было сделано │ │ 5. ☐ cat .claude/features.json → статус фич │ │ 6. ☐ ./scripts/init.sh → setup environment + smoke test │ │ 7. ☐ Выбрать ОДНУ фичу (highest priority, passes=false) │ │ 8. ☐ Объявить какую фичу будем делать │ └─────────────────────────────────────────────────────────────┘
Session End Checklist (автоматический)
Перед завершением сессии Claude ОБЯЗАН:
┌─────────────────────────────────────────────────────────────┐ │ SESSION END CHECKLIST │ ├─────────────────────────────────────────────────────────────┤ │ 1. ☐ Все изменения закоммичены (git status clean) │ │ 2. ☐ features.json обновлён (passes=true для готовых) │ │ 3. ☐ progress.md обновлён (новая запись сессии) │ │ 4. ☐ Указано что делать в следующей сессии │ │ 5. ☐ Нет TODO комментариев в коде │ │ 6. ☐ Базовый smoke test проходит │ └─────────────────────────────────────────────────────────────┘
Failure Modes & Solutions
| Проблема | Как предотвращаем |
|---|---|
| Claude объявляет проект готовым слишком рано | features.json с полным списком фич |
| Баги и недокументированный прогресс | Обязательный smoke test + progress.md |
| Фичи помечаются готовыми без тестирования | Verification steps в каждой фиче |
| Время тратится на понимание как запустить | init.sh скрипт |
| Потеря контекста между сессиями | progress.md + git log |
| Попытка сделать слишком много за раз | Правило "1 фича за сессию" |
Примеры использования
Пример 1: Инициализация web-app
Человек: "Инициализируй долгосрочный проект: клон Notion с базовыми функциями - страницы, блоки, drag-and-drop. Тип: web-app. Стек: Next.js, TypeScript, Prisma, PostgreSQL." Claude: 1. Создаёт .claude/features.json с ~50 фичами 2. Создаёт .claude/progress.md 3. Создаёт scripts/init.sh 4. git init && git add . && git commit -m "Initial project setup" 5. Выводит summary и рекомендации для первой continue сессии
Пример 2: Continue сессия
Человек: "Продолжи работу" Claude: 1. Выполняет startup checklist 2. Читает progress.md: "Session 3 закончилась на F007" 3. Читает features.json: F008 = "User can create new page" 4. Запускает init.sh, проверяет smoke test 5. Объявляет: "Буду работать над F008: создание новой страницы" 6. Реализует фичу инкрементально 7. Тестирует end-to-end 8. Обновляет features.json: passes=true 9. git commit -m "feat: implement page creation (F008)" 10. Обновляет progress.md
Пример 3: Проверка статуса
Человек: "Статус проекта" Claude: 📊 Project Status: notion-clone ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ✅ Completed: 12/47 features (25%) 🔄 In Progress: F013 (block drag-and-drop) ⏭️ Next Priority: F014 (nested pages) Recent Sessions: • Session 5: Completed F011, F012 (block types) • Session 4: Completed F009, F010 (page navigation) Blockers: None
Интеграция с другими инструментами
Git Workflow
- •Каждая фича = отдельный коммит
- •Commit message format:
feat: [description] (F###) - •Используй
git diffперед коммитом
Testing
- •Для web-app: используй Playwright/Puppeteer для E2E
- •Для API: используй curl/httpie для smoke tests
- •Для CLI: запускай с тестовыми аргументами
TodoWrite Integration
При continue сессии создавай todos:
- [ ] Complete F### verification - [ ] Update features.json - [ ] Update progress.md - [ ] Git commit
Ограничения и известные проблемы
- •Vision limitations: Claude может не увидеть browser alerts через Puppeteer
- •Context pressure: При очень длинных сессиях качество падает
- •Scope creep: Следи чтобы Claude не добавлял фичи сверх списка
Ссылки
- •Источник: Effective harnesses for long-running agents
- •Quickstart код: anthropics/claude-quickstarts/autonomous-coding
- •Claude 4 Prompting Guide: Multi-context window workflows