Build a fully automated expert-driven project from a single idea. The pipeline discovers experts, distills their public knowledge, forms a council, scores maturity, builds code, debugs, and iterates until the council awards 100/100. Then submits to GitHub.
Distill methods, evidence preferences, reasoning habits, critique patterns, and blind spots from PUBLIC sources only. Do NOT impersonate living persons, invent private beliefs, fabricate quotes, or treat expert profiles as primary evidence. Expert memory is an analysis lens, not truth.
text
# Full autonomous pipeline
python3 scripts/expert_distiller.py init --root ./forum --domain "AI Reliability" --topic "LLM hallucination detection"
Then invoke this skill with the domain idea. The skill handles everything from discovery to GitHub submission.
Phases 1-4 run once (setup). Phases 5-9 iterate until convergence. Phase 10 runs once at completion.
text
INIT → DISCOVER → DISTILL → COUNCIL → SCORE
│
score < 100│
▼
GAP_FILL ← RESCORE ← DEBUG ← BUILD
│
│ needs new experts
▼
discover single → distill single → update council
│
│ score = 100 + all pass
▼
SUBMIT (terminal)
Goal: Parse user idea into domain spec, initialize forum root.
Steps:
Parse the user's idea/concept into a domain name and topic description
Run CLI: bash
python3 scripts/expert_distiller.py init --root <forum_root> --domain "<domain>" --topic "<topic>"
Initialize pipeline state: bash
python3 scripts/expert_distiller.py build --root <forum_root> --domain "<domain>" --target-repo "<repo>"
Write the domain's coverage_axes — list 3-8 sub-domains the forum should cover
Output: Initialized forum root with domains/<domain_id>.json, directory layout, pipeline_state.json
Transition: → DISCOVER
Goal: Web-search for expert candidates (3-8 people).
Steps:
Generate search queries from the domain topic (see agents/expert-researcher.md)
For each query, use the current environment's web search tool to search
For each result, use the current environment's web fetch/open tool to read candidate pages
Identify real public figures with domain expertise
Collect source URLs classified by tier (A/B/C per references/source-gates.md)
For each candidate, run CLI commands: bash
python3 scripts/expert_distiller.py candidate --root <root> --domain <domain> --name "<Name>" --reason "<why>"
python3 scripts/expert_distiller.py source --root <root> --expert-id <id> --tier A --title "<Title>" --url "<URL>" --note "<Note>"
python3 scripts/expert_distiller.py source --root <root> --expert-id <id> --tier B --title "<Title>" --url "<URL>" --note "<Note>"
Gate: At least 3 candidates with at least 1 Tier A + 1 Tier B source each
Output: candidates/<id>.json + source_dossiers/<id>.json for each candidate
Transition: → DISTILL
Goal: Audit candidates, promote, fill profiles with LLM-driven distillation.
Steps:
For each candidate, run audit: bash
python3 scripts/expert_distiller.py audit --root <root> --expert-id <id>
For candidates that pass audit ( promotion_allowed: true), create profile:
bash
python3 scripts/expert_distiller.py profile --root <root> --domain <domain> --expert-id <id> --name "<Name>"
For each promoted expert, fill the profile by reading source content:
experts/<id>/profile.jsonexperts/<id>/distillate.mdreferences/profile-contract.mdRebuild index: bash
python3 scripts/expert_distiller.py index --root <root>
Gate: At least 2 experts with fully filled profiles
Output: experts/<id>/profile.json + experts/<id>/distillate.md for each promoted expert
Transition: → COUNCIL
Goal: Form expert council with auto-assigned roles.
Steps:
Create council: bash
python3 scripts/expert_distiller.py council create --root <root> --domain <domain> --name "<Domain> Main Council"
# Optional: --experts id1,id2,id3 to specify which experts (default: all)
Review the auto-assigned roles (chair, reviewer, advocate, skeptic)
If needed, manually adjust with council add-member --role <role>
Output: councils/<council_id>.json with members, roles, weights, routing rules
Transition: → SCORE (first pass)
Goal: Initial scoring — all axes start at 0 (no artifact exists).
Steps:
Run score command: bash
python3 scripts/expert_distiller.py score --root <root> --domain <domain>
This first pass records baseline 0/100 — everything needs building
Output: scoring_reports/<domain>_<timestamp>.json with total=0
Transition: → BUILD (always needs work on first pass)
Goal: Generate project code guided by expert lenses, targeting weakest axes.
Steps:
Read the scoring report to identify weakest axes
For each expert in the council, extract build guidance:
reasoning_kernel.core_questions — what they'd askreasoning_kernel.preferred_abstractions — what concepts they useadvantage_knowledge_base.anti_patterns — what to avoiddomain_relevance.best_used_for — where they add valueGenerate code that:
Write code to the target repo path
Record build context: bash
python3 scripts/expert_distiller.py build --root <root> --domain <domain> --target-repo <repo_path>
Agent: Use project-builder agent for code generation
Output: Project source code at target repo path
Transition: → DEBUG
Goal: Verification loop — build, types, lint, tests, security, diff.
Steps:
For each stage failure:
references/build-integration.md)Agent: Use project-builder agent for build failure fixes
Transition:
Goal: Full 4-axis scoring with council debate protocol.
Steps:
Run score command against the artifact: bash
python3 scripts/expert_distiller.py score --root <root> --domain <domain> --artifact <repo_path>
For each axis, apply expert council debate (see references/council-protocol.md):
Sum axes for total (0-100)
Update pipeline state with new scores
Generate report: bash
python3 scripts/expert_distiller.py report --root <root> --domain <domain> --format markdown
Agent: Use maturity-scorer agent for adversarial scoring
Output: Updated scoring_reports/<domain>_<timestamp>.json
Transition:
Goal: Analyze gaps, add experts if needed, determine build focus.
Steps:
Run coverage analysis: bash
python3 scripts/expert_distiller.py coverage --root <root> --domain <domain>
Analyze scoring report for specific gaps per axis
Determine action:
Missing expertise → DISCOVER single candidate (fast-track), DISTILL, add to council: bash
python3 scripts/expert_distiller.py council add-member --root <root> --council-id <id> --expert-id <new_id> --fast-track
Knowledge gaps (no new expert needed) → BUILD with focus on specific gaps
Score regression → Revert to previous approach, BUILD differently
Update pipeline state history
Agent: Use gap-analyst agent for coverage analysis
Output: gap_analyses/<domain>_<timestamp>.json with recommendations
Transition: → BUILD (next iteration)
Goal: Submit converged artifact to GitHub.
Steps:
Run final verification (all 6 stages must PASS)
Generate final report: bash
python3 scripts/expert_distiller.py report --root <root> --domain <domain> --format markdown --output MATURITY_REPORT.md
Create git branch: council-pilot/<domain_id>
Commit all changes with format: text
feat(council-pilot): <domain> maturity 100/100
Breadth: 25/25 | Depth: 25/25 | Thickness: 25/25 | Effectiveness: 25/25
Expert council: <council_name> (<expert_count> experts)
Iterations: <iteration_count>
Push branch and create PR: bash
git push -u origin council-pilot/<domain_id>
gh pr create --title "Expert-Distilled: <domain>" --body-file MATURITY_REPORT.md
Update pipeline state: status: submitted
Output: GitHub PR URL
Transition: Terminal (pipeline complete)
The pipeline terminates ONLY when ALL conditions are met:
A score of 100 means the expert council cannot find meaningful improvements. This is intentionally hard to achieve.
ParameterDefaultDescription--max-iterations10Maximum BUILD→DEBUG→RESCORE cycles--target-repocurrent dirWhere to build the project--quickfalseReduce to 2 experts, max 3 iterations
Pipeline state is stored in <root>/pipeline_state.json:
Each iteration reads state at start, writes at end. Context can be safely compacted between iterations.
The pipeline can add new experts mid-loop:
Maximum 2 new experts per iteration. Total council size must not exceed 10.
FailureRecoveryMax iterations reachedPause, generate report, print current stateBuild failure after 3 retriesLog failure, continue to GAP_FILLScore regression (>10 points)Pause, revert to previous artifactContext window pressureWrite state to disk, compact, resume
Use whichever web research surface is available in the active agent runtime:
discover --from-file with a curated JSON source list and mark the run as source-file assisted.All CLI commands work standalone without the autonomous pipeline:
bash
# Initialize
python3 scripts/expert_distiller.py init --root ./forum --domain "My Domain" --topic "Description"
# Add candidate and sources
python3 scripts/expert_distiller.py candidate --root ./forum --domain "my-domain" --name "Expert Name" --reason "Why"
python3 scripts/expert_distiller.py source --root ./forum --expert-id expert-name --tier A --title "Source" --url "https://..." --note "Note"
# Audit, profile, validate
python3 scripts/expert_distiller.py audit --root ./forum --expert-id expert-name
python3 scripts/expert_distiller.py profile --root ./forum --domain "my-domain" --expert-id expert-name --name "Expert Name"
python3 scripts/expert_distiller.py validate --root ./forum --strict
# Council management
python3 scripts/expert_distiller.py council create --root ./forum --domain "my-domain"
python3 scripts/expert_distiller.py council list --root ./forum
python3 scripts/expert_distiller.py council show --root ./forum --council-id my-domain-main
# Scoring and analysis
python3 scripts/expert_distiller.py score --root ./forum --domain "my-domain" --artifact ./project
python3 scripts/expert_distiller.py coverage --root ./forum --domain "my-domain"
python3 scripts/expert_distiller.py report --root ./forum --domain "my-domain" --format markdown
# Discovery and maintenance
python3 scripts/expert_distiller.py discover --root ./forum --domain "my-domain" --from-file candidates.json
python3 scripts/expert_distiller.py refresh --root ./forum --stale-only