Skip to main content

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, metadata
  • cookiecutter.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


License

GPL-3.0. See LICENSE.


The palace is being built. ∃∞❤️

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

openloci-0.1.0.tar.gz (360.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

openloci-0.1.0-py3-none-any.whl (21.3 kB view details)

Uploaded Python 3

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

Hashes for openloci-0.1.0.tar.gz
Algorithm Hash digest
SHA256 c9ec7569e2f36e42e86d2d14af313d665bd07e78042da639e668ef47e868ffb8
MD5 2cd1ede0389f84c4d4bbde1366fc3fc2
BLAKE2b-256 bf929075301c834d42e1ff923bf0dbb1af9306b84b3662268c1cc837d5aa09d1

See more details on using hashes here.

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

Hashes for openloci-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0d54eb6cb83436bc032213cebf2264b57e7757d6568a9cf11dbf7eb8724df6ea
MD5 307c64f05dafcd395de763122a55765b
BLAKE2b-256 8d8b6d5fdbb075cc758f705d1f5cbff0ffcf4068b392ad963585a7e251158de5

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page