name: regen-toolkit-article description: Write high-quality, non-hallucinated educational articles for the Regen Toolkit using a multi-agent pipeline. Use when writing or revising articles for the regen-toolkit GitHub repo (248 placeholder articles across 3 tracks).
Regen Toolkit Article Pipeline Skill
Write high-quality, non-hallucinated educational articles for the Regen Toolkit using a multi-agent pipeline.
When to Use
Use this skill when writing or revising articles for explorience/regen-toolkit (GitHub repo with 248 placeholder markdown files across 3 tracks).
Pipeline Overview
Request → Research (Luz) → Draft (Rupa) → Fact-Check (Satya) → Edit (Sakshi) → Critique → Final
Each agent has ONE job. No agent tries to do everything.
Agent Roles
1. Luz (Researcher)
Job: Extract facts from sources. NO writing.
Inputs:
- Article topic + GitHub file path
- Source codes (e.g., A, B, E, P) - see reference table
- Access to source materials
Output: Research brief with:
- Key concepts (source-cited)
- Direct quotes worth including
- Examples/case studies
- Links/resources mentioned
- Gaps: what sources DON'T cover
Rules:
- ONLY extract from provided sources
- Flag if sources don't cover topic
- No synthesis, no opinions
- CITATION FORMAT: Use
[Source A],[Source D],[Source S]- NOT full source names like "[Source: Starknet]" or "[Source: AWS]"
2. Rupa (Writer)
Job: Write first draft from research brief.
Inputs:
- Research brief from Luz
- Article template
- Style guide (below)
- Target audience (🌱/🔄/💰)
- Word count target
Output: First draft with:
- Clear structure (intro, sections, conclusion)
- Inline citations [Source X]
- Practical examples
- Action items / next steps
Rules:
- ONLY use facts from research brief
- Every claim = source citation in
[Source X]format - Match language to audience
- Include "Try This" exercises
- Preserve source codes from research brief - don't expand them
3. Satya (Fact-Checker)
Job: Verify every claim. Catch hallucinations.
Inputs:
- Draft from Rupa
- Research brief
- Access to source materials
Output: Fact-check report:
- ✅ Verified claims
- ⚠️ Unverified (not in sources)
- ❌ Incorrect (contradicts sources)
- 🔍 Needs external verification
Rules:
- Be paranoid
- Check URLs exist
- Verify protocol/DAO/tool names
- Flag "sounds plausible but unverified"
Gate: >2 ❌ or >5 ⚠️ → return to Rupa
IMPORTANT: Even if gate is passed (≤2 ❌ and ≤5 ⚠️), ALL ⚠️ claims must be addressed:
- Remove the claim, OR
- Qualify with "reportedly", "estimates suggest", "approximately", OR
- Change to generic statement if specific stats can't be verified
Include fact-check notes in article frontmatter listing any fixes made.
4. Sakshi (Editor)
Job: Polish for clarity, consistency, actionability.
Inputs:
- Fact-checked draft
- Style guide
- Glossary
Output: Edited draft:
- Consistent terminology
- Simplified jargon (for 🌱)
- Improved flow
- Stronger hook
- Clearer action items
Rules:
- Don't add new facts
- Cut fluff ruthlessly
5. Persona Critique
Job: Read as target user.
Inputs:
- Edited draft
- Target persona (Maya/Alex/Jordan)
Output: SHIP IT or NEEDS WORK with:
- What confused me?
- What's still unclear?
- What's missing?
- Did this respect my time?
6. Final Check
Job: Format + metadata.
Output:
- Correct frontmatter
- Status: placeholder → draft
- Commit-ready
Style Guide
Voice & Tone
- Friendly but not condescending
- Practical over theoretical
- "Here's how" over "Here's why" (for 🌱)
- Acknowledge complexity without drowning
Structure
- Hook in first 2 sentences
- One main idea per section
- End sections with action or transition
- 800-1200 words (foundations), 1500-2000 (applied)
Language Rules
- Define jargon on first use
- No unexplained acronyms
- "You" not "one" or "users"
- Active voice
- Short paragraphs (3-4 sentences max)
What to Avoid
- "In this article, we will..."
- "It's important to note that..."
- Hedge words: "somewhat", "relatively", "fairly"
- Unsourced superlatives: "best", "most popular"
Citation Format
- Inline:
[Source A] - Full refs in frontmatter
sources:
Persona Cards
🌱 Maya (Grounded Regen)
- Background: Permaculture teacher, community garden organizer
- Tech: Smartphone + basic apps, no crypto
- Goals: "Can this web3 stuff help my community?"
- Fears: Scams, looking stupid, wasting time
- Language: No jargon, explain everything, nature/community analogies
- Public label:
beginner
💰 Alex (Crypto-Active)
- Background: Dev, has traded crypto, understands DeFi
- Tech: Very high, runs own node, multiple wallets
- Goals: "I want to do something meaningful with my skills and capital"
- Fears: Rugged by fake impact projects, greenwashing
- Language: Technical OK, focus on legitimacy signals
- Public label:
intermediate
🔄 Jordan (On-Chain Regen)
- Background: ReFi protocol work, attended ETH Denver
- Tech: High but gaps in governance/coordination
- Goals: "I want to start a local chapter and bring others in"
- Fears: Burning out, building something pointless
- Language: Assume web3 basics, focus on patterns/playbooks
- Public label:
practitioner
Source Codes
| Code | Source |
|---|---|
| A | ReFi DAO Local ReFi Toolkit |
| B | Greenpill Local Regen Guide |
| C | Gitcoin Alpha Grange |
| D | 1Hive Wiki |
| E | Superfluid Documentation |
| F | SourceCred docs |
| G | Coordinape docs |
| H | Snapshot docs |
| I | Discourse |
| J | Radicle |
| K | BrightID |
| L | POAP |
| M | Gitcoin Grants Program |
| N | clr.fund |
| O | Juicebox |
| P | Bankless/TokenTerminal |
| Q | Bankr docs |
| R | Various blog posts |
| S | Original/research |
Status Reporting Format
Update frequency: Every 10 minutes during active pipeline sessions.
Provide status in a visual board format — one column per stage, one row per article:
Template
┌─────────────────────────────────────────────────────────────────────────────┐
│ REGEN ARTICLE PIPELINE STATUS │
│ Session: {session-id} | Batch: {n}/{total} | @ {time} │
├─────────────────────┬────────┬────────┬────────┬─────────┬────────┬────────┤
│ Article │RESEARCH│ WRITE │VERIFY │ REVIEW │ CRITIQ │PUBLISH │
├─────────────────────┼────────┼────────┼────────┼─────────┼────────┼────────┤
│ {slug-1} │ ✅ │ 🔄 │ ⏳ │ ⏳ │ ⏳ │ ⏳ │
│ {slug-2} │ ✅ │ ✅ │ 🔄 │ ⏳ │ ⏳ │ ⏳ │
│ {slug-3} │ ✅ │ ✅ │ ✅ │ ✅ │ ✅ │ ⏳ │
│ ... │ │ │ │ │ │ │
└─────────────────────┴────────┴────────┴────────┴─────────┴────────┴────────┘
Progress: {completed} completed | {in_progress} in progress | {pending} pending
Example (10-article batch)
┌─────────────────────────────────────────────────────────────────────────────┐
│ REGEN ARTICLE PIPELINE STATUS │
│ Session: abc-123 | Batch: 10/20 | @ 00:15:30 │
├─────────────────────┬────────┬────────┬────────┬─────────┬────────┬────────┤
│ Article │RESEARCH│ WRITE │VERIFY │ REVIEW │ CRITIQ │PUBLISH │
├─────────────────────┼────────┼────────┼────────┼─────────┼────────┼────────┤
│ what-is-ethereum │ ✅ │ ✅ │ ✅ │ ✅ │ ✅ │ 🔄 │
│ why-regens-interstd │ ✅ │ ✅ │ 🔄 │ ⏳ │ ⏳ │ ⏳ │
│ decentralization │ ✅ │ 🔄 │ ⏳ │ ⏳ │ ⏳ │ ⏳ │
│ blockchain-fundmnts │ ⏳ │ ⏳ │ ⏳ │ ⏳ │ ⏳ │ ⏳ │
│ ... │ │ │ │ │ │ │
└─────────────────────┴────────┴────────┴────────┴─────────┴────────┴────────┘
Progress: 3 completed | 2 in progress | 5 pending
Next: Starting fact-check on why-regens-interested
Legend
| Icon | Meaning |
|---|---|
| ✅ | DONE — stage completed |
| 🔄 | IN PROGRESS — currently working on this stage |
| ⏳ | PENDING — waiting to enter this stage |
| ❌ | FAILED — needs revision (noted below) |
What to Include
- Header line with session ID, batch progress, and elapsed time
- One row per article — use short slug (max 18 chars)
- One column per stage — RESEARCH, WRITE, VERIFY, REVIEW, CRITIQ, PUBLISH
- Progress summary at bottom — completed / in progress / pending counts
- Next action — what you're about to do next
- Any failures — list articles that failed with reasons
When to Report
- Every 10 minutes — minimum during active pipeline
- After each stage completion — can also report then
- At batch end — final summary with all completed
- On failure — immediately if an article fails a gate
Usage
Manual Pipeline
- Pick article from GitHub issues or repo
- Run Luz (research) → get brief
- Run Rupa (draft) → get first draft
- Run Satya (fact-check) → verify
- Run Sakshi (edit) → polish
- Persona critique → approve/reject
- Final check → format + commit
Quality Gates
| Gate | Criteria |
|---|---|
| 1. Research | ≥3 sources, key concepts, gaps flagged |
| 2. Draft | All claims cited, word count ±20%, has intro/body/conclusion |
| 3. Fact-Check | Zero ❌, ≤2 ⚠️, URLs verified |
| 4. Edit | Style guide pass, no fluff |
| 5. Critique | "SHIP IT" from persona |
Output Location
Write articles to the repo clone at /root/workspace/regen-toolkit/. Use the working/ folder for process docs.
Structure:
content/{section}/{subsection}/
├── {article-slug}.md # Final article
└── working/
├── {article-slug}-research.md
├── {article-slug}-factcheck.md
└── {article-slug}-critique.md
Example: For content/1-foundations/1.1-why-web3/why-regens-interested.md:
content/1-foundations/1.1-why-web3/
├── why-regens-interested.md
└── working/
├── why-regens-interested-research.md
├── why-regens-interested-factcheck.md
└── why-regens-interested-critique.md
Workflow:
- Write final article to
{article-slug}.md - Write working docs to
working/folder - PR entire folder (article + working docs) to
github.com/explorience/regen-toolkit
Working docs stay in the repo - collaborators can see the process!
Model Routing
| Agent | Model | Provider |
|---|---|---|
| Luz (Research) | MiniMax M2.5 | Direct |
| Rupa (Draft) | Trinity | OpenRouter |
| Satya (Fact-Check) | MiniMax M2.5 | Direct |
| Sakshi (Edit) | MiniMax M2.5 | Direct |
| Critique | Sonnet 4.6 | Anthropic Direct |
| Final | Haiku | OpenRouter |
Invocation Prompts
Start Fresh Pipeline
Use this when starting a new batch from scratch:
Run the Regen Toolkit Article pipeline for [10/20/50] articles.
Skill: /mnt/storage/workspace/skills/regen-toolkit-article/SKILL.md
Repo: /root/workspace/regen-toolkit/
1. Scan the content/ directory for placeholder articles (status: placeholder)
2. Pick the next [N] articles that have NOT been started
3. For each article in order:
a. Research (Luz) → save to working/{slug}-research.md
b. Draft (Rupa) → save to {slug}.md draft
c. Fact-Check (Satya) → save to working/{slug}-factcheck.md
d. Edit (Sakshi) → update {slug}.md
e. Critique → save to working/{slug}-critique.md
f. Final → update frontmatter, status: draft
4. Use model routing from skill (Luz=MiniMax, Rupa=Trinity, etc.)
5. Provide status table update every 10 minutes
6. Save state to /root/workspace/regen-toolkit/.pipeline-state.json after each article
Start now.
Resume Interrupted Pipeline
Use this when resuming after interruption:
Resume the Regen Toolkit Article pipeline.
1. Load state from /root/workspace/regen-toolkit/.pipeline-state.json
2. Identify the last article being worked on
3. Check the working/ directory for that article to see what stage was completed:
- Has {slug}-research.md but no draft → start Draft
- Has draft but no factcheck → start Fact-Check
- Has factcheck but no critique → start Critique
- Has critique but not final → complete Final
4. Continue with the remaining articles in the queue
5. Provide status table update every 10 minutes
6. Update state file after each stage completion
Resume now.
Single Article Pipeline
Use this for one article at a time:
Run the full pipeline for article: {slug}
Location: content/{section}/{subsection}/{slug}.md
1. Read the article placeholder to get topic + target audience
2. Run Research (Luz) → working/{slug}-research.md
3. Run Draft (Rupa) → {slug}.md
4. Run Fact-Check (Satya) → working/{slug}-factcheck.md
5. Run Edit (Sakshi) → update {slug}.md
6. Run Critique → working/{slug}-critique.md
7. Final → update frontmatter, status: draft
Use model routing from skill. Report when complete.
State Management
State File Location
/root/workspace/regen-toolkit/.pipeline-state.json
State Schema
{
"version": "1.0",
"lastUpdated": "2026-02-26T14:30:00Z",
"sessionId": "abc-123",
"queue": [
{
"slug": "what-is-ethereum",
"path": "content/1-foundations/1.6-ethereum-smart-contracts/what-is-ethereum.md",
"status": "draft",
"stage": "VERIFY",
"startedAt": "2026-02-26T14:00:00Z",
"completedAt": null,
"researchFile": "working/what-is-ethereum-research.md",
"factcheckFile": "working/what-is-ethereum-factcheck.md",
"critiqueFile": "working/what-is-ethereum-critique.md",
"issues": []
}
],
"completed": [
{
"slug": "why-regens-interested",
"path": "content/1-foundations/1.1-why-web3/why-regens-interested.md",
"status": "draft",
"completedAt": "2026-02-26T13:45:00Z",
"stagesCompleted": ["RESEARCH", "DRAFT", "VERIFY", "EDIT", "CRITIQUE", "FINAL"]
}
],
"failed": [
{
"slug": "some-article",
"reason": "Fact-check gate failed: 3 incorrect claims",
"retryCount": 2,
"lastAttempt": "2026-02-26T12:00:00Z"
}
],
"stats": {
"totalProcessed": 15,
"completed": 12,
"failed": 1,
"inProgress": 2
}
}
State Update Rules
- Update after each stage — Save state file after Research, Draft, Fact-Check, Edit, Critique, and Final
- Atomic writes — Write to temp file then rename to prevent corruption
- Track failures — Log failed articles to
failedarray with reason - Session ID — Include session ID to detect stale state from old sessions
Recovery Procedures
Scenario 1: Interrupted Mid-Article
Detection: State shows stage != "PUBLISH" and no completedAt
Recovery:
- Load state file
- Check working/ directory for existing files
- Determine last completed stage by checking which files exist
- Resume from next stage
Scenario 2: State File Missing
Detection: .pipeline-state.json doesn't exist
Recovery:
- Scan content/ directory recursively
- Find all articles with
status: placeholder - Find all with
status: draftto determine completed - Rebuild state from filesystem
Scenario 3: Stale Session
Detection: State file sessionId doesn't match current session
Recovery:
- Treat as fresh resume (Scenario 1)
- Or prompt user to confirm: "Found state from previous session. Resume or start fresh?"
Scenario 4: Fact-Check Gate Failed
Detection: failed array contains article with reason mentioning gate
Recovery:
- Increment
retryCount - If
retryCount< 3: return to Draft stage with fact-check feedback - If
retryCount>= 3: mark as permanently failed, move to next article
Batch Handling
Queue Selection
- Scan content/ for
status: placeholderfiles - Sort by file path (alphabetical) for predictability
- Slice next N articles for batch
- Mark as "in progress" in state before starting
Parallel vs Sequential
- Research can run in parallel (up to 5 articles)
- Draft should be sequential (one at a time per session)
- Fact-Check/Edit/Critique sequential
Batch Progress Reporting
Every 10 minutes, output:
┌────────────────────────────────────────────────────────────────────────────┐
│ REGEN ARTICLE PIPELINE STATUS │
│ Session: abc-123 | Batch: 10/20 │
│ @ 00:15:30 into session │
├─────────────────────┬────────┬────────┬────────┬─────────┬────────┬────────┤
│ Article │ SPEC │ WRITE │ VERIFY │ REVIEW │ CRITIQ │PUBLISH │
├─────────────────────┼────────┼────────┼────────┼─────────┼────────┼────────┤
│ 1.1-why-web3 │ ✅ DONE│ ✅ DONE │ ✅ DONE │ ✅ DONE │ ✅ DONE│ ✅ DONE │
│ 1.2-decentralizati │ ✅ DONE│ ✅ DONE │ 🔄 CHECK│ ⏳ PEND │ ⏳ PEND │ ⏳ PEND │
│ 1.3-blockchain-fund │ ✅ DONE│ 🔄 DRAFT│ ⏳ PEND │ ⏳ PEND │ ⏳ PEND │ ⏳ PEND │
│ ... │ │ │ │ │ │ │
└─────────────────────┴────────┴────────┴────────┴─────────┴────────┴────────┘
Progress: 5 completed, 2 in progress, 3 pending
Next: Starting research on 1.4-impacts at 00:16:00
Environment
| Item | Value |
|---|---|
| Repo | /root/workspace/regen-toolkit/ |
| Skill | /mnt/storage/workspace/skills/regen-toolkit-article/SKILL.md |
| State File | /root/workspace/regen-toolkit/.pipeline-state.json |
| Working Dir | content/{section}/{subsection}/working/ |