What the packet carries
- subject — display name, summary, official site, verified profiles, and aliases.
- claims — a cited ledger where each entry is fact, stated_belief, pattern, or speculation, with source references.
- timeline — dated events with kind, organization, and location where known.
- themes — recurring positions with status stated, reported, or inferred.
- works and appearances — authored artifacts and documented appearances with links.
- relations — typed edges to other entities, so indexes compose into a corpus graph.
- questions — open questions the evidence did not answer.
Packets are integer-only I-JSON: no floats, no undefined, no non-JSON types. Every boundary — the CLI, the Next routes, and Convex mutations — parses through the same validator in skills/soulscrape/scripts/person-index.ts.
Three faces of the same packet
Every published index serves the identical packet three ways: a human page at /<username>/<handle>, a Markdown body for reading and pasting, and the raw JSON packet for tools. HTML and Markdown carry the same evidence and caveats as the JSON.
The public read surface
- /api/v1/people — every published profile handle.
- /api/v1/profiles/<username>/<handle> — the full packet for one index.
- /api/v1/index.json — the corpus enumeration.
- /api/v1/graph.json — the relation graph across indexes.
- /api/v1/themes.json and /api/v1/questions.json — cross-index facets.
- /llms.txt — the agent-facing description of the whole surface.
Reads are free without sign-in. Writes go through the device flow at /connect and a signed-in Hraness account.