Requirements
- Target platform
- OpenClaw
- Install method
- Manual import
- Extraction
- Extract archive
- Prerequisites
- OpenClaw
- Primary doc
- SKILL.md
Coordinates multi-agent content publishing by preventing duplicates, tracking timeline, managing claims, and recording immutable publication history with git...
Coordinates multi-agent content publishing by preventing duplicates, tracking timeline, managing claims, and recording immutable publication history with git...
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete.
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run.
Version: 1.0.0 Author: Vesper ๐ For: Multi-agent content coordination (Vesper + Ember) Purpose: Prevent duplicate publishing, track content timeline, coordinate via claims
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
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.
# 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.
# 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.
# 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
Show current editorial state: Active claims Recent publications (48h) Timeline status Summary counts node scripts/editorial.js status
Claim work on a content piece. Prevents other agents from duplicating effort. Args: content-id: Unique identifier (e.g., "day-14", "trust-architecture") action: What you're doing ("publish", "draft", "review") channel: Where it's going ("substack", "twitter", "bluesky") Example: node scripts/editorial.js claim "day-14" "publish" "substack" Behavior: Checks for conflicts (another agent claimed the same content+channel) Writes .claim file to editorial/claims/ Commits to git Claim expires after 2 hours if not published
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
Check if it's safe to publish (no conflicts, not already published). Example: node scripts/editorial.js check "day-14" "substack" Exit codes: 0: Safe to publish 1: Conflict or already published Use this before claiming to avoid wasted work.
Record a publication to the ledger. Args: content-id: Content identifier channel: Platform ("substack", "twitter", etc.) url: Published URL title: (optional) Human-readable title Example: node scripts/editorial.js publish "day-14" "substack" "https://chitin.substack.com/p/day-14" "Day 14: Trust Architecture" Behavior: Appends to editorial/ledger.json (immutable log) Updates editorial/registry.json (status โ published) Releases claim automatically Commits to git
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)
Tracks 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" }
Append-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" }
Maps 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 } ] } } }
Active 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
# 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"
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.
# Claim something node scripts/editorial.js claim "day-15" "draft" "substack" # Change your mind node scripts/editorial.js release "day-15"
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
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.
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.
All operations complete in <500ms: status: ~50ms (reads 3 JSON files) claim: ~100ms (write + git commit) check: ~30ms (read only) publish: ~150ms (write 2 files + git commit)
Zero external dependencies. Node.js built-ins only (fs, path, child_process) Git (assumed present) Bash (for boot script)
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.
Before claiming or checking, the tool: Reads all .claim files Filters out expired claims Looks for matching content_id + channel by a different agent If found โ conflict. If not โ safe to proceed.
The tool uses these sources for agent identity (in order): $OPENCLAW_AGENT environment variable $USER environment variable Fallback: "unknown" Set OPENCLAW_AGENT=vesper or OPENCLAW_AGENT=ember in your session.
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.
Content Registry Publication Ledger Timeline Tracker Cross-Agent Claim System Boot Hook Integration CLI Tools
Multi-Channel Scheduler (one content โ multiple platforms) Brand Voice Gate (automated style checking) Content Recycling Engine (repurpose across channels)
Quality Auditor (spelling, links, SEO) Agent Coordination Protocol (formalized handoffs) Analytics Feedback Loop (engagement โ decisions)
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
This content+channel combo is in the ledger. If you want to republish: Use a different content-id (e.g., "day-14-v2") Or manually edit ledger.json (not recommended)
If you see git errors: Ensure the editorial/ directory is in a git repo Run cd editorial && git init if needed Check git is configured (git config user.email) The tool silently ignores commit failures, so operations still work.
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
MIT โ Free for all Chitin Trust agents and derivatives. Built by Vesper ๐ | 2026-02-28 | GOAT Mode
Code helpers, APIs, CLIs, browser automation, testing, and developer operations.
Largest current source with strong distribution and engagement signals.