claude-factory
claude-factory
Персональная система «циклической разработки» (loop engineering), управляемая голосовым диалогом.
Когда вы говорите в голосовом режиме приложения Claude, находящийся за кулисами Claude Code работает с репозиторием и возвращается с вопросом, когда нужно принять решение. Если ответить голосом или на экране, работа продолжается. Планирование — в docs/01_企画書.md, политика реализации — в docs/02_制作指示書.md, управление сессиями — в docs/03_セッション管理.md.
あなた(音声)
└ Claude アプリ/ボイスモード(秘書)
└ カスタムコネクタ = MCP Bridge Server(Bearer 認証)
├ Orchestrator ── Claude Code(claude-agent-sdk)── 各リポジトリ
└ SQLite ── Dashboard(FastAPI + React)Ядро — это шлюз план → утверждение → выполнение. Любая работа, связанная с записью, сначала возвращается в виде плана и не выполняется, пока вы не утвердите его.
1. Настройка
Python 3.12 или новее, Node.js 18 или новее, Claude Code CLI (выполнен вход в аккаунт Max).
# Mac / Linux
uv sync --extra dev # または: pip install -r requirements.txt
cp .env.example .env
python -c "import secrets; print(secrets.token_urlsafe(32))" # → .env の CF_MCP_TOKEN
python -c "import secrets; print(secrets.token_urlsafe(16))" # → .env の CF_DASHBOARD_PASSWORD# Windows
python -m venv .venv; .\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
copy .env.example .env # 中身のトークンを実値に置き換えるАутентификацию Claude Code наследует SDK, поэтому один раз запустите claude на хосте выполнения и войдите в аккаунт Max.
Настройте config.yaml под своё окружение
Как минимум измените каталоги, к которым разрешено обращаться. Все пути, которых здесь нет, будут отклонены.
security:
repo_allowlist:
- ~/Private_Project # Mac
# - C:\Users\<you>\repos # WindowsRelated MCP server: MCP-Claude Code Bridge
2. Запуск
./scripts/run_mcp.sh # MCP サーバー(秘書の窓口 + ジョブのワーカー)
./scripts/run_dashboard.sh # ダッシュボード(初回はフロントも自動ビルド).\scripts\run_mcp.ps1
.\scripts\run_dashboard.ps1MCP:
http://127.0.0.1:8010/mcpПанель управления:
http://127.0.0.1:8787
Задачи фактически выполняет процесс MCP-сервера. Если запущена только панель управления, очередь не продвигается. Постоянно должен работать именно
run_mcp.
Проверка связи:
curl -i http://127.0.0.1:8010/mcp # 401 = 認証が効いている
curl -s -X POST http://127.0.0.1:8010/mcp \
-H "Authorization: Bearer $CF_MCP_TOKEN" \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'3. Регистрация в качестве коннектора
./scripts/tunnel.sh quick # 使い捨て(URL は起動ごとに変わる)К отображаемому https://<случайный>.trycloudflare.com добавьте в конец /mcp и вставьте его в приложении Claude: «+» → Коннекторы → Добавить пользовательский коннектор.
Способов передачи токена два:
Способ | URL для регистрации | Примечания |
Заголовок (рекомендуется) |
| В настройках коннектора добавьте |
Путь |
| Запасной вариант, если экран регистрации не позволяет задать заголовок |
В способе с путём токен попадает в URL и потому легче утекает (остаётся в логах). Если можно использовать заголовок, закройте эту возможность, установив mcp.allow_path_token в false в config.yaml.
4. Использование
Обращайтесь к секретарю (голосом), например так:
Узнать статус
«Что сейчас происходит?» →
get_org_status(вся организация за один раз. Сначала это)«А та задача?» →
get_job(переключайте summary / report / log черезdetail)«Прочитай результаты исследования» →
read_board(все результаты, которые выдают отделы, попадают сюда)
Привести организацию в действие (от тяжёлого к лёгкому)
«Начни новую задачу в „парсере счетов“» →
create_task(создание каталога + git init + регистрация одним действием. Правкаconfig.yamlи перезапуск не нужны)«Спроси проектную группу, как быть со способом хранения» →
start_council(файлы не изменяются, так что можно пользоваться свободно)«Каков итог совещания?» →
get_council(заключение, обсуждение по каждому спорному вопросу, оставшиеся возражения)«Поручи demo исправить падающие тесты» →
dispatch_to_code(создаётся только план)«Утверждаю» →
answer_question(только здесь происходит выполнение)«Поручаю с этой целью» →
grant_mandate(начинается автономная работа. Останавливается черезrevoke_mandate)
Сессии
«Разветви текущую сессию и попробуй другой подход» →
fork_session(изоляция через git worktree)
Форма организации (проектный документ docs/04_組織化設計書.md)
子会社 = プロジェクト(互いに不干渉)
部署 = 役割 調査 / 設計班 / 実装 / デザイン / 統合管理
成果ボード 部署はここだけを介して成果を見せ合うСовещание проектной группы проходит в 4 этапа под руководством ведущего.
Предварительное чтение — ведущий самостоятельно закрывает очевидные вопросы (фиксируется в
resolved_by_chair) и оставляет только спорныеВынесение на обсуждение — по каждому спорному вопросу из списка сотрудников назначаются люди (с указанием причины)
Рассмотрение — назначенные высказывают своё мнение и критику предыдущих мнений
Заключение — ведущий выдаёт выводы по каждому спорному вопросу, оставшиеся возражения и вопросы для человека
Список — в config/personas.yaml (1 ведущий + 10 участников). Его можно свободно редактировать; изменения применяются при запуске.
Права по отделам (минимальные привилегии)
Роль | Web | Запись файлов | Утверждение |
Исследование | Да | Нет | Не требуется |
Проектная группа | Да | Нет | Не требуется |
Реализация | Нет | Только внутри репозитория | Доверенность |
Дизайн | Да | Только в каталоге результатов | Доверенность |
Интеграционное управление | Нет | Нет | — |
Разделение сделано так: «исследование может смотреть Web, но не может писать файлы», «реализация может писать файлы, но не может смотреть Web». Изменения вносятся через roles: в config.yaml, и изменить их может только человек (чтобы не создавать путь, по которому агент интеграционного управления смог бы расширить собственные права).
Автономная работа (доверенность)
Когда цель утверждается через grant_mandate, интеграционное управление распределяет работу по отделам, и она идёт без отдельных утверждений. Вместо уменьшения числа утверждений работа ведётся в форме, которую можно в любой момент отбросить.
Создаётся отдельная рабочая ветка (
mainне дают трогать)Задаются бюджет (число задач, стоимость) и срок; когда они исчерпаны, работа останавливается автоматически
Удаление,
git push, изменение истории и добавление зависимостей — вне рамок доверенности. Работа обязательно останавливается и запрашивает подтверждениеКнопка «Остановить» на панели управления (
revoke_mandate) отменяет всё, включая выполняющуюся работу
На панели управления видны очередь ожидающих вопросов, временная шкала прогресса, живые логи, отчёты, дерево ответвлений сессий и журнал аудита. Ответы — голосом или на экране — проходят по одному и тому же пути.
Навыки секретаря (skills/)
Поскольку принято каждое утро начинать новый чат, у секретаря нет памяти о предыдущем дне. Процедура запуска хранится как навык в skills/factory-startup/ (сбор статуса → порядок озвучивания → предложение на сегодня, со скриптом озвучивания). Загрузите его через настройки приложения Claude и вызывайте в начале чата, набрав /factory-startup (сокращённо /cf). Естественно-языковых слов-триггеров не предусмотрено (чтобы избежать случайных срабатываний и пропуска запуска). Подсказки / в приложении берутся из name навыка, поэтому само имя служит сигналом. Подробности — в skills/README.md.
Роли разделены: SECRETARY_GUIDE на стороне коннектора (попадает в каждый запрос — поэтому должен быть коротким) и навык (читается только при необходимости — поэтому содержит процедуры и скрипты).
Указания, которые хорошо работают с секретарём (планирование §Проверка 4)
Чтобы секретарь не отправлял запросы самовольно посреди разговора, стоит сказать ему так:
Не вызывай dispatch_to_code, пока я не скажу «отправляй с этим». До этого участвуй в обсуждении и помогай довести формулировку.
5. Безопасность (производственная спецификация §8)
Реализованные меры защиты:
# | Требование | Реализация |
1 | Для MCP обязателен Bearer-токен |
|
2 | repo_path — только абсолютные пути из allowlist |
|
3 | Не показывать секретарю сырой shell | Инструменты MCP — только ограниченный интерфейс |
4 | Перезапись/удаление/выполнение shell — через шлюз утверждения | план → утверждение → выполнение + |
5 | Не коммитить секреты |
|
6 | Все dispatch и answer записываются в журнал аудита | таблица |
7 | Ограничение частоты запросов | токен-бакет для MCP и панели управления |
8 | Панель управления за аутентификацией | Cookie-сессия или Cloudflare Access |
При проверке на реальном Claude Code обнаружились два важных момента, меры приняты:
can_use_toolне вызывается для инструментов, которые CLI одобряет автоматически. Если полагаться только на колбэк авторизации, запись за пределы репозитория возможна даже в режиме планирования. Поэтому применяются совместно запрет на уровне CLI черезdisallowed_toolsи песочница ОС (orchestrator.sandbox).Выход из каталога через
cdне останавливается проверкой пути. Абсолютные пути и..внутри Bash-команд отслеживаются через_bash_escapes_workspace..claude/settings.jsonцелевого репозитория не загружается (setting_sources=[]). Если его загрузить, репозиторий сможет сам себе утверждать права.
6. Постоянная публикация (M5)
Одноразовый туннель меняет URL при каждом запуске, поэтому для регулярного использования переходите на именованный.
cloudflared tunnel login
cloudflared tunnel create claude-factory
cloudflared tunnel route dns claude-factory mcp.<domain>
cloudflared tunnel route dns claude-factory dash.<domain>~/.cloudflared/config.yml:
tunnel: claude-factory
credentials-file: /path/to/<tunnel-id>.json
ingress:
- hostname: mcp.<domain>
service: http://localhost:8010
- hostname: dash.<domain>
service: http://localhost:8787
- service: http_status:404Постоянную публикацию обеспечивает systemd-сервис cloudflared.service (читает /etc/cloudflared/config.yml).
systemctl status cloudflared # 状態確認
sudo systemctl restart cloudflared # 設定変更の反映
journalctl -u cloudflared -f # ログЗапустить можно и через ./scripts/tunnel.sh named claude-factory, но обычно это не используется: коннектор будет подключён к тому же туннелю дважды — вместе с резидентным сервисом. При переходе на ручной режим сначала выполните sudo systemctl stop cloudflared. Скрипт тоже обнаруживает резидентный сервис, выдаёт предупреждение и запрашивает подтверждение.
На стороне Route 53 cloudflared tunnel route dns создаёт CNAME (<tunnel-id>.cfargotunnel.com). URL для регистрации коннектора — https://mcp.<domain>/mcp. Перед панелью управления ставится Cloudflare Access, и только в этом случае задаётся dashboard.auth: none.
7. Разработка
.venv/bin/python -m pytest -q # テスト
cd src/claude_factory/dashboard/web && npm run dev # フロントの開発サーバーСтруктура соответствует §2 производственной спецификации (пакет оформлен как src/claude_factory/, а не непосредственно в src/):
src/claude_factory/
├─ config.py 設定(config.yaml + .env)
├─ models.py 型・出力規約・その解析
├─ store.py SQLite DAO
├─ security.py トークン・allowlist・レート制限
├─ runner.py claude-agent-sdk ラッパと承認ゲート(役割別の権限)
├─ orchestrator.py ジョブキュー、計画→承認→実行、自走ループ
├─ sessions.py セッション一覧/閲覧/分岐(git worktree 隔離)
├─ personas.py 社員名簿と組閣
├─ council.py 設計班の合議エンジン
├─ integrate.py 統合管理(作業計画を出すだけ。実行はしない)
├─ org.py 組織全体の状況
├─ mcp_server.py 秘書向け MCP
└─ dashboard/ FastAPI + React(Vite)Документы: docs/01_企画書.md (замысел) → 02_制作指示書.md (основа) → 03_セッション管理.md (дополнение) → 04_組織化設計書.md (организация).
8. Что осталось
M6 голосовой E2E: прогнать один реальный проект только голосом (ручная проверка после регистрации коннектора).
Push-уведомления об ожидающих решения вопросах (v2).
Правила уборки разветвлённых worktree (удалять или оставлять после слияния).
Обнаружение случаев, когда интеграционное управление продолжает раздавать одну и ту же работу (сейчас единственный ограничитель — бюджет и срок).
Кто должен быть арбитром при расхождении мнений между отделами — интеграционное управление или вынесение вопроса человеку.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityNot gradedmaintenanceConnects Claude Desktop directly to GitHub repositories and git commands, enabling users to clone repos, check status, commit changes, push code, create repositories, and manage GitHub resources through natural conversation.467
- FlicenseBqualityDmaintenanceBridges Claude Desktop with Claude Code CLI to delegate complex coding tasks like creating React apps, building APIs, and debugging scripts while maintaining interaction through the Desktop interface.51
- FlicenseNot gradedqualityCmaintenanceEnables natural voice interaction with Claude Code through speech-to-text, supporting wake word activation and multiple backends like Whisper and Google. It allows users to execute commands and control their coding environment hands-free via their microphone.2
- AlicenseNot gradedqualityDmaintenanceEnables bidirectional voice interaction for Claude Code using local speech-to-text and text-to-speech models optimized for Apple Silicon. It provides tools to listen to user speech via microphone and speak responses aloud through system speakers.16Apache 2.0
Related MCP Connectors
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
Trade Robinhood through natural language in Claude Code.
Connect Claude to Fathom meeting recordings, transcripts, and summaries
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/yuritada/claude-factory'
If you have feedback or need assistance with the MCP directory API, please join our Discord server