# NODE.DC Tasker Codex API Отдельный модуль NODE.DC для безопасного подключения локальных Codex/AI-агентов к Tasker / Operational Core. Модуль не является частью Plane fork и не должен становиться backend-расширением Tasker. Его роль — agent gateway: выдача ограниченных agent credentials, проверка прав, MCP/REST-контракт для внешних агентов, аудит и маршрутизация разрешённых операций в Tasker через узкий internal adapter. ## Documents - [Architecture](docs/ARCHITECTURE.md) - [UX flow](docs/UX_FLOW.md) - [MCP tools contract](docs/MCP_TOOLS_CONTRACT.md) - [Tasker API audit](docs/TASKER_API_AUDIT.md) - [Threat model](docs/THREAT_MODEL.md) - [Implementation plan](docs/IMPLEMENTATION_PLAN.md) ## Core rule External Codex instances never receive Plane session cookies, raw Tasker API tokens, database access, or a generic HTTP proxy into Tasker. All writes go through NODE.DC Agent Gateway, are scoped by agent grants, and are recorded as actions of a dedicated agent identity owned by a human platform user. ## Current implementation - Fastify service with `/healthz`, `/readyz`, and capability metadata. - Postgres migrations for agents, grants, token hashes, pairing codes, audit events, and idempotency keys. - Internal REST endpoints for agent profile, grant, and token lifecycle. - Opaque agent tokens are generated once and stored only as SHA-256 hashes. - Authenticated agent-session endpoint returns effective grants/scopes for future MCP calls. - MCP and Tasker write execution are documented but not implemented yet. ## Local development ```bash cp .env.example .env docker compose --env-file .env -f docker-compose.local.yml up -d postgres npm install npm run migrate npm run dev ``` Useful checks: ```bash npm run check npm run build curl http://127.0.0.1:4100/readyz curl http://127.0.0.1:4100/api/v1/meta/capabilities ``` Create a local test agent: ```bash curl -X POST http://127.0.0.1:4100/api/v1/agents \ -H 'Content-Type: application/json' \ -d '{"owner_user_id":"local-user","owner_email":"local@example.test","display_name":"Local Codex"}' ``` Create a token and inspect effective agent session: ```bash TOKEN=$(curl -sS -X POST http://127.0.0.1:4100/api/v1/agents//tokens \ -H 'Content-Type: application/json' \ -d '{"name":"Local Codex token"}' | jq -r .token) curl http://127.0.0.1:4100/api/v1/agent-session \ -H "Authorization: Bearer $TOKEN" ``` Do not expose these lifecycle endpoints publicly before the Launcher/internal auth layer is added.