oma-orchestrator — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited oma-orchestrator (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Automatically orchestrate multi-agent execution with task decomposition, native/fallback dispatch, memory coordination, progress monitoring, verification, QA cross-review, retry, and result collection.
.agents/oma-config.yaml, .codex/agents/*.toml, .gemini/agents/*.md, or fallback oma agent:spawndomain_tags by matching against the Intent signature block of each installed .agents/skills/oma-*/SKILL.md. Tasks that match no domain confidently inherit the union of their parent feature's tags.exposed_skill_set = skills whose name is in domain_tags. If |exposed_skill_set| < 2 after classification, fall back to the full installed set (flat exposure) and record exposure_fallback: true in the task board.exposed_skill_set and exposure_fallback per task.oma verify, and QA cross-review loop.exposed_skill_set excludes a skill that a recovered failure indicates was needed, re-classify the task and re-dispatch with the expanded set rather than retrying against the original narrow set.| Action | SSL primitive | Evidence |
|---|---|---|
| Read config and task context | READ | oma config, routing, request |
| Classify task into domain tags | INFER | task text vs each skill's Intent signature |
| Compute exposed skill set | SELECT | intersection of domain tags and installed skills |
| Select dispatch path | SELECT | Native vs fallback |
| Write session state | WRITE | task board and memory files |
| Spawn agents | CALL_TOOL | native CLI or oma agent:spawn |
| Poll progress | READ | progress/result files |
| Run verification | CALL_TOOL | oma verify, tests, QA |
| Update retry state | UPDATE_STATE | loop counters and CD metrics |
| Report final result | NOTIFY | compiled summary |
oma agent:spawn <agent-type> "<task>" <session-id> -w <workspace>
oma verify <agent-type> --workspace <workspace> --jsonWhen native runtime dispatch is available, prefer the runtime-specific native path listed in this skill before falling back to oma agent:spawn.
| Scope | Resource target |
|---|---|
LOCAL_FS | Session, task-board, progress, result, config files |
PROCESS | Agent CLI processes and verify scripts |
MEMORY | Session state and clarification debt |
CODEBASE | Workspaces owned by spawned agents |
target_vendor === current_runtime_vendor and the runtime has a verified native path, use native dispatch.oma agent:spawn.exposed_skill_set, but fall back to flat exposure when classification confidence is low rather than starving a task of a required specialist.Current native executor paths:
claude --agent <agent>codex exec "@agent ..." using .codex/agents/*.tomlgemini -p "@agent ..." using .gemini/agents/*.mdVendor-specific execution protocols are injected automatically for fallback CLI runs.
| Setting | Default | Description |
|---|---|---|
| MAX_PARALLEL | 3 | Max concurrent subagents |
| MAX_RETRIES | 2 | Retry attempts per failed task |
| POLL_INTERVAL | 30s | Status check interval |
| MAX_TURNS (impl) | 20 | Turn limit for backend/frontend/mobile |
| MAX_TURNS (review) | 15 | Turn limit for qa/debug |
| MAX_TURNS (plan) | 10 | Turn limit for pm |
Memory provider and tool names are configurable via mcp.json:
{
"memoryConfig": {
"provider": "serena",
"basePath": ".serena/memories",
"tools": {
"read": "read_memory",
"write": "write_memory",
"edit": "edit_memory"
}
}
}PHASE 1 - Plan: Analyze request -> decompose tasks -> generate session ID PHASE 1.5 - Domain gate: For each task, intersect Intent signature matches across installed skills to derive exposed_skill_set. Record exposure_fallback: true when the intersection is too small to be useful and the flat library is used instead. PHASE 2 - Setup: Use memory write tool to create orchestrator-session.md + task-board.md (include exposed_skill_set per task) PHASE 3 - Execute: Spawn agents by priority tier (never exceed MAX_PARALLEL); inject only exposed_skill_set into each subagent's available specialist list PHASE 4 - Monitor: Poll every POLL_INTERVAL; handle completed/failed/crashed agents PHASE 4.5 - Verify: Run oma verify {agent-type} per completed agent PHASE 5 - Collect: Read all result-{agent}-{sessionId}.md, compile summary, cleanup progress files
See resources/subagent-prompt-template.md for prompt construction. See resources/memory-schema.md for memory file formats.
| File | Owner | Others |
|---|---|---|
orchestrator-session.md | orchestrator | read-only |
task-board.md | orchestrator | read-only |
progress-{agent}[-{sessionId}].md | that agent | orchestrator reads |
result-{agent}[-{sessionId}].md | that agent | orchestrator reads |
After each agent completes, enter an iterative review loop, not a single-pass verification.
Agent completes work
↓
[1] Mechanical Self-Check: lint, type-check, tests, diff scope
↓
[2] Verify: Run `oma verify {agent-type} --workspace {workspace}`
↓ FAIL → Agent receives feedback, fixes, back to [1]
↓ PASS
[3] Cross-Review: QA agent reviews the changes
↓ FAIL → Agent receives review feedback, fixes, back to [1]
↓ PASS
Accept result[1] Mechanical Self-Check (formerly "Self-Review"): Before requesting external review, the implementation agent must:
Quality judgment is NOT performed in this step. Design quality, architecture alignment, and acceptance criteria satisfaction are evaluated exclusively in [3] Cross-Review by the QA agent. Reason: Self-evaluation bias causes agents to consistently overrate their own output (ref: Anthropic harness design research).
[2] Automated Verify:
oma verify {agent-type} --workspace {workspace} --json[3] Cross-Review: Spawn QA agent to review the changes:
docs/CODE-REVIEW.md exists, QA agent uses it as the review checklist| Counter | Max | On Exceeded |
|---|---|---|
| Self-check + fix cycles | 3 | Escalate to cross-review regardless |
| Cross-review rejections | 2 | Report to user with review history |
| Total loop iterations | 5 | Force-complete with quality warning |
When feeding review results back to the implementation agent:
## Review Feedback (iteration {n}/{max})
**Reviewer**: {self / verify / qa-agent}
**Verdict**: FAIL
**Issues**:
1. {specific issue with file and line reference}
2. {specific issue}
**Fix instruction**: {what to change}This replaces single-pass verification. Most "nitpicking" should happen agent-to-agent. Human review is reserved for final approval, not catching lint errors.
Track user corrections during session execution. See ../_shared/core/session-metrics.md for full protocol.
When user sends feedback during session:
| CD Score | Action |
|---|---|
| CD >= 50 | RCA Required: QA agent must add entry to lessons-learned.md |
| CD >= 80 | Session Pause: Request user to re-specify requirements |
redo >= 2 | Scope Lock: Request explicit allowlist confirmation before continuing |
After each user correction event:
[EDIT]("session-metrics.md", append event to Events table)At session end, if CD >= 50:
lessons-learned.md with prevention measuresresources/subagent-prompt-template.mdresources/memory-schema.mdconfig/cli-config.yamlscripts/spawn-agent.sh, scripts/parallel-run.sh, scripts/verify.shtemplates/../_shared/core/skill-routing.mdscripts/verify.sh <agent-type>../_shared/core/session-metrics.md../_shared/core/api-contracts/template.md; read generated contracts from .agents/results/api-contracts/ (run artifact) or docs/plans/contracts/ (durable spec)../_shared/core/context-loading.md../_shared/core/difficulty-guide.md../_shared/core/reasoning-templates.md../_shared/core/clarification-protocol.md../_shared/core/context-budget.md../_shared/core/lessons-learned.md~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.