efbc5f6e27
- A run whose item leaves In Progress is killed, gets a [worker] cancel comment, frees its terminal slot and serialize group and keeps its thread id; if the kill fails the slot stays taken and the cancel is retried next tick. - Transient retries are the same logical round: they do not count toward max_rounds_per_thread and do not trigger a max-rounds rebuild. - New project setting max_progress_rounds (default 12): after that many consecutive [progress] rounds the item goes to Waiting (answerer) with a note. - retry/rebuild markers are consumed only after the run launched, so a failed start no longer leaves an In Progress item that is never picked again; a rebuild is no longer reported as a retry. - State is saved after every finished round and every launched run. - Failure classification: transient patterns only look at the tail, and an exit-0 failure is logic (never retried) unless the tail shows a transient error. - First-line tag: tolerate BOM and a leading code fence / rule line. - Start comment notes when a handoff summary was attached.
91 lines
4.2 KiB
YAML
91 lines
4.2 KiB
YAML
# plane-agentd example configuration (design.md §5). Values that are secrets are *Vault key names* only;
|
|
# agentd reads the token from the environment variable of the same name, injected by
|
|
# agent-access.py exec --secret-env PLANE_WINDOW10_API_TOKEN=PLANE_WINDOW10_API_TOKEN ...
|
|
# Copy to config/agentd.local.yaml (git-ignored) or point AGENTD_CONFIG at your file.
|
|
plane: {base_url: https://plane.kappiee.com, workspace: kappiee}
|
|
vault: {client: ~/.local/share/server-access-client/agent-access.py, config: https://nas.tail9531b.ts.net:8443/identity/agent.json}
|
|
|
|
agentd:
|
|
state_dir: state # relative to the repo root; JSON state, logs, heartbeat, local run dirs
|
|
helpers_dir: /home/ubuntu/Documents/wjj/project/gwent-design/tools # win10-ps.sh / win10-put.sh
|
|
interval: 120 # seconds between ticks in --loop mode
|
|
max_rounds_per_thread: 8 # rebuild the executor thread (with a handoff summary) after this many rounds
|
|
comment_max_chars: 6000
|
|
cli_terminal: oregon # identity used by `agentd new/comment/state/assign`
|
|
|
|
terminals:
|
|
win10:
|
|
transport: warpgate-ssh
|
|
target: win10
|
|
os: windows
|
|
launch: schtasks
|
|
repo: 'C:\Users\Administrator\Documents\GwentAssistantProject\gwent'
|
|
run_root: 'C:\Users\Administrator\Documents\GwentAssistantProject\gwent\runtime\agentd'
|
|
bins: {codex: 'C:\Users\Administrator\AppData\Local\Programs\OpenAI\Codex\bin\codex.exe'}
|
|
plane_user: window10
|
|
token_key: PLANE_WINDOW10_API_TOKEN
|
|
concurrency: 1
|
|
busy_processes: [codex] # do not start while a codex.exe we did not start is running
|
|
capabilities: [android, game]
|
|
executors: [codex]
|
|
oregon:
|
|
transport: local
|
|
os: linux
|
|
launch: subprocess
|
|
repo: /home/ubuntu/Documents/wjj/project/gwent
|
|
plane_user: oregon
|
|
token_key: PLANE_OREGON_API_TOKEN
|
|
concurrency: 2
|
|
bins: {claude: /home/ubuntu/.local/bin/claude} # cron has a minimal PATH
|
|
executors: [claude-code, codex, shell]
|
|
|
|
executors:
|
|
codex:
|
|
adapter: codex
|
|
run: "codex exec --json -C '{repo}' -s workspace-write -m {model} -c 'model_reasoning_effort=\"{effort}\"' {tier} -o '{out}' -"
|
|
resume: "codex exec resume {thread} --json -m {model} -c 'model_reasoning_effort=\"{effort}\"' {tier} -o '{out}' -"
|
|
tier_arg: "-c 'service_tier=\"{tier}\"'"
|
|
thread_from: events.jsonl:thread.started.thread_id
|
|
last_message: '{out}'
|
|
models: [gpt-6.1-sol, gpt-6-astra]
|
|
default_effort: medium
|
|
claude-code:
|
|
adapter: claude-code
|
|
run: "claude -p --model {model} --output-format json --permission-mode {perm}"
|
|
resume: "claude -p --resume {thread} --model {model} --output-format json --permission-mode {perm}"
|
|
permission_mode: acceptEdits
|
|
thread_from: json:session_id
|
|
last_message: json:result
|
|
models: [sonnet, opus, haiku]
|
|
shell:
|
|
adapter: shell
|
|
run: '{script}'
|
|
resume: false
|
|
|
|
projects:
|
|
GWENT:
|
|
id: 79cb5a60-aa4f-4138-9864-1dd70426e665
|
|
key_prefix: GW
|
|
webhook_secret_key: PLANE_WEBHOOK_GWENT
|
|
states: {backlog: Backlog, todo: Todo, running: In Progress, waiting: Waiting, review: Review, done: Done}
|
|
reviewer: oregon # Plane user that gets [review] items
|
|
answerer: oregon # Plane user that gets [question]/[blocked] and failures (default: reviewer)
|
|
protocol_file: /home/ubuntu/Documents/wjj/project/gwent/design/board-protocol.md
|
|
routing:
|
|
by_assignee: {window10: win10, oregon: oregon}
|
|
by_label:
|
|
'model:astra': {model: gpt-6-astra, effort: high}
|
|
'model:sol': {model: gpt-6.1-sol, tier: fast}
|
|
'model:opus': {model: opus}
|
|
'exec:claude': {executor: claude-code}
|
|
'needs-game': {serialize_group: game}
|
|
default_executor: {win10: codex, oregon: claude-code}
|
|
retry:
|
|
transient_max: 3
|
|
backoff_minutes: [2, 5, 10]
|
|
# transient_patterns / env_patterns default to the built-in lists in agentd/core.py
|
|
timeout_hours: 4
|
|
max_rounds_per_thread: 8
|
|
max_progress_rounds: 12 # after this many consecutive [progress] rounds: note + Waiting (answerer)
|
|
notify: {ntfy_topic: gwent, 'on': [waiting, review, failed]} # phase 3, not used yet; 'on' must be quoted (YAML 1.1 boolean)
|