@wipcomputer/wip-ldm-os 0.4.56 → 0.4.58

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,108 @@
1
+ # How Backup Works
2
+
3
+ ## One Script, One Place
4
+
5
+ `~/.ldm/bin/ldm-backup.sh` runs daily at midnight via LDM Dev Tools.app. It backs up everything to `~/.ldm/backups/`, then tars it to iCloud for offsite.
6
+
7
+ ## What Gets Backed Up
8
+
9
+ | Source | Method | What's in it |
10
+ |--------|--------|-------------|
11
+ | `~/.ldm/memory/crystal.db` | sqlite3 .backup | Irreplaceable memory (all agents) |
12
+ | `~/.ldm/agents/` | cp -a | Identity files, journals, daily logs |
13
+ | `~/.ldm/state/` | cp -a | Config, version, registry |
14
+ | `~/.ldm/config.json` | cp | Workspace pointer, org |
15
+ | `~/.openclaw/memory/main.sqlite` | sqlite3 .backup | OC conversations |
16
+ | `~/.openclaw/memory/context-embeddings.sqlite` | sqlite3 .backup | Embeddings |
17
+ | `~/.openclaw/workspace/` | tar | Shared context, daily logs |
18
+ | `~/.openclaw/agents/main/sessions/` | tar | OC session JSONL |
19
+ | `~/.openclaw/openclaw.json` | cp | OC config |
20
+ | `~/.claude/CLAUDE.md` | cp | CC instructions |
21
+ | `~/.claude/settings.json` | cp | CC settings |
22
+ | `~/.claude/projects/` | tar | CC auto-memory + transcripts |
23
+ | `~/wipcomputerinc/` | tar (excludes node_modules, .git/objects, old backups, _trash) | Entire workspace |
24
+
25
+ **NOT backed up:** node_modules/, .git/objects/ (reconstructable), extensions (reinstallable), ~/.claude/cache.
26
+
27
+ ## Backup Structure
28
+
29
+ ```
30
+ ~/.ldm/backups/2026-03-24--09-50-22/
31
+ ldm/
32
+ memory/crystal.db
33
+ agents/
34
+ state/
35
+ config.json
36
+ openclaw/
37
+ memory/main.sqlite
38
+ memory/context-embeddings.sqlite
39
+ workspace.tar
40
+ sessions.tar
41
+ openclaw.json
42
+ claude/
43
+ CLAUDE.md
44
+ settings.json
45
+ projects.tar
46
+ wipcomputerinc.tar
47
+ ```
48
+
49
+ ## iCloud Offsite
50
+
51
+ After local backup, the entire dated folder is compressed and copied to iCloud:
52
+
53
+ ```
54
+ ~/Library/Mobile Documents/com~apple~CloudDocs/wipcomputerinc-icloud/backups/
55
+ wipcomputerinc-lesa-2026-03-24--09-50-22.tar.gz
56
+ ```
57
+
58
+ One file per backup. iCloud syncs it across devices. Rotates to 7 days.
59
+
60
+ ## How to Run
61
+
62
+ ```bash
63
+ ~/.ldm/bin/ldm-backup.sh # run backup now
64
+ ~/.ldm/bin/ldm-backup.sh --dry-run # preview what would be backed up
65
+ ~/.ldm/bin/ldm-backup.sh --keep 14 # keep 14 days instead of 7
66
+ ~/.ldm/bin/ldm-backup.sh --include-secrets # include ~/.ldm/secrets/
67
+ ```
68
+
69
+ ## How to Restore
70
+
71
+ ```bash
72
+ ~/.ldm/bin/ldm-restore.sh # list available backups
73
+ ~/.ldm/bin/ldm-restore.sh 2026-03-24--09-50-22 # restore everything
74
+ ~/.ldm/bin/ldm-restore.sh --only ldm <backup> # restore only crystal.db + agents
75
+ ~/.ldm/bin/ldm-restore.sh --only openclaw <backup> # restore only OC data
76
+ ~/.ldm/bin/ldm-restore.sh --from-icloud <file> # restore from iCloud tar
77
+ ~/.ldm/bin/ldm-restore.sh --dry-run <backup> # preview
78
+ ```
79
+
80
+ After restore: `openclaw gateway restart` then `crystal status` to verify.
81
+
82
+ ## Schedule
83
+
84
+ | What | When | How |
85
+ |------|------|-----|
86
+ | Backup | Midnight | cron -> LDM Dev Tools.app -> ~/.ldm/bin/ldm-backup.sh |
87
+
88
+ One cron entry. One script. One app. Verify is built into the script (exit code + log).
89
+
90
+ ## Config
91
+
92
+ Backup reads from two config files:
93
+ - `~/.ldm/config.json` ... workspace path, org name
94
+ - `~/wipcomputerinc/settings/config.json` ... backup.keep (retention days), paths.icloudBackup
95
+
96
+ ## Logs
97
+
98
+ `~/.ldm/logs/cron.log` (via LDM Dev Tools.app stdout)
99
+
100
+ ---
101
+
102
+ ## Your System
103
+
104
+ **Local backups:** `~/.ldm/backups/`
105
+ **iCloud offsite:** `~/Library/Mobile Documents/com~apple~CloudDocs/wipcomputerinc-icloud/backups/`
106
+ **Schedule:** Midnight via LDM Dev Tools.app
107
+ **Retention:** 7 days local, 7 days iCloud
108
+ **Script:** `~/.ldm/bin/ldm-backup.sh` (deployed by `ldm install`)
@@ -0,0 +1,80 @@
1
+ # How Install Works
2
+
3
+ ## The Install Prompt
4
+
5
+ Open any AI and paste:
6
+ ```
7
+ Read https://wip.computer/install/wip-ldm-os.txt
8
+ ```
9
+
10
+ Your AI reads the spec, explains what LDM OS is, checks if it's already installed, shows what's new, and offers a dry run. Nothing installs until you say "install."
11
+
12
+ ## What Happens During Install
13
+
14
+ `ldm install` does these things in order:
15
+
16
+ 1. **Self-update.** Checks npm for a newer version of itself. Updates first, then re-runs with new code.
17
+ 2. **System scan.** Reads `~/.ldm/extensions/`, `~/.openclaw/extensions/`, Claude Code MCP config, CLI binaries on PATH.
18
+ 3. **Catalog check.** Matches installed extensions against the catalog. Shows what's available, what's behind.
19
+ 4. **npm version check.** Checks every installed extension against npm for newer versions.
20
+ 5. **Update.** Clones from GitHub, builds if needed, deploys to extensions dirs, registers MCP/hooks/skills.
21
+ 6. **Health check.** Verifies CLIs exist, no broken symlinks, no stale configs.
22
+ 7. **Cleanup.** Removes staging dirs, prunes ghost entries from registry.
23
+
24
+ ## Dry Run
25
+
26
+ Always preview first:
27
+ ```bash
28
+ ldm install --dry-run
29
+ ```
30
+
31
+ Shows everything that would change. Data (crystal.db, agent files, secrets) is never touched.
32
+
33
+ ## Installing a Specific Tool
34
+
35
+ ```bash
36
+ ldm install memory-crystal # by catalog name
37
+ ldm install wipcomputer/wip-repos # by GitHub repo
38
+ ldm install @wipcomputer/wip-release # by npm package
39
+ ldm install /path/to/local/repo # from local directory
40
+ ```
41
+
42
+ ## What Gets Installed Where
43
+
44
+ | Interface | Location |
45
+ |-----------|----------|
46
+ | Extensions | `~/.ldm/extensions/<name>/` |
47
+ | CLIs | `/opt/homebrew/bin/<name>` (via npm -g) |
48
+ | MCP Servers | Registered in `~/.claude.json` |
49
+ | Claude Code Hooks | Registered in `~/.claude/settings.json` |
50
+ | OpenClaw Plugins | Deployed to `~/.openclaw/extensions/` |
51
+ | Skills | Deployed to `~/.openclaw/skills/` + `~/.claude/skills/` |
52
+ | Rules | Deployed from `~/.ldm/shared/rules/` to `~/.claude/rules/` |
53
+ | Commands | Deployed from `~/.ldm/shared/commands/` to `~/.claude/commands/` |
54
+ | Agents | Deployed from `~/.ldm/agents/` to `~/.claude/agents/` |
55
+
56
+ ## Rules and Commands Deployment
57
+
58
+ `ldm install` syncs rules, commands, and skills from `~/.ldm/` to each harness:
59
+
60
+ 1. Reads `~/.ldm/shared/rules/` ... copies to `~/.claude/rules/`
61
+ 2. Reads `~/.ldm/agents/cc-mini/rules/` ... copies to `~/.claude/rules/` (agent-specific)
62
+ 3. Reads `~/.ldm/shared/commands/` ... copies to `~/.claude/commands/`
63
+ 4. Reads `~/.ldm/shared/skills/` ... copies to `~/.claude/skills/`
64
+
65
+ For OpenClaw: rules are merged into `workspace/TOOLS.md`. Skills go to `extensions/`.
66
+
67
+ Edit at the `~/.ldm/` level. The harness gets the result.
68
+
69
+ ## Old Versions
70
+
71
+ Never deleted. Moved to `~/.ldm/_trash/` with a timestamp. Recoverable.
72
+
73
+ ---
74
+
75
+ ## Your System
76
+
77
+ **LDM OS:** `{{paths.ldm}}`
78
+ **Extensions:** `{{paths.ldm}}/extensions/`
79
+ **Harnesses detected:** {{harnesses_list}}
80
+ **Install prompt:** https://{{deploy.website}}/install/wip-ldm-os.txt
@@ -0,0 +1,77 @@
1
+ # How Releases Work
2
+
3
+ ## The Pipeline
4
+
5
+ Every release follows these steps. No shortcuts.
6
+
7
+ ### 1. Branch and Code
8
+
9
+ Create a worktree, make your changes, commit:
10
+ ```bash
11
+ ldm worktree add my-prefix/feature-name
12
+ cd _worktrees/repo--my-prefix--feature-name/
13
+ # edit files
14
+ git add <files>
15
+ git commit -m "description"
16
+ ```
17
+
18
+ ### 2. Write Release Notes
19
+
20
+ Create `RELEASE-NOTES-v{version}.md` (dashes, not dots) in the repo root. Commit it on the branch with the code. It gets reviewed in the PR.
21
+
22
+ ### 3. Push and PR
23
+
24
+ ```bash
25
+ git push -u origin my-prefix/feature-name
26
+ gh pr create --title "..." --body "..."
27
+ gh pr merge --merge --delete-branch
28
+ ```
29
+
30
+ Never squash merge. Always `--merge`.
31
+
32
+ ### 4. Release
33
+
34
+ ```bash
35
+ cd /path/to/repo # main working tree, not worktree
36
+ git checkout main && git pull
37
+ wip-release patch # auto-detects the release notes file
38
+ ```
39
+
40
+ `wip-release` handles: version bump, CHANGELOG.md, SKILL.md version sync, npm publish, GitHub release, website skill publish.
41
+
42
+ ### 5. Deploy to Public
43
+
44
+ ```bash
45
+ bash deploy-public.sh /path/to/private-repo org/public-repo
46
+ ```
47
+
48
+ Syncs everything except `ai/` to the public repo. Creates matching release with notes.
49
+
50
+ ### 6. Install (Dogfood)
51
+
52
+ Open a new AI session and paste:
53
+ ```
54
+ Read https://wip.computer/install/wip-ldm-os.txt
55
+ ```
56
+
57
+ The AI walks through: explain, dry run, install. Never `npm install -g` directly.
58
+
59
+ ## Quality Gates
60
+
61
+ `wip-release` enforces before publishing:
62
+ - Release notes must be a file (not a flag)
63
+ - Must reference a GitHub issue
64
+ - Product docs must be updated
65
+ - Technical docs must be updated if source changed
66
+ - No stale merged branches
67
+ - Must run from main working tree (not worktree)
68
+
69
+ ## Three Separate Steps
70
+
71
+ | Step | What happens | What it means |
72
+ |------|-------------|---------------|
73
+ | Merge | PR merged to main | Code lands. Nothing else changes. |
74
+ | Deploy | wip-release + deploy-public | Published to npm + GitHub. Not on your machine yet. |
75
+ | Install | Run the install prompt | Extensions updated on your machine. |
76
+
77
+ After Deploy, stop. Don't copy files. Don't npm install. Dogfood the install prompt.
@@ -0,0 +1,123 @@
1
+ # How Rules and Commands Work
2
+
3
+ ## The Idea
4
+
5
+ Your AI's behavior is defined by rules, commands, and skills. These live in `~/.ldm/` (the source of truth) and get deployed to each harness (Claude Code, OpenClaw, etc.) in their native format.
6
+
7
+ Edit once. Deploy everywhere.
8
+
9
+ ## Rules
10
+
11
+ Rules are instruction files that tell your AI how to behave. Each rule is a markdown file focused on one concern.
12
+
13
+ ```
14
+ ~/.ldm/shared/rules/
15
+ writing-style.md <- no em dashes, use ellipsis, timezone
16
+ git-conventions.md <- never squash, co-authors, branch prefixes
17
+ release-pipeline.md <- merge, deploy, install (3 steps)
18
+ memory-system.md <- crystal, boot sequence, end-of-session
19
+ security.md <- 1password SA token, audit, secrets
20
+ agent-coordination.md <- bridge, workspace boundaries
21
+ tool-rules.md <- never run from repo clones, dogfood
22
+ ```
23
+
24
+ Agent-specific rules override shared rules:
25
+
26
+ ```
27
+ ~/.ldm/agents/cc-mini/rules/
28
+ boot-sequence.md <- CC's specific boot file loading order
29
+ ```
30
+
31
+ ### Path-scoped rules
32
+
33
+ Add YAML frontmatter to scope a rule to specific files:
34
+
35
+ ```yaml
36
+ ---
37
+ paths:
38
+ - "tools/wip-release/**"
39
+ ---
40
+ # Release Pipeline Rules
41
+ Only apply when editing release code...
42
+ ```
43
+
44
+ Rules without a `paths` field load every session.
45
+
46
+ ### Three levels
47
+
48
+ | Level | Location | Scope |
49
+ |-------|----------|-------|
50
+ | Global | `~/.ldm/shared/rules/` | Every session, every agent |
51
+ | Agent | `~/.ldm/agents/<name>/rules/` | Only this agent |
52
+ | Repo | `<repo>/.claude/rules/` | Only when working in this repo |
53
+
54
+ ## Commands
55
+
56
+ Commands are custom slash commands for common workflows. Each markdown file becomes a command.
57
+
58
+ ```
59
+ ~/.ldm/shared/commands/
60
+ release.md <- wraps wip-release
61
+ deploy-public.md <- wraps deploy-public.sh
62
+ health.md <- wraps ldm doctor
63
+ ```
64
+
65
+ Inside a command file, the `!` backtick syntax runs shell commands and injects output:
66
+
67
+ ```markdown
68
+ ---
69
+ description: Release the current repo
70
+ argument-hint: [patch|minor|major]
71
+ ---
72
+ ## Current State
73
+ !`git log --oneline -5`
74
+ !`cat package.json | jq .version`
75
+
76
+ Run wip-release $ARGUMENTS for this repo.
77
+ ```
78
+
79
+ ## Skills
80
+
81
+ Skills are auto-invoked workflows. Claude invokes them on its own when the task matches the description. They live in their own subdirectory with a SKILL.md:
82
+
83
+ ```
84
+ ~/.ldm/shared/skills/
85
+ security-review/
86
+ SKILL.md
87
+ DETAILED_GUIDE.md
88
+ ```
89
+
90
+ Skills bundle supporting files alongside them. The `@DETAILED_GUIDE.md` reference in SKILL.md pulls in the companion file.
91
+
92
+ ## How Deployment Works
93
+
94
+ `ldm install` deploys from `.ldm/` to each harness:
95
+
96
+ | Source | Claude Code target | OpenClaw target |
97
+ |--------|-------------------|-----------------|
98
+ | `~/.ldm/shared/rules/` | `~/.claude/rules/` | `workspace/TOOLS.md` |
99
+ | `~/.ldm/shared/commands/` | `~/.claude/commands/` | Not applicable |
100
+ | `~/.ldm/shared/skills/` | `~/.claude/skills/` | `extensions/` |
101
+ | `~/.ldm/agents/cc-mini/rules/` | `~/.claude/rules/` | N/A |
102
+ | `~/.ldm/agents/oc-lesa-mini/rules/` | N/A | `workspace/TOOLS.md` |
103
+
104
+ Agent-specific rules only deploy to that agent's harness.
105
+
106
+ ## CLAUDE.md stays small
107
+
108
+ With rules/ handling the details, CLAUDE.md stays under 200 lines. It covers identity and structure. Everything else is a rule file.
109
+
110
+ | Before | After |
111
+ |--------|-------|
112
+ | 368-line CLAUDE.md | ~150-line CLAUDE.md + 7 rule files |
113
+ | Everything in one file | Split by concern, path-scoped |
114
+ | Manual updates | `ldm install` deploys from .ldm/ |
115
+
116
+ ---
117
+
118
+ ## Your System
119
+
120
+ **Rules source:** `~/.ldm/shared/rules/` (placeholder ... not yet created)
121
+ **Commands source:** `~/.ldm/shared/commands/` (placeholder ... not yet created)
122
+ **Claude Code deployment:** `~/.claude/rules/` (placeholder ... ldm install doesn't deploy rules yet)
123
+ **OpenClaw deployment:** `~/.openclaw/workspace/TOOLS.md` (manual today)
@@ -0,0 +1,73 @@
1
+ # How Web Skills Work
2
+
3
+ ## The Idea
4
+
5
+ LDM OS skills work in the Claude web app (claude.ai), not just the CLI. Upload them via Customize → Skills. Claude auto-triggers them based on what you ask.
6
+
7
+ No terminal. No MCP. No ~/.claude/. Just skills.
8
+
9
+ ## How to Install
10
+
11
+ 1. Run `ldm export-skills` to package your skills as uploadable folders
12
+ 2. In claude.ai, go to **Customize → Skills**
13
+ 3. Upload each skill folder (e.g. `writing-style/`, `code-review/`)
14
+ 4. Claude sees the skill descriptions and auto-triggers when your request matches
15
+
16
+ Or invoke directly with `/skill-name`.
17
+
18
+ ## Available Skills
19
+
20
+ | Skill | What it does | Needs relay? |
21
+ |-------|-------------|-------------|
22
+ | `writing-style` | Enforces org conventions (no em dashes, ellipsis style, timezone) | No |
23
+ | `code-review` | Reviews with your git, release, and testing conventions | No |
24
+ | `release-planning` | Drafts release notes, checks quality gates | No |
25
+ | `memory-recall` | Searches Crystal for past context and decisions | Yes |
26
+ | `boot-sequence` | Loads identity + context at session start | Yes |
27
+ | `agent-coordination` | Cross-agent task delegation patterns | No |
28
+
29
+ ## Skills that need the relay
30
+
31
+ Some skills need access to Memory Crystal. In the CLI, that's a local MCP tool. In the web app, it's an HTTPS call to the Crystal relay.
32
+
33
+ Skills that need memory include the relay URL in their SKILL.md:
34
+
35
+ ```yaml
36
+ ---
37
+ name: memory-recall
38
+ description: Search past conversations and decisions. Use when the user
39
+ asks "do we have..." or "what did we decide about..."
40
+ ---
41
+ Search the Crystal relay for relevant context:
42
+ - Endpoint: https://relay.wip.computer/v1/search
43
+ - If the relay is unavailable, proceed without memory. Do not retry.
44
+ ```
45
+
46
+ The relay must be deployed (#163) before memory-dependent web skills work.
47
+
48
+ ## How it connects to LDM OS
49
+
50
+ Same source, three targets:
51
+
52
+ ```
53
+ ~/.ldm/shared/skills/ <- you edit here (source of truth)
54
+ |
55
+ +-- ~/.claude/skills/ <- Claude Code CLI (ldm install)
56
+ +-- ~/.openclaw/skills/ <- OpenClaw (ldm install)
57
+ +-- claude.ai <- web app (ldm export-skills → manual upload)
58
+ ```
59
+
60
+ `ldm install` deploys to CLI and OpenClaw automatically. For the web app, `ldm export-skills` creates a zip you upload manually. When the Claude API supports programmatic skill management, this step becomes automatic too.
61
+
62
+ ## The LDM OS Skills Page
63
+
64
+ Published at `wip.computer/skills/`. Lists all available skills with download links. Users who don't use the CLI can grab individual skill folders and upload them directly.
65
+
66
+ ---
67
+
68
+ ## Your System
69
+
70
+ **Skills source:** `~/.ldm/shared/skills/` (placeholder ... not yet created)
71
+ **Export command:** `ldm export-skills` (placeholder ... not yet implemented)
72
+ **Skills page:** wip.computer/skills/ (placeholder ... not yet published)
73
+ **Crystal relay:** Not deployed (#163)
@@ -0,0 +1,77 @@
1
+ # How Worktrees Work
2
+
3
+ ## The Problem
4
+
5
+ You have one repo. Two people (or two AI agents) need to work on it at the same time. If they share one directory, switching branches changes the files for everyone. Work disappears.
6
+
7
+ ## The Solution
8
+
9
+ A git worktree is a second checkout of the same repo. Same history, same remote, different branch, different directory. No cloning. No duplication.
10
+
11
+ ```
12
+ my-repo/ <- main branch (read-only)
13
+ _worktrees/my-repo--fix-bug/ <- your worktree (editable)
14
+ _worktrees/my-repo--new-feature/ <- someone else's worktree
15
+ ```
16
+
17
+ All share the same `.git` database. Commits in any worktree are visible to all. But each has its own branch and files on disk.
18
+
19
+ ## How to Create
20
+
21
+ ```bash
22
+ cd my-repo
23
+ ldm worktree add my-prefix/fix-bug
24
+ ```
25
+
26
+ This creates `_worktrees/my-repo--my-prefix--fix-bug/`.
27
+
28
+ ## How to Work
29
+
30
+ Edit files in the worktree directory. Commit, push, PR, merge as normal:
31
+
32
+ ```bash
33
+ cd _worktrees/my-repo--my-prefix--fix-bug/
34
+ # edit, then:
35
+ git add <files>
36
+ git commit -m "description"
37
+ git push -u origin my-prefix/fix-bug
38
+ gh pr create
39
+ gh pr merge --merge --delete-branch
40
+ ```
41
+
42
+ ## How to Clean Up
43
+
44
+ ```bash
45
+ ldm worktree remove <path> # remove one
46
+ ldm worktree clean # prune stale ones
47
+ ldm worktree list # see all active
48
+ ```
49
+
50
+ Releases automatically prune worktrees whose branches are merged.
51
+
52
+ ## Rules
53
+
54
+ 1. Main working tree stays on main. Read-only. All edits in worktrees.
55
+ 2. One branch per worktree. Don't switch branches inside a worktree.
56
+ 3. Commit and push before closing. Uncommitted work is lost when the worktree is removed.
57
+ 4. Use branch prefixes to prevent collisions between people/agents.
58
+ 5. Releases run from main, not from worktrees.
59
+
60
+ ## Why Not Just Switch Branches?
61
+
62
+ Switching branches changes every file in the directory. If another process (an agent, a build server, an MCP server) is reading those files, it breaks. Worktrees give each branch its own directory. Nothing changes under anyone's feet.
63
+
64
+ ---
65
+
66
+ ## Your System
67
+
68
+ **Worktree location:** `~/wipcomputerinc/repos/_worktrees/`
69
+
70
+ **Branch prefixes:**
71
+ - `cc-mini/` ... Claude Code on Mac mini
72
+ - `cc-air/` ... Claude Code on MacBook Air
73
+ - `lesa-mini/` ... Lesa on Mac mini
74
+
75
+ **Guard:** The branch guard warns if you create a worktree outside `_worktrees/`. Suggests `ldm worktree add` instead.
76
+
77
+ **Auto-cleanup:** `wip-release` prunes merged worktrees from `_worktrees/` after every release.
@@ -0,0 +1,45 @@
1
+ # Local-First Principle
2
+
3
+ ## The Rule
4
+
5
+ Every LDM OS tool must work fully on your machine without calling any external server. No accounts. No API keys. No cloud dependency. One command to install, one command to run.
6
+
7
+ ```
8
+ npm install -g @wipcomputer/wip-ldm-os
9
+ ldm init
10
+ ```
11
+
12
+ That gives you a complete working system. Memory, identity, extensions, backup. Local SQLite. Local files. Nothing phones home.
13
+
14
+ ## The Test
15
+
16
+ Can someone clone the repo, run one command, and have a complete working system without calling `wip.computer` or any other server?
17
+
18
+ Today the answer is yes. It has to stay yes.
19
+
20
+ ## The Relay Exception
21
+
22
+ The Crystal relay (#163) is a hosted MCP server that gives iOS and macOS Claude Code (cloud-hosted) access to Memory Crystal. It exists because Apple's platform doesn't allow local MCP servers on mobile.
23
+
24
+ The relay is:
25
+ - **Self-hostable.** The code ships in the repo. You can run your own.
26
+ - **Optional.** Local Crystal works without it. Desktop never needs it.
27
+ - **Not a gate.** It extends access to platforms that can't run local code. It doesn't lock features behind a cloud service.
28
+
29
+ **Local-first, relay-optional.** The relay exists because of a platform constraint, not because we chose to put the engine in the cloud.
30
+
31
+ ## Why This Matters
32
+
33
+ The industry pattern: call an SDK wrapper "MIT open source" while keeping the engine proprietary behind a cloud API. Users think they're getting open source. They're getting a client for someone else's server.
34
+
35
+ Our position: if you can't run the whole system yourself, it's not open source. It's a marketing label on an SDK. We don't do that.
36
+
37
+ | Pattern | What it means | Our stance |
38
+ |---------|--------------|------------|
39
+ | Open core | Engine is proprietary. Clients are MIT. | Not OSS. |
40
+ | Source available | You can read the code. You can't run it without their infra. | Not OSS. |
41
+ | Local-first | Runs on your machine. Cloud is optional and self-hostable. | This is what we do. |
42
+
43
+ ## For Contributors
44
+
45
+ Before shipping any feature, ask: does this work without a network connection? If the answer is no, either make it work offline or make the server component self-hostable and clearly optional.
@@ -0,0 +1,82 @@
1
+ # System Directories
2
+
3
+ Where everything lives and what manages it.
4
+
5
+ ## The Workspace
6
+
7
+ Your org's home. Where humans and agents work.
8
+
9
+ | Directory | What | Managed by |
10
+ |-----------|------|------------|
11
+ | `~/wipcomputerinc/` | Workspace root | You |
12
+ | `~/wipcomputerinc/settings/` | Config, templates, docs | You + ldm install |
13
+ | `~/wipcomputerinc/team/` | People and agent documents | Each person/agent |
14
+ | `~/wipcomputerinc/repos/` | All code repos | git |
15
+ | `~/wipcomputerinc/repos/_worktrees/` | Active worktrees | ldm worktree |
16
+
17
+ ## The Runtime (source of truth)
18
+
19
+ Where LDM OS runs. Rules, commands, and skills are authored here and deployed to harnesses.
20
+
21
+ | Directory | What | Managed by |
22
+ |-----------|------|------------|
23
+ | `~/.ldm/` | LDM OS home | ldm install, ldm init |
24
+ | `~/.ldm/extensions/` | Installed skills and tools | ldm install |
25
+ | `~/.ldm/agents/` | Agent identity + memory + per-agent rules | Agents + ldm install |
26
+ | `~/.ldm/shared/` | Rules, commands, skills for ALL agents | You + ldm install |
27
+ | `~/.ldm/shared/rules/` | Instruction files deployed to every harness | You (source), ldm install (deploy) |
28
+ | `~/.ldm/shared/commands/` | Slash commands deployed to Claude Code | You (source), ldm install (deploy) |
29
+ | `~/.ldm/shared/skills/` | Auto-invoked workflows | You (source), ldm install (deploy) |
30
+ | `~/.ldm/memory/` | crystal.db (shared memory) | crystal, capture cron |
31
+ | `~/.ldm/logs/` | All logs | cron jobs, LaunchAgents |
32
+ | `~/.ldm/bin/` | Deployed scripts | crystal init |
33
+ | `~/.ldm/hooks/` | Claude Code hooks | ldm install |
34
+ | `~/.ldm/state/` | Runtime state | Tools (watermarks, markers) |
35
+ | `~/.ldm/tmp/` | Install staging | ldm install (cleaned after) |
36
+ | `~/.ldm/backups/` | Local backups + iCloud offsite tars | ldm-backup.sh |
37
+
38
+ ## Harness Directories (deployment targets)
39
+
40
+ `ldm install` deploys from `~/.ldm/` to each harness. Don't edit harness dirs directly.
41
+
42
+ | Directory | What | Deployed from |
43
+ |-----------|------|--------------|
44
+ | `~/.claude/` | Claude Code config | ldm install |
45
+ | `~/.claude/CLAUDE.md` | Global instructions | Generated from .ldm/ + config.json |
46
+ | `~/.claude/rules/` | Instruction files | `~/.ldm/shared/rules/` + agent rules |
47
+ | `~/.claude/commands/` | Slash commands | `~/.ldm/shared/commands/` + agent commands |
48
+ | `~/.claude/skills/` | Auto-invoked workflows | `~/.ldm/extensions/` |
49
+ | `~/.claude/agents/` | Subagent definitions | `~/.ldm/agents/` |
50
+ | `~/.claude/settings.json` | Hooks, permissions | `~/.ldm/hooks/` |
51
+ | `~/.claude/projects/` | Per-project memory | Claude Code (auto-managed) |
52
+ | `~/.openclaw/` | OpenClaw gateway | ldm install |
53
+ | `~/.openclaw/workspace/` | Lesa's workspace (TOOLS.md = rules) | Lesa + ldm install |
54
+ | `~/.openclaw/extensions/` | OpenClaw plugins | `~/.ldm/extensions/` |
55
+ | `~/.openclaw/logs/` | Gateway logs | OpenClaw gateway |
56
+
57
+ ## macOS System
58
+
59
+ | Directory | What | Managed by |
60
+ |-----------|------|------------|
61
+ | `~/Library/LaunchAgents/` | Scheduled tasks | crystal init, install scripts |
62
+ | `/opt/homebrew/bin/` | CLI binaries | npm install -g |
63
+ | `/opt/homebrew/lib/node_modules/` | npm packages | npm |
64
+
65
+ ## Aliases
66
+
67
+ macOS aliases in `settings/system-working-directories/` let you navigate to runtime dirs from Finder:
68
+
69
+ | Alias | Points to |
70
+ |-------|-----------|
71
+ | `.ldm` | `~/.ldm/` |
72
+ | `wipcomputer-icloud` | `~/Documents/wipcomputer--mac-mini-01/` |
73
+
74
+ ---
75
+
76
+ ## Your System
77
+
78
+ **Workspace root:** `{{paths.workspace}}`
79
+ **LDM OS runtime:** `{{paths.ldm}}`
80
+ **OpenClaw:** `{{paths.openclaw}}`
81
+ **iCloud sync:** `{{paths.icloud}}`
82
+ **Agents:** {{agents_list}}