Puter MCP
Puter MCP enables AI tools to interact with Puter: manage files, websites, workers, and more
作者提供的说明(英文原文)
Workflow discipline for AI agents: work items, gates, role-scoped tool profiles and runs
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
通过 2/2 项检查 · 在你的电脑上运行
第一步:你用哪个 AI?
选择你用的应用,步骤会显示在下方。
可连接 Claude,但需要先准备
需要 MCP Task Orchestrator 的密钥(在开发者网站注册,可能收费) · 需要先在电脑上安装 Docker(只需一次) · 仅限电脑上的 Claude 应用(Windows 或 Mac),网页和手机不可用
SettingsDeveloperEdit Config
{
"mcpServers": {
"task-orchestrator": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"DATABASE_PATH",
"-e",
"AGENT_CONFIG_DIR",
"-e",
"MCP_TRANSPORT",
"-e",
"MCP_HTTP_PORT",
"-e",
"LOG_LEVEL",
"-e",
"LOG_FILE",
"-e",
"API_ALLOW_QUERY_TOKEN_FOR_SSE",
"-e",
"API_ALLOW_UNAUTHENTICATED",
"-e",
"API_AUTH_MODE",
"-e",
"API_ENABLED",
"-e",
"API_JWKS_ALGORITHMS",
"-e",
"API_JWKS_ALLOW_INSECURE_URL",
"-e",
"API_JWKS_AUDIENCE",
"-e",
"API_JWKS_CACHE_TTL_SECONDS",
"-e",
"API_JWKS_ISSUER",
"-e",
"API_JWKS_MAX_STALE_SECONDS",
"-e",
"API_JWKS_MAX_TOKEN_LIFETIME_SECONDS",
"-e",
"API_JWKS_URL",
"-e",
"API_REDACT_NOTE_ATTRIBUTION",
"-e",
"API_SSE_AUTH_CHECK_INTERVAL_SECONDS",
"-e",
"API_SSE_BUFFER_SIZE",
"-e",
"API_TOKENS_PATH",
"-e",
"CORS_ALLOWED_HEADERS",
"-e",
"CORS_ALLOWED_METHODS",
"-e",
"CORS_ALLOWED_ORIGINS",
"-e",
"CORS_EXPOSE_HEADERS",
"-e",
"CORS_MAX_AGE_SECONDS",
"-e",
"DATABASE_BUSY_TIMEOUT_MS",
"-e",
"DATABASE_MAX_CONNECTIONS",
"-e",
"DATABASE_SHOW_SQL",
"-e",
"DB_COMPACT_ON_UPGRADE",
"-e",
"FLYWAY_REPAIR",
"-e",
"FTS_INTEGRITY",
"-e",
"MCP_ALLOWED_HOSTS",
"-e",
"MCP_ALLOW_UNAUTHENTICATED",
"-e",
"MCP_HTTP_HOST",
"-e",
"MCP_SERVER_NAME",
"-e",
"MCP_TOOL_PROFILE",
"-e",
"READINESS_FILE",
"-e",
"RESOURCE_LEASES_ENFORCED",
"-e",
"RETENTION_AUDIT_EVENTS_DAYS",
"-e",
"RETENTION_CALL_LOG_DAYS",
"-e",
"RETENTION_EVENTS_DAYS",
"-e",
"RETENTION_LEASE_HISTORY_DAYS",
"-e",
"SCHEMA_MODE",
"-e",
"UPGRADE_BACKUP",
"ghcr.io/jpicklyk/task-orchestrator:4.0.0"
],
"env": {
"DATABASE_PATH": "your-value",
"AGENT_CONFIG_DIR": "your-value",
"MCP_TRANSPORT": "your-value",
"MCP_HTTP_PORT": "your-value",
"LOG_LEVEL": "your-value",
"LOG_FILE": "your-value",
"API_ALLOW_QUERY_TOKEN_FOR_SSE": "your-value",
"API_ALLOW_UNAUTHENTICATED": "your-value",
"API_AUTH_MODE": "your-value",
"API_ENABLED": "your-value",
"API_JWKS_ALGORITHMS": "your-value",
"API_JWKS_ALLOW_INSECURE_URL": "your-value",
"API_JWKS_AUDIENCE": "your-value",
"API_JWKS_CACHE_TTL_SECONDS": "your-value",
"API_JWKS_ISSUER": "your-value",
"API_JWKS_MAX_STALE_SECONDS": "your-value",
"API_JWKS_MAX_TOKEN_LIFETIME_SECONDS": "your-value",
"API_JWKS_URL": "your-value",
"API_REDACT_NOTE_ATTRIBUTION": "your-value",
"API_SSE_AUTH_CHECK_INTERVAL_SECONDS": "your-value",
"API_SSE_BUFFER_SIZE": "your-value",
"API_TOKENS_PATH": "your-value",
"CORS_ALLOWED_HEADERS": "your-value",
"CORS_ALLOWED_METHODS": "your-value",
"CORS_ALLOWED_ORIGINS": "your-value",
"CORS_EXPOSE_HEADERS": "your-value",
"CORS_MAX_AGE_SECONDS": "your-value",
"DATABASE_BUSY_TIMEOUT_MS": "your-value",
"DATABASE_MAX_CONNECTIONS": "your-value",
"DATABASE_SHOW_SQL": "your-value",
"DB_COMPACT_ON_UPGRADE": "your-value",
"FLYWAY_REPAIR": "your-value",
"FTS_INTEGRITY": "your-value",
"MCP_ALLOWED_HOSTS": "your-value",
"MCP_ALLOW_UNAUTHENTICATED": "your-value",
"MCP_HTTP_HOST": "your-value",
"MCP_SERVER_NAME": "your-value",
"MCP_TOOL_PROFILE": "your-value",
"READINESS_FILE": "your-value",
"RESOURCE_LEASES_ENFORCED": "your-value",
"RETENTION_AUDIT_EVENTS_DAYS": "your-value",
"RETENTION_CALL_LOG_DAYS": "your-value",
"RETENTION_EVENTS_DAYS": "your-value",
"RETENTION_LEASE_HISTORY_DAYS": "your-value",
"SCHEMA_MODE": "your-value",
"UPGRADE_BACKUP": "your-value"
}
}
}
}只把密钥粘贴到应用的输入框里,不要粘贴到聊天中或发给任何人
用 MCP Task Orchestrator 告诉我你能帮我做什么,然后做一件给我看✓ 如果 Claude 说正在使用 MCP Task Orchestrator,或回答中出现 MCP Task Orchestrator 的工具名称,就表示连接成功
菜单名称已于 2026年11月11日 对照 Anthropic 帮助页面核实 · 你的界面可能因版本略有不同
ChatGPT 暂时无法连接 MCP Task Orchestrator
MCP Task Orchestrator 需要安装在你的电脑上,而 ChatGPT 只能连接在网上运行的服务器
A · 使用能连接 MCP Task Orchestrator 的应用
可连接 Claude Code,但需要先准备
需要 MCP Task Orchestrator 的密钥(在开发者网站注册,可能收费) · 需要先在电脑上安装 Docker(只需一次)
打开开发者网站,注册账户并创建 API 密钥,下一步要用。可能收费。
获取密钥的方法见下方开发者的 README
Mac:按 Command+空格,输入 Terminal · Windows:打开 PowerShell
claude mcp add task-orchestrator --env DATABASE_PATH=your-value --env AGENT_CONFIG_DIR=your-value --env MCP_TRANSPORT=your-value --env MCP_HTTP_PORT=your-value --env LOG_LEVEL=your-value --env LOG_FILE=your-value --env API_ALLOW_QUERY_TOKEN_FOR_SSE=your-value --env API_ALLOW_UNAUTHENTICATED=your-value --env API_AUTH_MODE=your-value --env API_ENABLED=your-value --env API_JWKS_ALGORITHMS=your-value --env API_JWKS_ALLOW_INSECURE_URL=your-value --env API_JWKS_AUDIENCE=your-value --env API_JWKS_CACHE_TTL_SECONDS=your-value --env API_JWKS_ISSUER=your-value --env API_JWKS_MAX_STALE_SECONDS=your-value --env API_JWKS_MAX_TOKEN_LIFETIME_SECONDS=your-value --env API_JWKS_URL=your-value --env API_REDACT_NOTE_ATTRIBUTION=your-value --env API_SSE_AUTH_CHECK_INTERVAL_SECONDS=your-value --env API_SSE_BUFFER_SIZE=your-value --env API_TOKENS_PATH=your-value --env CORS_ALLOWED_HEADERS=your-value --env CORS_ALLOWED_METHODS=your-value --env CORS_ALLOWED_ORIGINS=your-value --env CORS_EXPOSE_HEADERS=your-value --env CORS_MAX_AGE_SECONDS=your-value --env DATABASE_BUSY_TIMEOUT_MS=your-value --env DATABASE_MAX_CONNECTIONS=your-value --env DATABASE_SHOW_SQL=your-value --env DB_COMPACT_ON_UPGRADE=your-value --env FLYWAY_REPAIR=your-value --env FTS_INTEGRITY=your-value --env MCP_ALLOWED_HOSTS=your-value --env MCP_ALLOW_UNAUTHENTICATED=your-value --env MCP_HTTP_HOST=your-value --env MCP_SERVER_NAME=your-value --env MCP_TOOL_PROFILE=your-value --env READINESS_FILE=your-value --env RESOURCE_LEASES_ENFORCED=your-value --env RETENTION_AUDIT_EVENTS_DAYS=your-value --env RETENTION_CALL_LOG_DAYS=your-value --env RETENTION_EVENTS_DAYS=your-value --env RETENTION_LEASE_HISTORY_DAYS=your-value --env SCHEMA_MODE=your-value --env UPGRADE_BACKUP=your-value -- docker run -i --rm -e DATABASE_PATH -e AGENT_CONFIG_DIR -e MCP_TRANSPORT -e MCP_HTTP_PORT -e LOG_LEVEL -e LOG_FILE -e API_ALLOW_QUERY_TOKEN_FOR_SSE -e API_ALLOW_UNAUTHENTICATED -e API_AUTH_MODE -e API_ENABLED -e API_JWKS_ALGORITHMS -e API_JWKS_ALLOW_INSECURE_URL -e API_JWKS_AUDIENCE -e API_JWKS_CACHE_TTL_SECONDS -e API_JWKS_ISSUER -e API_JWKS_MAX_STALE_SECONDS -e API_JWKS_MAX_TOKEN_LIFETIME_SECONDS -e API_JWKS_URL -e API_REDACT_NOTE_ATTRIBUTION -e API_SSE_AUTH_CHECK_INTERVAL_SECONDS -e API_SSE_BUFFER_SIZE -e API_TOKENS_PATH -e CORS_ALLOWED_HEADERS -e CORS_ALLOWED_METHODS -e CORS_ALLOWED_ORIGINS -e CORS_EXPOSE_HEADERS -e CORS_MAX_AGE_SECONDS -e DATABASE_BUSY_TIMEOUT_MS -e DATABASE_MAX_CONNECTIONS -e DATABASE_SHOW_SQL -e DB_COMPACT_ON_UPGRADE -e FLYWAY_REPAIR -e FTS_INTEGRITY -e MCP_ALLOWED_HOSTS -e MCP_ALLOW_UNAUTHENTICATED -e MCP_HTTP_HOST -e MCP_SERVER_NAME -e MCP_TOOL_PROFILE -e READINESS_FILE -e RESOURCE_LEASES_ENFORCED -e RETENTION_AUDIT_EVENTS_DAYS -e RETENTION_CALL_LOG_DAYS -e RETENTION_EVENTS_DAYS -e RETENTION_LEASE_HISTORY_DAYS -e SCHEMA_MODE -e UPGRADE_BACKUP ghcr.io/jpicklyk/task-orchestrator:4.0.0按 Enter 前,把“your-value”改成你的密钥
只把密钥粘贴到应用的输入框里,不要粘贴到聊天中或发给任何人
应能看到 MCP Task Orchestrator 在列表中并显示已连接
用 MCP Task Orchestrator 告诉我你能帮我做什么,然后做一件给我看✓ 如果 Claude Code 说正在使用 MCP Task Orchestrator,或回答中出现 MCP Task Orchestrator 的工具名称,就表示连接成功
菜单名称已于 2026年11月11日 对照 Anthropic 帮助页面核实 · 你的界面可能因版本略有不同
可连接 Cursor,但需要先准备
需要 MCP Task Orchestrator 的密钥(在开发者网站注册,可能收费) · 需要先在电脑上安装 Docker(只需一次)
打开开发者网站,注册账户并创建 API 密钥,下一步要用。可能收费。
获取密钥的方法见下方开发者的 README
在 MCP Task Orchestrator 的设置中,DATABASE_PATH, AGENT_CONFIG_DIR, MCP_TRANSPORT, MCP_HTTP_PORT, LOG_LEVEL, LOG_FILE, API_ALLOW_QUERY_TOKEN_FOR_SSE, API_ALLOW_UNAUTHENTICATED, API_AUTH_MODE, API_ENABLED, API_JWKS_ALGORITHMS, API_JWKS_ALLOW_INSECURE_URL, API_JWKS_AUDIENCE, API_JWKS_CACHE_TTL_SECONDS, API_JWKS_ISSUER, API_JWKS_MAX_STALE_SECONDS, API_JWKS_MAX_TOKEN_LIFETIME_SECONDS, API_JWKS_URL, API_REDACT_NOTE_ATTRIBUTION, API_SSE_AUTH_CHECK_INTERVAL_SECONDS, API_SSE_BUFFER_SIZE, API_TOKENS_PATH, CORS_ALLOWED_HEADERS, CORS_ALLOWED_METHODS, CORS_ALLOWED_ORIGINS, CORS_EXPOSE_HEADERS, CORS_MAX_AGE_SECONDS, DATABASE_BUSY_TIMEOUT_MS, DATABASE_MAX_CONNECTIONS, DATABASE_SHOW_SQL, DB_COMPACT_ON_UPGRADE, FLYWAY_REPAIR, FTS_INTEGRITY, MCP_ALLOWED_HOSTS, MCP_ALLOW_UNAUTHENTICATED, MCP_HTTP_HOST, MCP_SERVER_NAME, MCP_TOOL_PROFILE, READINESS_FILE, RESOURCE_LEASES_ENFORCED, RETENTION_AUDIT_EVENTS_DAYS, RETENTION_CALL_LOG_DAYS, RETENTION_EVENTS_DAYS, RETENTION_LEASE_HISTORY_DAYS, SCHEMA_MODE, UPGRADE_BACKUP 还是空的,填入你的密钥并保存
只把密钥粘贴到应用的输入框里,不要粘贴到聊天中或发给任何人
用 MCP Task Orchestrator 告诉我你能帮我做什么,然后做一件给我看✓ 如果 Cursor 说正在使用 MCP Task Orchestrator,或回答中出现 MCP Task Orchestrator 的工具名称,就表示连接成功
菜单名称已于 2026年11月11日 对照 Cursor 帮助页面核实 · 你的界面可能因版本略有不同
可连接 VS Code,但需要先准备
需要 MCP Task Orchestrator 的密钥(在开发者网站注册,可能收费) · 需要先在电脑上安装 Docker(只需一次)
打开开发者网站,注册账户并创建 API 密钥,下一步要用。可能收费。
获取密钥的方法见下方开发者的 README
在 MCP Task Orchestrator 的设置中,DATABASE_PATH, AGENT_CONFIG_DIR, MCP_TRANSPORT, MCP_HTTP_PORT, LOG_LEVEL, LOG_FILE, API_ALLOW_QUERY_TOKEN_FOR_SSE, API_ALLOW_UNAUTHENTICATED, API_AUTH_MODE, API_ENABLED, API_JWKS_ALGORITHMS, API_JWKS_ALLOW_INSECURE_URL, API_JWKS_AUDIENCE, API_JWKS_CACHE_TTL_SECONDS, API_JWKS_ISSUER, API_JWKS_MAX_STALE_SECONDS, API_JWKS_MAX_TOKEN_LIFETIME_SECONDS, API_JWKS_URL, API_REDACT_NOTE_ATTRIBUTION, API_SSE_AUTH_CHECK_INTERVAL_SECONDS, API_SSE_BUFFER_SIZE, API_TOKENS_PATH, CORS_ALLOWED_HEADERS, CORS_ALLOWED_METHODS, CORS_ALLOWED_ORIGINS, CORS_EXPOSE_HEADERS, CORS_MAX_AGE_SECONDS, DATABASE_BUSY_TIMEOUT_MS, DATABASE_MAX_CONNECTIONS, DATABASE_SHOW_SQL, DB_COMPACT_ON_UPGRADE, FLYWAY_REPAIR, FTS_INTEGRITY, MCP_ALLOWED_HOSTS, MCP_ALLOW_UNAUTHENTICATED, MCP_HTTP_HOST, MCP_SERVER_NAME, MCP_TOOL_PROFILE, READINESS_FILE, RESOURCE_LEASES_ENFORCED, RETENTION_AUDIT_EVENTS_DAYS, RETENTION_CALL_LOG_DAYS, RETENTION_EVENTS_DAYS, RETENTION_LEASE_HISTORY_DAYS, SCHEMA_MODE, UPGRADE_BACKUP 还是空的,填入你的密钥并保存
只把密钥粘贴到应用的输入框里,不要粘贴到聊天中或发给任何人
用 MCP Task Orchestrator 告诉我你能帮我做什么,然后做一件给我看✓ 如果 VS Code 说正在使用 MCP Task Orchestrator,或回答中出现 MCP Task Orchestrator 的工具名称,就表示连接成功
菜单名称已于 2026年11月11日 对照 VS Code 帮助页面核实 · 你的界面可能因版本略有不同
Claude Code
claude mcp add task-orchestrator --env DATABASE_PATH=your-value --env AGENT_CONFIG_DIR=your-value --env MCP_TRANSPORT=your-value --env MCP_HTTP_PORT=your-value --env LOG_LEVEL=your-value --env LOG_FILE=your-value --env API_ALLOW_QUERY_TOKEN_FOR_SSE=your-value --env API_ALLOW_UNAUTHENTICATED=your-value --env API_AUTH_MODE=your-value --env API_ENABLED=your-value --env API_JWKS_ALGORITHMS=your-value --env API_JWKS_ALLOW_INSECURE_URL=your-value --env API_JWKS_AUDIENCE=your-value --env API_JWKS_CACHE_TTL_SECONDS=your-value --env API_JWKS_ISSUER=your-value --env API_JWKS_MAX_STALE_SECONDS=your-value --env API_JWKS_MAX_TOKEN_LIFETIME_SECONDS=your-value --env API_JWKS_URL=your-value --env API_REDACT_NOTE_ATTRIBUTION=your-value --env API_SSE_AUTH_CHECK_INTERVAL_SECONDS=your-value --env API_SSE_BUFFER_SIZE=your-value --env API_TOKENS_PATH=your-value --env CORS_ALLOWED_HEADERS=your-value --env CORS_ALLOWED_METHODS=your-value --env CORS_ALLOWED_ORIGINS=your-value --env CORS_EXPOSE_HEADERS=your-value --env CORS_MAX_AGE_SECONDS=your-value --env DATABASE_BUSY_TIMEOUT_MS=your-value --env DATABASE_MAX_CONNECTIONS=your-value --env DATABASE_SHOW_SQL=your-value --env DB_COMPACT_ON_UPGRADE=your-value --env FLYWAY_REPAIR=your-value --env FTS_INTEGRITY=your-value --env MCP_ALLOWED_HOSTS=your-value --env MCP_ALLOW_UNAUTHENTICATED=your-value --env MCP_HTTP_HOST=your-value --env MCP_SERVER_NAME=your-value --env MCP_TOOL_PROFILE=your-value --env READINESS_FILE=your-value --env RESOURCE_LEASES_ENFORCED=your-value --env RETENTION_AUDIT_EVENTS_DAYS=your-value --env RETENTION_CALL_LOG_DAYS=your-value --env RETENTION_EVENTS_DAYS=your-value --env RETENTION_LEASE_HISTORY_DAYS=your-value --env SCHEMA_MODE=your-value --env UPGRADE_BACKUP=your-value -- docker run -i --rm -e DATABASE_PATH -e AGENT_CONFIG_DIR -e MCP_TRANSPORT -e MCP_HTTP_PORT -e LOG_LEVEL -e LOG_FILE -e API_ALLOW_QUERY_TOKEN_FOR_SSE -e API_ALLOW_UNAUTHENTICATED -e API_AUTH_MODE -e API_ENABLED -e API_JWKS_ALGORITHMS -e API_JWKS_ALLOW_INSECURE_URL -e API_JWKS_AUDIENCE -e API_JWKS_CACHE_TTL_SECONDS -e API_JWKS_ISSUER -e API_JWKS_MAX_STALE_SECONDS -e API_JWKS_MAX_TOKEN_LIFETIME_SECONDS -e API_JWKS_URL -e API_REDACT_NOTE_ATTRIBUTION -e API_SSE_AUTH_CHECK_INTERVAL_SECONDS -e API_SSE_BUFFER_SIZE -e API_TOKENS_PATH -e CORS_ALLOWED_HEADERS -e CORS_ALLOWED_METHODS -e CORS_ALLOWED_ORIGINS -e CORS_EXPOSE_HEADERS -e CORS_MAX_AGE_SECONDS -e DATABASE_BUSY_TIMEOUT_MS -e DATABASE_MAX_CONNECTIONS -e DATABASE_SHOW_SQL -e DB_COMPACT_ON_UPGRADE -e FLYWAY_REPAIR -e FTS_INTEGRITY -e MCP_ALLOWED_HOSTS -e MCP_ALLOW_UNAUTHENTICATED -e MCP_HTTP_HOST -e MCP_SERVER_NAME -e MCP_TOOL_PROFILE -e READINESS_FILE -e RESOURCE_LEASES_ENFORCED -e RETENTION_AUDIT_EVENTS_DAYS -e RETENTION_CALL_LOG_DAYS -e RETENTION_EVENTS_DAYS -e RETENTION_LEASE_HISTORY_DAYS -e SCHEMA_MODE -e UPGRADE_BACKUP ghcr.io/jpicklyk/task-orchestrator:4.0.0Claude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"task-orchestrator": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"DATABASE_PATH",
"-e",
"AGENT_CONFIG_DIR",
"-e",
"MCP_TRANSPORT",
"-e",
"MCP_HTTP_PORT",
"-e",
"LOG_LEVEL",
"-e",
"LOG_FILE",
"-e",
"API_ALLOW_QUERY_TOKEN_FOR_SSE",
"-e",
"API_ALLOW_UNAUTHENTICATED",
"-e",
"API_AUTH_MODE",
"-e",
"API_ENABLED",
"-e",
"API_JWKS_ALGORITHMS",
"-e",
"API_JWKS_ALLOW_INSECURE_URL",
"-e",
"API_JWKS_AUDIENCE",
"-e",
"API_JWKS_CACHE_TTL_SECONDS",
"-e",
"API_JWKS_ISSUER",
"-e",
"API_JWKS_MAX_STALE_SECONDS",
"-e",
"API_JWKS_MAX_TOKEN_LIFETIME_SECONDS",
"-e",
"API_JWKS_URL",
"-e",
"API_REDACT_NOTE_ATTRIBUTION",
"-e",
"API_SSE_AUTH_CHECK_INTERVAL_SECONDS",
"-e",
"API_SSE_BUFFER_SIZE",
"-e",
"API_TOKENS_PATH",
"-e",
"CORS_ALLOWED_HEADERS",
"-e",
"CORS_ALLOWED_METHODS",
"-e",
"CORS_ALLOWED_ORIGINS",
"-e",
"CORS_EXPOSE_HEADERS",
"-e",
"CORS_MAX_AGE_SECONDS",
"-e",
"DATABASE_BUSY_TIMEOUT_MS",
"-e",
"DATABASE_MAX_CONNECTIONS",
"-e",
"DATABASE_SHOW_SQL",
"-e",
"DB_COMPACT_ON_UPGRADE",
"-e",
"FLYWAY_REPAIR",
"-e",
"FTS_INTEGRITY",
"-e",
"MCP_ALLOWED_HOSTS",
"-e",
"MCP_ALLOW_UNAUTHENTICATED",
"-e",
"MCP_HTTP_HOST",
"-e",
"MCP_SERVER_NAME",
"-e",
"MCP_TOOL_PROFILE",
"-e",
"READINESS_FILE",
"-e",
"RESOURCE_LEASES_ENFORCED",
"-e",
"RETENTION_AUDIT_EVENTS_DAYS",
"-e",
"RETENTION_CALL_LOG_DAYS",
"-e",
"RETENTION_EVENTS_DAYS",
"-e",
"RETENTION_LEASE_HISTORY_DAYS",
"-e",
"SCHEMA_MODE",
"-e",
"UPGRADE_BACKUP",
"ghcr.io/jpicklyk/task-orchestrator:4.0.0"
],
"env": {
"DATABASE_PATH": "your-value",
"AGENT_CONFIG_DIR": "your-value",
"MCP_TRANSPORT": "your-value",
"MCP_HTTP_PORT": "your-value",
"LOG_LEVEL": "your-value",
"LOG_FILE": "your-value",
"API_ALLOW_QUERY_TOKEN_FOR_SSE": "your-value",
"API_ALLOW_UNAUTHENTICATED": "your-value",
"API_AUTH_MODE": "your-value",
"API_ENABLED": "your-value",
"API_JWKS_ALGORITHMS": "your-value",
"API_JWKS_ALLOW_INSECURE_URL": "your-value",
"API_JWKS_AUDIENCE": "your-value",
"API_JWKS_CACHE_TTL_SECONDS": "your-value",
"API_JWKS_ISSUER": "your-value",
"API_JWKS_MAX_STALE_SECONDS": "your-value",
"API_JWKS_MAX_TOKEN_LIFETIME_SECONDS": "your-value",
"API_JWKS_URL": "your-value",
"API_REDACT_NOTE_ATTRIBUTION": "your-value",
"API_SSE_AUTH_CHECK_INTERVAL_SECONDS": "your-value",
"API_SSE_BUFFER_SIZE": "your-value",
"API_TOKENS_PATH": "your-value",
"CORS_ALLOWED_HEADERS": "your-value",
"CORS_ALLOWED_METHODS": "your-value",
"CORS_ALLOWED_ORIGINS": "your-value",
"CORS_EXPOSE_HEADERS": "your-value",
"CORS_MAX_AGE_SECONDS": "your-value",
"DATABASE_BUSY_TIMEOUT_MS": "your-value",
"DATABASE_MAX_CONNECTIONS": "your-value",
"DATABASE_SHOW_SQL": "your-value",
"DB_COMPACT_ON_UPGRADE": "your-value",
"FLYWAY_REPAIR": "your-value",
"FTS_INTEGRITY": "your-value",
"MCP_ALLOWED_HOSTS": "your-value",
"MCP_ALLOW_UNAUTHENTICATED": "your-value",
"MCP_HTTP_HOST": "your-value",
"MCP_SERVER_NAME": "your-value",
"MCP_TOOL_PROFILE": "your-value",
"READINESS_FILE": "your-value",
"RESOURCE_LEASES_ENFORCED": "your-value",
"RETENTION_AUDIT_EVENTS_DAYS": "your-value",
"RETENTION_CALL_LOG_DAYS": "your-value",
"RETENTION_EVENTS_DAYS": "your-value",
"RETENTION_LEASE_HISTORY_DAYS": "your-value",
"SCHEMA_MODE": "your-value",
"UPGRADE_BACKUP": "your-value"
}
}
}
}Cursor (~/.cursor/mcp.json)
{
"mcpServers": {
"task-orchestrator": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"DATABASE_PATH",
"-e",
"AGENT_CONFIG_DIR",
"-e",
"MCP_TRANSPORT",
"-e",
"MCP_HTTP_PORT",
"-e",
"LOG_LEVEL",
"-e",
"LOG_FILE",
"-e",
"API_ALLOW_QUERY_TOKEN_FOR_SSE",
"-e",
"API_ALLOW_UNAUTHENTICATED",
"-e",
"API_AUTH_MODE",
"-e",
"API_ENABLED",
"-e",
"API_JWKS_ALGORITHMS",
"-e",
"API_JWKS_ALLOW_INSECURE_URL",
"-e",
"API_JWKS_AUDIENCE",
"-e",
"API_JWKS_CACHE_TTL_SECONDS",
"-e",
"API_JWKS_ISSUER",
"-e",
"API_JWKS_MAX_STALE_SECONDS",
"-e",
"API_JWKS_MAX_TOKEN_LIFETIME_SECONDS",
"-e",
"API_JWKS_URL",
"-e",
"API_REDACT_NOTE_ATTRIBUTION",
"-e",
"API_SSE_AUTH_CHECK_INTERVAL_SECONDS",
"-e",
"API_SSE_BUFFER_SIZE",
"-e",
"API_TOKENS_PATH",
"-e",
"CORS_ALLOWED_HEADERS",
"-e",
"CORS_ALLOWED_METHODS",
"-e",
"CORS_ALLOWED_ORIGINS",
"-e",
"CORS_EXPOSE_HEADERS",
"-e",
"CORS_MAX_AGE_SECONDS",
"-e",
"DATABASE_BUSY_TIMEOUT_MS",
"-e",
"DATABASE_MAX_CONNECTIONS",
"-e",
"DATABASE_SHOW_SQL",
"-e",
"DB_COMPACT_ON_UPGRADE",
"-e",
"FLYWAY_REPAIR",
"-e",
"FTS_INTEGRITY",
"-e",
"MCP_ALLOWED_HOSTS",
"-e",
"MCP_ALLOW_UNAUTHENTICATED",
"-e",
"MCP_HTTP_HOST",
"-e",
"MCP_SERVER_NAME",
"-e",
"MCP_TOOL_PROFILE",
"-e",
"READINESS_FILE",
"-e",
"RESOURCE_LEASES_ENFORCED",
"-e",
"RETENTION_AUDIT_EVENTS_DAYS",
"-e",
"RETENTION_CALL_LOG_DAYS",
"-e",
"RETENTION_EVENTS_DAYS",
"-e",
"RETENTION_LEASE_HISTORY_DAYS",
"-e",
"SCHEMA_MODE",
"-e",
"UPGRADE_BACKUP",
"ghcr.io/jpicklyk/task-orchestrator:4.0.0"
],
"env": {
"DATABASE_PATH": "your-value",
"AGENT_CONFIG_DIR": "your-value",
"MCP_TRANSPORT": "your-value",
"MCP_HTTP_PORT": "your-value",
"LOG_LEVEL": "your-value",
"LOG_FILE": "your-value",
"API_ALLOW_QUERY_TOKEN_FOR_SSE": "your-value",
"API_ALLOW_UNAUTHENTICATED": "your-value",
"API_AUTH_MODE": "your-value",
"API_ENABLED": "your-value",
"API_JWKS_ALGORITHMS": "your-value",
"API_JWKS_ALLOW_INSECURE_URL": "your-value",
"API_JWKS_AUDIENCE": "your-value",
"API_JWKS_CACHE_TTL_SECONDS": "your-value",
"API_JWKS_ISSUER": "your-value",
"API_JWKS_MAX_STALE_SECONDS": "your-value",
"API_JWKS_MAX_TOKEN_LIFETIME_SECONDS": "your-value",
"API_JWKS_URL": "your-value",
"API_REDACT_NOTE_ATTRIBUTION": "your-value",
"API_SSE_AUTH_CHECK_INTERVAL_SECONDS": "your-value",
"API_SSE_BUFFER_SIZE": "your-value",
"API_TOKENS_PATH": "your-value",
"CORS_ALLOWED_HEADERS": "your-value",
"CORS_ALLOWED_METHODS": "your-value",
"CORS_ALLOWED_ORIGINS": "your-value",
"CORS_EXPOSE_HEADERS": "your-value",
"CORS_MAX_AGE_SECONDS": "your-value",
"DATABASE_BUSY_TIMEOUT_MS": "your-value",
"DATABASE_MAX_CONNECTIONS": "your-value",
"DATABASE_SHOW_SQL": "your-value",
"DB_COMPACT_ON_UPGRADE": "your-value",
"FLYWAY_REPAIR": "your-value",
"FTS_INTEGRITY": "your-value",
"MCP_ALLOWED_HOSTS": "your-value",
"MCP_ALLOW_UNAUTHENTICATED": "your-value",
"MCP_HTTP_HOST": "your-value",
"MCP_SERVER_NAME": "your-value",
"MCP_TOOL_PROFILE": "your-value",
"READINESS_FILE": "your-value",
"RESOURCE_LEASES_ENFORCED": "your-value",
"RETENTION_AUDIT_EVENTS_DAYS": "your-value",
"RETENTION_CALL_LOG_DAYS": "your-value",
"RETENTION_EVENTS_DAYS": "your-value",
"RETENTION_LEASE_HISTORY_DAYS": "your-value",
"SCHEMA_MODE": "your-value",
"UPGRADE_BACKUP": "your-value"
}
}
}
}VS Code (mcp.json)
{
"servers": {
"task-orchestrator": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"DATABASE_PATH",
"-e",
"AGENT_CONFIG_DIR",
"-e",
"MCP_TRANSPORT",
"-e",
"MCP_HTTP_PORT",
"-e",
"LOG_LEVEL",
"-e",
"LOG_FILE",
"-e",
"API_ALLOW_QUERY_TOKEN_FOR_SSE",
"-e",
"API_ALLOW_UNAUTHENTICATED",
"-e",
"API_AUTH_MODE",
"-e",
"API_ENABLED",
"-e",
"API_JWKS_ALGORITHMS",
"-e",
"API_JWKS_ALLOW_INSECURE_URL",
"-e",
"API_JWKS_AUDIENCE",
"-e",
"API_JWKS_CACHE_TTL_SECONDS",
"-e",
"API_JWKS_ISSUER",
"-e",
"API_JWKS_MAX_STALE_SECONDS",
"-e",
"API_JWKS_MAX_TOKEN_LIFETIME_SECONDS",
"-e",
"API_JWKS_URL",
"-e",
"API_REDACT_NOTE_ATTRIBUTION",
"-e",
"API_SSE_AUTH_CHECK_INTERVAL_SECONDS",
"-e",
"API_SSE_BUFFER_SIZE",
"-e",
"API_TOKENS_PATH",
"-e",
"CORS_ALLOWED_HEADERS",
"-e",
"CORS_ALLOWED_METHODS",
"-e",
"CORS_ALLOWED_ORIGINS",
"-e",
"CORS_EXPOSE_HEADERS",
"-e",
"CORS_MAX_AGE_SECONDS",
"-e",
"DATABASE_BUSY_TIMEOUT_MS",
"-e",
"DATABASE_MAX_CONNECTIONS",
"-e",
"DATABASE_SHOW_SQL",
"-e",
"DB_COMPACT_ON_UPGRADE",
"-e",
"FLYWAY_REPAIR",
"-e",
"FTS_INTEGRITY",
"-e",
"MCP_ALLOWED_HOSTS",
"-e",
"MCP_ALLOW_UNAUTHENTICATED",
"-e",
"MCP_HTTP_HOST",
"-e",
"MCP_SERVER_NAME",
"-e",
"MCP_TOOL_PROFILE",
"-e",
"READINESS_FILE",
"-e",
"RESOURCE_LEASES_ENFORCED",
"-e",
"RETENTION_AUDIT_EVENTS_DAYS",
"-e",
"RETENTION_CALL_LOG_DAYS",
"-e",
"RETENTION_EVENTS_DAYS",
"-e",
"RETENTION_LEASE_HISTORY_DAYS",
"-e",
"SCHEMA_MODE",
"-e",
"UPGRADE_BACKUP",
"ghcr.io/jpicklyk/task-orchestrator:4.0.0"
],
"env": {
"DATABASE_PATH": "your-value",
"AGENT_CONFIG_DIR": "your-value",
"MCP_TRANSPORT": "your-value",
"MCP_HTTP_PORT": "your-value",
"LOG_LEVEL": "your-value",
"LOG_FILE": "your-value",
"API_ALLOW_QUERY_TOKEN_FOR_SSE": "your-value",
"API_ALLOW_UNAUTHENTICATED": "your-value",
"API_AUTH_MODE": "your-value",
"API_ENABLED": "your-value",
"API_JWKS_ALGORITHMS": "your-value",
"API_JWKS_ALLOW_INSECURE_URL": "your-value",
"API_JWKS_AUDIENCE": "your-value",
"API_JWKS_CACHE_TTL_SECONDS": "your-value",
"API_JWKS_ISSUER": "your-value",
"API_JWKS_MAX_STALE_SECONDS": "your-value",
"API_JWKS_MAX_TOKEN_LIFETIME_SECONDS": "your-value",
"API_JWKS_URL": "your-value",
"API_REDACT_NOTE_ATTRIBUTION": "your-value",
"API_SSE_AUTH_CHECK_INTERVAL_SECONDS": "your-value",
"API_SSE_BUFFER_SIZE": "your-value",
"API_TOKENS_PATH": "your-value",
"CORS_ALLOWED_HEADERS": "your-value",
"CORS_ALLOWED_METHODS": "your-value",
"CORS_ALLOWED_ORIGINS": "your-value",
"CORS_EXPOSE_HEADERS": "your-value",
"CORS_MAX_AGE_SECONDS": "your-value",
"DATABASE_BUSY_TIMEOUT_MS": "your-value",
"DATABASE_MAX_CONNECTIONS": "your-value",
"DATABASE_SHOW_SQL": "your-value",
"DB_COMPACT_ON_UPGRADE": "your-value",
"FLYWAY_REPAIR": "your-value",
"FTS_INTEGRITY": "your-value",
"MCP_ALLOWED_HOSTS": "your-value",
"MCP_ALLOW_UNAUTHENTICATED": "your-value",
"MCP_HTTP_HOST": "your-value",
"MCP_SERVER_NAME": "your-value",
"MCP_TOOL_PROFILE": "your-value",
"READINESS_FILE": "your-value",
"RESOURCE_LEASES_ENFORCED": "your-value",
"RETENTION_AUDIT_EVENTS_DAYS": "your-value",
"RETENTION_CALL_LOG_DAYS": "your-value",
"RETENTION_EVENTS_DAYS": "your-value",
"RETENTION_LEASE_HISTORY_DAYS": "your-value",
"SCHEMA_MODE": "your-value",
"UPGRADE_BACKUP": "your-value"
}
}
}
}DATABASE_PATH envAGENT_CONFIG_DIR envMCP_TRANSPORT envMCP_HTTP_PORT envLOG_LEVEL envLOG_FILE envAPI_ALLOW_QUERY_TOKEN_FOR_SSE envAPI_ALLOW_UNAUTHENTICATED envAPI_AUTH_MODE envAPI_ENABLED envAPI_JWKS_ALGORITHMS envAPI_JWKS_ALLOW_INSECURE_URL envAPI_JWKS_AUDIENCE envAPI_JWKS_CACHE_TTL_SECONDS envAPI_JWKS_ISSUER envAPI_JWKS_MAX_STALE_SECONDS envAPI_JWKS_MAX_TOKEN_LIFETIME_SECONDS envAPI_JWKS_URL envAPI_REDACT_NOTE_ATTRIBUTION envAPI_SSE_AUTH_CHECK_INTERVAL_SECONDS envAPI_SSE_BUFFER_SIZE envAPI_TOKENS_PATH envCORS_ALLOWED_HEADERS envCORS_ALLOWED_METHODS envCORS_ALLOWED_ORIGINS envCORS_EXPOSE_HEADERS envCORS_MAX_AGE_SECONDS envDATABASE_BUSY_TIMEOUT_MS envDATABASE_MAX_CONNECTIONS envDATABASE_SHOW_SQL envDB_COMPACT_ON_UPGRADE envFLYWAY_REPAIR envFTS_INTEGRITY envMCP_ALLOWED_HOSTS envMCP_ALLOW_UNAUTHENTICATED envMCP_HTTP_HOST envMCP_SERVER_NAME envMCP_TOOL_PROFILE envREADINESS_FILE envRESOURCE_LEASES_ENFORCED envRETENTION_AUDIT_EVENTS_DAYS envRETENTION_CALL_LOG_DAYS envRETENTION_EVENTS_DAYS envRETENTION_LEASE_HISTORY_DAYS envSCHEMA_MODE envUPGRADE_BACKUP env这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
依据这个服务器的连接方式和各应用自己的文档,检查于 2026年11月10日。
在你的电脑上运行,适用于
ClaudeGooseLM StudioMsty StudioCherry StudioCursorVS Code + GitHub CopilotVisual StudioWindsurf (Devin Desktop)ZedKiroClineContinueJetBrains AI AssistantClaude CodeCodex CLIGemini CLIOpenCodenodecodeWarpLibreChatRaycast
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月11日
注册名称已通过 GitHub 账户 jpicklyk 验证,该账户拥有此仓库
代码最后更新于昨天
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
提问、分享技巧或报告无法使用。按“有帮助”数量排序。
还没有评价
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 2 项适用的基础检查中通过了 2 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于昨天,最新版本(4.0.0)于昨天进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Docker。
同一分类中有:Puter MCP, XcodeBuildMCP, XcodeBuildMCP
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:↓ 每周下载量i★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
Puter MCP enables AI tools to interact with Puter: manage files, websites, workers, and more
XcodeBuildMCP provides tools for Xcode project management, simulator management, and app utilities.
XcodeBuildMCP provides tools for Xcode project management, simulator management, and app utilities.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
Server-enforced workflow discipline for AI agents.
Prompt-based frameworks hope the LLM follows instructions. This one blocks the call if it doesn't.
Task Orchestrator is an MCP server that gives AI coding agents a persistent work item graph with quality gates enforced by the server, not the prompt. It is built for developers running multi-agent or multi-session coding workflows: an orchestrator dispatching sub-agents, a fresh session picking up yesterday's work, or an autonomous loop draining a backlog. It ships as a Docker image, works with any MCP client, and has an optional Claude Code plugin that adds skills and hooks on top.
New here? Start with the [illustrated field guide](https://jpicklyk.github.io/task-orchestrator/field-guide/). It explains the ideas on this page in short visual pages, several of them interactive: fire triggers at a phase gate, click a work breakdown through its dependencies, and watch a schema resolve.
Multi-agent workflows need infrastructure the model doesn't provide. When an orchestrator dispatches sub-agents across sessions, there's no built-in way to enforce what documentation must exist before work starts, track which agent made which change, or guarantee dependency ordering across a work breakdown. These are structural concerns — they belong in the server, not in prompts.
Task Orchestrator puts them in the server. If a required design note isn't filled, advance returns an error naming the missing note. If an upstream dependency isn't complete, the transition is blocked. Every transition and note records who made it. A new session recovers the full state in one call instead of replaying a conversation. And the rules are YAML config, not hardcoded prompts - change them without changing code.
Morning — new session, new agent, zero context:
Agent: items_read(select="context") → 2 items in work, 1 blocked, 1 stalled (missing implementation-notes) Agent: items_read(select="history", since="2026-01-14T17:00:00Z") → Recent transitions show orchestrator-1 dispatched 3 sub-agents yesterday
Agent: advance(ops=[{ op: "transition", itemId: "a3f28c01", trigger: "start" }]) -> gate_blocked: "Item a3f28c01-... is missing 1 required notes." (detail.missing: requirements)
Agent: notes_write(ops=[{ op: "upsert", itemId: "a3f28c01", key: "requirements", role: "queue", body: "Validate email format, enforce password complexity..." }]) -> results[0]: { ok: true, id: "...", version: 1, created: true }
Agent: advance(ops=[{ op: "transition", itemId: "a3f28c01", trigger: "start" }]) → queue → work. Caller recorded. No context rebuilding.
Prerequisite: Docker installed and running.
The simplest setup is a per-session STDIO container: no port, no daemon, no REST API. Add it to your project's .mcp.json:
{
"mcpServers": { "mcp-task-orchestrator": { "command": "docker", "args": [ "run", "--rm", "-i", "-v", "mcp-task-data:/app/data", "ghcr.io/jpicklyk/task-orchestrator:latest" ] } } }
Claude Code users can register the same shape from the CLI instead:
claude mcp add-json mcp-task-orchestrator '{
"command": "docker", "args": ["run", "--rm", "-i", "-v", "mcp-task-data:/app/data", "ghcr.io/jpicklyk/task-orchestrator:latest"] }'
Restart your client. The server creates its SQLite database on first run. Without a config file every tool works in schema-free mode: no gates, no required notes. Add schemas when you want enforcement.
Create .taskorchestrator/config.yaml in your project (see Workflow Enforcement for an example, or use the plugin's /task-orchestrator:manage-schemas skill) and mount that folder into the container:
{
"mcpServers": { "mcp-task-orchestrator": { "command": "docker", "args": [ "run", "--rm", "-i", "-v", "mcp-task-data:/app/data", "-v", "/absolute/path/to/your/project/.taskorchestrator:/project/.taskorchestrator:ro", "-e", "AGENT_CONFIG_DIR=/project", "ghcr.io/jpicklyk/task-orchestrator:latest" ] } } }
At every start the server imports the mounted file into its database (the server-config-import boot step) and then serves the stored copy; editing the file takes effect on the next restart. If several containers share one data volume but mount different files, the last one to boot wins; use step 3 for multi-project setups.
Use an absolute host path. Claude Code's .mcp.json expands only environment variables (${VAR} and ${VAR:-default}), so editor-style placeholders such as ${workspaceFolder} are not substituted. Only the .taskorchestrator/ folder is exposed; the server has no access to the rest of your project.
If you work across several repositories, run one persistent server with the REST API enabled. Each project's .taskorchestrator/config.yaml then syncs into it automatically through the plugin's config-sync hook: no per-project container, no manual mount, and config changes hot-reload without a restart. The plugin's /task-orchestrator:configure-server skill renders this setup interactively; the manual equivalent is:
docker pull ghcr.io/jpicklyk/task-orchestrator:latest
docker run -d --name mcp-task-orchestrator-http --restart unless-stopped \ -v mcp-task-data:/app/data \ -e MCP_TRANSPORT=http -e API_ENABLED=true -e API_AUTH_MODE=none -e API_ALLOW_UNAUTHENTICATED=true \ -p 127.0.0.1:3001:3001 \ ghcr.io/jpicklyk/task-orchestrator:latest
Register it in .mcp.json using the HTTP shape:
{
"mcpServers": { "mcp-task-orchestrator": { "type": "http", "url": "http://localhost:3001/mcp" } } }
And export the client-side variable that tells config-sync where the server is (without it, config-sync silently does nothing):
export TASK_ORCHESTRATOR_API_URL=http://localhost:3001
Alternatively, a client.json (apiUrl only, no token) supplies the URL. Project-mode /task-orchestrator:init writes it beside the project config, only for a loopback server and only as a bare origin with no path, query or fragment (add .taskorchestrator/client.json to .gitignore, the URL is machine-specific); /task-orchestrator:init --user writes the user-level file, which works for any host. The order is the environment variable, then the project-level file, then the user-level file. /task-orchestrator:init sets up a project root for the current directory, and /task-orchestrator:init --user creates a personal root that serves every directory without its own config.
SECURITY: unauthenticated mode (REST and
/mcpalike) means anyone who can reach the port has full
read/write/delete access, as the single
localprincipal. This is only safe because the port is published loopback-only (-p 127.0.0.1:3001:3001).
Never publish it on
0.0.0.0or a wider interface. For shared or networked deployments use bearer
tokens or JWKS auth — see Fleet Deployment.
Prefer to run without Docker? CONTRIBUTING.md covers building the fat JAR from source.
Every work item has a role: queue (not started), work (in progress), review (optional, opt-in per schema), blocked (an upstream dependency is unmet), and terminal (done or cancelled). Each role maps to one or more configurable statuses. Agents move items with the advance tool's transition op rather than editing status directly, and that call is where every gate is checked. Schemas attach note requirements to roles: a note declared with role: queue must exist before the item can leave the queue phase.
Illustrated: Phase Gates draws the roles and triggers as a track and includes a gate simulator.
Schemas define what agents must produce at each phase, and the server blocks progression until it's done. They also set a planning floor: when an agent enters plan mode, the schema tells it what documentation must exist before implementation can start, shaping the plan itself.
# .taskorchestrator/config.yaml
work_item_schemas: feature-task: notes:
With this schema, advance transition with trigger: "start" from queue requires requirements to be filled. The server returns a gate_blocked error listing exactly which notes are missing.
The guidance field provides authoring instructions surfaced at the right moment: when an agent is about to fill that note, the response names it as guidanceKey (with the skillPointer when the note names a skill), and items_read schema returns the text. The skill field goes further, naming a skill the agent should invoke before filling the note so the evaluation follows a defined framework rather than freeform prose.
Traits add cross-cutting note requirements to any schema without duplicating definitions. Define a trait once, apply it to any item type:
traits:
needs-security-review: notes:
work_item_schemas: feature-task: default_traits:
Every feature-task item automatically inherits the security-assessment requirement. Traits can also be applied per item via the traits array of an items_write create or update, so a task touching authentication gets needs-security-review while a CSS cleanup doesn't.
Illustrated: Schemas and Traits shows how a type, its default traits and per-item traits resolve into one gate. Seats covers splitting a phase between several agents.
Everything is a WorkItem in a hierarchical graph. Items nest to any depth and are connected by typed dependency edges. Create an entire work breakdown atomically:
{ "ops": [{
"op": "create_tree", "root": { "title": "User Authentication", "type": "feature-task" }, "children": [ { "ref": "schema", "title": "Database schema", "type": "feature-task" }, { "ref": "api", "title": "Login API", "type": "feature-task" }, { "ref": "tests", "title": "Integration tests", "type": "feature-task" } ], "deps": [ { "from": "schema", "