Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
91 changes: 91 additions & 0 deletions .agent-maintainer/change-plans/symphony-pilot.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
+++
id = "symphony-pilot"
kind = "mechanical-migration"
status = "active"
base_ref = "origin/main"
expires = 2026-08-07
allowed_paths = [
".agent-maintainer/change-plans/symphony-pilot.md",
".agent-maintainer/change-plans/typescript-package-manager-audit-release.md",
".agents/skills/symphony-github-work/**",
".github/ISSUE_TEMPLATE/autonomous_task.yml",
"AGENTS.md",
"WORKFLOW.md",
"config/dev-lock.txt",
"docs/symphony/**",
"scripts/run-symphony",
"scripts/symphony-git",
"scripts/start-symphony",
"scripts/status-symphony",
"scripts/stop-symphony",
"scripts/verify",
]
forbidden_paths = [
".env",
".env.*",
".github/workflows/**",
"config/prod/**",
"pyproject.toml",
"src/**",
"tests/**",
]
max_changed_files = 20
max_changed_lines = 2500
allow_source_without_test_change = true
requires_tests = false
requires_full_verify = true
ratchet_targets = []
+++
# Cohesive Change Plan: symphony-pilot

## Why this change intentionally large

The pilot is one operational contract spanning issue intake, Symphony runtime
configuration, a restricted Codex profile, worker delivery guidance, service
controls, observability, security documentation, and validation evidence.
Leaving any of those surfaces out would produce an un-runnable or unsafe pilot.

## Why this should not be split smaller

Before merge, the live Symphony run must clone this branch and prove that the
workflow, skill, scripts, issue labels, verification, and documentation agree.
Splitting them would make the first autonomous worker depend on unmerged or
undocumented behavior and would prevent an end-to-end review of the safety
boundary.

## What allowed to change

Only the root Symphony contract, the autonomous issue form, the
`symphony-github-work` skill, service and verification scripts, the four
Symphony documents, root agent guidance, this plan, the stale status field in
the completed TypeScript publication plan, and a security-only refresh to the
development lock may change. The lock refresh is allowed only because the
required full gate identified newly published advisories with upstream fixes.

## What must not change

Application source, tests, production configuration, GitHub Actions, dependency
inputs, architecture contracts, release behavior, credentials, branch
protection, and existing issue templates must not change.

## Verification plan

Validate skill metadata, Bash syntax, ShellCheck, YAML, Markdown, Git diff
whitespace, Agent Maintainer change-plan/doctor checks, and the full
`scripts/verify` gate. Then run a live GitHub issue-to-workspace-to-PR scenario,
a safe blocked-state scenario, the stock dashboard/API, the structured status
command, start/stop behavior, and Desktop workspace opening.

## Rollback plan

Remove the four lifecycle labels, stop the per-user service, point the stable
Symphony link back to the prior version or remove it, close the pilot PR without
merging, and leave all issue workspaces intact for manual inspection. No
production data or repository security setting changes are required to roll
back.

## Follow-up ratchet work

After the pilot, replace the current broad GitHub credential with a dedicated
repository-only identity, evaluate Serena and GitNexus in disposable isolated
workspaces, and consider concurrency two only after repeated successful runs.
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
+++
id = "typescript-package-manager-audit-release"
kind = "feat"
status = "active"
status = "complete"
base_ref = "origin/main"
expires = 2026-08-03
allowed_paths = [
Expand Down
56 changes: 56 additions & 0 deletions .agents/skills/symphony-github-work/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
---
name: symphony-github-work
description: Complete a GitHub issue dispatched by Symphony in Agent Maintainer. Use for unattended issues carrying `agent-ready` that require scoped implementation, verification, a clean commit, a pushed branch, a pull request, and lifecycle-label handoff through Symphony's injected `github_api` tool.
---

# Complete Symphony GitHub Work

Treat the issue as the authorization and scope contract. If objective, scope,
acceptance criteria, verification, dependencies, or resolved human decisions
are materially missing, block before editing.

## Execute

1. Read the issue and reject missing or contradictory material sections.
2. Run `/Users/Monsky/.codex-symphony/bin/symphony-git prepare` before broad
repository reading. It validates the issue workspace, fetches `origin/main`,
and creates or reuses `codex/symphony-gh-<issue-number>` outside the
protected Git metadata sandbox.
3. Read applicable `AGENTS.md` files and only relevant architecture docs.
4. Add `agent-running` while retaining `agent-ready`.
5. Find or create one issue comment headed `## Symphony Workpad`. Keep the plan,
acceptance checklist, current action, verification, and blockers there.
6. Reproduce or inspect first, implement only the issue scope, and add tests for
behavior changes.
7. Run focused checks during development and `scripts/verify` at the coherent
final state.
8. Review status and diffs for scope, generated files, secrets, and private data.
9. Publish only explicit changed paths with
`/Users/Monsky/.codex-symphony/bin/symphony-git publish "<type>: <summary>" <path>...`.
10. Use `github_api` to open or update a pull request against `main`. Follow
`.github/pull_request_template.md` and record exact verification evidence.

Do not repeat an identical failed external mutation more than once. After one
evidence-preserving retry, block with the provider status and attempted
operation instead of trying equivalent REST, GraphQL, or CLI surfaces.

Use `github_api` for repository-scoped issue comments, labels, and pull-request
operations. Do not expose its host-side credential or copy it into the
workspace. Do not run ordinary mutating `git` commands. Codex protects `.git`
recursively under `workspace-write`; the installed, read-only bridge is narrowly
allowed outside the sandbox and refuses any checkout outside a direct
`GH-<number>` workspace, unexpected branch, implicit staging, or dirty publish.

## Hand Off

Make tracker mutations last so Symphony does not stop the run prematurely.

- Success: update the workpad with the PR URL and evidence, add `human-review`,
then remove `agent-running` and `agent-ready`. Leave the issue open.
- External blocker: update the workpad with the required human action, reason,
security implications, verification, and requeue instructions. Add
`agent-blocked`, then remove `agent-running` and `agent-ready`.
- Requeue after correction: remove `agent-blocked` and restore `agent-ready`.

Do not change branch protection, merge the PR, close the issue, perform
destructive cleanup, or make unresolved product or architecture decisions.
4 changes: 4 additions & 0 deletions .agents/skills/symphony-github-work/agents/openai.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
interface:
display_name: "Symphony GitHub Work"
short_description: "Complete Symphony-dispatched GitHub issues"
default_prompt: "Use $symphony-github-work to complete an eligible issue and hand off a verified PR."
88 changes: 88 additions & 0 deletions .github/ISSUE_TEMPLATE/autonomous_task.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
name: Agent-ready task
description: Define a bounded task that Symphony may execute autonomously.
title: "[Agent]: "
body:
- type: markdown
attributes:
value: |
This form creates an unlabelled candidate task. After reviewing every
field, a trusted maintainer may apply `agent-ready` to authorize
Symphony dispatch. Never include credentials, private data, or real
student records.
- type: textarea
id: objective
attributes:
label: Objective
description: State the observable outcome.
validations:
required: true
- type: textarea
id: context
attributes:
label: Context
description: Explain the user or developer problem and relevant background.
validations:
required: true
- type: textarea
id: scope
attributes:
label: Scope
description: Describe the work that is authorized.
validations:
required: true
- type: textarea
id: out_of_scope
attributes:
label: Out of scope
description: List adjacent work the worker must not perform.
validations:
required: true
- type: textarea
id: acceptance
attributes:
label: Acceptance criteria
description: Provide a checkable list of required outcomes.
value: |
- [ ]
validations:
required: true
- type: textarea
id: verification
attributes:
label: Verification
description: List focused checks and the required final verification.
value: |
- Focused:
- Final: `scripts/verify`
validations:
required: true
- type: textarea
id: references
attributes:
label: Relevant files or architecture references
description: Link useful starting points; exploration is allowed.
- type: textarea
id: dependencies
attributes:
label: Dependencies
description: Write `None` or list blockers and their resolved state.
validations:
required: true
- type: textarea
id: decisions
attributes:
label: Human decisions already made
description: Record product, architecture, data, and permission decisions.
validations:
required: true
- type: checkboxes
id: readiness
attributes:
label: Agent readiness
options:
- label: The task is bounded and all material decisions are resolved.
required: true
- label: Verification is deterministic and credentials are not in this issue.
required: true
- label: The task does not require production, billing, or destructive changes.
required: true
12 changes: 12 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,18 @@ fail. Treat `manual` as required only when requested, before release, or when
manual gates are touched. Do not lower thresholds, delete checks, or add broad
suppressions to make the pipeline pass.

## Symphony-Dispatched Work

For GitHub issues carrying `agent-ready`, read and follow
`.agents/skills/symphony-github-work/SKILL.md`. Treat the issue as the scope
contract, create a dedicated branch, and finish with `scripts/verify`.

Use Serena for precise symbol work when it is available in the current
workspace. Use GitNexus only for architecture, dependency, call-graph, or impact
questions. Use Agent Perf only for measured performance work. A headless
Symphony worker must continue with native repository tools when Desktop-bound
services are unavailable.

If the repository does not use `src/` and `tests/`, configure
`[tool.agent_maintainer]` in `pyproject.toml` instead of letting checks drift or
fail ambiguously.
Expand Down
118 changes: 118 additions & 0 deletions WORKFLOW.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
---
tracker:
kind: github
provider:
repo: douglasmonsky/agent-maintainer
token: $GITHUB_TOKEN
required_labels:
- agent-ready
active_states:
- open
terminal_states:
- closed
polling:
interval_ms: 10000
workspace:
root: $SYMPHONY_WORKSPACE_ROOT
hooks:
after_create: |
git clone \
--branch "${SYMPHONY_SOURCE_REF:-main}" \
--single-branch \
https://github.com/douglasmonsky/agent-maintainer.git .
timeout_ms: 600000
agent:
max_concurrent_agents: 1
max_turns: 12
max_retry_backoff_ms: 120000
codex:
command: "$CODEX_BIN --strict-config --config features.hooks=false --config features.multi_agent=false app-server"
approval_policy: never
thread_sandbox: workspace-write
turn_sandbox_policy:
type: workspaceWrite
networkAccess: true
turn_timeout_ms: 1800000
read_timeout_ms: 5000
stall_timeout_ms: 300000
observability:
dashboard_enabled: true
refresh_ms: 1000
server:
host: 127.0.0.1
port: 4000
---

You are the unattended implementation worker for GitHub issue
`{{ issue.identifier }}` in `douglasmonsky/agent-maintainer`.

Issue URL: {{ issue.url }}
Title: {{ issue.title }}
State: {{ issue.state }}
Labels: {{ issue.labels }}

Issue body:

{% if issue.description %}
{{ issue.description }}
{% else %}
No issue body was provided.
{% endif %}

{% if attempt %}
This is Symphony attempt {{ attempt }}. Resume the existing workspace and avoid
repeating completed investigation or verification unless the code changed.
{% endif %}

Follow these rules:

1. Work only inside the provided workspace. Never edit another checkout or a
host-level Codex configuration file.
2. Read the issue completely. Confirm it contains an objective, context, scope,
acceptance criteria, verification, dependencies, and resolved human
decisions. If a material section is missing or contradictory, use the
blocked flow below before editing.
3. Before broad repository reading, run
`/Users/Monsky/.codex-symphony/bin/symphony-git prepare`. This validated host
bridge is the only permitted route for Git metadata writes under the
workspace sandbox. If it fails, use the blocked flow before editing.
4. Read every applicable `AGENTS.md`, then read
`.agents/skills/symphony-github-work/SKILL.md` and only relevant architecture
documentation.
5. Use the injected `github_api` tool for issue labels, the persistent workpad
comment, and pull-request operations. Keep `agent-ready` while working and
add `agent-running` before implementation.
6. Reconcile one `## Symphony Workpad` issue comment. Record a concise plan,
acceptance checklist, current action, verification evidence, and blockers.
Update that comment instead of posting a stream of progress comments.
7. Reproduce or inspect the requested behavior before editing. Use precise
symbol tools for localized code, repository graph tools only for genuine
dependency or impact analysis, and profiling only for performance issues.
8. Keep changes within issue scope. Do not invent product behavior, relax
repository guardrails, modify branch protection, expose secrets, or perform
destructive cleanup.
9. Add or update tests for behavior changes. Run focused checks during
development, then run `scripts/verify` once the diff is coherent.
10. Review `git diff`, `git status`, and the staged diff for scope, generated
artifacts, private data, and secrets. Update documentation when behavior or
commands changed.
11. Publish explicit changed paths with
`/Users/Monsky/.codex-symphony/bin/symphony-git publish "<type>: <summary>" <path>...`.
Open or update a pull request against `main` using
`.github/pull_request_template.md`. Include exact commands and results in
the Verification section.
12. On success, link the pull request in the workpad, add `human-review`, and
remove `agent-running` and `agent-ready` as the final tracker mutations.
Leave the issue open for human review.
13. When blocked by missing credentials, permissions, destructive-action
approval, unresolved architecture, or a product decision, do not guess.
Update the workpad with the exact required human action, why it is required,
security implications, how to verify it, and how to requeue. Then add
`agent-blocked` and remove `agent-running` and `agent-ready`.
14. Never repeat the same failed external mutation more than once. After one
evidence-preserving retry, use the blocked flow instead of changing API
surfaces or spending additional turns on equivalent requests.

Your final response must contain completed actions, verification evidence, the
branch and pull-request URL when available, or the precise blocked reason. Do
not ask a conversational follow-up question.
Loading
Loading