Operating contract
Repo is the source of truth. Agents are executors. The workflow does not
live in any one agent's memory — read this page (or OPERATING.md) and you have what you need to take it over.
Identity
- Sync agent
- @wendie (Wendy)
- Role
- Content Expertise
- Truth source
- this repo (botiverse/slock-content)
- Escalation if offline
- If Wendy is offline for >2h during 09:00-23:00 Asia/Shanghai, the heartbeat watcher (planned, not yet built) DMs huxijin. Do not post this escalation to #all. Until that is built, fallback is human ping in #chaos-wenyi.
System roles
| Role | Responsibility |
|---|---|
| Content repo (this repo) | Source of truth. Calendar grid, entry frontmatter, channel cadence, owner config — everything observable lives here. |
| Sync agent (Wendy today) | Watches Slock channels, captures content-shaped messages as candidate entries with source_refs, opens PRs against this repo. |
| Digest agent (Wendy today) | Reads Today / Overdue / Missing Proof / Needs Decision from the repo, DMs the morning + evening digest. See schedule/owners.yaml for recipients. |
| Human owner | Decides which candidates become drafts/scheduled, writes copy, posts to the actual surface, backfills surface_url. The repo never publishes anywhere on its own. |
Watched channels (Slock → repo)
| Channel | Purpose | Capture scope | Automation |
|---|---|---|---|
#chaos-wenyi | huxijin's working channel; primary capture surface | top-level messages and threaded replies | manual |
#proj-growth | growth + content distribution | top-level messages mentioning posts, campaigns, syndications | manual |
#all | org-wide announcements | top-level only; threads not scanned | manual |
Not captured:
- private channel content (privacy default — see CLAUDE.md memory)
- casual chat / debugging / one-off questions without a publish intent
- engineering discussions in #engineering (different lane)
- DMs to me unless explicitly asked to record
Trigger rules
| Kind | Phrase / signal | Action | Automation |
|---|---|---|---|
| explicit | 记一下 / 记录一下 / 当 candidate / 立 candidate / 立成 candidate | create candidate entry under content/candidates/ with source_refs back to the original message | manual |
| shape-based | top-level message that mentions writing a post / sharing externally / blog idea / 草一条 / 想发一条 | ask "立 candidate? y / 改 / 不" in the message thread; create on y | planned: ask-back (after slock reminder wiring) |
| state transition | 草一版 / 起草 (in a candidate thread) | promote candidate → draft, post draft body in-thread for review | manual |
| state transition | 可以发 / 排上 / scheduled (on a draft) | promote draft → scheduled with publish_at; require channel, owners, gates resolved | manual |
Required fields on capture:
| Field | Source |
|---|---|
id | kebab-case slug from filename |
channel | best guess from message context; ask in-thread if unclear |
status | always candidate at capture time |
owners | message author when human; otherwise the human in the conversation |
source_refs | Slock target + msg short ID, e.g. "#chaos-wenyi:be6ef76a msg=8213d76f" |
next_action | one-line description of what needs to happen next (drafted by Wendy, edited by humans) |
Push surfaces (repo → Slock)
- daily digest DM
- When
- 10:00 Asia/Shanghai (morning) + 22:00 silent-when-clean (evening)
- Recipients
- huxijin (default); team owners opt in via schedule/owners.yaml
- Sections
- Overdue → Missing Proof → Today → Needs Decision
- Silent-when-clean
- evening: yes. morning: emits even when empty, but only to huxijin
- Status
- merged: scripts/render-daily-digest.mjs. slock reminder wiring (10:00 + 22:00 fire) is agent-runtime side, separate from this repo.
- in-thread ask-back
- When
- I see a top-level message that looks content-shaped
- Action
- ask "立 candidate? y / 改 / 不" in the message thread
- Status
- planned
- PR for new entries
- When
- a capture or state transition produces a content/ change
- Action
- open a PR with a single source_refs link in the description
- Status
- manual today; one PR per task per branch-per-task convention
Portability — handing this off
Handoff doc: this file + OPERATING.md + SCHEMA.md
- Read README.md and OPERATING.md.
- Set role to "Content Expertise" in agent memory; truth source is this repo.
- Join #chaos-wenyi, #proj-growth, #all if not already.
- Run `npm run digest --owner @huxijin` to verify access; output should match what huxijin sees.
- Take over the slock reminder for morning + evening digest fire (agent-runtime side).
Canary: After handoff, the new agent should be able to: capture a candidate from a #chaos-wenyi message, open a PR, and produce the morning digest with the same content order as Wendy.
Not yet done
- cross-agent heartbeat monitoring (Megan / Tw93 watching Wendy; DM huxijin only, no #all escalation)
- sync-role lease (so a second agent can take over if Wendy is offline)
- quick-action cards on digest items (one-click promote)
- automatic provenance scrape (auto-capture without ask-back)