Asi worlding-calendar

Calendar events tied to 26 letter-worlds via org-mode. Links events to beeper messages, voice notes, and Goblins capabilities. Replaces 13K-token Google Calendar MCP with CalDAV + DuckDB interactome.

install
source · Clone the upstream repo
git clone https://github.com/plurigrid/asi
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/plurigrid/asi "$T" && mkdir -p ~/.claude/skills && cp -r "$T/plugins/asi/skills/worlding-calendar" ~/.claude/skills/plurigrid-asi-worlding-calendar && rm -rf "$T"
manifest: plugins/asi/skills/worlding-calendar/SKILL.md
source content

Worlding Calendar

Every calendar event contributes to a world. This skill manages that mapping.

Architecture

                CalDAV (Google)
                     │
   voice notes ──→ org-worlding-calendar.el ←── beeper messages
                     │
              ~/worlds/p/calendar.org
                     │
        ┌────────────┼────────────┐
        ▼            ▼            ▼
   :WORLD: a    :WORLD: b    :WORLD: g ...
   ~/worlds/a/  ~/worlds/b/  ~/worlds/g/

Three Layers

LayerSourceFunction
Org
~/worlds/p/calendar.org
Canonical event store with world tags
DuckDB
~/worlds/beeper_interactome.duckdb
Contact→world inference from messaging history
Emacs
~/.emacs.d/lisp/org-worlding-calendar.el
UI, transient menus, agenda views

World Inference

Events are auto-tagged with

:WORLD:
letter based on content:

"barton bci meeting" → :WORLD: b
"goblins ocapn sync" → :WORLD: g
"vivarium hackathon" → :WORLD: v
"plurigrid standup"  → :WORLD: p

Inference uses regex patterns + DuckDB interactome queries on beeper contact names.

Properties Per Event

* RISING Yoyo hackathon prep
:PROPERTIES:
:WORLD: y
:WORLD_PATH: ~/worlds/y/
:BEEPER_CHAT: !0xZ1HWPM91hEOzuwxzBR:beeper.local
:VOICE_NOTE: ~/Library/Application Support/BeeperTexts/media/...
:OCAPN_REF: ocapn://...
:CREATED: [2026-03-26 Thu]
:END:
<2026-03-26 Thu 14:00>--<2026-03-26 Thu 16:00>

Worlding States (from org-worlding.el)

Events use worlding states instead of TODO/DONE:

StateMeaningCalendar use
SEEDINGSub-thresholdTentative, not confirmed
RISINGGaining amplitudeConfirmed, approaching
RESONANTPhase-lockedHappening NOW
WAVESelf-sustainingRecurring/habit
ERGODICFull explorationOpen-ended session
ACTIVESelf-sustainingOngoing project event
BEATINGInterferenceConflict/double-booked
DRIVENExternally forcedObligation/external
STABLEFixed pointCompleted, archived
FADEDBelow thresholdCancelled/no-showed

Emacs Keybindings

C-c w c e  → Create world-tagged event
C-c w c v  → Link voice note to event
C-c w c b  → Link beeper message to event
C-c w c c  → Set OCapN capability ref
C-c w c C  → Agenda grouped by world
C-c w W    → Worlding dashboard

Querying from Claude Code

List events by world

grep -A5 ":WORLD: b" ~/worlds/p/calendar.org

Query interactome for contact→world mapping

duckdb ~/worlds/beeper_interactome.duckdb -c "
SELECT name, protocol, sent, total
FROM interactome
WHERE lower(name) LIKE '%barton%'
"

Create event from CLI

emacsclient -e '(org-worlding-calendar-new-event "Boris sync" "2026-03-27" "2026-03-27" "b")'

View calendar agenda

emacsclient -e '(org-agenda nil "C")'

CalDAV Sync (Planned)

Google Calendar CalDAV endpoint:

https://apidata.googleusercontent.com/caldav/v2/

Auth via OAuth2 token from

fnox get GOOGLE_CLIENT_SECRET_PATH
. Bidirectional sync:

  • Google → org: pull events, auto-tag with :WORLD:
  • org → Google: push world-tagged events to specific sub-calendars per letter

Replaces Anthropic's

claude_ai_Google_Calendar
MCP (13,566 tokens) with ~0 tokens (local org files + emacsclient calls).

Goblins Integration

Each event source is modeled as a Goblins capability:

;; CalDAV server as actor
(define caldav-cap
  (vat-spawn vat
    (lambda (bcom)
      (methods
        ((list-events start end) ...)
        ((create-event title start end world) ...)))))

;; Beeper chat as capability reference
(define beeper-cap
  (vat-spawn vat
    (lambda (bcom)
      (methods
        ((search query) ...)
        ((send chat-id text) ...)))))

Events store their source capability as

:OCAPN_REF:
— a sturdyref URI that can be resolved at runtime to interact with the originating system.

Files

FilePurpose
~/.emacs.d/lisp/org-worlding-calendar.el
Emacs integration
~/worlds/p/calendar.org
Event store
~/worlds/beeper_interactome.duckdb
Contact intelligence
~/.claude/skills/worlding-calendar/SKILL.md
This skill

Relation to Other Skills

  • beeper — message source, contact→world inference
  • calendar-acset — predecessor (GF(3) theoretical framework)
  • goblins — capability model for event sources
  • emacs / org — UI layer
  • sdf — if events need spatial world coordinates
  • tree-sitter — if parsing structured event descriptions