PLOON is Polysona’s compact, parseable Markdown format for storing persona data — sections, typed tables, key-value pairs, and date-stamped log entries.
Use this file to discover all available pages before exploring further.
PLOON is Polysona’s structured Markdown format for storing all persona data. Every persona file — persona.md, nuance.md, and accounts.md — is written in PLOON. The format is designed to be both human-readable as plain Markdown and machine-parseable as a structured object. There is no separate database: Git is the database, and PLOON files are the records. The server/lib/ploon.ts parser turns any PLOON file into a typed JavaScript object at runtime.
A level-2 heading creates a new scope in the parsed object. All element types that follow (until the next ##) are nested under that section’s key. This allows a single file to contain multiple independent data domains.Parsed result: A nested object key on the root result, e.g. result["core"], result["decide"].
A table header line declares the table name, a sequence number (#N), and column names. Pipe-delimited rows that follow are parsed as an array of objects — one object per row, with keys from the column declaration.
The #N suffix is for versioning or ordering; the parser uses it to identify the header line, not to index the array.
An empty line after the last row signals the end of the table.
Parsed result: An array under scope[tableName], e.g. scope["table"] = [{col1: "value1", col2: "value2", ...}].
Any line matching key: value (outside a table context) is parsed as a scalar field directly on the current scope. An empty line or a new element type resets the table context.Parsed result:scope["key"] = "value" as a string.
Lines beginning with ~ followed by an ISO date are parsed as chronological log entries and appended to a special entries array on the current scope. This is the mechanism behind interview-log. Every Profiler extraction line uses this format.Parsed result:scope.entries.push({ date: "YYYY-MM-DD", content: "..." }).
Date-stamped entries are the only element type that produces an entries array. All other element types produce named keys. The entries array is always append-ordered — the parser preserves insertion sequence.
name: TestUser## core[table#1](layer,value,source)unconscious-self|빠른 실행과 반복을 통해 의미를 만드는 사람|McAdams Life Storyconscious-ideal|단순하고 명확한 것을 추구하는 미니멀리스트|Laddering## interview-log~2026-03-29: McAdams Life Story: Turning point from collapse to rebuilding.~2026-03-29: GAP: conscious-ideal(minimalism) ↔ unconscious-self(over-engineering under stress)
The parser produces:
{ "name": "TestUser", "core": { "table": [ { "layer": "unconscious-self", "value": "빠른 실행과 반복을 통해 의미를 만드는 사람", "source": "McAdams Life Story" }, { "layer": "conscious-ideal", "value": "단순하고 명확한 것을 추구하는 미니멀리스트", "source": "Laddering" } ] }, "interview-log": { "entries": [ { "date": "2026-03-29", "content": "McAdams Life Story: Turning point from collapse to rebuilding." }, { "date": "2026-03-29", "content": "GAP: conscious-ideal(minimalism) ↔ unconscious-self(over-engineering under stress)" } ] }}
Records a single insight attributed to a specific framework. The framework name must match one of the 10 defined frameworks exactly.Real examples from personas/default/persona.md:
~2026-03-29: McAdams Life Story: 삶의 전환점은 첫 번째 프로젝트 실패에서 재건으로의 여정이었다.~2026-03-29: Laddering (+MI+ACT): 속도 -> 기회 포착 -> 무관련성에 대한 두려움 (terminal value: 자율성).~2026-03-29: Clean Language: 반복적인 은유 '돌파구 직전의 엔진 과열'.
Records a detected contradiction between two ego layers. The ↔ symbol is mandatory — it signals a bidirectional tension, not a one-way critique.Real examples from profiler.md:
PLOON files live in version control. Every append to interview-log is a commit. History is the audit trail — no separate logging infrastructure needed.
Append-Only Logs
The interview-log section is strictly append-only. Prior entries are never overwritten, reordered, or merged destructively. Corrections are new dated entries.
Human-Readable First
PLOON is valid Markdown. Any file renders cleanly in a Markdown viewer without special tooling. Machine parseability is layered on top of readability.
Compact by Default
Typed tables replace verbose prose for all machine-readable data. The parser imposes no schema beyond the column names the file declares.