A filesystem-native collaborative Memory Palace for distributed cognition
Project description
OpenLoci
"A finite game is played for the purpose of winning. An infinite game is played for the purpose of continuing the play." — James P. Carse, Finite and Infinite Games (1986)
OpenLoci is a filesystem-native collaborative Memory Palace for distributed cognition.
It generates structured project environments — palaces — from plain text and directory hierarchies, using the Method of Loci as both metaphor and architecture. Every room is a directory. Every artifact is a markdown file. Every character is a card an agent can pick up and speak through.
What It Is
OpenLoci is two things:
A finite game engine — for bounded projects with clear outputs. A blog migration. A job hunt. An investigation. You win when the work is done.
A scaffold for infinite games — via OpenMuse (coming), a spec for describing entire RPG worlds. Mount the world on a filesystem, point an LLM at it, and the game begins.
The chassis is Clue. Nine rooms. Six suspects. A mystery that may or may not have a solution. Skins change the cultural frame. The structure stays.
Quick Start
# Install (PyPI release coming — use dev install for now, see Development below)
pip install openloci
# Generate a new palace (base template)
openloci new my-project
# Generate with a skin
openloci new my-investigation --skin xfiles
openloci new my-startup --skin siliconvalley
# List available skins
openloci skins
# Show room map for a skin
openloci rooms xfiles
# Inspect an existing palace
openloci info ./my-investigation
The Palace Structure
Every generated palace has two top-level directories:
my-palace/
├── The Vestibule/ # Global config — the threshold before the palace
│ ├── README.md # Entry point. Read this first.
│ ├── Characters/ # One file per character/agent
│ ├── Rooms/ # Room descriptions and atmosphere
│ └── Principles/
│ └── master_prompt.md # DM instructions for LLM play
└── The Palace/ # Nine rooms, prefixed by function
├── intake_*/ # Routing, inboxes, intake
├── build_*/ # Active work, deep focus
├── ops_*/ # Infrastructure, DevOps
├── collab_*/ # Pair work, implementation
├── meet_*/ # Decisions, charters
├── think_*/ # Research, memory palace
├── priv_*/ # Private deliberation
├── pitch_*/ # BizDev, external relations
└── retro_*/ # Retrospectives, personal writing
Room Prefixes
Room prefixes (intake_, build_, ops_, ...) — functional labels that survive skin changes. The room does what its prefix says regardless of whether it's called "The Basement Office" or "The Garage."
Characters are named by the character — fox_mulder.md, dana_scully.md, kermit.md. The role is described inside the file, not encoded in the filename.
Available Skins
| Skin | Description |
|---|---|
xfiles |
X-Files over the Clue chassis. Mulder, Scully, Skinner, CSM. |
sv |
Silicon Valley. Pied Piper. Not a bug, a pivot. |
jobhunt |
(coming) Job search as investigation. |
office |
(coming) Neutral physical office — works for any org. |
Community skins welcome. See CONTRIBUTING.
The Stack
| Layer | Technology | Function |
|---|---|---|
| Memory | Filesystem | The palace itself |
| Protocol | YAML Frontmatter | Metadata, rules, routing |
| Templating | Cookiecutter | Palace generation |
| Presentation | Hugo | Rendering, journal, navigation |
| Chronicle | Git | Truth, history, version |
| CLI | Typer + Rich | Pretty interface |
The Shell Game Constraint
Yetzirah (Formation / Narrative) without Assiyah (Action / Artifacts) is fantasy.
A session that leaves no files did not happen. All significant outputs must be grounded in material receipts — notes, evidence, summaries, handoffs. The palace grows through use, not intention.
Development
All dev commands run from the repo root (OpenLoci/). Requires uv.
# 0. Install uv (once, system-wide — not per project)
# Mac/Linux:
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows:
winget install --id=astral-sh.uv
# 1. Clone
git clone https://github.com/openloci/OpenLoci
cd OpenLoci
# 2. Install the openloci CLI globally (run once after cloning)
make install
# After this, 'openloci' is available in any terminal, no activation needed.
# 3. Use it
openloci --help
openloci skins
openloci new my-investigation --skin xfiles
# 4. Install dev dependencies (for running tests and linting)
make install-dev
# 5. Run tests
make test
# 6. See all available make targets
make
uv tool install --editable . (what make install runs) installs the CLI into uv's managed tool store and wires it into your PATH — works on Mac, Linux, and Windows. The --editable flag means code changes are reflected immediately without reinstalling.
Requires Python 3.10+.
Contributing
Skins are the primary contribution surface. A skin is a directory in templates/skins/ containing:
skin.json— room map, character list, metadatacookiecutter.json— template variables{{cookiecutter.palace_name}}/— the generated palace template
See templates/skins/xfiles/ for a reference implementation.
Fan fiction is welcome. The spec is open. The palace is being built.
Related Projects
- OpenMuse (coming) — infinite game engine, RPG world spec
- mempalace — related project, LLM memory via palace metaphor
- The Art of Memory — Frances Yates, 1966
License
GPL-3.0. See LICENSE.
The palace is being built. ∃∞❤️
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file openloci-0.1.0.tar.gz.
File metadata
- Download URL: openloci-0.1.0.tar.gz
- Upload date:
- Size: 360.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c9ec7569e2f36e42e86d2d14af313d665bd07e78042da639e668ef47e868ffb8
|
|
| MD5 |
2cd1ede0389f84c4d4bbde1366fc3fc2
|
|
| BLAKE2b-256 |
bf929075301c834d42e1ff923bf0dbb1af9306b84b3662268c1cc837d5aa09d1
|
File details
Details for the file openloci-0.1.0-py3-none-any.whl.
File metadata
- Download URL: openloci-0.1.0-py3-none-any.whl
- Upload date:
- Size: 21.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0d54eb6cb83436bc032213cebf2264b57e7757d6568a9cf11dbf7eb8724df6ea
|
|
| MD5 |
307c64f05dafcd395de763122a55765b
|
|
| BLAKE2b-256 |
8d8b6d5fdbb075cc758f705d1f5cbff0ffcf4068b392ad963585a7e251158de5
|