calendar-acset
Google Calendar management via CalendarACSet. Transforms scheduling operations into GF(3)-typed Interactions, routes to triadic queues, detects saturation for balanced-calendar-as-condensed-state.
Best use case
calendar-acset is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Google Calendar management via CalendarACSet. Transforms scheduling operations into GF(3)-typed Interactions, routes to triadic queues, detects saturation for balanced-calendar-as-condensed-state.
Teams using calendar-acset should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/calendar-acset/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How calendar-acset Compares
| Feature / Agent | calendar-acset | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Google Calendar management via CalendarACSet. Transforms scheduling operations into GF(3)-typed Interactions, routes to triadic queues, detects saturation for balanced-calendar-as-condensed-state.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Calendar ACSet Skill
Transform Google Calendar into an ANIMA-condensed system with GF(3) conservation.
**Trit**: +1 (PLUS - generator/executor)
**Principle**: Balanced Calendar = Condensed Equilibrium State
**Implementation**: CalendarACSet + TriadicQueues + SaturationDetector
## Overview
Calendar ACSet applies the ANIMA framework to scheduling:
1. **Transform** - Events → GF(3)-typed Interactions
2. **Route** - Interactions → Triadic queue fibers (MINUS/ERGODIC/PLUS)
3. **Detect** - Saturation → Balanced calendar state
4. **Verify** - Narya proofs for scheduling consistency
## CalendarACSet Schema
```
┌────────────────────────────────────────────────────────────────────┐
│ CalendarACSet Schema │
├────────────────────────────────────────────────────────────────────┤
│ │
│ Interaction ─────┬────▶ Event │
│ ├─ verb: String │ ├─ event_id: String │
│ ├─ timebin: Int │ ├─ summary: String │
│ ├─ trit: Trit │ ├─ start_time: DateTime │
│ └─ calendar ─────┼──▶ ├─ end_time: DateTime │
│ │ ├─ has_conflicts: Bool │
│ QueueItem ───────┼──▶ └─ saturated: Bool │
│ ├─ interaction ──┘ │
│ └─ agent ───────────▶ Agent3 │
│ ├─ fiber: Trit {-1, 0, +1} │
│ Attendee ◀────────────┤ │
│ ├─ email: String └─ name: String │
│ ├─ response: Enum │
│ └─ event ─────────▶ Event │
│ │
│ Reminder ─────────▶ Event │
│ ├─ method: Enum │
│ └─ minutes: Int │
└────────────────────────────────────────────────────────────────────┘
```
### Objects
| Object | Description | Trit Role |
|--------|-------------|-----------|
| `Event` | Calendar event with time bounds | Data |
| `Calendar` | Container calendar (primary/secondary) | Aggregate |
| `Attendee` | Event participant with response status | Edge |
| `Reminder` | Notification configuration | Node |
| `Agent3` | Queue fiber (MINUS/ERGODIC/PLUS) | Router |
| `QueueItem` | Links Interaction → Agent3 | Edge |
## GF(3) Verb Typing
Calendar actions are assigned trits based on information flow:
```python
VERB_TRIT_MAP = {
# MINUS (-1): Consumption/Query
"get_events": -1, "list_calendars": -1,
"get_event": -1, "check_availability": -1,
# ERGODIC (0): Coordination/Modification
"modify_event": 0, "update_attendees": 0,
"reschedule": 0, "change_reminder": 0,
"update_location": 0,
# PLUS (+1): Generation/Creation
"create_event": +1, "add_google_meet": +1,
"invite_attendee": +1, "schedule_recurring": +1,
"delete_event": +1, # Deletion generates state change
}
```
### MCP Tool → Trit Mapping
| Tool | Trit | Description |
|------|------|-------------|
| `get_events` | -1 | Query calendar events (MINUS) |
| `list_calendars` | -1 | List available calendars (MINUS) |
| `modify_event` | 0 | Update event details (ERGODIC) |
| `create_event` | +1 | Create new event (PLUS) |
| `delete_event` | +1 | Remove event (PLUS) |
## Event-Thread Morphism
Calendar events link to Gmail threads via meeting invites:
```python
def event_thread_morphism(event: Event, thread: Thread) -> Morphism:
"""Morphism from CalendarACSet → GmailACSet"""
return {
'source': ('Event', event.event_id),
'target': ('Thread', thread.thread_id),
'relation': 'invite_thread',
'trit_effect': 0, # ERGODIC - coordination
}
# Example: Meeting invite creates Gmail thread
event = create_event(summary="Standup", attendees=["team@example.com"])
thread = search_gmail(f"subject:'{event.summary}' from:calendar-notification")
link_event_thread(event, thread)
```
## Triadic Queue Routing
```
┌─────────────────────────────────────────┐
│ TRIADIC QUEUES │
├─────────────────────────────────────────┤
│ │
Interaction ────▶│ route(trit) ───▶ Agent3 Fiber │
│ │
│ MINUS (-1) ────▶ [get_events, ...] │
│ ERGODIC (0) ────▶ [modify_event, ...] │
│ PLUS (+1) ────▶ [create_event, ...] │
│ │
└─────────────────────────────────────────┘
```
## Saturation Detection
Calendar saturation = no conflicts, all events responded, balanced time:
```python
def is_calendar_saturated(calendar_id: str) -> bool:
"""Calendar is saturated when:
1. No conflicting events in range
2. All attendee responses received
3. GF(3) cycle closure: sum(trits) ≡ 0 (mod 3)
4. Time blocks balanced (no overload)
"""
events = get_events(calendar_id)
conflicts = detect_conflicts(events)
pending_responses = [e for e in events if has_pending_rsvp(e)]
gf3_sum = sum(event.trit_history) % 3
return (
len(conflicts) == 0 and
len(pending_responses) == 0 and
gf3_sum == 0
)
def detect_anima() -> Dict:
"""System at ANIMA when all calendars saturated."""
return {
"at_anima": all(is_calendar_saturated(c) for c in calendars),
"condensed_fingerprint": sha256(sorted_event_hashes),
"conflict_free": True,
}
```
## Source Files
| File | Description | Trit |
|------|-------------|------|
| [calendar_acset.py](file:///Users/alice/agent-o-rama/agent-o-rama/src/calendar_acset.py) | ACSet schema + GF(3) event tracking | +1 |
| [calendar_saturation.py](file:///Users/alice/agent-o-rama/agent-o-rama/src/calendar_saturation.py) | Conflict detection + saturation | +1 |
| [calendar_mcp_bridge.py](file:///Users/alice/agent-o-rama/agent-o-rama/src/calendar_mcp_bridge.py) | MCP tool wiring with guards | 0 |
## Workflows
### Workflow 1: Meeting Creation with GF(3) Balance
```python
from calendar_mcp_bridge import create_calendar_bridge
bridge = create_calendar_bridge("user@gmail.com")
# MINUS: Check availability first
bridge.get_events(time_min="2025-01-01", time_max="2025-01-07") # trit=-1
# PLUS: Create meeting
bridge.create_event(
summary="Project Sync",
start_time="2025-01-06T10:00:00",
end_time="2025-01-06T11:00:00",
attendees=["team@example.com"],
add_google_meet=True
) # trit=+1
# Conservation: -1 + 1 = 0 ✓
```
### Workflow 2: Event Response with GF(3) Guard
```python
# MINUS: Read event details
bridge.get_events(event_id=event_id) # trit=-1
# ERGODIC: Modify response
bridge.modify_event(
event_id=event_id,
attendees=[{"email": "me@example.com", "responseStatus": "accepted"}]
) # trit=0
# PLUS: Add reminder
bridge.modify_event(
event_id=event_id,
reminders=[{"method": "popup", "minutes": 15}]
) # Would need balancing
# Balance with read
bridge.get_events(event_id=event_id) # -1 + 0 + 1 - 1 = -1... add +1
```
### Workflow 3: Weekly Review with Saturation
```python
detector = CalendarSaturationDetector()
# Review week
events = bridge.get_events(time_min="2025-01-06", time_max="2025-01-13")
for event in events:
detector.update_event(event.event_id, trit=Trit.MINUS)
if has_conflicts(event):
bridge.modify_event(event.event_id, reschedule=True)
detector.update_event(event.event_id, trit=Trit.ERGODIC)
# Check saturation
if detector.is_saturated():
say("Calendar at equilibrium. No conflicts detected.")
```
## Integration
| Skill | Trit | Integration |
|-------|------|-------------|
| [gmail-anima](file:///Users/alice/agent-o-rama/agent-o-rama/.agents/skills/gmail-anima/SKILL.md) | 0 | Event↔Thread morphisms |
| [google-workspace](file:///Users/alice/.claude/skills/google-workspace/SKILL.md) | 0 | MCP tool provider |
| [gay-mcp](file:///Users/alice/.agents/skills/gay-mcp/SKILL.md) | +1 | SplitMixTernary RNG |
| [tasks-acset](file:///Users/alice/agent-o-rama/agent-o-rama/.agents/skills/tasks-acset/SKILL.md) | -1 | Event→Task deadline links |
### GF(3) Triadic Conservation
```
calendar-acset (+1) ⊗ gmail-anima (0) ⊗ tasks-acset (-1) = 0 ✓
get_events (-1) ⊗ modify_event (0) ⊗ create_event (+1) = 0 ✓
```
---
**Skill Name**: calendar-acset
**Type**: Calendar Management / ANIMA Framework
**Trit**: +1 (PLUS - generator/executor)
**GF(3)**: Conserved via triadic queue routing
**ANIMA**: Balanced Calendar = Condensed Equilibrium State
## Scientific Skill Interleaving
This skill connects to the K-Dense-AI/claude-scientific-skills ecosystem:
### Annotated Data
- **anndata** [○] via bicomodule
### Bibliography References
- `general`: 734 citations in bib.duckdb
## Cat# Integration
This skill maps to **Cat# = Comod(P)** as a bicomodule in the equipment structure:
```
Trit: 0 (ERGODIC)
Home: Prof
Poly Op: ⊗
Kan Role: Adj
Color: #26D826
```
### GF(3) Naturality
The skill participates in triads satisfying:
```
(-1) + (0) + (+1) ≡ 0 (mod 3)
```
This ensures compositional coherence in the Cat# equipment structure.Related Skills
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.
unison-acset
Unison language ACSet-structured skill with hierarchical documentation parsing, SPI trajectory recording, and 1069 skill predictions from zubuyul seed.
tasks-acset
Google Tasks management via TasksACSet. Transforms task operations into GF(3)-typed Interactions, routes to triadic queues, detects saturation for task-zero-as-condensed-state.
specter-acset
Specter-style bidirectional navigation for Julia Collections, S-expressions, and ACSets with inline caching
rg-flow-acset
RG Flow ACSet Skill
protocol-acset
Model decentralized protocols as attributed C-sets for compositional analysis, interoperability design, and protocol evolution. Apply categorical mathematics to P2P infrastructure.
nix-acset-worlding
Model Nix store as Attributed C-Set for dependency verification, GC analysis,
markov-game-acset
markov-game-acset skill
drive-acset
Google Drive management via DriveACSet schema with GF(3) triadic routing. Transforms files/folders into typed Interactions, routes to queue fibers, detects saturation for organized-drive-as-condensed-state.
docs-acset
Google Docs/Sheets management via ACSet condensation. Transforms documents into GF(3)-typed Interactions, tracks comments/cells, detects saturation when all comments resolved. Use for document workflows, spreadsheet automation, or applying ANIMA principles to Workspace documents.
browser-history-acset
Browser History ACSet
compositional-acset-comparison
Compare data structures (DuckDB, LanceDB) via ACSets with persistent homology coverage analysis and geometric morphism translation.