bama
BAMA: Build Any Mac App. Agent skills to research, clone, design, build, optimize, and test native macOS apps with Swift and SwiftUI.
The Secret Cabinet: Collision Room as an imagined Esotericist Salon
Translation pending
SkillsJavaScript · CSSGitHub @msdixonOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
A local web application for research into the novel. Runs AI-powered salon conversations between historical esotericists, scientists, other thinkers in a room outside of time, for the purposes of uncovering new work/frictions/intersections/questions and general drama, to make online research as sparkly as it is in the meatspace.
(An MVP of a proposal from my DH grad program: what if the archives were "playable"?)
A document is read aloud. The lodge responds.
The founding eight — cast per session like everyone else, not permanently seated (see below):Read the full README ↗A local web application for research into the novel. Runs AI-powered salon conversations between historical esotericists, scientists, other thinkers in a room outside of time, for the purposes of uncovering new work/frictions/intersections/questions and general drama, to make online research as sparkly as it is in the meatspace.
(An MVP of a proposal from my DH grad program: what if the archives were "playable"?)
A document is read aloud. The lodge responds.
The founding eight — cast per session like everyone else, not permanently seated (see below):
| Member | Register |
|---|---|
| Aleister Crowley | Associatively scrambled, solipsistic, seductive through confusion |
| Arthur Edward Waite | Pedantic, architecturally elaborate, spiritually tragic |
| Pamela Colman Smith | Quick, imagistic, visual talker |
| W.B. Yeats | Bardic, aestheticizes everything, has thoughts about some of his Golden Dawn alums |
| Helena Petrovna Blavatsky | Imperious, genuinely funny, synthesis holds even when sources don't |
| Éliphas Lévi | Epigrammatic, Frenchified, always building toward the one clarifying sentence |
| Teresa of Ávila | Went in directly without a system; depth for centuries |
| Ibn Arabi | Radical clarity, few words, holds receipts and deploys once at the right moment |
Every member is cast per session, and the roster has grown from this initial eight. See docs/MANIFEST.md for the current full list.
The room exists outside linear time.
server.js — Express server, and the only application file at the repo root. Proxies all Anthropic API calls server-side. A session is a continuous stream of passages separated by lulls — no preordained round count — each passage building on the last (genuine cross-talk, not parallel independent responses).src/ — Everything server.js requires: the salon engine (pipeline.js), roster/library/citation/graph logic, auth, and session persistence.src/routes/ — One module per route group (convene, session, library, member, export, graph, upload). Each exports a single register<X>Routes(app, deps) and takes its dependencies as an explicit parameter rather than reaching for module-level singletons.src/dayone.js — MCP client that spawns /usr/local/bin/dayone mcp via stdio. Handles journal fetch and transcript export.prompts/lodge-context.md — The shared system prompt foundation: the conceit of the room, the terms of being there, the voice parameters.prompts/members/ — One file per lodge member. Each character is built on top of the lodge context.public/ — Frontend served statically. index.html and lodge.html sit at the top, scripts live in public/js/ (each an IIFE assigning one window.X, loaded as plain <script> tags), styles in public/css/, and portraits/archival images in their own folders.sessions/ — Session JSON persisted locally. Not committed.This app is the main individual project of many collision room efforts - a full breakdown is available at dossier-placard (including the meta-cabinet / Journal Cabin'ét). They share no files, no state, and no characters at this time - duplicate personas (such as Crowley) notwithstanding.
git clone https://github.com/msdixon/secret-cabinet
cd secret-cabinet
npm install
cp .env.example .env # add your Anthropic API key
npm run dev
Open http://localhost:3132.
Requirements:
/usr/local/bin/dayone (for journal integration)Connected to the PreSeedings of the Secret Cabinet journal only.
secret-cabinets, meeting-notes, generated./secret-lodge skillFrom any Claude Code session:
/secret-lodge
Fetches the latest DayOne entry in a specialized journal, and runs the full lodge conversation inline, passage by passage until the room reaches a lull. /secret-lodge 2 uses the second most recent entry. The server must be running.
npm run devhttp://localhost:3132.txtANTHROPIC_API_KEY=your-key-here
PORT=3132
The .env file is never committed. On a fresh clone, create it manually or copy from a secure location.
Running multiple worktrees at once: every worktree shares the same root .env, so they all default to PORT=3132. Either run PORT=3200 npm run dev in a given worktree to pick your own port, or just start it with no override — if 3132 is taken, the server scans upward (3133, 3134, ...) and logs whichever port it actually bound.
The fire is lit. The document waits.