Merge branch 'main' of github.com:Dark-Alex-17/coyote

This commit is contained in:
2026-07-22 16:37:34 -06:00
6 changed files with 94 additions and 76 deletions
+1
View File
@@ -21,6 +21,7 @@ variables:
default: '.'
global_tools:
- ast_grep.sh
- fs_read.sh
- fs_cat.sh
- fs_grep.sh
+26 -19
View File
@@ -2,9 +2,9 @@ name: coder
description: |
Implementation agent. Plans, implements, and runs build + tests in a
bounded fix-loop until verified. Designed to be delegated to by sisyphus.
version: "1.0"
version: '1.0'
global_tools:
- ast_grep.sh
- fs_cat.sh
- fs_ls.sh
- fs_write.sh
@@ -25,7 +25,7 @@ variables:
Absolute path to the project directory. Defaults to "." which is the
directory you invoked `coyote` from. Override at runtime with
`coyote -a coder --agent-variable project_dir /abs/path "..."`.
default: "."
default: '.'
settings:
max_loop_iterations: 20
@@ -34,14 +34,14 @@ settings:
timeout: 1800
initial_state:
project_dir: ""
project_dir: ''
fix_attempts: 0
max_fix_attempts: 3
fix_instructions: ""
build_output: ""
tests_output: ""
last_node_output: ""
plan_summary: ""
fix_instructions: ''
build_output: ''
tests_output: ''
last_node_output: ''
plan_summary: ''
files_to_modify: []
files_to_create: []
risks: []
@@ -49,7 +49,7 @@ initial_state:
review_attempts: 0
max_review_attempts: 1
review_clean: true
review_notes: ""
review_notes: ''
start: resolve_paths
@@ -88,7 +88,7 @@ nodes:
etc. Empty list is fine.
Project directory: {{project_dir}}
prompt: "{{initial_prompt}}"
prompt: '{{initial_prompt}}'
tools: []
output_schema:
type: object
@@ -109,9 +109,16 @@ nodes:
risks:
type: array
items: { type: string }
required: [plan_summary, files_to_modify, files_to_create, complexity_score, risks]
required:
[
plan_summary,
files_to_modify,
files_to_create,
complexity_score,
risks,
]
state_updates:
last_node_output: "{{output}}"
last_node_output: '{{output}}'
fallback: end_failure
next: route_complexity
@@ -144,11 +151,11 @@ nodes:
Approve this plan?
options:
- "yes"
- "no"
- 'yes'
- 'no'
routes:
"yes": implement
"no": end_rejected
'yes': implement
'no': end_rejected
on_other: end_rejected
implement:
@@ -243,7 +250,7 @@ nodes:
- execute_command
max_iterations: 30
state_updates:
last_node_output: "{{output}}"
last_node_output: '{{output}}'
fallback: end_failure
next: verify_build
@@ -326,7 +333,7 @@ nodes:
description: Concrete issues found, one per line as file:line - description. Empty when review_clean is true.
required: [review_clean, review_notes]
state_updates:
last_node_output: "{{output}}"
last_node_output: '{{output}}'
fallback: end_success
next: route_review_result
+1
View File
@@ -14,6 +14,7 @@ variables:
mcp_servers:
- ddg-search
global_tools:
- ast_grep.sh
- fs_read.sh
- fs_cat.sh
- fs_grep.sh
+1
View File
@@ -18,6 +18,7 @@ variables:
mcp_servers:
- ddg-search
global_tools:
- ast_grep.sh
- fs_read.sh
- fs_cat.sh
- fs_grep.sh
+1
View File
@@ -47,6 +47,7 @@ variables:
mcp_servers:
- ddg-search
global_tools:
- ast_grep.sh
- fs_read.sh
- fs_grep.sh
- fs_glob.sh
+60 -53
View File
@@ -5,9 +5,9 @@ description: |
implement (coder) -> verify -> edge-case sweep -> optional independent
review -> evidence-backed handoff -> user approval gate. Designed to be
delegated to by sisyphus.
version: "1.0"
version: '1.0'
global_tools:
- ast_grep.sh
- fs_cat.sh
- fs_ls.sh
- fs_write.sh
@@ -28,18 +28,18 @@ variables:
coyote was invoked from). The coder sub-agent resolves its own
project_dir the same way, so invoke step-runner FROM the project root
unless you override this for both.
default: "."
default: '.'
- name: plans_dir
description: |
Path to the plan repo. Relative paths resolve against project_dir.
Expected layout: <plans_dir>/steps/NN-<slug>.md,
<plans_dir>/handoffs/, <plans_dir>/NOTES.md.
default: "plans"
default: 'plans'
- name: step
description: |
Which step to execute: a step number, or "next" to pick the first
in-progress (resume) or pending step plan.
default: "next"
default: 'next'
settings:
max_loop_iterations: 20
@@ -48,45 +48,45 @@ settings:
timeout: 7200
initial_state:
project_dir: ""
plans_dir: ""
project_dir: ''
plans_dir: ''
step_number: 0
step_slug: ""
step_title: ""
step_plan_path: ""
step_plan: ""
prev_handoff_path: "(none)"
prev_handoff: "(none - this is the first step)"
notes_path: ""
notes: "(none)"
handoff_path: ""
blocking_reason: ""
plan_summary: ""
implementation_brief: ""
staleness_report: ""
step_slug: ''
step_title: ''
step_plan_path: ''
step_plan: ''
prev_handoff_path: '(none)'
prev_handoff: '(none - this is the first step)'
notes_path: ''
notes: '(none)'
handoff_path: ''
blocking_reason: ''
plan_summary: ''
implementation_brief: ''
staleness_report: ''
has_major_deviation: false
deviation_summary: ""
user_feedback: ""
fix_instructions: ""
deviation_summary: ''
user_feedback: ''
fix_instructions: ''
fix_attempts: 0
max_fix_attempts: 2
coder_result: ""
format_output: ""
coder_result: ''
format_output: ''
lint_ok: true
lint_output: ""
lint_output: ''
build_ok: true
build_output: ""
build_output: ''
tests_ok: true
tests_output: ""
edge_case_report: ""
downstream_updates: ""
tests_output: ''
edge_case_report: ''
downstream_updates: ''
needs_independent_review: false
review_report: ""
review_report: ''
review_attempts: 0
max_review_attempts: 1
handoff_attempts: 0
handoff_fix: ""
step_summary: ""
handoff_fix: ''
step_summary: ''
start: resolve_step
@@ -114,11 +114,11 @@ nodes:
Proceed anyway?
options:
- "yes"
- "no"
- 'yes'
- 'no'
routes:
"yes": orient
"no": end_blocked
'yes': orient
'no': end_blocked
on_other: end_blocked
orient:
@@ -183,7 +183,14 @@ nodes:
deviation_summary:
type: string
description: Major deviations only, with the plan claim vs current reality. Empty when none
required: [plan_summary, implementation_brief, staleness_report, has_major_deviation, deviation_summary]
required:
[
plan_summary,
implementation_brief,
staleness_report,
has_major_deviation,
deviation_summary,
]
fallback: end_failure
next: route_staleness
@@ -211,14 +218,14 @@ nodes:
Proceed with the corrected brief? (Answer with anything else to give
your own guidance to the implementer.)
options:
- "proceed"
- "abort"
- 'proceed'
- 'abort'
routes:
"proceed": implement
"abort": end_rejected
'proceed': implement
'abort': end_rejected
on_other: implement
state_updates:
user_feedback: "{{choice}}"
user_feedback: '{{choice}}'
implement:
id: implement
@@ -262,7 +269,7 @@ nodes:
{{fix_instructions}}
timeout: 3600
state_updates:
coder_result: "{{output}}"
coder_result: '{{output}}'
next: route_coder_result
route_coder_result:
@@ -399,7 +406,7 @@ nodes:
Preserve severity tags in your findings.
timeout: 1200
state_updates:
review_report: "{{output}}"
review_report: '{{output}}'
next: route_review
route_review:
@@ -517,23 +524,23 @@ nodes:
Approve this step? (Answer with anything else to send revision
instructions straight to the implementer.)
options:
- "approve"
- "revise"
- 'approve'
- 'revise'
routes:
"approve": end_success
"revise": get_revision
'approve': end_success
'revise': get_revision
on_other: revise_from_choice
state_updates:
user_feedback: "{{choice}}"
user_feedback: '{{choice}}'
get_revision:
id: get_revision
type: input
description: Collect revision instructions, then loop back through implement -> verify -> handoff.
question: "What should change? Your comments go to the implementer verbatim."
validation: "len(input) > 0"
question: 'What should change? Your comments go to the implementer verbatim.'
validation: 'len(input) > 0'
state_updates:
fix_instructions: "{{input}}"
fix_instructions: '{{input}}'
next: implement
revise_from_choice: