Skin Authoring Guide

A skin is a directory in templates/skins/ that provides a cultural frame for the Clue chassis. The nine rooms stay fixed; the skin supplies names, characters, atmosphere, and defaults.


Directory Structure

templates/skins/
└── my-skin/
    ├── skin.json                          ← skin metadata and room map
    ├── cookiecutter.json                  ← template variables
    └── {{cookiecutter.palace_name}}/
        ├── The Vestibule/
        │   ├── README.md
        │   ├── Characters/
        │   │   ├── ceo_{name}.md
        │   │   ├── cro_{name}.md
        │   │   ├── cto_{name}.md
        │   │   └── ...
        │   └── Rules/
        │       └── master_prompt.md
        └── The Palace/
            ├── intake_{room-name}/
            │   └── README.md
            ├── build_{room-name}/
            │   └── README.md
            └── ... (all nine rooms)

skin.json

Defines the skin’s identity, room names, and character roster.

{
  "skin_id": "my-skin",
  "display_name": "My Skin",
  "description": "Short description of the cultural frame.",
  "chassis": "clue",
  "rooms": {
    "intake":  "The Room Name (intake)",
    "build":   "The Room Name (build)",
    "ops":     "The Room Name (ops)",
    "collab":  "The Room Name (collab)",
    "meet":    "The Room Name (meet)",
    "think":   "The Room Name (think)",
    "priv":    "The Room Name (priv)",
    "pitch":   "The Room Name (pitch)",
    "retro":   "The Room Name (retro)"
  },
  "characters": [
    { "prefix": "ceo", "name": "character_slug", "display": "Character Name", "role": "Role description" },
    { "prefix": "cro", "name": "character_slug", "display": "Character Name", "role": "Role description" },
    { "prefix": "cto", "name": "character_slug", "display": "Character Name", "role": "Role description" }
  ]
}

All nine room keys are required. Characters are flexible — include as many as fit the skin’s world.


cookiecutter.json

Declares the template variables Cookiecutter will prompt for at generation time.

{
  "palace_name": "my-palace",
  "author": "Your Name",
  "skin": "my-skin",
  "year": "2026"
}

palace_name is required — it’s used as the root directory name. Other variables are available in templates via {{ cookiecutter.variable_name }}.


Room READMEs

Each room’s README.md sets the atmospheric context for that room within your skin. It will be read by both human collaborators and LLMs at the start of sessions.

---
title: "The Room Name"
prefix: intake
skin: my-skin
---

# The Room Name

*One-sentence atmospheric framing.*

This room is for [functional description]. In the [skin world], it maps to [narrative location].

## What Belongs Here

- Incoming tasks, messages, requests
- Handoff notes from other sessions
- Routing decisions

## Atmosphere

[A paragraph of evocative description — the feel of the space, what it looks and sounds like in the skin's world.]

Character Files

Each character file defines who the LLM is inhabiting when operating as that character.

---
title: "Character Name"
prefix: cro
role: "Chief Research Officer"
skin: my-skin
---

# Character Name

**Role:** Chief Research Officer

**Personality:** [Two or three sentences. Core traits, voice, worldview.]

**Domain:** [What this character knows and cares about.]

**Speaking style:** [How they communicate — terse? verbose? formal? wry?]

**In this palace:** [Their specific function and relationship to the work.]

master_prompt.md

The Rules/master_prompt.md is loaded at the start of each session. It orients the LLM to:

  • The palace structure and conventions
  • The active skin and its cultural frame
  • Which character is active
  • The session type and expected outputs
  • The Shell Game Constraint (receipts required)

See the xfiles skin’s master_prompt.md for a reference implementation.


Reference Implementation

The xfiles skin is the canonical reference. Study it before building your own:

templates/skins/xfiles/
├── skin.json
├── cookiecutter.json
└── {{cookiecutter.palace_name}}/
    └── The Vestibule/
        ├── Characters/
        │   ├── cro_fox_mulder.md
        │   ├── cto_dana_scully.md
        │   ├── ceo_walter_skinner.md
        │   └── ...
        └── Rules/
            └── master_prompt.md

Submitting a Skin

Open a pull request to github.com/mrenoch/OpenLoci with your skin directory under templates/skins/. Include a brief description in the PR body of the cultural frame and who it’s for.

The spec is open. The palace is being built. ∃∞