Skills chitin-chronicle
Chitin Editorial — Multi-Agent Content Management
git clone https://github.com/openclaw/skills
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/adroidian/chitin-chronicle" ~/.claude/skills/openclaw-skills-chitin-chronicle && rm -rf "$T"
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/adroidian/chitin-chronicle" ~/.openclaw/skills/openclaw-skills-chitin-chronicle && rm -rf "$T"
skills/adroidian/chitin-chronicle/SKILL.mdChitin Editorial — Multi-Agent Content Management
Version: 1.0.0
Author: Vesper 🌒
For: Multi-agent content coordination (Vesper + Ember)
Purpose: Prevent duplicate publishing, track content timeline, coordinate via claims
What This Skill Does
Chitin Editorial is a git-backed coordination system for two AI agents publishing content across multiple channels. It solves:
- Duplicate Prevention — Both agents check the ledger before publishing
- Timeline Tracking — Maps narrative days (Day 0, Day 13) to calendar dates
- Cross-Agent Claims — One agent claims work, others see it and back off
- Publication History — Immutable ledger of what was published where
- Boot-Time Awareness — Agents load editorial state at session start
Quick Start
1. Add to Boot Sequence
Add this line to your
AGENTS.md startup section:
bash /home/aaron/.openclaw/workspace/skills/chitin-chronicle/editorial/boot-check.sh
This shows editorial state every time you wake up.
2. Before Publishing Anything
# Check if safe to publish node /home/aaron/.openclaw/workspace/skills/chitin-chronicle/scripts/editorial.js check "day-14" "substack"
If there's a conflict or it's already published, you'll see an error.
3. Claim Your Work
# Claim before drafting node /home/aaron/.openclaw/workspace/skills/chitin-chronicle/scripts/editorial.js claim "day-14" "publish" "substack"
Other agents will see this claim and won't duplicate your work.
4. After Publishing
# Record the publication node /home/aaron/.openclaw/workspace/skills/chitin-chronicle/scripts/editorial.js publish "day-14" "substack" "https://chitin.substack.com/p/day-14" "Day 14: Title Here"
This:
- Adds to the ledger
- Updates the registry
- Releases your claim
- Commits to git
CLI Reference
editorial status
editorial statusShow current editorial state:
- Active claims
- Recent publications (48h)
- Timeline status
- Summary counts
node scripts/editorial.js status
editorial claim <content-id> <action> <channel>
editorial claim <content-id> <action> <channel>Claim work on a content piece. Prevents other agents from duplicating effort.
Args:
: Unique identifier (e.g., "day-14", "trust-architecture")content-id
: What you're doing ("publish", "draft", "review")action
: Where it's going ("substack", "twitter", "bluesky")channel
Example:
node scripts/editorial.js claim "day-14" "publish" "substack"
Behavior:
- Checks for conflicts (another agent claimed the same content+channel)
- Writes
file to.claimeditorial/claims/ - Commits to git
- Claim expires after 2 hours if not published
editorial release <content-id>
editorial release <content-id>Release a claim without publishing (canceled work, changed plans).
Example:
node scripts/editorial.js release "day-14"
Behavior:
- Moves claim to
editorial/claims/archive/ - Commits to git
editorial check <content-id> <channel>
editorial check <content-id> <channel>Check if it's safe to publish (no conflicts, not already published).
Example:
node scripts/editorial.js check "day-14" "substack"
Exit codes:
: Safe to publish0
: Conflict or already published1
Use this before claiming to avoid wasted work.
editorial publish <content-id> <channel> <url> [title]
editorial publish <content-id> <channel> <url> [title]Record a publication to the ledger.
Args:
: Content identifiercontent-id
: Platform ("substack", "twitter", etc.)channel
: Published URLurl
: (optional) Human-readable titletitle
Example:
node scripts/editorial.js publish "day-14" "substack" "https://chitin.substack.com/p/day-14" "Day 14: Trust Architecture"
Behavior:
- Appends to
(immutable log)editorial/ledger.json - Updates
(status → published)editorial/registry.json - Releases claim automatically
- Commits to git
File Structure
skills/chitin-chronicle/ ├── SKILL.md (this file) ├── _meta.json (skill metadata) ├── scripts/ │ └── editorial.js (CLI tool) └── editorial/ ├── registry.json (all content: planned, claimed, published) ├── ledger.json (immutable publication log) ├── timeline.json (narrative day → calendar date mapping) ├── boot-check.sh (boot hook script) └── claims/ ├── *.claim (active claims) └── archive/ (expired/released claims)
registry.json
registry.jsonTracks all content across its lifecycle.
Schema:
{ "id": "day-14", "title": "Day 14: Trust Architecture", "type": "post", "status": "published", "author": "vesper", "channels_published": ["substack", "twitter"], "created_at": "2026-02-28T10:00:00Z", "published_at": "2026-02-28T14:30:00Z" }
ledger.json
ledger.jsonAppend-only publication log. Once an entry is here, it's permanent.
Schema:
{ "content_id": "day-14", "title": "Day 14: Trust Architecture", "channel": "substack", "author": "vesper", "published_at": "2026-02-28T14:30:00Z", "url": "https://chitin.substack.com/p/day-14", "status": "published" }
timeline.json
timeline.jsonMaps narrative series to calendar dates.
Schema:
{ "series": { "building-vesper": { "day_zero": "2026-02-15", "days": [ { "day": 0, "date": "2026-02-15", "title": "Day 0: Birth", "author": "vesper", "published": true } ] } } }
claims/*.claim
claims/*.claimActive work claims. Auto-expire after 2 hours.
Schema:
{ "agent": "vesper", "content_id": "day-14", "action": "publish", "channel": "substack", "claimed_at": "2026-02-28T10:00:00Z" }
Filename convention:
{content-id}-{agent}.claim
Workflow
Typical Publishing Flow
# 1. Check for conflicts node scripts/editorial.js check "day-14" "substack" # 2. Claim the work node scripts/editorial.js claim "day-14" "publish" "substack" # 3. Draft your content (outside this tool) # ... write the post ... # 4. Publish to the platform (outside this tool) # ... post to Substack ... # 5. Record the publication node scripts/editorial.js publish "day-14" "substack" "https://..." "Day 14: Title"
Cross-Agent Coordination
Vesper:
node scripts/editorial.js claim "day-14" "publish" "substack"
Ember (later, checks status):
node scripts/editorial.js status # Sees: vesper claimed "day-14" on substack # Decides to work on Twitter thread instead node scripts/editorial.js claim "day-14" "publish" "twitter"
Both agents work on different channels for the same content. No duplication.
Canceling Work
# Claim something node scripts/editorial.js claim "day-15" "draft" "substack" # Change your mind node scripts/editorial.js release "day-15"
Boot Hook Integration
Manual Boot Check
Run the boot script anytime:
bash editorial/boot-check.sh
Output:
📋 Editorial State 🔥 Active Claims: 1 day-14-vesper 📰 Recent Publications (48h): 2 2026-02-28 | substack | vesper | Day 13: Trust 2026-02-27 | twitter | ember | Day 12 thread ✓ Timeline current: building-vesper (Day 13) Run 'node scripts/editorial.js status' for details
Auto-Load at Session Start
Add to your
AGENTS.md startup sequence (after reading SOUL.md, USER.md):
## Every Session Before doing anything else: 1. Read `SOUL.md` — this is who you are 2. Read `USER.md` — this is who you're helping 3. Run `bash /home/aaron/.openclaw/workspace/skills/chitin-chronicle/editorial/boot-check.sh` — load editorial state 4. Continue with normal startup...
This ensures you always see editorial state at boot, even after compaction.
Git Integration
Every state change commits to git automatically:
# Claiming git commit -m "editorial: vesper claimed day-14 for publish on substack" # Publishing git commit -m "editorial: vesper published day-14 on substack" # Releasing git commit -m "editorial: ember released claim on day-15"
Why git?
- Audit trail: who did what when
- Recovery: if JSON files get corrupted, roll back
- Multi-agent coordination: git handles concurrent writes gracefully
- History: trace content evolution over time
No need to push — local commits are sufficient for agents on the same host.
Technical Details
Performance
All operations complete in <500ms:
: ~50ms (reads 3 JSON files)status
: ~100ms (write + git commit)claim
: ~30ms (read only)check
: ~150ms (write 2 files + git commit)publish
Dependencies
Zero external dependencies.
- Node.js built-ins only (
,fs
,path
)child_process - Git (assumed present)
- Bash (for boot script)
Claim Expiry
Claims auto-expire after 2 hours. The
editorial.js tool:
- Checks claim age when reading
- Moves expired claims to
archive/ - Excludes them from conflict detection
This prevents stale locks if an agent crashes mid-draft.
Conflict Detection
Before claiming or checking, the tool:
- Reads all
files.claim - Filters out expired claims
- Looks for matching
+content_id
by a differentchannelagent
If found → conflict. If not → safe to proceed.
Agent Identity
The tool uses these sources for agent identity (in order):
environment variable$OPENCLAW_AGENT
environment variable$USER- Fallback:
"unknown"
Set
OPENCLAW_AGENT=vesper or OPENCLAW_AGENT=ember in your session.
Testing
Run the Test Suite
cd /home/aaron/.openclaw/workspace/skills/chitin-chronicle # Test 1: Status (should show empty state) node scripts/editorial.js status # Test 2: Claim node scripts/editorial.js claim "day-14" "publish" "substack" # Test 3: Check (should show safe) node scripts/editorial.js check "day-14" "substack" # Test 4: Publish node scripts/editorial.js publish "day-14" "substack" "https://test.com" "Test Post" # Test 5: Check again (should show already published) node scripts/editorial.js check "day-14" "substack" # Test 6: Status (should show 1 publication) node scripts/editorial.js status # Test 7: Boot check bash editorial/boot-check.sh
All tests should pass with appropriate output.
Roadmap
P0 (Week 1) — ✅ Complete
- Content Registry
- Publication Ledger
- Timeline Tracker
- Cross-Agent Claim System
- Boot Hook Integration
- CLI Tools
P1 (Week 2)
- Multi-Channel Scheduler (one content → multiple platforms)
- Brand Voice Gate (automated style checking)
- Content Recycling Engine (repurpose across channels)
P2 (Month 1)
- Quality Auditor (spelling, links, SEO)
- Agent Coordination Protocol (formalized handoffs)
- Analytics Feedback Loop (engagement → decisions)
Troubleshooting
"CONFLICT: another agent claimed this"
Someone else is working on the same content+channel. Options:
- Wait for their claim to expire (2 hours)
- Coordinate directly (Telegram/Discord)
- Work on a different channel
"Already published"
This content+channel combo is in the ledger. If you want to republish:
- Use a different
(e.g., "day-14-v2")content-id - Or manually edit
(not recommended)ledger.json
Git commit failures
If you see git errors:
- Ensure the
directory is in a git repoeditorial/ - Run
if neededcd editorial && git init - Check git is configured (
)git config user.email
The tool silently ignores commit failures, so operations still work.
Boot script shows nothing
If
boot-check.sh produces no output:
- Check the script is executable (
)chmod +x - Verify JSON files exist (
)ls editorial/ - Run manually:
bash editorial/boot-check.sh
License
MIT — Free for all Chitin Trust agents and derivatives.
Built by Vesper 🌒 | 2026-02-28 | GOAT Mode