1
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Export
2
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
3
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
PlanOpticon provides multiple ways to export knowledge graph data into formats suitable for documentation, note-taking, collaboration, and interchange. All export commands work offline from a `knowledge_graph.db` file -- no API key is needed for template-based exports.
4
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
5
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Overview of export options
6
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
7
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Format | Command | API Key | Description |
8
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|--------|---------|---------|-------------|
9
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Markdown documents | `planopticon export markdown` | No | 7 document types: summary, meeting notes, glossary, and more |
10
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Obsidian vault | `planopticon export obsidian` | No | YAML frontmatter, `[[wiki-links]]`, tag pages, Map of Content |
11
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Notion-compatible | `planopticon export notion` | No | Callout blocks, CSV database for bulk import |
12
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| PlanOpticonExchange JSON | `planopticon export exchange` | No | Canonical interchange format for merging and sharing |
13
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| GitHub wiki | `planopticon wiki generate` | No | Home, Sidebar, entity pages, type indexes |
14
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| GitHub wiki push | `planopticon wiki push` | Git auth | Push generated wiki to a GitHub repo |
15
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
16
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Markdown document generator
17
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
18
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The markdown exporter produces structured documents from knowledge graph data using pure template-based generation. No LLM calls are made -- the output is deterministic and based entirely on the entities and relationships in the graph.
19
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
20
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### CLI usage
21
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
22
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
23
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
planopticon export markdown DB_PATH [OPTIONS]
24
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
25
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
26
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**Arguments:**
27
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
28
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Argument | Description |
29
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|----------|-------------|
30
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `DB_PATH` | Path to a `knowledge_graph.db` file |
31
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
32
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**Options:**
33
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
34
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Option | Short | Default | Description |
35
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|--------|-------|---------|-------------|
36
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `--output` | `-o` | `./export` | Output directory |
37
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `--type` | | `all` | Document types to generate (repeatable). Choices: `summary`, `meeting-notes`, `glossary`, `relationship-map`, `status-report`, `entity-index`, `csv`, `all` |
38
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
39
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**Examples:**
40
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
41
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
42
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Generate all document types
43
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
planopticon export markdown knowledge_graph.db
44
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
45
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Generate only summary and glossary
46
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
planopticon export markdown kg.db -o ./docs --type summary --type glossary
47
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
48
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Generate meeting notes and CSV
49
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
planopticon export markdown kg.db --type meeting-notes --type csv
50
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
51
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
52
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Document types
53
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
54
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#### summary (Executive Summary)
55
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
56
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
A high-level overview of the knowledge graph. Contains:
57
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
58
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Total entity and relationship counts
59
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Entity breakdown by type (table with counts and example names)
60
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Key entities ranked by number of connections (top 10)
61
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Relationship type breakdown with counts
62
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
63
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
This is useful for getting a quick overview of what a knowledge base contains.
64
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
65
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#### meeting-notes (Meeting Notes)
66
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
67
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Formats knowledge graph data as structured meeting notes. Organizes entities into planning-relevant categories:
68
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
69
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- **Discussion Topics**: Entities of type `concept`, `technology`, or `topic` with their descriptions
70
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- **Participants**: Entities of type `person`
71
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- **Decisions & Constraints**: Entities of type `decision` or `constraint`
72
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- **Action Items**: Entities of type `goal`, `feature`, or `milestone`, shown as checkboxes. If an entity has an `assigned_to` or `owned_by` relationship, the owner is shown as `@name`
73
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- **Open Questions / Loose Ends**: Entities with one or fewer relationships (excluding people), indicating topics that may need follow-up
74
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
75
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Includes a generation timestamp.
76
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
77
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#### glossary (Glossary)
78
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
79
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
An alphabetically sorted dictionary of all entities in the knowledge graph. Each entry shows:
80
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
81
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Entity name (bold)
82
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Entity type (italic, in parentheses)
83
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- First description
84
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
85
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Format:
86
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
87
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
88
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**Entity Name** *(type)*
89
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
: Description text here.
90
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
91
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
92
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#### relationship-map (Relationship Map)
93
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
94
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
A comprehensive view of all relationships in the graph, organized by relationship type. Each type gets its own section with a table of source-target pairs.
95
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
96
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Also includes a **Mermaid diagram** of the top 20 most-connected entities, rendered as a `graph LR` flowchart with labeled edges. This diagram can be rendered natively in GitHub, GitLab, Obsidian, and many other Markdown viewers.
97
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
98
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#### status-report (Status Report)
99
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
100
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
A project-oriented status report that highlights planning entities:
101
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
102
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- **Overview**: Counts of entities, relationships, features, milestones, requirements, and risks/constraints
103
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- **Milestones**: Entities of type `milestone` with descriptions
104
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- **Features**: Table of entities of type `feature` with descriptions (truncated to 60 characters)
105
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- **Risks & Constraints**: Entities of type `risk` or `constraint`
106
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
107
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Includes a generation timestamp.
108
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
109
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#### entity-index (Entity Index)
110
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
111
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
A master index of all entities grouped by type. Each type section lists entities alphabetically with their first description. Shows total entity count and number of types.
112
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
113
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
#### csv (CSV Export)
114
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
115
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
A CSV file suitable for spreadsheet import. Columns:
116
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
117
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Column | Description |
118
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|--------|-------------|
119
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Name | Entity name |
120
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Type | Entity type |
121
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Description | First description |
122
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Related To | Semicolon-separated list of entities this entity has outgoing relationships to |
123
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Source | First occurrence source |
124
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
125
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Entity briefs
126
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
127
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
In addition to the selected document types, the `generate_all()` function automatically creates individual entity brief pages in an `entities/` subdirectory. Each brief contains:
128
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
129
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Entity name and type
130
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Summary (all descriptions)
131
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Outgoing relationships (table of target entities and relationship types)
132
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Incoming relationships (table of source entities and relationship types)
133
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Source occurrences with timestamps and context text
134
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
135
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Obsidian vault export
136
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
137
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The Obsidian exporter creates a complete vault structure with YAML frontmatter, `[[wiki-links]]` for entity cross-references, and Obsidian-compatible metadata.
138
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
139
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### CLI usage
140
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
141
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
142
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
planopticon export obsidian DB_PATH [OPTIONS]
143
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
144
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
145
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**Options:**
146
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
147
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Option | Short | Default | Description |
148
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|--------|-------|---------|-------------|
149
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `--output` | `-o` | `./obsidian-vault` | Output vault directory |
150
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
151
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**Example:**
152
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
153
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
154
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
planopticon export obsidian knowledge_graph.db -o ./my-vault
155
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
156
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
157
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Generated structure
158
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
159
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
160
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
my-vault/
161
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
_Index.md # Map of Content (MOC)
162
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Tag - Person.md # One tag page per entity type
163
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Tag - Technology.md
164
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Tag - Concept.md
165
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Alice.md # Individual entity notes
166
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Python.md
167
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Microservices.md
168
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
...
169
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
170
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
171
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Entity notes
172
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
173
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Each entity gets a dedicated note with:
174
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
175
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**YAML frontmatter:**
176
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
177
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```yaml
178
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
179
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
type: technology
180
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
tags:
181
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- technology
182
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
aliases:
183
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Python 3
184
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- CPython
185
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
date: 2026-03-07
186
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
187
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
188
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
189
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The frontmatter includes:
190
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
191
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- `type`: The entity type
192
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- `tags`: Entity type as a tag (for Obsidian tag-based filtering)
193
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- `aliases`: Any known aliases for the entity (if available)
194
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- `date`: The export date
195
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
196
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**Body content:**
197
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
198
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- `# Entity Name` heading
199
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Description paragraphs
200
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- `## Relationships` section with `[[wiki-links]]` to related entities:
201
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
202
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- **uses**: [[FastAPI]]
203
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- **depends_on**: [[PostgreSQL]]
204
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
205
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- `## Referenced by` section with incoming relationships:
206
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
207
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- **implements** from [[Backend Service]]
208
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
209
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
210
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Index note (Map of Content)
211
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
212
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The `_Index.md` file serves as a Map of Content (MOC), listing all entities grouped by type with `[[wiki-links]]`:
213
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
214
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```markdown
215
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
216
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
type: index
217
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
tags:
218
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- MOC
219
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
date: 2026-03-07
220
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
221
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
222
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Index
223
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
224
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**47** entities | **31** relationships
225
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
226
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Concept
227
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
228
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- [[Microservices]]
229
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- [[REST API]]
230
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
231
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Person
232
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
233
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- [[Alice]]
234
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- [[Bob]]
235
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
236
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
237
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Tag pages
238
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
239
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
One tag page is created per entity type (e.g., `Tag - Person.md`, `Tag - Technology.md`). Each page has frontmatter tagging it with the entity type and lists all entities of that type with descriptions.
240
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
241
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Notion-compatible markdown export
242
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
243
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The Notion exporter creates Markdown files with Notion-style callout blocks and a CSV database file for bulk import into Notion.
244
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
245
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### CLI usage
246
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
247
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
248
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
planopticon export notion DB_PATH [OPTIONS]
249
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
250
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
251
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**Options:**
252
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
253
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Option | Short | Default | Description |
254
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|--------|-------|---------|-------------|
255
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `--output` | `-o` | `./notion-export` | Output directory |
256
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
257
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**Example:**
258
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
259
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
260
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
planopticon export notion knowledge_graph.db -o ./notion-export
261
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
262
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
263
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Generated structure
264
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
265
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
266
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
notion-export/
267
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Overview.md # Knowledge graph overview page
268
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
entities_database.csv # CSV for Notion database import
269
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Alice.md # Individual entity pages
270
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Python.md
271
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
...
272
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
273
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
274
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Entity pages
275
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
276
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Each entity page uses Notion-style callout syntax for metadata:
277
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
278
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```markdown
279
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Python
280
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
281
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
> :computer: **Type:** technology
282
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
283
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Description
284
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
285
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
A high-level programming language...
286
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
287
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
> :memo: **Properties**
288
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
> - **version:** 3.11
289
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
> - **paradigm:** multi-paradigm
290
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
291
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Relationships
292
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
293
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Target | Relationship |
294
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|--------|-------------|
295
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| FastAPI | uses |
296
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Django | framework_for |
297
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
298
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Referenced by
299
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
300
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Source | Relationship |
301
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|--------|-------------|
302
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Backend Service | implements |
303
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
304
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
305
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### CSV database
306
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
307
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The `entities_database.csv` file contains all entities in a format suitable for Notion's CSV database import:
308
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
309
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Column | Description |
310
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|--------|-------------|
311
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Name | Entity name |
312
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Type | Entity type |
313
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Description | First two descriptions, semicolon-separated |
314
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Related To | Comma-separated list of outgoing relationship targets |
315
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
316
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Overview page
317
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
318
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The `Overview.md` page provides a summary with entity counts and a grouped listing of all entities by type.
319
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
320
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## GitHub wiki generator
321
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
322
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The wiki generator creates a complete set of GitHub wiki pages from a knowledge graph, including navigation (Home page and Sidebar) and cross-linked entity pages.
323
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
324
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### CLI usage
325
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
326
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**Generate wiki pages locally:**
327
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
328
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
329
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
planopticon wiki generate DB_PATH [OPTIONS]
330
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
331
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
332
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Option | Short | Default | Description |
333
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|--------|-------|---------|-------------|
334
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `--output` | `-o` | `./wiki` | Output directory for wiki pages |
335
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `--title` | | `Knowledge Base` | Wiki title (shown on Home page) |
336
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
337
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**Push wiki pages to GitHub:**
338
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
339
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
340
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
planopticon wiki push WIKI_DIR REPO [OPTIONS]
341
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
342
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
343
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Argument | Description |
344
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|----------|-------------|
345
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `WIKI_DIR` | Path to the directory containing generated wiki `.md` files |
346
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `REPO` | GitHub repository in `owner/repo` format |
347
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
348
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Option | Short | Default | Description |
349
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|--------|-------|---------|-------------|
350
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `--message` | `-m` | `Update wiki` | Git commit message |
351
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
352
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**Examples:**
353
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
354
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
355
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Generate wiki pages
356
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
planopticon wiki generate knowledge_graph.db -o ./wiki
357
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
358
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Generate with a custom title
359
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
planopticon wiki generate kg.db -o ./wiki --title "Project Wiki"
360
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
361
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Push to GitHub
362
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
planopticon wiki push ./wiki ConflictHQ/PlanOpticon
363
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
364
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Push with a custom commit message
365
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
planopticon wiki push ./wiki owner/repo -m "Add entity pages"
366
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
367
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
368
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Generated pages
369
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
370
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The wiki generator creates the following pages:
371
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
372
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Page | Description |
373
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|------|-------------|
374
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `Home.md` | Main wiki page with entity counts, type links, and artifact links |
375
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `_Sidebar.md` | Navigation sidebar with links to Home, entity type indexes, and artifacts |
376
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `{Type}.md` | One index page per entity type with a table of entities and descriptions |
377
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `{Entity}.md` | Individual entity pages with type, descriptions, relationships, and sources |
378
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
379
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Entity pages
380
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
381
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Each entity page contains:
382
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
383
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Entity name as the top heading
384
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- **Type** label
385
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- **Descriptions** section (bullet list)
386
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- **Relationships** table with wiki-style links to target entities
387
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- **Referenced By** table with links to source entities
388
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- **Sources** section listing occurrences with timestamps and context
389
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
390
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
All entity and type names are cross-linked using GitHub wiki-compatible links (`[Name](Sanitized-Name)`).
391
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
392
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Push behavior
393
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
394
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The `wiki push` command:
395
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
396
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1. Clones the existing GitHub wiki repository (`https://github.com/{repo}.wiki.git`).
397
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2. If the wiki does not exist yet, initializes a new Git repository.
398
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
3. Copies all `.md` files from the wiki directory into the clone.
399
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
4. Commits the changes.
400
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
5. Pushes to the remote (tries `master` first, then `main`).
401
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
402
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
This requires Git authentication with push access to the repository. The wiki must be enabled in the GitHub repository settings.
403
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
404
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## PlanOpticonExchange JSON format
405
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
406
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The PlanOpticonExchange is the canonical interchange format for PlanOpticon data. Every command produces it, and every export adapter can consume it. It provides a structured, versioned JSON representation of a complete knowledge graph with project metadata.
407
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
408
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### CLI usage
409
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
410
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
411
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
planopticon export exchange DB_PATH [OPTIONS]
412
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
413
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
414
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Option | Short | Default | Description |
415
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|--------|-------|---------|-------------|
416
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `--output` | `-o` | `./exchange.json` | Output JSON file path |
417
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `--name` | | `Untitled` | Project name for the exchange payload |
418
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `--description` | | (empty) | Project description |
419
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
420
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**Examples:**
421
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
422
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
423
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Basic export
424
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
planopticon export exchange knowledge_graph.db
425
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
426
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# With project metadata
427
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
planopticon export exchange kg.db -o exchange.json --name "My Project" --description "Sprint 3 analysis"
428
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
429
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
430
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Schema
431
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
432
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The exchange format has the following top-level structure:
433
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
434
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```json
435
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
{
436
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"version": "1.0",
437
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"project": {
438
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"name": "My Project",
439
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"description": "Sprint 3 analysis",
440
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"created_at": "2026-03-07T10:30:00.000000",
441
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"updated_at": "2026-03-07T10:30:00.000000",
442
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"tags": ["sprint-3", "backend"]
443
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
},
444
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"entities": [
445
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
{
446
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"name": "Python",
447
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"type": "technology",
448
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"descriptions": ["A high-level programming language"],
449
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"source": "transcript",
450
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"occurrences": [
451
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
{
452
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"source": "meeting.mp4",
453
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"timestamp": "00:05:23",
454
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"text": "We should use Python for the backend"
455
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
456
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
]
457
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
458
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
],
459
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"relationships": [
460
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
{
461
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"source": "Python",
462
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"target": "Backend Service",
463
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"type": "used_by",
464
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"content_source": "transcript:meeting.mp4",
465
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"timestamp": 323.0
466
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
467
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
],
468
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"artifacts": [
469
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
{
470
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"name": "Project Plan",
471
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"content": "# Project Plan\n\n...",
472
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"artifact_type": "project_plan",
473
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"format": "markdown",
474
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"metadata": {}
475
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
476
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
],
477
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"sources": [
478
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
{
479
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"source_id": "abc123",
480
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"source_type": "video",
481
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"title": "Sprint Planning Meeting",
482
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"path": "/recordings/meeting.mp4",
483
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"url": null,
484
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"mime_type": "video/mp4",
485
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"ingested_at": "2026-03-07T10:00:00.000000",
486
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"metadata": {}
487
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
488
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
]
489
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
490
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
491
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
492
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**Top-level fields:**
493
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
494
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Field | Type | Description |
495
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|-------|------|-------------|
496
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `version` | `str` | Schema version (currently `"1.0"`) |
497
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `project` | `ProjectMeta` | Project-level metadata |
498
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `entities` | `List[Entity]` | Knowledge graph entities |
499
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `relationships` | `List[Relationship]` | Knowledge graph relationships |
500
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `artifacts` | `List[ArtifactMeta]` | Generated artifacts (plans, PRDs, etc.) |
501
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `sources` | `List[SourceRecord]` | Content source provenance records |
502
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
503
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Merging exchange files
504
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
505
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The exchange format supports merging, with automatic deduplication:
506
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
507
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Entities are deduplicated by name
508
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Relationships are deduplicated by the tuple `(source, target, type)`
509
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Artifacts are deduplicated by name
510
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- Sources are deduplicated by `source_id`
511
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
512
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
513
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from video_processor.exchange import PlanOpticonExchange
514
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
515
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Load two exchange files
516
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
ex1 = PlanOpticonExchange.from_file("sprint-1.json")
517
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
ex2 = PlanOpticonExchange.from_file("sprint-2.json")
518
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
519
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Merge ex2 into ex1
520
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
ex1.merge(ex2)
521
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
522
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Save the combined result
523
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
ex1.to_file("combined.json")
524
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
525
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
526
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The `project.updated_at` timestamp is updated automatically on merge.
527
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
528
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Python API
529
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
530
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**Create from a knowledge graph:**
531
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
532
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
533
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from video_processor.exchange import PlanOpticonExchange
534
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from video_processor.integrators.knowledge_graph import KnowledgeGraph
535
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
536
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
kg = KnowledgeGraph(db_path="knowledge_graph.db")
537
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
kg_data = kg.to_dict()
538
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
539
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
exchange = PlanOpticonExchange.from_knowledge_graph(
540
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
kg_data,
541
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
project_name="My Project",
542
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
project_description="Analysis of sprint planning meetings",
543
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
tags=["planning", "backend"],
544
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
)
545
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
546
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
547
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**Save and load:**
548
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
549
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
550
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Save to file
551
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
exchange.to_file("exchange.json")
552
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
553
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Load from file
554
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
loaded = PlanOpticonExchange.from_file("exchange.json")
555
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
556
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
557
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
**Get JSON Schema:**
558
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
559
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
560
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
schema = PlanOpticonExchange.json_schema()
561
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
562
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
563
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
This returns the full JSON Schema for validation and documentation purposes.
564
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
565
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Python API for all exporters
566
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
567
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Markdown document generation
568
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
569
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
570
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from pathlib import Path
571
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from video_processor.exporters.markdown import (
572
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
generate_all,
573
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
generate_executive_summary,
574
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
generate_meeting_notes,
575
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
generate_glossary,
576
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
generate_relationship_map,
577
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
generate_status_report,
578
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
generate_entity_index,
579
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
generate_csv_export,
580
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
generate_entity_brief,
581
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
DOCUMENT_TYPES,
582
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
)
583
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from video_processor.integrators.knowledge_graph import KnowledgeGraph
584
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
585
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
kg = KnowledgeGraph(db_path=Path("knowledge_graph.db"))
586
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
kg_data = kg.to_dict()
587
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
588
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Generate all document types at once
589
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
created_files = generate_all(kg_data, Path("./export"))
590
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
591
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Generate specific document types
592
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
created_files = generate_all(
593
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
kg_data,
594
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Path("./export"),
595
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
doc_types=["summary", "glossary", "csv"],
596
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
)
597
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
598
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Generate individual documents (returns markdown string)
599
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
summary = generate_executive_summary(kg_data)
600
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
notes = generate_meeting_notes(kg_data, title="Sprint Planning")
601
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
glossary = generate_glossary(kg_data)
602
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
rel_map = generate_relationship_map(kg_data)
603
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
status = generate_status_report(kg_data, title="Q1 Status")
604
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
index = generate_entity_index(kg_data)
605
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
csv_text = generate_csv_export(kg_data)
606
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
607
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Generate a brief for a single entity
608
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
entity = kg_data["nodes"][0]
609
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
relationships = kg_data["relationships"]
610
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
brief = generate_entity_brief(entity, relationships)
611
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
612
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
613
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Obsidian export
614
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
615
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
616
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from pathlib import Path
617
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from video_processor.agent.skills.notes_export import export_to_obsidian
618
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from video_processor.integrators.knowledge_graph import KnowledgeGraph
619
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
620
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
kg = KnowledgeGraph(db_path=Path("knowledge_graph.db"))
621
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
kg_data = kg.to_dict()
622
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
623
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
created_files = export_to_obsidian(kg_data, Path("./obsidian-vault"))
624
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
print(f"Created {len(created_files)} files")
625
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
626
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
627
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Notion export
628
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
629
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
630
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from pathlib import Path
631
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from video_processor.agent.skills.notes_export import export_to_notion_md
632
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from video_processor.integrators.knowledge_graph import KnowledgeGraph
633
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
634
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
kg = KnowledgeGraph(db_path=Path("knowledge_graph.db"))
635
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
kg_data = kg.to_dict()
636
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
637
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
created_files = export_to_notion_md(kg_data, Path("./notion-export"))
638
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
639
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
640
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Wiki generation
641
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
642
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
643
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from pathlib import Path
644
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from video_processor.agent.skills.wiki_generator import (
645
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
generate_wiki,
646
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
write_wiki,
647
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
push_wiki,
648
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
)
649
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from video_processor.integrators.knowledge_graph import KnowledgeGraph
650
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
651
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
kg = KnowledgeGraph(db_path=Path("knowledge_graph.db"))
652
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
kg_data = kg.to_dict()
653
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
654
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Generate pages as a dict of {filename: content}
655
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
pages = generate_wiki(kg_data, title="Project Wiki")
656
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
657
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Write to disk
658
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
written = write_wiki(pages, Path("./wiki"))
659
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
660
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Push to GitHub (requires git auth)
661
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
success = push_wiki(Path("./wiki"), "owner/repo", message="Update wiki")
662
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
663
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
664
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Companion REPL
665
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
666
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Inside the interactive companion REPL, use the `/export` command:
667
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
668
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
669
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
> /export markdown
670
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Export 'markdown' requested. Use the CLI command:
671
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
planopticon export markdown ./knowledge_graph.db
672
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
673
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
> /export obsidian
674
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Export 'obsidian' requested. Use the CLI command:
675
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
planopticon export obsidian ./knowledge_graph.db
676
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
677
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
678
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The REPL provides guidance on the CLI command to run; actual export is performed via the CLI.
679
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
680
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Common workflows
681
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
682
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Analyze videos and export to Obsidian
683
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
684
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
685
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Analyze meeting recordings
686
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
planopticon analyze meeting-1.mp4 -o ./results
687
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
planopticon analyze meeting-2.mp4 --db-path ./results/knowledge_graph.db
688
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
689
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Ingest supplementary docs
690
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
planopticon ingest ./specs/ --db-path ./results/knowledge_graph.db
691
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
692
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Export to Obsidian vault
693
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
planopticon export obsidian ./results/knowledge_graph.db -o ~/Obsidian/ProjectVault
694
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
695
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Open in Obsidian and explore the graph view
696
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
697
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
698
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Generate project documentation
699
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
700
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
701
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Generate all markdown documents
702
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
planopticon export markdown knowledge_graph.db -o ./docs
703
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
704
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# The output includes:
705
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# docs/summary.md - Executive summary
706
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# docs/meeting-notes.md - Meeting notes format
707
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# docs/glossary.md - Entity glossary
708
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# docs/relationship-map.md - Relationships + Mermaid diagram
709
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# docs/status-report.md - Project status report
710
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# docs/entity-index.md - Master entity index
711
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# docs/csv.csv - Spreadsheet-ready CSV
712
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# docs/entities/ - Individual entity briefs
713
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
714
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
715
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Publish a GitHub wiki
716
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
717
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
718
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Generate wiki pages
719
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
planopticon wiki generate knowledge_graph.db -o ./wiki --title "Project Knowledge Base"
720
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
721
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Review locally, then push
722
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
planopticon wiki push ./wiki ConflictHQ/my-project -m "Initial wiki from meeting analysis"
723
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
724
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
725
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Share data between projects
726
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
727
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
728
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Export from project A
729
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
planopticon export exchange ./project-a/knowledge_graph.db \
730
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
-o project-a.json --name "Project A"
731
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
732
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Export from project B
733
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
planopticon export exchange ./project-b/knowledge_graph.db \
734
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
-o project-b.json --name "Project B"
735
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
736
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Merge in Python
737
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
python -c "
738
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from video_processor.exchange import PlanOpticonExchange
739
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
a = PlanOpticonExchange.from_file('project-a.json')
740
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
b = PlanOpticonExchange.from_file('project-b.json')
741
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
a.merge(b)
742
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
a.to_file('combined.json')
743
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
print(f'Combined: {len(a.entities)} entities, {len(a.relationships)} relationships')
744
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"
745
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
746
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
747
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Export for spreadsheet analysis
748
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
749
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
750
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Generate just the CSV
751
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
planopticon export markdown knowledge_graph.db --type csv -o ./export
752
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
753
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# The file export/csv.csv can be opened in Excel, Google Sheets, etc.
754
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
755
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
756
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Alternatively, the Notion export includes an `entities_database.csv` that can be imported into any spreadsheet tool or Notion database.
757
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!