Appearance
Telegram Agent Chat
Назначение
Чистый Telegram control plane для общения owner с DesignCorp agents без tmux.
Контур
- Repo:
/home/admin/workspace/telegram-agent-chat - Runtime: Node.js long polling
- Telegram token: только локальный
.env, не в git - State:
/home/admin/workspace/telegram-agent-chat/data/state.json - Raw runtime logs:
/home/admin/workspace/telegram-agent-chat/data/runs/ - Telegram uploads:
/home/admin/workspace/telegram-agent-chat/data/uploads/
Принцип
Telegram message -> shared event history -> codex exec --json/resume -> normalized agent answer -> Telegram reply
В этом проекте нет:
tmux;- чтения terminal pane;
- screen scraping;
/tailкак основного UX;- запуска двух long-polling сервисов на одном bot token.
Роли
Роли задаются в /home/admin/workspace/telegram-agent-chat/agents.json:
orchestratordesignerfrontendqasecuritydeploydocs
Каждая роль имеет собственный persistent Codex thread id в data/state.json. Контекст хранится по Telegram scope: chat_id + message_thread_id. В каждой теме отдельно живут brief, jobs, events, runs и Codex threads.
Команды
/whoami— показать Telegram user id./chatid— показать chat id./status— состояние сервиса./agents— список ролей./briefили/brief <text>— показать или обновить общий brief./active— показать текущие agent runs./runs [count]— показать последние завершённые/ошибочные runs./events [count]или/trace [count]— показать последние события общего журнала./files [count]— показать последние файлы текущей темы./state— короткая сводка статуса, активных runs и открытых jobs./topic list— показать темы, созданные или известные bot state./topic create <name>— создать Telegram forum topic и завести отдельный scope./ask <role> <message>— запустить роль черезcodex exec --json.@orchestrator <message>— короткий direct-chat.designer: <message>— короткий direct-chat./panel <message>— спросить несколько ролей изPANEL_ROLES./assign <role> <task>— создать job./jobs— список открытых jobs./job <id>— детали job./run <id>— запустить job./threads— показать Codex thread ids./reset <role|all>— сбросить thread.
Observability
- Каждый запуск сразу возвращает
run idи статусrunning. - Пока Codex работает, bot отправляет
typingи периодические progress-сообщения. - Активные запуски хранятся в
data/state.json -> activeRuns. - После завершения запуск переносится в
runsсо статусомcompleted,failedилиinterrupted. - Если service перезапущен во время активного запуска, старый
activeRunпомечается какinterruptedпри старте. - Agent execution запускается в background promise, поэтому polling не блокируется: во время работы агента
/active,/state,/eventsи новые сообщения продолжают обрабатываться.
Topic Scope
- Scope key:
chat_id:message_thread_id, для основного чата используетсяchat_id:main. /brief,/assign,/jobs,/job,/run,/threads,/reset,/runs,/events,/filesработают в текущей теме./activeпо умолчанию показывает активные runs текущей темы;/active allпоказывает все активные runs./topic create <name>требует у Telegram bot праваcan_manage_topics.
Uploads
- Сообщения Telegram с
photoилиdocumentсохраняются вdata/uploads/<scope>/. - В state сохраняются только метаданные и локальный путь, Telegram bot token в state не пишется.
- Если у изображения есть caption с direct command (
@designer ...,frontend: ...,/ask ...), путь к файлу добавляется в prompt агента. - Текущие image-вложения и последние image-файлы темы при явном запросе (
оцени,посмотри,скрин,изображение,выше) передаются вcodex execчерез--image. - Если изображение отправлено без текста, bot сохраняет файл и отвечает локальным путём; после этого можно дать задачу текстом в этой же теме.
Runbook
Локальные проверки:
bash
corepack pnpm run check
corepack pnpm run smoke:runtimeРучной запуск:
bash
corepack pnpm startCutover с текущего Telegram bot:
bash
sudo -n install -m 0644 deploy/telegram-agent-chat.service /etc/systemd/system/telegram-agent-chat.service
sudo -n systemctl daemon-reload
sudo -n systemctl stop agent-chat-telegram.service
sudo -n systemctl enable --now telegram-agent-chat.service
sudo -n systemctl status telegram-agent-chat.service --no-pager -lRollback:
bash
sudo -n systemctl stop telegram-agent-chat.service
sudo -n systemctl start agent-chat-telegram.serviceБезопасность
- Agent execution доступен только после заполнения
TELEGRAM_ALLOWED_USER_IDSиTELEGRAM_ALLOWED_CHAT_IDS. - Setup-команды
/whoami,/chatid,/status,/helpдоступны до allowlist. - Bot не печатает секреты и не должен раскрывать env values.
sudo, deploy, nginx/systemd, git push/merge/rebase/tag требуют явного owner approval.- По умолчанию в template
CODEX_SANDBOX=workspace-write; активный local runtime сейчас работает сCODEX_SANDBOX=danger-full-accessпо решению owner. - Даже при
danger-full-accesshard rules запрещаютsudo, deploy, nginx/systemd, git push/merge/rebase/tag без явного owner approval в Telegram.
Текущий статус
- MVP scaffold создан.
- Runtime smoke через
codex exec --jsonпроходит. - Service включён:
telegram-agent-chat.service. - Legacy service остановлен и отключён:
agent-chat-telegram.service. - Bot подключается как
@designcorp_orchestrator_bot. - Добавлены
/active,/runs,/events//trace,/stateи progress-сообщения для наблюдения за agent runs.