quirq-state (fixtures)
From Innerpedia, the encyclopedia of you
quirq-state is a project in the fixtures folder of xo-space. Created in September 2026, it was last touched 1 month ago. It holds 36 files across 29 folders, 22 KB in all. Of its folders, six lie past the six levels Innerpedia reads: their files are counted, but they have no pages of their own.
This folder is the sample of what XO Space keeps on one machine, outside every project. tests/test_quirq_state_layout.py holds the code to it: every store writes inside one of these folders, services/storage/layout.py names exactly these folders, and an install from before the state root had folders is moved into them.
Contents
Overview
Sample state root: the folders of /.quirq/
~/.quirq/
├── projects/ one folder per project, named by pid, plus the Space timeline
├── sessions/ the sessions started with no project (they run in the projects root)
├── inbox/ the Inbox; activity/ holds the command log
├── connections/ one folder per connection
├── scheduler/ saved commands and their run history
├── sharing/ shared repositories this machine has already seen
├── usage/ how far usage has been reported to XO
├── settings/ Space-wide choices
├── secrets/ credentials (owner-only)
├── cache/ safe to delete: rebuilt automatically
├── logs/ safe to delete
├── quarantine/ moved aside by a person; delete by hand
└── .locks/ internal
What each folder holds
| Folder | Files | Written by | Delete it and you lose |
|---|---|---|---|
projects/ | <pid>/timeline.jsonl, <pid>/stats.json, <pid>/sessions/, <pid>/github/issues.json, <pid>/workitems/claims.json; timeline.jsonl for the whole Space; offsets.json and <source>-offsets.json, where the watcher stopped reading | the watcher; the todo, workitem and claim APIs | history nothing can rebuild |
sessions/ | sessionslist.d/<shard>.json, one row per session started with no project (it belongs to no projects/<pid>/, so it lives one level up, where no project key can collide with it) | the chat adapters | those sessions vanish from the session list, messages and transcript |
inbox/ | inbox.json; activity/commands.log, activity/archive/commands.<stamp>.log | services/inbox/, utils/commands/ | Inbox items and what you marked done; the record of every command Quirq ran (the archive is every earlier command log) |
connections/ | accounts.json; <toolkit>/config.json, state.json, events.jsonl | services/connections/ | what each connection collected |
scheduler/ | jobs.json, state.json, runs/<id>.jsonl | utils/commands/scheduler.py | saved commands and their run history |
sharing/ | <repo>-<hash>.json, removed/ | project sharing | where sharing stopped reading, and removal decisions |
usage/ | <agent>.json | services/usage_sync.py | how far usage was reported, so it would be sent again |
settings/ | roots.env, runtime.env, onboarding.json | the Setup tab, onboarding | choices you would enter again |
secrets/ | secrets.env, token.json | the Setup tab, the GitHub and Vercel connectors | credentials; uninstall keeps this folder |
cache/ | graph.json, dashboard.json, sessions.json, stats.json, sessions/, heartbeat.json, activity/ | the watcher | nothing: rebuilt automatically |
logs/ | quirq.log, scheduler/<id>.log | install.sh, utils/commands/ | diagnostics only |
quarantine/ | runtime-leftovers/<key>-<UTC time>/: a projects/<key>/ folder a person moved aside from the Quirq view | xo-doctor, only when a person confirms | nothing the doctor could still find; move a folder back to projects/<key> to use it again |
.locks/ | lock sentinels | services/storage/flock.py | nothing |
A cursor lives next to the data it advances, so a reset wipes both or neither:
deleting projects/ also deletes offsets.json, and the watcher starts over
instead of replaying sessions onto surviving totals.
The rules for what goes inside a file
- Project data is keyed by
pid; a folder name is only a label. - Times are ISO-8601 UTC ending in
Z(milliseconds on event lines). - Every event line starts with
tsandtype. - Every data file carries a
schemanumber. Exempt: rebuilt views incache/, and files keyed by name, where an extra key would read as an entry (secrets/token.jsonby provider, session-index shards by session).
Adding a store
- Put its files under the Space UI section and page that shows them,
<section>/<page>/(sections:projects,agents,inbox,setup): the command log, shown with the Space's activity, isinbox/activity/. The older top-level folders keep their names until the whole layout follows the UI. A new data source copiesconnections/<toolkit>/:config.json(what to collect),state.json(where it stopped),events.jsonl(what arrived). - A new subject gets a folder: name it once in
services/storage/layout.pyand add it to this sample. The test fails until both agree. - If existing files move, add a block of
Moves toMOVESinservices/storage/migrations.py. An old copy of a log or other history moves into the archive rather than onto the live file, so it can never find its new home already taken.
Kept outside the state root on purpose
~/.config/composio/: the Composio stores, whereCOMPOSIO_STORE_DIRand the compose file expect them.~/.config/rclone/rclone.confand~/.config/gh/: those tools' own config.BACKUP_PASSWORDin the checkout's.env./tmp/xo-space.{pid,lock,log}: thecowork-api.shdaemon's process files.
The example files
Every folder holds example files for one project, sample-project, with the
same pid (00000000-0000-4000-8000-000000000000) as the .xo/ sample in
tests/fixtures/xo-project/. Values are placeholders: paths start at
/home/you, credentials read replace-with-..., and the agent is
sample_agent. Names the code derives (session-index shards, sharing bookmarks
and removal markers, lock sentinels) are the names it would give.
Three kinds of file have no example, on purpose:
- the UI's views in
cache/(graph.json,dashboard.json,sessions.json), whose shape belongs to their builders; - adapter cursor files in
projects/(<source>-offsets.json), whose shape belongs to each adapter; - rotated segments (
timeline.<stamp>.jsonl,events.<stamp>.jsonl,inbox/activity/archive/commands.<stamp>.log), older copies of the files shown.
tests/test_quirq_state_layout.py checks that the examples follow the four
rules, match their JSON schemas, and read back through the stores that own
them.
Tracking this sample in git
The repository's .gitignore hides two parts of this sample: logs/
directories and token.json files, a guard for real credentials. The examples
here hold none, so add them with
git add -f tests/fixtures/quirq-state/logs tests/fixtures/quirq-state/secrets/token.json.
Structure
Folders
Files
- README.md
Technology
Languages
See also
- quirq (plugins)Install this plugin, then ask Codex “Open XO Space.” Codex installs the local server on first use, starts it and opens the Space UI in…
- xo-projectThis folder is the golden sample of a project's portable metadata: exactly what .xo/ holds right after XO Space first meets a folder,…
- episodic (memory, project_template)What happened, with context.
- procedural (memory, project_template)How to do recurring things.
- fontsFonts are bundled so the interface works offline without sending font requests to a third party.
- pluginClaude Code plugin for Quirq / xo-space, the local control plane for AI coding agents.
- space_ui (xo-space)An explorable map of ~/xo-projects.
- space_ui_previewThe server serves the actual space_ui/ assets from this checkout and supplies deterministic, fictional API data.
External links
- View quirq-state on GitHub, at github.com/
quirq-ai/ xo-space/ tests/ fixtures/ quirq-state