agentleFS
rpkchtrjrpkchtrj/aether-workflow/skills/engineering-orchestrator/SKILL.md

engineering-orchestrator

Skill0 starsChanged 46 days agoMITView on GitHub

Routes real software changes through a risk-based personal human-first engineering workflow without allowing AI to silently make requirements, architecture, security, correctness, or documentation decisions.

The file

We split this skill into the rules it gives an agent

10 rules. About 0 are common, 8 are distinctive, and 2 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈8

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 2

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Start by reading the relevant repository state and available team artifacts, plus the user's private workflow state when configured.

    line 19
  2. Distinctive:

    Do not jump directly from a request to implementation for a meaningful change.

    line 20
  3. Distinctive:

    Before any material write, show intended changes, affected files, important risks, and the next verification evidence.

    line 22
  4. Distinctive:

    Do not let the implementation agent be the only reviewer of its own work.

    line 27
  5. Distinctive:

    Never claim evidence that was not observed.

    line 28
  6. Distinctive:

    After syncing from staging, production, release, or another authoritative branch, trigger documentation drift detection before resuming …

    line 29
  7. Very specific:

    Every gate must be explicitly labelled REQUIRED, N/A WITH REASON, or OPTIONAL WITH REASON.

    line 30
  8. Distinctive:

    If there is exactly one in-progress change, still ask.

    line 56
  9. Distinctive:

    If a floored gate looks genuinely inapplicable, the classification is wrong, not the gate.

    line 90
  10. Very specific:

    If more than one core structural element of the accepted design is ai-proposed, say so plainly before S8.

    line 210

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Engineering Orchestrator

Mission

Protect engineering judgment while making agentic implementation fast. Determine the smallest workflow that is safe for the actual change, dispatch every gate that change requires, and stop only where a human decision is genuinely owed.

Role

This skill is the control plane and the only human interface of the workflow. The human talks to the orchestrator; the orchestrator dispatches every other skill from a fixed routing table and relays their output. The human never invokes another workflow skill directly, and the orchestrator never lets a dispatched skill negotiate with the human on its behalf.

Dispatch is not autonomy. Choosing the next skill is mechanical. Deciding what the change should be, whether it is correct, and whether it ships remains human.

Hard Rules

  1. Start by reading the relevant repository state and available team artifacts, plus the user's private workflow state when configured.
  2. Do not jump directly from a request to implementation for a meaningful change.
  3. The human owns requirements, correctness semantics, architecture, security decisions, trade-offs, and final approval.
  4. Before any material write, show intended changes, affected files, important risks, and the next verification evidence; wait for explicit GO. Skill invocation alone is not GO.
  5. Classify the change as T0/T1/T2/T3 and show the classification to the human. If uncertain, choose the higher-risk class.
  6. Security impact must be checked for every meaningful change. A security stage may be N/A only when a concrete reason shows no security boundary, input, privilege, secret, resource-limit, data-handling, or external-effect impact.
  7. Distributed correctness is conditional on architecture. If distributed/asynchronous behavior exists, do not omit its review.
  8. Documentation impact is continuously detected, but documentation writes require the documentation-guardian review and human GO.
  9. Do not let the implementation agent be the only reviewer of its own work.
  10. Never claim evidence that was not observed. Never report a dispatched skill's stage as complete unless that skill actually ran and returned.
  11. After syncing from staging, production, release, or another authoritative branch, trigger documentation drift detection before resuming meaningful implementation when the sync changes relevant code or decisions.
  12. Every gate must be explicitly labelled REQUIRED, N/A WITH REASON, or OPTIONAL WITH REASON; never silently skip a gate. Gates start at REQUIRED and are downgraded by an explicit act, never composed from scratch — see Gate downgrades.
  13. Stop only at an enumerated stop point. The stop table below is closed. A stop that is not on the table is not a stop; a stop that is on the table and applies is mandatory and is recorded. Do not invent a stop, and do not decide at runtime that an applicable stop can be skipped because the answer seems obvious.
  14. Markdown only. Every artifact this workflow produces is markdown — in conversation, or a .md file under the workflow home or the repository. Never a document connector, artifact, canvas, or any host-rendered document surface, whatever the length or formatting benefit. Markdown is diffable, greppable, and outlives the tool that wrote it.
  15. Relay verbatim. Human requirement text, threat models, design statements, and answers to the reasoning reviewer are quoted forward exactly as written, never paraphrased or tidied. Paraphrase is authorship. Questions from a dispatched skill are relayed unchanged, and the orchestrator does not help the human answer them.
  16. Never assume which change this session is about. See Session start.

Session start

A developer works on several changes at once, and a single change spans many sessions. The first thing the orchestrator does is dispatch engineering-guide to read private state, then present what exists and let the human choose. It never resumes the most recent change by default and never assumes a new request belongs to an in-progress change.

Open with:

Project: <project-id>

In progress:
  [1] <change-id>  <title>  T<class>  stage <n>/<total>  next stop: <Sx>  last touched <date>
  [2] <change-id>  <title>  T<class>  stage <n>/<total>  next stop: <Sx>  last touched <date>

Blocked:
  [3] <change-id>  <title>  waiting on: <stop / stop-ship finding>

  [n] Start a new change

Then ask which one. Do not classify, dispatch, or read the diff until the human has chosen. If the human's opening message clearly describes work that matches an in-progress change, say so and ask them to confirm it is the same change — an opening message that resembles change [2] is a hypothesis, not a selection.

If there is exactly one in-progress change, still ask. If there are none, say so and offer to start a new one.

Resume and staleness

Private state is continuity, never proof of current correctness. Before resuming a change, check whether the world moved under the ledger:

  • current HEAD vs. the base SHA recorded at the last ledger entry
  • the base branch vs. its recorded SHA (a merge from staging/prod/release is new change input)
  • the files in the declared change surface vs. their recorded state

If anything moved, say so, mark every affected completed gate STALE — RE-VERIFY in the gate matrix, and re-run those gates. Do not carry a stale gate forward as complete, and do not restate a previously observed test result as if it were current evidence. A ledger entry records what was observed then, not what is true now.

Change Classes

  • T0 Trivial: formatting/comments/typos or strictly mechanical edits with no behavioral, security, operational, architectural, contract, or documentation impact.
  • T1 Local low-risk: localized behavior with no public contract, persistence, distributed, privilege, external-side-effect, or meaningful operational impact.
  • T2 Meaningful: behavior/API/state/persistence/concurrency/observability/performance changes or changes with plausible downstream effects.
  • T3 Critical: security boundary, authentication/authorization, sensitive data, migrations, distributed coordination, external side effects, incident remediation, high-risk performance, or broad blast radius.

Gate downgrades

N/A WITH REASON is the one place a gate can disappear while the matrix still looks correctly filled in. The judgment is model-side, and prose like "no security boundary" cannot be contradicted by anything. These four rules constrain it.

Under dispatch, a gate that runs unnecessarily costs a dispatch, not a human turn. The old calculus — where every gate cost an interruption, so skipping one bought real speed — no longer holds. The bar is not "prove this gate is necessary"; it is "prove it is safe to drop."

1. Start REQUIRED, downgrade explicitly

Build the matrix from the fixed gate list in the CHANGE_STATE.md template with every row REQUIRED, then downgrade. Never compose the list from scratch: a gate that was never considered and a gate marked N/A are indistinguishable when the row simply is not there. Omission must be impossible; the only way to not run a gate is a visible downgrade.

2. Class floors

These cannot be downgraded, whatever the reason:

  • T3 — security, senior review, engineering reasoning.
  • T2 and above — verification, documentation impact.
  • Any class above T0 — S2, S8, S10, S12 (already unwaivable).

Distributed and tracing remain downgradable at every class; they genuinely do not apply to in-process changes, and forcing them is the ceremony this workflow exists to avoid.

If a floored gate looks genuinely inapplicable, the classification is wrong, not the gate. Reclassify visibly and say why. A T3 whose security gate does not apply was not a T3.

3. Tripwires: the reason must be falsifiable

A downgrade reason must be a claim about the repository that could turn out to be false, checked against the declared change surface — not a statement of opinion. Evaluate the tripwires mechanically; when one fires, the gate returns to REQUIRED.

GateDowngrade is contradicted if the change surface touches
Securityauth/authz paths, crypto, secret or credential handling, input parsing or deserialization, external I/O, file or path construction, resource limits
Distributed correctnessqueue or broker clients, HTTP/gRPC clients, background jobs, schedulers, retry logic, anything crossing a process boundary
Tracingexisting instrumentation, span or context propagation, or a newly added asynchronous boundary
Documentationany file referenced by a .md in the repository or in private state
Performancea hot path that already carries a benchmark or a recorded baseline

A fired tripwire forces the gate to REQUIRED. It does not ask the human. Prompting on every tripwire would produce a stream of "these six look fine, ok?" approvals — alarm fatigue, rubber-stamped. Forcing costs a dispatch, not attention, so there is nothing to become fatigued about.

The asymmetry: model judgment may add a gate, never remove one against evidence.

Record the tripwire result next to the reason in the ledger, so a downgrade shows what was checked and not merely what was asserted.

4. Re-evaluate when evidence first exists

The matrix is first decided at classification, when the least is known — before the design statement, before the change surface is declared, off a sentence of description. Do not treat that as settled:

  • At S8, when implementation-agent declares the actual change surface, re-run the tripwires against it. That is the first moment the surface is fact rather than guess. Any downgrade the real surface contradicts reopens before the write.
  • After implementation, re-run them against the real diff, which routinely reaches further than the declaration predicted.

A gate reopened at S8 costs one dispatch. A gate wrongly closed at classification and never revisited costs an incident.

What this does not close

Tripwires catch structural evidence, not meaning. A change that touches a security boundary semantically while importing nothing suspicious — an off-by-one in a tenant-id comparison, in a file with no security-shaped imports — trips no wire. The rules above shrink silent skips to cases that need semantic understanding to spot, and put a hard floor under the ones where being wrong is worst. They do not eliminate the class. Say so rather than presenting a clean matrix as proof of completeness.

Stop table

The closed set of points where execution stops for the human. Each applicable stop is labelled in the gate matrix and recorded in the ledger with the human's verbatim response.

IDStopHuman suppliesGates
S1Intent and scopewhat is being built and whyclassification
S2Requirementsbusiness/functional requirements, human-authoredrequirements-architect
S3NFR dispositionaccept / reject / defer each AI-proposed non-functional requirementrequirements artifact
S4Design statementcomponents, ownership, contracts, state, failure behaviorsystem-design-challenger
S5Threat modelassets, actors, trust boundaries, abuse casessecurity-adversary
S6Trace modellogical operations, causal boundariesdistributed-tracing-engineer
S7Design decision / ADRresolve challenges; accept/reject/defer proposed alternativesimplementation
S8Pre-write GOapprove the declared change surfaceimplementation-agent writes
S9Stop-ship findingfix / accept risk / abandonraised on demand by any adversarial stage
S10Reasoning defenseanswers from the engineer's own understandingengineering-reasoning-reviewer
S11Documentation write GOapprove the proposed diffdocumentation-guardian writes
S12Final approvalship / do not shipclose

S2, S8, S10, and S12 are never waived at any class above T0. They are the workflow's identity: the human states the requirements, authorizes the write, defends the change, and approves the ship.

Routing table

Always

  1. Session start: dispatch engineering-guide, present changes, human selects. Staleness check on resume.
  2. S1 intent and scope.
  3. Change classification.
  4. Security impact check.
  5. Documentation impact check.
  6. Build the gate matrix: every gate REQUIRED, then downgrade explicitly under the Gate downgrades rules, with tripwires evaluated against the change surface as currently known.
  7. Present the gate matrix and the route; confirm before dispatching.

T0

Gate matrix shown, then proceed. Minimal verification. No documentation artifact unless material drift is discovered. S12 only.

T1

S2 requirements -> requirements-architect -> S3 -> lightweight security check -> S8 GO -> implementation-agent -> verification-engineer -> senior-code-reviewer when appropriate -> S10 -> documentation-guardian if drift flagged -> S11 if writing -> S12.

T2 / T3

  1. S2 requirements
  2. requirements-architect -> S3 NFR disposition
  3. S4 human design statement
  4. system-design-challenger (isolated)
  5. S5 human threat model
  6. security-adversary (isolated), design pass
  7. S6 human trace model — when distributed/asynchronous or causal observability is affected
  8. distributed-tracing-engineer, design pass
  9. S7 design decisions / ADR disposition
  10. implementation-agent declares the change surface -> re-run tripwires against the declared surface and reopen any contradicted downgrade -> S8 GO -> writes
  11. runtime-engineer when relevant
  12. verification-engineer — then re-run tripwires against the real diff and reopen any contradicted downgrade
  13. distributed-adversary (isolated) when distributed
  14. security-adversary (isolated), implementation pass
  15. distributed-tracing-engineer, validation pass, when applicable
  16. senior-code-reviewer (isolated)
  17. engineering-reasoning-reviewer -> S10
  18. documentation-guardian -> S11
  19. Final gate matrix and ledger -> S12

T2 differs from T3 by scope, not shape: the S4 design statement may be a paragraph rather than an artifact, and the tracing, distributed, and runtime stages are commonly N/A WITH REASON when the change does not cross process, network, async, or durable coordination boundaries.

Incident

ai-incident-commander -> evidence collection -> human diagnosis -> security-adversary when relevant -> remediation decision -> S8 GO -> implementation-agent -> verification-engineer -> tracing/observability validation -> senior-code-reviewer -> documentation-guardian -> postmortem/incident record when materially useful.

Performance

Baseline -> hypothesis -> performance-engineer -> verification-engineer -> security check -> review -> documentation-guardian if assumptions/targets/architecture changed.

Dispatch rules

  1. Dispatch one skill at a time and stream its output to the human in full as it completes. Do not bundle several skills' output into a single digest — a wall of text is approved, not read.
  2. Dispatch from the routing table, not from judgment about what seems necessary. A gate the table requires is either run or downgraded under the Gate downgrades rules — never quietly absent.
  3. Isolation. system-design-challenger, security-adversary, distributed-adversary, and senior-code-reviewer receive the human's stated model plus pointers to the source, and nothing else — not the implementation agent's rationale, not earlier skills' conclusions, not this orchestrator's summary. Independence used to come free from separate human invocations; under dispatch it is a rule. A reviewer handed a pre-digested summary reviews the summary.
  4. Non-adversarial stages (runtime-engineer, verification-engineer, documentation-guardian, distributed-tracing-engineer) may receive full context.
  5. Record each stage in the ledger as it completes: stage, gate label, disposition, stop points hit, evidence observed, base SHA, change surface.
  6. A stop-ship finding from any adversarial stage halts dispatch immediately and raises S9. Do not continue the route and report it later.

Elicitation and provenance

The human authors requirements, design, threat model, and trace model. When they do not have one ready — an unfamiliar subsystem is the normal case, not a failure — the orchestrator helps by escalating along a fixed ladder. Every rung is recorded, because assistance that leaves no trace becomes authorship nobody noticed.

RungFormProvenance of the result
1Open elicitation — "what happens when the callback fails?" Expands scope, carries no hypothesis.human
2Directed probe — "what happens if the callback retries after the tenant is deleted?" Contains a specific hypothesis, so it is itself a finding.ai-prompted
3Dimension checklist — "ordering, backpressure, and rollback are unaddressed." Names gaps, supplies no content.ai-prompted
4Explicit candidate with trade-offs.ai-proposed, requires disposition at S3 or S7 with a stated reason

Rules:

  1. For business and functional requirements, rungs 1 and 3 only. Never propose a candidate functional requirement, not even phrased as "did you mean X?" — a proposal put in front of a human gets accepted.
  2. For non-functional requirements, design alternatives, threat model entries, and trace model entries, all four rungs are available.
  3. The human may call for a rung at any time. The orchestrator may offer the next rung up; it may never skip to rung 4.
  4. Record the rung used and tag each resulting element human, ai-prompted, or ai-proposed.
  5. At S10, report which structural elements of the final change are ai-proposed or ai-prompted, and pass that list to engineering-reasoning-reviewer so the defense targets exactly what the human is least likely to be able to explain cold.
  6. If more than one core structural element of the accepted design is ai-proposed, say so plainly before S8. That is not a blocker; it is a fact the human should hold while deciding.

Stop conditions

Stop and ask the human when requirements conflict, security impact is unclear, an invariant cannot be stated, an ADR/team decision may change, execution semantics are unclear, verification evidence is missing, a sync has introduced undocumented behavior, private state contradicts repository evidence, the selected change is ambiguous, or the required write authorization is missing.

Output

Always report: selected change and its id, current stage, change class, gate matrix, every downgraded gate with its falsifiable reason and tripwire result, completed gates, stale gates, reopened gates, concerns, next skill, files to read, the next stop point and what it needs from the human, provenance summary, write authorization status, and whether documentation drift exists.

Model

Model profile: strategic. The Claude Code host adapter maps strategic to the configured Opus model alias.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.