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/skills/chatgpt-export-acset" ~/.claude/skills/plurigrid-asi-chatgpt-export-acset && rm -rf "$T"
manifest:
skills/chatgpt-export-acset/SKILL.mdsource content
chatgpt-export-acset
Process ChatGPT data exports into ACSets for categorical analysis
Version: 1.0.0 Trit: 0 (ERGODIC - data transformation coordinator) Color: #10B981
Overview
Transform ChatGPT ZIP exports into ACSets (Attributed C-Sets) for:
- Conversation graph analysis
- Message threading reconstruction
- Author/role relationship mapping
- Attachment tracking
Schema
┌─────────────────────────────────────────────────────────────┐ │ SchChatGPTExport │ ├─────────────────────────────────────────────────────────────┤ │ │ │ Conversation ◄──── conversation_of ──── Message │ │ │ │ │ │ │ ├── author_of ──► Author │ │ │ │ │ │ └── parent_msg ─┐│ │ │ ▲ ││ │ │ └──────────┘│ │ │ │ │ └─────────────────────── Attachment ◄─ attachment_of ──┘ │ │ └─────────────────────────────────────────────────────────────┘
ACSet Definition (Julia)
@present SchChatGPTExport(FreeSchema) begin Conversation::Ob Message::Ob Author::Ob Attachment::Ob conversation_of::Hom(Message, Conversation) author_of::Hom(Message, Author) parent_msg::Hom(Message, Message) attachment_of::Hom(Attachment, Message) # Attributes Title::AttrType Content::AttrType Role::AttrType Time::AttrType FileID::AttrType title::Attr(Conversation, Title) conv_id::Attr(Conversation, Title) create_time::Attr(Conversation, Time) msg_id::Attr(Message, Title) content::Attr(Message, Content) status::Attr(Message, Title) name::Attr(Author, Title) role::Attr(Author, Role) file_id::Attr(Attachment, FileID) file_type::Attr(Attachment, Title) end
Python Implementation (py-acset style)
from dataclasses import dataclass, field @dataclass class PyACSet: schema: dict parts: dict = field(default_factory=dict) subparts: dict = field(default_factory=dict) def add_part(self, ob: str, **attrs) -> int: idx = len(self.parts[ob]) self.parts[ob].append(idx) for attr, val in attrs.items(): self.subparts[f"{ob}_{attr}"].append(val) return idx def set_subpart(self, morph: str, src: int, tgt: int): while len(self.subparts[morph]) <= src: self.subparts[morph].append(None) self.subparts[morph][src] = tgt
Usage
Extract agent-o-rama conversations
cd /path/to/extracted/zip python3 extract_agent_o_rama.py
Query with Specter-style navigation
using ACSets # All messages in a conversation messages_in_conv(acset, conv_id) = incident(acset, conv_id, :conversation_of) # Thread reconstruction (follow parent_msg) function thread_path(acset, msg_id) path = [msg_id] while (parent = acset[msg_id, :parent_msg]) !== nothing pushfirst!(path, parent) msg_id = parent end path end # All messages by role by_role(acset, role) = findall(==(role), acset[:role])
Files
| File | Purpose |
|---|---|
| Python extractor for agent-o-rama conversations |
| Exported ACSet data |
| Julia schema definition |
Export Format
{ "parts": { "Conversation": [0, 1, 2, ...], "Message": [0, 1, 2, ...], "Author": [0, 1, 2, 3] }, "subparts": { "conversation_of": [0, 0, 0, 1, 1, ...], "author_of": [0, 1, 0, 1, ...], "parent_msg": [null, 0, 1, null, 3, ...], "Conversation_title": ["Title1", "Title2", ...], "Message_content": ["Hello", "Response", ...] } }
Base directory: file:///Users/bob/.claude/skills/chatgpt-export-acset
End-of-Skill Interface
GF(3) Triads
three-match (-1) ⊗ chatgpt-export-acset (0) ⊗ gay-mcp (+1) = 0 ✓ temporal-coalgebra (-1) ⊗ chatgpt-export-acset (0) ⊗ duckdb-timetravel (+1) = 0 ✓
Related Skills
- Core ACSet theoryacsets-algebraic-databases
- Bidirectional navigationspecter-acset
- Sexp bridgelispsyntax-acset
- Temporal versioningduckdb-timetravel
- Red Planet Labs Rama patternsagent-o-rama
Autopoietic Marginalia
The interaction IS the skill improving itself.
Every use of this skill is an opportunity for worlding:
- MEMORY (-1): Record what was learned
- REMEMBERING (0): Connect patterns to other skills
- WORLDING (+1): Evolve the skill based on use
Add Interaction Exemplars here as the skill is used.