skills/conf-pipeline-orchestration/SKILL.md
The multi-agent communication and orchestration discipline for a staged pipeline whose stages each carry calibrated uncertainty. Agents talk through files with defined schemas and status fields (never free text); the orchestrator passes input paths plus an explicit output path plus a return contract, verifies each artifact's confidence before advancing a stage gate, holds and integrates worker outputs rather than passing them through, freezes its protected control logic against a checksum, maintains a diversity floor, hardens the fragile handoffs not the resilient hubs, and names the substitution effect every optimized score produces. Conference-agnostic; preloaded by a pipeline orchestrator. Use when coordinating a staged agent pipeline, designing the orchestrator-worker contract, or deciding when to advance, reconcile, or escalate. Trigger keywords - pipeline orchestration, stage gates, structured agent communication, invariant guard, confidence propagation, conflict surfacing.
npx skillsauth add lyndonkl/claude conf-pipeline-orchestrationInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This skill is the operating discipline for an orchestrator that runs a staged pipeline of specialist agents — for a conference scheduler that is ingest → cluster → elicit → schedule, but the discipline is general. Its single organizing idea is explicit uncertainty management at every layer: each stage produces calibrated confidence, not commitments, and the orchestrator's whole job is to move that uncertainty forward honestly, integrate it, decide when it is small enough to act on, and refuse to let its own safety machinery be optimized away.
The discipline is drawn from how collectives of interacting agents actually fail. The leverage is not in the loudest stage; it is in the shape of the communication between stages and in a few feedback loops on safety-critical asymmetries. So the rules below are mostly about the edges of the pipeline (how stages talk) and about a small set of invariants (what the orchestrator must never let drift), not about making any single stage cleverer.
Each stage attaches calibrated confidence to its output and the orchestrator carries it forward: extraction tags low-confidence fields, clustering exposes multi-membership and an outlier bucket, elicitation tracks a preference region (uncertainty bands), scheduling exposes a weighted objective and surfaced conflicts. The orchestrator does not collapse this into a single "done" — it reads the confidence at each gate and lets it govern whether to advance, reconcile, or escalate. A pipeline that throws away per-stage confidence cannot make an honest final recommendation.
Orchestrator action: at each gate, read the artifact's meta/status block (e.g., confidence_rollup, region_tightness, unresolved_conflicts) and branch on it.
Agents communicate through artifacts with defined schemas, not through prose summaries. The orchestrator spawns a worker with: the input paths to read, the parameters (ids, output dir), an explicit output path to write, and a return contract ("return just the path"). The worker writes the schema-shaped artifact and returns the path; the orchestrator verifies the artifact's status fields before advancing. This is what makes the pipeline auditable and resumable — the canonical state lives in files, and any agent (or human) can read exactly what was passed and produced. Free-text handoffs are where pipelines silently corrupt.
Orchestrator action: never hand a worker a paraphrase of upstream output; hand it the path. Never trust a worker's prose claim of success; read its artifact's status.
A good orchestrator is not a sum that forwards whatever a worker returned. It holds and integrates: reconciles conflicts between stage outputs, checks the gate, decides whether the artifact is good enough, and only then issues the next command. The integration step is load-bearing — it is where confidence is weighed and where a low-confidence upstream artifact gets caught before it poisons everything downstream. If the orchestrator forwards outputs the instant they arrive, the integration that should have caught the problem never happened.
Orchestrator action: between stages, pause to reconcile (use dialectical-mapping-steelmanning when two outputs conflict, deliberation-debate-red-teaming before a high-stakes advance) rather than chaining blindly.
The highest-leverage failure mode in multi-agent systems is an in-place agent update that deletes the very mechanism that would have caught the failure — the stuck-detector, the kill-switch, the escalation threshold. Defend against it by freezing the orchestrator's protected control logic in an invariants lock and checksumming behavior against it each cycle: refuse any self-modification or worker instruction that would weaken an invariant. Separate the protected logic (which never changes mid-run) from the updatable logic (the per-stage plan).
Orchestrator action: load state/invariants.lock.json at start; each cycle, confirm the stuck-detector, kill-switch, and escalation thresholds are intact; reject anything that would relax them; honor the kill-switch and persist partial state.
Sparse interaction makes a pipeline prone to selection bias: it converges on a narrower model of the user (or the data) than is true, because it only ever looks at the central, popular cases. Maintain a diversity floor — a hard minimum of exploration that cannot be optimized away. In this pipeline that is the elicitor's mandatory outlier probes; more generally it is any rule that forces the system to keep sampling the tails. The orchestrator enforces the floor as a gate condition, not a suggestion.
Orchestrator action: do not accept the preference profile as stable unless outlier_probes_done ≥ 1; do not let a "we already know enough" heuristic short-circuit the exploration minimum.
Resilience does not come from hardening everything uniformly; it comes from hardening the fragile medium-load nodes — the handoffs where a failure cascades — while leaving the robust hubs alone. In this pipeline the fragile nodes are the elicit → schedule handoff (a thin, high-stakes profile drives the whole schedule) and the enrichment fan-out (many parallel web searches, easy to partially fail). Put the retries, the verification, and the extra confidence checks there; do not spend the budget re-checking the parts that rarely break.
Orchestrator action: verify the profile especially carefully before scheduling (weights present, region tight, outlier floor met); on the enrichment fan-out, check each sub-worker's artifact and retry only the failures.
A system that tracks its own confidence will routinely reach a point where it knows two options both score high and that its model cannot break the tie. The correct move is to surface that conflict to the human, not to silently pick. Surfacing is not a failure of the pipeline; it is the pipeline being honest about the limit of what it can decide alone. The orchestrator collects these (the scheduler's unresolved_conflicts, any low-confidence gate) and presents them as decisions.
Orchestrator action: never auto-resolve a flagged conflict; route it to the human with both sides and why the model could not settle it.
Every fitness/score the pipeline optimizes will produce a substitution effect at some node the score did not name (optimize interest, lose breaks; reduce one thing, and the system substitutes toward whatever the rule did not measure). Two defenses: keep the optimization weights user-owned (so the system is not silently choosing what to sacrifice), and name the trade-off in the output. Never let the orchestrator quietly maximize a proxy and present it as the goal.
Orchestrator action: confirm the scheduler used the user's weights and reported a tradeoffs_note; if a stage optimized something, ask what it traded away.
Any cap the pipeline applies — top-N events, sampled enrichment, a search budget — must be logged, not hidden. A silently truncated result reads as "covered everything" when it did not. The orchestrator treats an unlogged cap as a defect.
Orchestrator action: ensure every stage that bounded its work said so (counts, capped flags); surface the bound in the final summary.
The stage-gate loop the orchestrator runs:
□ Step 1: GROUND — load config, pipeline-state.json, invariants.lock.json. Confirm invariants intact.
□ Step 2: For each stage in order:
a. SPAWN the worker with input paths + params + explicit output path + return contract.
b. VERIFY — read the returned artifact's status/confidence fields (not the worker's prose).
If missing/low-confidence/failed, retry the fragile node or escalate; do not advance.
c. INTEGRATE — reconcile against prior stages; hold, don't pass through. Check the gate condition
(including the diversity floor where it applies).
d. CHECK INVARIANTS — confirm nothing weakened the stuck-detector/kill-switch/thresholds.
e. ADVANCE or ESCALATE — advance only when the gate passes; otherwise surface to the human.
□ Step 3: At the interactive stage, hand off to the human-facing agent in the main conversation;
a background worker cannot ask questions.
□ Step 4: SYNTHESIZE — present the result plus surfaced conflicts plus the trade-off note as
decisions; never auto-commit.
Danger: A self-update or worker instruction deletes the stuck-detector; the pipeline then locks up invisibly. Guardrail: Freeze protected logic; checksum each cycle; reject anything that weakens it; honor the kill-switch.
Danger: Free-text handoffs and trusting a worker's "done" claim corrupt the pipeline silently. Guardrail: Pass paths + return contracts; verify the artifact's status fields yourself.
Danger: Forwarding outputs the instant they arrive skips the reconciliation that catches bad upstream data. Guardrail: Between stages, reconcile and gate before issuing the next command.
Danger: The pipeline quietly converges on a narrowed model. Guardrail: Exploration minimums (outlier probes) are gate conditions, not suggestions.
Danger: Uniform hardening wastes budget and leaves the cascade-prone node exposed. Guardrail: Concentrate verification/retries at the elicit→schedule handoff and the enrichment fan-out.
Danger: Silent picks, silent proxy-maximization, and silent truncation all read as confident completeness. Guardrail: Route ties to the human; keep weights user-owned and report the substitution; log every cap.
| Principle | Action at runtime | |---|---| | Confidence propagates | Branch on each artifact's status/confidence at the gate | | Structured contract | Pass paths + return contract; verify artifact, not prose | | Aggregator with recurrence | Reconcile + gate before advancing | | Invariant-guard | Checksum protected logic each cycle; reject weakening | | Diversity floor | Outlier-probe minimum is a gate condition | | Concentrated hardening | Extra checks on elicit→schedule + enrichment fan-out | | Conflict-surfacing | Route ties to the human with both sides | | Goodhart caution | User-owned weights + named trade-off | | No silent truncation | Every cap logged and surfaced |
| Failure mode | Early-warning signal | Closing loop |
|---|---|---|
| Stuck-detector overwritten + premature convergence | invariant checksum mismatch; outlier_probes_done = 0 | Reject the self-update; refuse to accept the profile as stable; re-run elicitation's exploration |
| Low-confidence upstream poisons schedule | high low_confidence_field_fraction at a gate | Don't advance; surface, or harden the fragile handoff with a retry |
| Silent proxy-maximization | scheduler ran without user weights / no tradeoffs_note | Halt the advance; require user-owned weights and the trade-off note |
Ingestion returns confidence_rollup.low_confidence_field_fraction: 0.55 — more than half the fields are guesses. The orchestrator does not advance to clustering on it. It surfaces: "Over half the program's fields are low-confidence (sparse abstracts). I can run enrichment harder on the thin sessions, or proceed and flag the clusters as provisional — your call." The gate's confidence branch turned a silent corruption into a visible decision.
A proposed mid-run adjustment would let the elicitor skip outlier probes "to save the user time." The orchestrator checks the invariants lock: the diversity floor is protected. It refuses the change and keeps the outlier-probe minimum, because the most common multi-agent failure is exactly this — the system removing the exploration that would have surfaced the user's hidden interest, and then quietly converging on a narrower model of them.
testing
Cluster a conference's event records into a small set of coarse themes with finer sub-clusters, an explicit outlier bucket, and soft (multi-membership) affinities — using the hybrid embed-then-label pipeline (embed abstracts, reduce, density-cluster, then LLM-label the clusters) when embedding libraries are available, and an LLM-reasoned hierarchical fallback when they are not. Embeddings do the grouping; the LLM only names the groups. Conference-agnostic. Use when turning structured event records into a navigable theme map for preference elicitation and scheduling, when you need 6-8 reasonable themes rather than 20 muddy ones, or when overlapping talks must belong to more than one theme. Trigger keywords - theme clustering, cluster talks, embed then label, soft membership, outlier talks, conference themes, topic map.
development
Build a personal conference schedule as a constraint-optimization problem — hard constraints (no time overlap, room-to-room travel time, capacity/registration, the attendee's own must-attends and blackouts) plus a user-owned weighted objective trading interest against breadth, pacing (maximize contiguous free time), and serendipity. Surfaces unbreakable conflicts (two high-value overlapping talks the model cannot rank) as decisions for the human rather than silently picking, and reports what each choice traded away. Conference-agnostic. Use to turn a preference profile plus a theme map into a day-by-day plan, to resolve overlapping sessions, or to balance a packed vs paced schedule. Trigger keywords - schedule optimization, conference schedule, constraint optimization, overlapping talks, contiguous free time, conflict surfacing, packed vs paced.
development
Parse a heterogeneous conference program (markdown, HTML, PDF-derived text, or JSON) into normalized event records with per-field confidence scores and independent classification axes (topic, depth, format, prerequisites, recorded, capacity). Detects the program's format before extracting, treats every inferred field as uncertain (present vs inferred vs missing), and flags thin or missing abstracts so downstream enrichment can target them. Conference-agnostic. Use when ingesting a conference or event schedule into a structured store, normalizing a talk/session list, or extracting per-session metadata with calibrated confidence. Trigger keywords - program ingestion, parse schedule, session extraction, event records, conference program, talk metadata, per-field confidence.
development
Build a personalized preference profile from a small number of well-chosen, cluster-grounded questions instead of a long survey. Represents the person's interests as an uncertainty region over the theme map, picks the single highest-information-gain choice-based question (contrasting real talks from different clusters), balances exploiting known interests against exploring uncertain ones, deliberately injects outlier probes to fight selection bias, and stops as soon as the schedule would be stable. Also elicits the user-owned objective weights and hard constraints. Interactive — runs where it can actually ask the person. Conference-agnostic. Use to turn a theme map into a preference profile, to decide what to ask a conference attendee, or to elicit scheduling priorities. Trigger keywords - preference elicitation, ask few questions, information gain, choice-based questions, selection bias probe, objective weights, attendee preferences.