The repository is organized around a small set of skill-backed agent roles, all delivered through the Vercel webhook control plane. GitHub remains the durable state store — issues, labels, assignees, comments, pull requests, branches, and reviews — but the runtime that decides when to run and how to apply results is api/webhook.py plus api/cron.py.
The behavior lives in three layers:
- skills in
../.agents/skills/ - workflow-specific context, prompt, and apply helpers in
../core/workflows/ - shared Oz and GitHub helpers in
../core/oz/
The .github directory is now configuration and CI only: STAKEHOLDERS, issue-triage/config.json, oz/config.yml, and workflows/run-tests.yml.
Agent-backed workflows follow the same lifecycle:
core/routing.pymaps a GitHub webhook delivery to a workflow.- A concrete workflow class in
core/workflows/gathers GitHub context and builds a prompt using helpers fromcore/workflows/. core/dispatch.pystarts an Oz cloud run and persistsRunStatein Vercel KV.- A post-dispatch hook creates or updates the progress comment with the Oz run id as the canonical metadata identity.
api/cron.pypolls the Oz run, records session links while it runs, loads artifacts on success, and invokes the workflow-specific result applier.
This keeps prompt construction and result application workflow-specific while sharing lifecycle plumbing across review, triage, spec, implementation, verification, and PR-comment response flows.
The triage role uses triage-issue, optional duplicate detection via dedupe-issue, the label taxonomy in config.json, and ownership hints from STAKEHOLDERS. It handles new issues, @oz-agent mentions on plain issues, and needs-info replies from the original reporter.
The spec-writing role uses spec-driven-implementation, create-product-spec, create-tech-spec, write-product-spec, and write-tech-spec. The durable outputs are product and tech specs under ../specs/.
The implementation role uses implement-issue, implement-specs, and spec-driven-implementation. It prefers approved spec context when available and refuses unapproved spec PRs when the workflow detects them.
The review role uses review-pr, review-spec, and spec consistency checks via check-impl-against-spec. PR review results are uploaded as review.json and applied by core/workflows/review_pr.py.
The verification role uses verify-pr and runs from the /oz-verify slash command on PR comments.
The respond-to-pr-comment workflow handles @oz-agent mentions on PR conversations, inline review comments, and review bodies. It uses the implementation skill family with PR context and any available spec context.
Each reusable role can have a repo-local companion skill, such as review-pr-local, review-spec-local, triage-issue-local, and dedupe-issue-local. The prompt helpers detect these files in the consuming repository and reference them when present, while absent or frontmatter-only companions are treated as no-op.
Some routed webhook branches perform deterministic GitHub mutations without dispatching an Oz run:
announce-ready-issueposts fixed availability guidance whenready-to-specorready-to-implementis added without assigningoz-agent.plan-approvedperforms approval bookkeeping synchronously and only falls through to implementation dispatch when the linked issue is ready.
oz-for-oss is a webhook-delivered OSS automation platform that feeds rich GitHub and repository context into skill-backed Oz agent roles for triage, planning, implementation, review, verification, and PR follow-up.