get-claudia 1.60.0 → 1.61.0
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.
- package/CHANGELOG.md +37 -0
- package/README.md +25 -6
- package/bin/index.js +75 -5
- package/bin/shell-init.js +127 -0
- package/memory-daemon/claudia_memory/database.py +4 -1
- package/memory-daemon/claudia_memory/services/remember.py +11 -3
- package/package.json +1 -1
- package/template-v2/.claude/hooks/__pycache__/post-tool-capture.cpython-313.pyc +0 -0
- package/template-v2/.claude/hooks/__pycache__/session-health-check.cpython-313.pyc +0 -0
- package/template-v2/.claude/hooks/__pycache__/user-prompt-capture.cpython-313.pyc +0 -0
- package/template-v2/.claude/manifest.json +31 -31
- package/template-v2/.claude/skills/README.md +48 -0
- package/template-v2/.claude/skills/brain/SKILL.md +1 -1
- package/template-v2/.claude/skills/brain-monitor/SKILL.md +1 -1
- package/template-v2/.claude/skills/capability-suggester.md +1 -1
- package/template-v2/.claude/skills/capture-meeting/SKILL.md +1 -1
- package/template-v2/.claude/skills/connector-discovery.md +1 -1
- package/template-v2/.claude/skills/diagnose/SKILL.md +1 -1
- package/template-v2/.claude/skills/draft-reply/SKILL.md +1 -1
- package/template-v2/.claude/skills/file-document/SKILL.md +1 -1
- package/template-v2/.claude/skills/follow-up-draft/SKILL.md +1 -1
- package/template-v2/.claude/skills/growth-check/SKILL.md +1 -1
- package/template-v2/.claude/skills/hire-agent.md +1 -1
- package/template-v2/.claude/skills/inbox-check/SKILL.md +1 -1
- package/template-v2/.claude/skills/ingest-sources/SKILL.md +1 -1
- package/template-v2/.claude/skills/judgment-awareness.md +1 -1
- package/template-v2/.claude/skills/map-connections/SKILL.md +1 -1
- package/template-v2/.claude/skills/meditate/SKILL.md +1 -1
- package/template-v2/.claude/skills/meeting-prep/SKILL.md +1 -1
- package/template-v2/.claude/skills/memory-audit/SKILL.md +1 -1
- package/template-v2/.claude/skills/memory-health/SKILL.md +1 -1
- package/template-v2/.claude/skills/morning-brief/SKILL.md +1 -1
- package/template-v2/.claude/skills/new-person/SKILL.md +1 -1
- package/template-v2/.claude/skills/pattern-recognizer.md +1 -1
- package/template-v2/.claude/skills/relationship-tracker.md +1 -1
- package/template-v2/.claude/skills/risk-surfacer.md +1 -1
- package/template-v2/.claude/skills/summarize-doc/SKILL.md +1 -1
- package/template-v2/.claude/skills/weekly-review/SKILL.md +1 -1
- package/template-v2/.claude/skills/what-am-i-missing/SKILL.md +1 -1
- package/template-v2/CLAUDE.md +22 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,43 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to Claudia will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## 1.61.0 (2026-05-22)
|
|
6
|
+
|
|
7
|
+
### Launch from anywhere, upgrade from anywhere
|
|
8
|
+
|
|
9
|
+
This release adds a `claudia` shell command (and `update-claudia`) so you no longer have to remember where you installed Claudia or `cd` there before launching or upgrading. New installs and upgrades wire the helper into `~/.zshrc` and `~/.bashrc` automatically. After upgrading once via `npx get-claudia .`, future upgrades are just `update-claudia` from any directory.
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- **`claudia` shell command for launching from anywhere.** New installs (and upgrades) get a `claudia` shell function written to `~/.claudia/shell-init.sh` and sourced from `~/.zshrc` and `~/.bashrc`. From any directory, `claudia` cd's to your install folder and launches `claude`. All `claude` flags pass through (`claudia --resume`, `claudia -c "morning brief"`, etc). The folder path is stored in `~/.claudia/claudia-home`; edit it if you move your install. The installer is idempotent: re-running won't double-add to your rc files. The shell function is a smart router that delegates known npm-CLI subcommands (`setup`, `system-health`, `google`, `doctor`) back to the `claudia` binary when it's on PATH, so existing workflows keep working.
|
|
14
|
+
- **`claudia yolo` subcommand.** Sugar for `claude --dangerously-skip-permissions` (cd's first, then passes through any additional flags). Same routing logic — `claudia yolo --resume` works.
|
|
15
|
+
- **`update-claudia` command (also `claudia update`).** Runs `npx get-claudia <your-install-path>` from any directory by reading the stored path from `~/.claudia/claudia-home`. No more "wait, where did I install Claudia?" before upgrading. Both forms are aliases for the same logic.
|
|
16
|
+
- **`~/.claudia/claudia-home`.** Single-line file with the absolute path of the user's Claudia install. Written by the installer; read by the shell function. Move your install? Edit this file.
|
|
17
|
+
|
|
18
|
+
### Fixed
|
|
19
|
+
|
|
20
|
+
- **ASCII greeting logo: row 1 (hair top) realigned over face** (in `template-v2/CLAUDE.md`). The top hair row was indented 6 leading spaces while the face row below it starts at column 0, so the hair appeared shifted ~4 characters to the right. Now sits correctly above the face. Existing installs see the fix on next upgrade.
|
|
21
|
+
- **Installer no longer treats flag-looking arguments as install targets.** Previously, `npx get-claudia --help` (or any unrecognized `--flag`) was interpreted as the install path and would create a `./--help/` directory with templates copied into it. Now: `--help`/`-h` prints a proper usage message and exits, `--version`/`-V` prints the version, and any other leading-dash argument prints `Error: unrecognized argument: <flag>` and exits 1 without touching the filesystem.
|
|
22
|
+
|
|
23
|
+
## 1.60.1 (2026-05-22)
|
|
24
|
+
|
|
25
|
+
### Two bug fixes from the fixing-phase pass
|
|
26
|
+
|
|
27
|
+
Both shipped together as a patch release. No new features; no surface-area change. Upgrade with `npx get-claudia .` from any existing install.
|
|
28
|
+
|
|
29
|
+
### Fixed
|
|
30
|
+
|
|
31
|
+
- **Memory daemon: WAL checkpoint no longer blocks concurrent readers** (#66, thanks @tilthnco). `database.py` now uses `PRAGMA wal_checkpoint(PASSIVE)` on every connection instead of `TRUNCATE`. `TRUNCATE` takes an exclusive lock, which deadlocks against concurrent WAL readers like Litestream and causes the MCP server to time out after 30s on startup. `PASSIVE` yields cleanly if a reader holds the WAL lock. Compaction behavior is unchanged; only the locking mode is relaxed. Crash safety is unaffected since WAL mode (not checkpointing) is the durability mechanism.
|
|
32
|
+
- **Memory daemon: organisations from session summaries no longer misclassified as `person`** (Proposal #51, sub-tranche B2). Two stale defaults were bypassing the smart type-inference path: `RememberService.end_session()` hard-defaulted missing `type` fields to the literal string `"person"` (short-circuiting inference inside `remember_entity()`), and `remember_entity()` itself was still calling the legacy local `_infer_entity_type()` (returns `"person"` fallback, no `"AI"`-suffix rule) instead of the smart inferencer at `entities.infer_entity_type` (returns `"concept"` fallback, handles `"Markup AI"`, `".ai"`, etc.). Both call sites now route through the smart inferencer, matching `_find_or_create_entity()` which already did. The literal repro from 2026-05-13 (Matt Blumberg, Markup AI) now classifies Markup AI as `organization`. See `docs/proposals/08-smarter-memory-writes.md` for the original proposal; `tests/test_entity_resolution.py::TestEndSessionInfersEntityType` pins the fix (3 new tests, 25/25 in the file pass).
|
|
33
|
+
|
|
34
|
+
### Changed
|
|
35
|
+
|
|
36
|
+
- 27 skill descriptions in `template-v2/.claude/skills/` now end with a "See also: …" pointer to adjacent skills (from #61). Affected clusters: outbound message composition, memory introspection, memory visualization, reflective cadences, meeting lifecycle, risks and blind spots, people and relationships, patterns and judgment, inbound document processing. Skill names, trigger phrases, and behaviors are unchanged; descriptions are extended additively to nudge skill routing toward the canonical pick when a request straddles two skills.
|
|
37
|
+
|
|
38
|
+
### Documentation
|
|
39
|
+
|
|
40
|
+
- Expanded `template-v2/.claude/skills/README.md` with four new sections (from #61): "Writing a good skill description", "The see also convention", "Disambiguation notes", and "Proactive vs contextual: when to make a skill auto-fire". Each section grounds itself in existing-catalog exemplars.
|
|
41
|
+
|
|
5
42
|
## 1.60.0 (2026-05-15)
|
|
6
43
|
|
|
7
44
|
### Three new skills inspired by Karpathy's recent work, adapted to Claudia's principles
|
package/README.md
CHANGED
|
@@ -79,6 +79,20 @@ You make a promise in a meeting. Nobody tracks it. You promise a deliverable on
|
|
|
79
79
|
<p>End a session with <code>/meditate</code> and she extracts what she learned: your preferences, patterns, and judgment calls. Next session, she's sharper.</p>
|
|
80
80
|
</td>
|
|
81
81
|
</tr>
|
|
82
|
+
<tr>
|
|
83
|
+
<td width="33%" align="center">
|
|
84
|
+
<h3>📚 Writes Her Own Wiki</h3>
|
|
85
|
+
<p>Every active person, project, and organization gets a synthesized page in your Obsidian vault. Each fact cites its source memory. Contradictions get flagged at the top. <em>New in v1.60</em>.</p>
|
|
86
|
+
</td>
|
|
87
|
+
<td width="33%" align="center">
|
|
88
|
+
<h3>🔁 Iterates Until It's Right</h3>
|
|
89
|
+
<p>Ask her to <code>/auto-research</code> a draft and she runs a bounded loop against a rubric you name. Keeps the iterations she likes, reverts the ones she doesn't. Your original file never moves until you say so. <em>New in v1.60</em>.</p>
|
|
90
|
+
</td>
|
|
91
|
+
<td width="33%" align="center">
|
|
92
|
+
<h3>🧭 Routes the Right Skill</h3>
|
|
93
|
+
<p>Type <code>/skills</code> to see what's available. Ambiguous request? She names the options and proceeds with the canonical one, so you never get the wrong tool by accident. <em>New in v1.60</em>.</p>
|
|
94
|
+
</td>
|
|
95
|
+
</tr>
|
|
82
96
|
</table>
|
|
83
97
|
|
|
84
98
|
---
|
|
@@ -103,7 +117,7 @@ You make a promise in a meeting. Nobody tracks it. You promise a deliverable on
|
|
|
103
117
|
</td>
|
|
104
118
|
<td width="50%" align="center">
|
|
105
119
|
<h3>📓 Vault</h3>
|
|
106
|
-
<p>Memory
|
|
120
|
+
<p>Memory projects to an Obsidian vault. New installs default to the <strong>wiki layout</strong>: synthesized topic pages per active entity, each fact citing its source memory, contradictions flagged at the top. Existing PARA users keep their layout untouched. Plain markdown you own forever.</p>
|
|
107
121
|
</td>
|
|
108
122
|
</tr>
|
|
109
123
|
</table>
|
|
@@ -264,9 +278,12 @@ Claudia detects your work style and generates structure that fits:
|
|
|
264
278
|
| `/meditate` | End-of-session reflection: extracts learnings, judgment, patterns |
|
|
265
279
|
| `/deep-context [topic]` | Full-context deep analysis |
|
|
266
280
|
| `/memory-audit` | See everything Claudia knows, with source chains |
|
|
281
|
+
| `/wiki` | Write or update a synthesized topic page in your vault |
|
|
282
|
+
| `/auto-research` | Iterate a draft against a rubric until it scores well |
|
|
283
|
+
| `/skills` | Discover all available skills, grouped by purpose |
|
|
267
284
|
|
|
268
285
|
<details>
|
|
269
|
-
<summary><strong>All commands (
|
|
286
|
+
<summary><strong>All commands (45 skills)</strong></summary>
|
|
270
287
|
|
|
271
288
|
| Command | What It Does |
|
|
272
289
|
|---------|--------------|
|
|
@@ -322,17 +339,19 @@ This generates a one-click URL to enable all required Google APIs and walks you
|
|
|
322
339
|
|
|
323
340
|
### Obsidian Vault
|
|
324
341
|
|
|
325
|
-
Memory
|
|
342
|
+
Memory projects to an Obsidian vault at `~/.claudia/vault/`. New installs default to the **wiki layout**: synthesized topic pages at `~/.claudia/vault/Wiki/`, one per active person, project, or organization. Each page is written by Claudia from your raw memories, cites every load-bearing claim with `[mem:NNN]`, and flags contradictions at the top. Obsidian's graph view connects them via `[[wikilinks]]`.
|
|
343
|
+
|
|
344
|
+
Existing installs from v1.59 and earlier keep their PARA-organized vault (`Active/`, `Relationships/`, `Reference/`, `Archive/`) untouched. SQLite remains the source of truth; the vault is a projection you can browse, search, and read.
|
|
326
345
|
|
|
327
346
|
---
|
|
328
347
|
|
|
329
348
|
## How It Works
|
|
330
349
|
|
|
331
|
-
**
|
|
350
|
+
**45 skills · 33 MCP tools · 500+ tests**
|
|
332
351
|
|
|
333
352
|
Claudia has two layers:
|
|
334
353
|
|
|
335
|
-
**Template layer** (markdown) defines who she is.
|
|
354
|
+
**Template layer** (markdown) defines who she is. 45 skills, rules, and identity files that Claude reads on startup. Skills range from proactive behaviors (commitment detection, pattern recognition, judgment awareness) to user-invocable workflows (`/morning-brief`, `/research`, `/meditate`, `/wiki`, `/auto-research`). Workspace templates let you spin up new projects with `/new-workspace [name]`. A built-in `skill-router` skill helps you discover what's available and disambiguates when a request straddles two skills.
|
|
336
355
|
|
|
337
356
|
**Memory system** (Python) defines what she remembers. Two daemon modes share the same SQLite database:
|
|
338
357
|
|
|
@@ -393,7 +412,7 @@ For full architecture diagrams, see [ARCHITECTURE.md](ARCHITECTURE.md).
|
|
|
393
412
|
|
|
394
413
|
- **Fully local.** Memory, embeddings, cognitive tools run on your machine. No external APIs for storage.
|
|
395
414
|
- **No external actions without approval.** Every email, calendar event, external action requires your explicit "yes."
|
|
396
|
-
- **Your data in two formats.** SQLite database (`~/.claudia/memory/`) for fast semantic search, plus
|
|
415
|
+
- **Your data in two formats.** SQLite database (`~/.claudia/memory/`) for fast semantic search, plus an Obsidian vault for reading and graph navigation. Two independent copies you own forever.
|
|
397
416
|
- **Delete anything, anytime.** Full control over your data. No lock-in, no cloud dependency.
|
|
398
417
|
|
|
399
418
|
---
|
package/bin/index.js
CHANGED
|
@@ -14,6 +14,7 @@ import {
|
|
|
14
14
|
resolveBakPath,
|
|
15
15
|
applyResolution,
|
|
16
16
|
} from './manifest-lib.js';
|
|
17
|
+
import { writeShellInit, appendShellRC } from './shell-init.js';
|
|
17
18
|
|
|
18
19
|
const __filename = fileURLToPath(import.meta.url);
|
|
19
20
|
const __dirname = dirname(__filename);
|
|
@@ -63,6 +64,30 @@ function getVersion() {
|
|
|
63
64
|
}
|
|
64
65
|
}
|
|
65
66
|
|
|
67
|
+
function printUsage(version) {
|
|
68
|
+
console.log(`get-claudia v${version}
|
|
69
|
+
|
|
70
|
+
Usage:
|
|
71
|
+
npx get-claudia [target-dir] Install or upgrade Claudia (default: ./claudia)
|
|
72
|
+
npx get-claudia . Install or upgrade in the current directory
|
|
73
|
+
npx get-claudia upgrade Same as \`.\` (in-place upgrade)
|
|
74
|
+
npx get-claudia google Set up Google Workspace integration
|
|
75
|
+
|
|
76
|
+
Flags:
|
|
77
|
+
--skip-memory Skip memory daemon setup
|
|
78
|
+
--dev Dev mode (load daemon from local source)
|
|
79
|
+
--yes, -y Non-interactive (auto-confirm prompts)
|
|
80
|
+
--help, -h Show this help and exit
|
|
81
|
+
--version, -V Print version and exit
|
|
82
|
+
|
|
83
|
+
After install, from any directory:
|
|
84
|
+
claudia cd to your install folder, launch claude
|
|
85
|
+
claudia yolo Launch claude --dangerously-skip-permissions
|
|
86
|
+
claudia update Upgrade Claudia (no need to cd first)
|
|
87
|
+
update-claudia Alias for \`claudia update\`
|
|
88
|
+
`);
|
|
89
|
+
}
|
|
90
|
+
|
|
66
91
|
// Simple y/n prompt. Returns true if user confirms (or non-TTY / --yes flag).
|
|
67
92
|
function confirm(question) {
|
|
68
93
|
if (!isTTY || process.argv.includes('--yes') || process.argv.includes('-y')) {
|
|
@@ -284,6 +309,7 @@ const STEPS = [
|
|
|
284
309
|
{ id: 'memory', label: 'Memory System' },
|
|
285
310
|
{ id: 'daemon', label: 'Memory Daemon' },
|
|
286
311
|
{ id: 'mcp', label: 'MCP Config' },
|
|
312
|
+
{ id: 'shell', label: 'Shell Helper' },
|
|
287
313
|
{ id: 'vault', label: 'Obsidian Vault' },
|
|
288
314
|
{ id: 'health', label: 'Health Check' },
|
|
289
315
|
];
|
|
@@ -737,6 +763,16 @@ async function checkForNewerVersion(currentVersion) {
|
|
|
737
763
|
async function main() {
|
|
738
764
|
const version = getVersion();
|
|
739
765
|
|
|
766
|
+
// Handle --help / --version BEFORE banner, update-check, or any I/O.
|
|
767
|
+
if (process.argv.includes('--help') || process.argv.includes('-h')) {
|
|
768
|
+
printUsage(version);
|
|
769
|
+
process.exit(0);
|
|
770
|
+
}
|
|
771
|
+
if (process.argv.includes('--version') || process.argv.includes('-V')) {
|
|
772
|
+
console.log(version);
|
|
773
|
+
process.exit(0);
|
|
774
|
+
}
|
|
775
|
+
|
|
740
776
|
// Self-update trampoline: re-exec with latest if we're stale
|
|
741
777
|
const newerVersion = await checkForNewerVersion(version);
|
|
742
778
|
if (newerVersion) {
|
|
@@ -773,6 +809,16 @@ async function main() {
|
|
|
773
809
|
const filteredArgs = args.filter(a => a !== '--no-memory' && a !== '--skip-memory' && a !== '--dev' && a !== '--yes' && a !== '-y');
|
|
774
810
|
const arg = filteredArgs[0];
|
|
775
811
|
|
|
812
|
+
// Reject flag-looking arguments early so they don't get used as install paths
|
|
813
|
+
// (e.g. `npx get-claudia --foo` would otherwise create a ./--foo/ directory).
|
|
814
|
+
// --help and --version are handled at the top of main(); anything else with a
|
|
815
|
+
// leading dash is a typo or unsupported flag.
|
|
816
|
+
if (typeof arg === 'string' && arg.startsWith('-')) {
|
|
817
|
+
console.error(`${colors.red}Error:${colors.reset} unrecognized argument: ${arg}`);
|
|
818
|
+
console.error(`Run ${colors.cyan}npx get-claudia --help${colors.reset} for usage.`);
|
|
819
|
+
process.exit(1);
|
|
820
|
+
}
|
|
821
|
+
|
|
776
822
|
// ─── Subcommand: get-claudia google ─────────────────────────────────────
|
|
777
823
|
if (arg === 'google') {
|
|
778
824
|
await runGoogleSetup();
|
|
@@ -1517,13 +1563,35 @@ async function main() {
|
|
|
1517
1563
|
|
|
1518
1564
|
renderer.stopSpinner();
|
|
1519
1565
|
|
|
1520
|
-
//
|
|
1521
|
-
|
|
1522
|
-
renderer
|
|
1523
|
-
|
|
1524
|
-
|
|
1566
|
+
// Shell helper step, then vault, then completion
|
|
1567
|
+
runShellStep(renderer, targetDir, () => {
|
|
1568
|
+
runVaultStep(renderer, () => {
|
|
1569
|
+
renderer.render();
|
|
1570
|
+
showDbScanResults(dbScan);
|
|
1571
|
+
showCompletion(targetDir, isCurrentDir, memoryOk, rootCause, isUpgrade);
|
|
1572
|
+
});
|
|
1525
1573
|
});
|
|
1526
1574
|
|
|
1575
|
+
// ── Shell helper step ──
|
|
1576
|
+
|
|
1577
|
+
function runShellStep(renderer, targetPath, callback) {
|
|
1578
|
+
renderer.update('shell', 'active', 'installing claudia command...');
|
|
1579
|
+
try {
|
|
1580
|
+
writeShellInit(homedir(), targetPath);
|
|
1581
|
+
const rc = appendShellRC(homedir());
|
|
1582
|
+
if (rc.skipped) {
|
|
1583
|
+
renderer.update('shell', 'done', 'files written (Windows: source manually)');
|
|
1584
|
+
} else if (rc.added.length > 0) {
|
|
1585
|
+
renderer.update('shell', 'done', `added to ${rc.added.length} rc file(s)`);
|
|
1586
|
+
} else {
|
|
1587
|
+
renderer.update('shell', 'done', 'already installed');
|
|
1588
|
+
}
|
|
1589
|
+
} catch (err) {
|
|
1590
|
+
renderer.update('shell', 'warn', `${err.message}`);
|
|
1591
|
+
}
|
|
1592
|
+
callback();
|
|
1593
|
+
}
|
|
1594
|
+
|
|
1527
1595
|
// ── Vault step ──
|
|
1528
1596
|
|
|
1529
1597
|
function runVaultStep(renderer, callback) {
|
|
@@ -1651,6 +1719,7 @@ async function main() {
|
|
|
1651
1719
|
console.log('');
|
|
1652
1720
|
console.log(` ${colors.cyan}${launchCmd}${colors.reset}`);
|
|
1653
1721
|
console.log('');
|
|
1722
|
+
console.log(` ${colors.dim}Tip: open a new terminal and just type ${colors.reset}${colors.cyan}claudia${colors.reset}${colors.dim} from anywhere.${colors.reset}`);
|
|
1654
1723
|
console.log(` ${colors.dim}What's new: /morning-brief · /inbox-check · /feedback${colors.reset}`);
|
|
1655
1724
|
} else {
|
|
1656
1725
|
// Fresh install: build anticipation for the onboarding
|
|
@@ -1661,6 +1730,7 @@ async function main() {
|
|
|
1661
1730
|
}
|
|
1662
1731
|
console.log(` ${colors.cyan}claude${colors.reset}`);
|
|
1663
1732
|
console.log('');
|
|
1733
|
+
console.log(` ${colors.dim}Or open a new terminal and type ${colors.reset}${colors.cyan}claudia${colors.reset}${colors.dim} from anywhere.${colors.reset}`);
|
|
1664
1734
|
console.log(` ${colors.dim}She'll introduce herself and learn how you work.${colors.reset}`);
|
|
1665
1735
|
console.log(` ${colors.dim}Try: ${colors.reset}${colors.cyan}"Say hi"${colors.reset} ${colors.dim}·${colors.reset} ${colors.cyan}/morning-brief${colors.reset} ${colors.dim}·${colors.reset} ${colors.cyan}"Who do I know?"${colors.reset}`);
|
|
1666
1736
|
}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
// Shell helper installer for `claudia` command.
|
|
2
|
+
//
|
|
3
|
+
// Writes two files into ~/.claudia/:
|
|
4
|
+
// - claudia-home : single-line file with the absolute path to the user's
|
|
5
|
+
// Claudia install directory (where `claude` should launch).
|
|
6
|
+
// - shell-init.sh : defines the `claudia` shell function (and `claudia yolo`).
|
|
7
|
+
//
|
|
8
|
+
// Then idempotently appends a one-line source to ~/.zshrc and ~/.bashrc so the
|
|
9
|
+
// function is available in every new shell. The marker comment is used to detect
|
|
10
|
+
// existing installs and avoid double-adding.
|
|
11
|
+
//
|
|
12
|
+
// On Windows we only write the files; rc-file plumbing is a no-op since neither
|
|
13
|
+
// zsh nor bash is standard there. The function content is still useful for users
|
|
14
|
+
// running WSL or Git Bash who source it manually.
|
|
15
|
+
|
|
16
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
|
|
17
|
+
import { join } from 'path';
|
|
18
|
+
|
|
19
|
+
export const SHELL_INIT_MARKER = '# Claudia shell helpers';
|
|
20
|
+
|
|
21
|
+
const RC_SNIPPET = `
|
|
22
|
+
${SHELL_INIT_MARKER} (\`claudia\` from anywhere, \`claudia yolo\` skips permissions)
|
|
23
|
+
[ -f "$HOME/.claudia/shell-init.sh" ] && source "$HOME/.claudia/shell-init.sh"
|
|
24
|
+
`;
|
|
25
|
+
|
|
26
|
+
export const SHELL_INIT_CONTENT = `# Claudia shell helpers — sourced from your shell rc.
|
|
27
|
+
# Edit ~/.claudia/claudia-home to change which folder \`claudia\` launches from.
|
|
28
|
+
|
|
29
|
+
_claudia_home() {
|
|
30
|
+
local home_file="$HOME/.claudia/claudia-home"
|
|
31
|
+
if [ ! -f "$home_file" ]; then
|
|
32
|
+
echo "Claudia home not configured. Run: npx get-claudia ." >&2
|
|
33
|
+
return 1
|
|
34
|
+
fi
|
|
35
|
+
local dir
|
|
36
|
+
dir="$(cat "$home_file")"
|
|
37
|
+
if [ ! -d "$dir" ]; then
|
|
38
|
+
echo "Claudia home directory not found: $dir" >&2
|
|
39
|
+
echo "Fix by editing $home_file" >&2
|
|
40
|
+
return 1
|
|
41
|
+
fi
|
|
42
|
+
printf '%s' "$dir"
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
_claudia_cd() {
|
|
46
|
+
local dir
|
|
47
|
+
dir="$(_claudia_home)" || return 1
|
|
48
|
+
cd "$dir"
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
update-claudia() {
|
|
52
|
+
local dir
|
|
53
|
+
dir="$(_claudia_home)" || return 1
|
|
54
|
+
echo "Updating Claudia at $dir ..."
|
|
55
|
+
npx get-claudia "$dir"
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
claudia() {
|
|
59
|
+
case "$1" in
|
|
60
|
+
yolo)
|
|
61
|
+
shift
|
|
62
|
+
_claudia_cd && claude --dangerously-skip-permissions "$@"
|
|
63
|
+
;;
|
|
64
|
+
update)
|
|
65
|
+
shift
|
|
66
|
+
update-claudia "$@"
|
|
67
|
+
;;
|
|
68
|
+
setup|system-health|google|doctor|--version|-V|help|--help|-h)
|
|
69
|
+
# Pass known npm-CLI subcommands through to the binary (if installed).
|
|
70
|
+
command claudia "$@"
|
|
71
|
+
;;
|
|
72
|
+
*)
|
|
73
|
+
_claudia_cd && claude "$@"
|
|
74
|
+
;;
|
|
75
|
+
esac
|
|
76
|
+
}
|
|
77
|
+
`;
|
|
78
|
+
|
|
79
|
+
// Write ~/.claudia/claudia-home and ~/.claudia/shell-init.sh.
|
|
80
|
+
// Returns { homeFile, initFile } absolute paths for caller logging.
|
|
81
|
+
export function writeShellInit(homeDir, claudiaTargetDir) {
|
|
82
|
+
const claudiaConfigDir = join(homeDir, '.claudia');
|
|
83
|
+
mkdirSync(claudiaConfigDir, { recursive: true });
|
|
84
|
+
|
|
85
|
+
const homeFile = join(claudiaConfigDir, 'claudia-home');
|
|
86
|
+
const initFile = join(claudiaConfigDir, 'shell-init.sh');
|
|
87
|
+
|
|
88
|
+
writeFileSync(homeFile, `${claudiaTargetDir}\n`);
|
|
89
|
+
writeFileSync(initFile, SHELL_INIT_CONTENT);
|
|
90
|
+
|
|
91
|
+
return { homeFile, initFile };
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Idempotently append the source line to a single rc file. Creates the file if
|
|
95
|
+
// it doesn't exist (the source line is harmless on its own). Returns one of:
|
|
96
|
+
// 'added' - the source line was just appended
|
|
97
|
+
// 'unchanged' - marker already present, nothing written
|
|
98
|
+
function appendToRc(rcPath) {
|
|
99
|
+
let existing = '';
|
|
100
|
+
if (existsSync(rcPath)) {
|
|
101
|
+
existing = readFileSync(rcPath, 'utf8');
|
|
102
|
+
if (existing.includes(SHELL_INIT_MARKER)) {
|
|
103
|
+
return 'unchanged';
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// Ensure separation from prior content
|
|
107
|
+
const sep = existing.length === 0 || existing.endsWith('\n') ? '' : '\n';
|
|
108
|
+
writeFileSync(rcPath, existing + sep + RC_SNIPPET);
|
|
109
|
+
return 'added';
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// Append to the user's zsh and bash rc files. Skips on Windows.
|
|
113
|
+
// Returns { added: [...], unchanged: [...] } of rc paths.
|
|
114
|
+
export function appendShellRC(homeDir, platform = process.platform) {
|
|
115
|
+
const result = { added: [], unchanged: [], skipped: false };
|
|
116
|
+
if (platform === 'win32') {
|
|
117
|
+
result.skipped = true;
|
|
118
|
+
return result;
|
|
119
|
+
}
|
|
120
|
+
const rcFiles = [join(homeDir, '.zshrc'), join(homeDir, '.bashrc')];
|
|
121
|
+
for (const rc of rcFiles) {
|
|
122
|
+
const status = appendToRc(rc);
|
|
123
|
+
if (status === 'added') result.added.push(rc);
|
|
124
|
+
else result.unchanged.push(rc);
|
|
125
|
+
}
|
|
126
|
+
return result;
|
|
127
|
+
}
|
|
@@ -116,7 +116,10 @@ class Database:
|
|
|
116
116
|
conn.execute("PRAGMA synchronous = NORMAL")
|
|
117
117
|
conn.execute("PRAGMA foreign_keys = ON")
|
|
118
118
|
# Recover any uncommitted WAL writes from a previous crashed daemon
|
|
119
|
-
|
|
119
|
+
# Use PASSIVE (not TRUNCATE) so concurrent readers (e.g. Litestream)
|
|
120
|
+
# don't cause a 30-second timeout. TRUNCATE blocks all readers;
|
|
121
|
+
# PASSIVE yields cleanly if a reader holds the WAL lock.
|
|
122
|
+
conn.execute("PRAGMA wal_checkpoint(PASSIVE)")
|
|
120
123
|
|
|
121
124
|
# Load sqlite-vec for vector search
|
|
122
125
|
if not load_sqlite_vec(conn):
|
|
@@ -436,9 +436,14 @@ class RememberService:
|
|
|
436
436
|
Returns:
|
|
437
437
|
Entity ID
|
|
438
438
|
"""
|
|
439
|
-
# Infer type from name keywords when no type is specified
|
|
439
|
+
# Infer type from name keywords when no type is specified.
|
|
440
|
+
# Use the smart inferencer (entities.infer_entity_type) so callers like
|
|
441
|
+
# end_session() benefit from the "AI"-suffix rule and concept fallback,
|
|
442
|
+
# matching _find_or_create_entity at line ~1871. The local legacy
|
|
443
|
+
# _infer_entity_type is preserved for direct unit-test imports.
|
|
444
|
+
# See Proposal #51 / docs/proposals/08-smarter-memory-writes.md.
|
|
440
445
|
if not entity_type or not entity_type.strip():
|
|
441
|
-
entity_type =
|
|
446
|
+
entity_type = _smart_infer_entity_type(name)
|
|
442
447
|
|
|
443
448
|
# Run deterministic guards
|
|
444
449
|
existing_names = [
|
|
@@ -1440,9 +1445,12 @@ class RememberService:
|
|
|
1440
1445
|
# 5. Store entities
|
|
1441
1446
|
if entities:
|
|
1442
1447
|
for entity in entities:
|
|
1448
|
+
# Default to empty string (not "person") so remember_entity()
|
|
1449
|
+
# routes through _infer_entity_type() when type is missing.
|
|
1450
|
+
# See Proposal #51 / test_entity_resolution.py for context.
|
|
1443
1451
|
entity_id = self.remember_entity(
|
|
1444
1452
|
name=entity["name"],
|
|
1445
|
-
entity_type=entity.get("type", "
|
|
1453
|
+
entity_type=entity.get("type", ""),
|
|
1446
1454
|
description=entity.get("description"),
|
|
1447
1455
|
aliases=entity.get("aliases"),
|
|
1448
1456
|
)
|
package/package.json
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "1.
|
|
3
|
-
"generated": "2026-05-
|
|
2
|
+
"version": "1.61.0",
|
|
3
|
+
"generated": "2026-05-23T02:25:12.290Z",
|
|
4
4
|
"algorithm": "sha256",
|
|
5
5
|
"files": {
|
|
6
6
|
".claude/rules/claudia-principles.md": "939e9720421628e7f2e4c8dfbaa4aeb9c1e18e8c6a5379cd6b772a6835b812e5",
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
".claude/rules/memory-commitment.md": "49eee330b56c6ca0b5f1e01550931c4eef3dcb3249e3d0e2380de3e8dbfe31a8",
|
|
10
10
|
".claude/rules/shell-compatibility.md": "565977bc04e269b3ce7d8a7963173df4f44bb9634692ea76abb1b64f6a67513e",
|
|
11
11
|
".claude/rules/trust-north-star.md": "0188b17c26b791cf597ce975bb75d40f543aa3d6b84b7edb1309b78530b3d43f",
|
|
12
|
-
".claude/skills/README.md": "
|
|
12
|
+
".claude/skills/README.md": "22311215317c61dcb67975af02bdd1d7164578713ff9faf6fbed8aec14256bcd",
|
|
13
13
|
".claude/skills/agent-dispatcher.md": "b48fc5283f0a88d1ebbc692b30b6c326fef012d4168dcf721a94e3c954b76b90",
|
|
14
14
|
".claude/skills/archetypes/_base-structure.md": "c0d8df77c07aa48cd9ba9c5ba3eddb533fcea790c7f98440fa3d31405fd5c75d",
|
|
15
15
|
".claude/skills/archetypes/consultant.md": "1e0ccbf89115f92a1fa0c86b48edcce22668c4bb828ba4268376fcd6b5c05680",
|
|
@@ -20,62 +20,62 @@
|
|
|
20
20
|
".claude/skills/auto-research/SKILL.md": "1a54e5d82f4e87c78a54e1331ff2d32aaff12c2712058e21173aa900a57b01c3",
|
|
21
21
|
".claude/skills/auto-research/references/program-template.md": "850457de96bde5ad65d24f1018509da94dd31fec9ec45c15087031f470a28dbc",
|
|
22
22
|
".claude/skills/auto-research/references/safety-rules.md": "ae036270e86949ed0f9bface582f6038276adafd3f40a29aa733698111a26683",
|
|
23
|
-
".claude/skills/brain/SKILL.md": "
|
|
24
|
-
".claude/skills/brain-monitor/SKILL.md": "
|
|
25
|
-
".claude/skills/capability-suggester.md": "
|
|
26
|
-
".claude/skills/capture-meeting/SKILL.md": "
|
|
23
|
+
".claude/skills/brain/SKILL.md": "b87dd93c85923c676292bea67f7a0580ee71eea2bea05426ea6eda951a140d5c",
|
|
24
|
+
".claude/skills/brain-monitor/SKILL.md": "6e9ce1e6e40bc612a5126d84d743c1fd7ebc596f60575873533479fdcae5b608",
|
|
25
|
+
".claude/skills/capability-suggester.md": "06235c8ab062d356cf9b6c18c7aa44ea667e7694983a46e8ae0a9fe32e734944",
|
|
26
|
+
".claude/skills/capture-meeting/SKILL.md": "815e7587fcd925323c379a6c57e458b3484d034338c1237378641d142c126175",
|
|
27
27
|
".claude/skills/capture-meeting/evals/basic.yaml": "47c4eb1479aeda8067bc877cebfe8688c9b2bb3ce09297e42375cdf558f412e3",
|
|
28
28
|
".claude/skills/client-health/SKILL.md": "fed639e6f2c4433cab6a6b4b59776985492dda16be3bd1e843c3e94175936655",
|
|
29
29
|
".claude/skills/commitment-detector.md": "66f9e919349d1880eb12636cec6f583be1b3fbe3b28f6180ec732d3c284af3b6",
|
|
30
|
-
".claude/skills/connector-discovery.md": "
|
|
30
|
+
".claude/skills/connector-discovery.md": "a6659f6ed8a182f968cdc9b4a342de9015d5579859310b77ff230ce73397cdc5",
|
|
31
31
|
".claude/skills/databases/SKILL.md": "b2ce4ae30aafa2487dabd7befd067976f0092fcef31dea7601e1683ceca0ef50",
|
|
32
32
|
".claude/skills/deep-context/SKILL.md": "2d21f93e33191c226f46909a66d21c64c84df2ac261082adef78cd68093d7b07",
|
|
33
|
-
".claude/skills/diagnose/SKILL.md": "
|
|
33
|
+
".claude/skills/diagnose/SKILL.md": "2658936671b5752b2e033177b6e57e783afcabf09556e199d88fc48f313295ad",
|
|
34
34
|
".claude/skills/diagnose/evals/basic.yaml": "7fa4e3a255f14d7dc883f59f8fd1d796a62db92d62a543ef87b5dda92a1c0c0b",
|
|
35
35
|
".claude/skills/diagnose/references/common-issues.md": "f80b13d4b70e656151a4cb9db8c1f042378d1f6cb9f5ba8c550741d6bf34917c",
|
|
36
|
-
".claude/skills/draft-reply/SKILL.md": "
|
|
36
|
+
".claude/skills/draft-reply/SKILL.md": "4658b3de3952b518d589af1a2ab21940ca31b477c68d2e03b05e20c3a11642de",
|
|
37
37
|
".claude/skills/feedback/SKILL.md": "a8b5a1e82eca177461d11c87839dbf933e358fc3214d5f1975dd2d4fff9f3be7",
|
|
38
|
-
".claude/skills/file-document/SKILL.md": "
|
|
38
|
+
".claude/skills/file-document/SKILL.md": "2ac7d37f59281511477692d61320e176b304fa65eedbd464b2dc203d9b4dd6f7",
|
|
39
39
|
".claude/skills/financial-snapshot/SKILL.md": "33ddabb7d60024eadd8e6772229d8b17db3c3fa02d1289c80330c74aa86ae00a",
|
|
40
40
|
".claude/skills/fix-duplicates/SKILL.md": "bd3d6aae0bce09bc844ba93f76abb4a97ff0286c6a4da29cd369763864fd4a86",
|
|
41
|
-
".claude/skills/follow-up-draft/SKILL.md": "
|
|
42
|
-
".claude/skills/growth-check/SKILL.md": "
|
|
43
|
-
".claude/skills/hire-agent.md": "
|
|
44
|
-
".claude/skills/inbox-check/SKILL.md": "
|
|
45
|
-
".claude/skills/ingest-sources/SKILL.md": "
|
|
41
|
+
".claude/skills/follow-up-draft/SKILL.md": "49212946cb7b2db39cecd435ab6fcb7cb26cc49666306084d27676543be67281",
|
|
42
|
+
".claude/skills/growth-check/SKILL.md": "a3ed3f2427f3639f81d16b1a2adfa268bafed795d2b0d02621bc6be318784c24",
|
|
43
|
+
".claude/skills/hire-agent.md": "2d60d241592db7d5f30a635d11164802f907b02616fb25170f3f867d5235f067",
|
|
44
|
+
".claude/skills/inbox-check/SKILL.md": "e2cddc91f72ffc0443d105385d2e8b464f86404a4825d308bd03a68e4ee43726",
|
|
45
|
+
".claude/skills/ingest-sources/SKILL.md": "938b93d299649db156ad19e9a7bd5d09e950f53bc2eaf8a85386f9fdbca350d0",
|
|
46
46
|
".claude/skills/ingest-sources/references/extraction-patterns.md": "28d6dc604c4a11eacfe4523e705ad430ba8fe26632bafcccaef656e9618e5aea",
|
|
47
|
-
".claude/skills/judgment-awareness.md": "
|
|
48
|
-
".claude/skills/map-connections/SKILL.md": "
|
|
49
|
-
".claude/skills/meditate/SKILL.md": "
|
|
47
|
+
".claude/skills/judgment-awareness.md": "0077129a87f91d295515108f3f9a68ca6874c6e38fc7f2a73a462704fa00ba2d",
|
|
48
|
+
".claude/skills/map-connections/SKILL.md": "e8133d5e3de36e32e3858a1ee3918a577855e77ade022933097f87a0100cc9a3",
|
|
49
|
+
".claude/skills/meditate/SKILL.md": "1d814f0c52f4309708669139ba4b637bf05a228e2381950ee3851c6145e25cc7",
|
|
50
50
|
".claude/skills/meditate/evals/basic.yaml": "daba441b2fd9d1d4afddcff6eaa9673884198b1d0f85d9d06edbe0738012291a",
|
|
51
|
-
".claude/skills/meeting-prep/SKILL.md": "
|
|
52
|
-
".claude/skills/memory-audit/SKILL.md": "
|
|
53
|
-
".claude/skills/memory-health/SKILL.md": "
|
|
51
|
+
".claude/skills/meeting-prep/SKILL.md": "cb0b2afc41052a0652e7de30d09e71ab489162fbb09c648e3c95cec2d438ba63",
|
|
52
|
+
".claude/skills/memory-audit/SKILL.md": "7daed2ec128ea70171b8e3ffaf4d933ca69db2637b1487f69724e3428c04663a",
|
|
53
|
+
".claude/skills/memory-health/SKILL.md": "ef4683fe8441e36d8ac7a931a96657c67de2ad3a6e2ca58266b48d74ce167a7b",
|
|
54
54
|
".claude/skills/memory-manager.md": "62edf1ed340687da9d8896dc4a21934b39b12c8269ea7a8de1beb9d25fd894e6",
|
|
55
|
-
".claude/skills/morning-brief/SKILL.md": "
|
|
55
|
+
".claude/skills/morning-brief/SKILL.md": "7e97e0657dccd0c0bcd3ffb783c2e7d0dd7582bf3490162cc8c1e987a49ea5dc",
|
|
56
56
|
".claude/skills/morning-brief/evals/basic.yaml": "537de9adcde134161de9ffb9602b8c920bf1464bf224d99ad6f95f854d8480b7",
|
|
57
|
-
".claude/skills/new-person/SKILL.md": "
|
|
57
|
+
".claude/skills/new-person/SKILL.md": "41b98b2bac95a76e2e58ba4c695d171b1e068910436741baa534d3db2b00ca9c",
|
|
58
58
|
".claude/skills/new-person/evals/basic.yaml": "f3c09a37c05d420e67520d8132a46356fed81575dcfb817cc97caf47f230392b",
|
|
59
59
|
".claude/skills/new-workspace/SKILL.md": "c3f838b44a016b87445c66555398b666970a156288320efb183bc8cb8af2f0df",
|
|
60
60
|
".claude/skills/new-workspace/references/workspace-templates.md": "6b36e961f112d46f32fdcf19cdacf3b05b4246201be315eee79659d606a7e243",
|
|
61
61
|
".claude/skills/onboarding.md": "72fe133672f61929de0cfc7ff77699eb8856ca1e283b13acd3becffff75fca55",
|
|
62
|
-
".claude/skills/pattern-recognizer.md": "
|
|
62
|
+
".claude/skills/pattern-recognizer.md": "6928735f17cfcd793483dba2c68d346b11450f086a4bcc24e72e9b348270534b",
|
|
63
63
|
".claude/skills/pipeline-review/SKILL.md": "7891ceb3b6f4fb19e5255ae71c5894b6da8a9c566bc317e566bd4bc282ea1a6f",
|
|
64
|
-
".claude/skills/relationship-tracker.md": "
|
|
64
|
+
".claude/skills/relationship-tracker.md": "ef351780adadf3866a545b527450727bfb49907d1e675be670f7efc3acb4e776",
|
|
65
65
|
".claude/skills/research/SKILL.md": "0d317e6350b043ee774916b923957f61dbc174e3caafc0187198fa236a2fd28d",
|
|
66
66
|
".claude/skills/research/references/source-evaluation.md": "64614b7eff83468d7ff76dd640252579f23e69e760969672e9aebe5ceb00f695",
|
|
67
|
-
".claude/skills/risk-surfacer.md": "
|
|
67
|
+
".claude/skills/risk-surfacer.md": "b01e6bc7a22df414a7ee7a5e4a108088b5d049646723cc7513fac27a3ba4856c",
|
|
68
68
|
".claude/skills/skill-index.json": "043c86f1b07f28bb54db80117437f60fb3d79ad0d18549fdc2c74921b996a56f",
|
|
69
69
|
".claude/skills/skill-router/SKILL.md": "12fc45aebc94d3ead65843cd336a88797a40856e82908cda47256c9cbb4cb60f",
|
|
70
70
|
".claude/skills/skill-router/references/overlap-clusters.md": "bc819b4892cbdf9919db392825230f4cd4eec546cd7f0c9de6c29a2468ab489a",
|
|
71
71
|
".claude/skills/structure-generator.md": "dbe70841ab60599a632687aaa3c3652361483df2fe854640c56982b60622eb19",
|
|
72
|
-
".claude/skills/summarize-doc/SKILL.md": "
|
|
72
|
+
".claude/skills/summarize-doc/SKILL.md": "cd73acc34541c9971ce7248df87d8b26d572d0cf0b14275076f2fb321d32af3a",
|
|
73
73
|
".claude/skills/vault-awareness.md": "da4b056ea9b83ecbfb1a7ffd9318caf98c1fb38bb8334bde3b8975b8467f576b",
|
|
74
|
-
".claude/skills/weekly-review/SKILL.md": "
|
|
75
|
-
".claude/skills/what-am-i-missing/SKILL.md": "
|
|
74
|
+
".claude/skills/weekly-review/SKILL.md": "2a9e5697499cb2980f2954a55a53e496f734c673d64e900ee1affed771a93ec1",
|
|
75
|
+
".claude/skills/what-am-i-missing/SKILL.md": "8557f893869c66e3cf0401b68a604c57f1edf8dcb065d469e7502c9af06c8dfe",
|
|
76
76
|
".claude/skills/wiki/SKILL.md": "e45e8db6fce1d774e36c93be27e5d9153b3ae474c48db478a4d7ff2b138e42e8",
|
|
77
77
|
".claude/skills/wiki/references/citations-and-contradictions.md": "1b16301020fdb5e4840035ca22425ebb03202694e88eb494105ff39e22e03263",
|
|
78
78
|
".claude/skills/wiki/references/page-template.md": "b19382ee9366b1e7f8c9f230881ac3c45982b59ffee0d82fe64b103862ba4745",
|
|
79
|
-
"CLAUDE.md": "
|
|
79
|
+
"CLAUDE.md": "b8244c281afd5cf46544f1f68b4130672d9f6e6bcbcbae7defca3a31c09d4c12"
|
|
80
80
|
}
|
|
81
81
|
}
|
|
@@ -248,6 +248,54 @@ Include:
|
|
|
248
248
|
- **Output Format** - Expected output structure
|
|
249
249
|
- **Judgment Points** - Where to ask for confirmation
|
|
250
250
|
|
|
251
|
+
## Writing a good skill description
|
|
252
|
+
|
|
253
|
+
The `description:` field in a skill's frontmatter is what Claude Code uses to decide when to trigger the skill. A vague description fires inconsistently; a tight description fires reliably. Three patterns from the existing catalog earn their keep:
|
|
254
|
+
|
|
255
|
+
**Verb + object + outcome + trigger phrases.** Lead with what the skill does, then list the exact phrases users say. From `capture-meeting`:
|
|
256
|
+
|
|
257
|
+
> Process meeting notes or transcript to extract decisions, commitments, and insights. Use when user shares transcript or says "capture this meeting", "here are my notes from the call".
|
|
258
|
+
|
|
259
|
+
**Quantify the work.** Numerical bounds disambiguate the skill from neighbors. From `deep-context`:
|
|
260
|
+
|
|
261
|
+
> Full-context deep analysis for meeting prep, relationship analysis, or strategic planning. Pulls up to 180 memories across multiple dimensions for comprehensive synthesis.
|
|
262
|
+
|
|
263
|
+
**State the proactive trigger threshold.** For proactive skills, name the count that fires them. From `pattern-recognizer`:
|
|
264
|
+
|
|
265
|
+
> Activates when the same topic, frustration, or behavior appears across 3+ interactions.
|
|
266
|
+
|
|
267
|
+
Avoid descriptions that read as aspirational ("helps you think strategically"), circular ("manages memory operations"), or multi-purpose without a clear trigger.
|
|
268
|
+
|
|
269
|
+
## The "see also" convention
|
|
270
|
+
|
|
271
|
+
When two skills could plausibly fire on the same situation, both should point at each other in their descriptions so a user who picked the less-canonical name finds the alternative. Pattern: append a final line to the `description:` field of the form:
|
|
272
|
+
|
|
273
|
+
> See also: `<skill-name>` for <what differs>.
|
|
274
|
+
|
|
275
|
+
Common overlap clusters in the current catalog:
|
|
276
|
+
|
|
277
|
+
- **Outbound messages**: `draft-reply` (general) ↔ `follow-up-draft` (post-meeting)
|
|
278
|
+
- **Memory**: `memory-audit` (content) ↔ `memory-health` (system) ↔ `diagnose` (connectivity)
|
|
279
|
+
- **Visualization**: `brain` (3D web) ↔ `brain-monitor` (terminal)
|
|
280
|
+
- **Reflective cadences**: `morning-brief` (daily) → `weekly-review` (weekly) → `growth-check` (monthly+) → `meditate` (per session)
|
|
281
|
+
- **Meeting lifecycle**: `meeting-prep` (before) → `capture-meeting` (during/after notes) → `follow-up-draft` (after, outbound)
|
|
282
|
+
- **Inbound processing**: `ingest-sources` (multi-doc) ↔ `file-document` (single) ↔ `capture-meeting` (meeting only) ↔ `summarize-doc` (no filing)
|
|
283
|
+
|
|
284
|
+
## Disambiguation notes
|
|
285
|
+
|
|
286
|
+
- `connector-discovery` is about connecting external services (Gmail, Calendar, Slack). It is not about people or human connections. For people, see `relationship-tracker`, `new-person`, and `map-connections`.
|
|
287
|
+
- `pattern-recognizer` notices what's recurring. `judgment-awareness` applies the user's decision rules to a recurring situation. `capability-suggester` proposes a new command when the same task is repeated by hand. Three skills, three different stages of "we keep doing this."
|
|
288
|
+
|
|
289
|
+
## Proactive vs contextual: when to make a skill auto-fire
|
|
290
|
+
|
|
291
|
+
A skill with `invocation: proactive` runs without the user asking. This is powerful but expensive: every proactive skill loaded into context is a tax on every conversation. Use proactive only when:
|
|
292
|
+
|
|
293
|
+
1. The trigger condition is **specific enough that false positives are rare** (e.g., commitment-detector watches for explicit promise phrasing, not vague intentions).
|
|
294
|
+
2. The action is **observational**, not mutative (surface a pattern, not send an email).
|
|
295
|
+
3. The output is **brief**, ideally one line, deferring detail to a follow-up question.
|
|
296
|
+
|
|
297
|
+
Contextual skills (no `invocation` set, or `invocation: contextual`) are cheaper. They wait for the user to invoke them by name or phrase. Default to contextual; promote to proactive only after observing repeated manual invocations of the same skill.
|
|
298
|
+
|
|
251
299
|
## Archetype Templates
|
|
252
300
|
|
|
253
301
|
The `archetypes/` folder contains structure and command templates for each user type:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: brain
|
|
3
|
-
description: Launch the Brain Visualizer, a real-time 3D view of memory and relationships. Triggers on "show your brain", "visualize memory", "open the brain", "memory graph".
|
|
3
|
+
description: Launch the Brain Visualizer, a real-time 3D view of memory and relationships. Triggers on "show your brain", "visualize memory", "open the brain", "memory graph". See also: `brain-monitor` for a terminal dashboard alternative.
|
|
4
4
|
effort-level: medium
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: brain-monitor
|
|
3
|
-
description: Launch the Brain Monitor TUI, a real-time terminal dashboard for watching Claudia's memory system. Triggers on "brain monitor", "show dashboard", "memory dashboard", "terminal brain".
|
|
3
|
+
description: Launch the Brain Monitor TUI, a real-time terminal dashboard for watching Claudia's memory system. Triggers on "brain monitor", "show dashboard", "memory dashboard", "terminal brain". See also: `brain` for a 3D graph view in the browser.
|
|
4
4
|
effort-level: low
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: capability-suggester
|
|
3
|
-
description: Notice repeated user behaviors and suggest new commands, workflows, structure, or integrations to streamline work. Also detects when the user's setup has outgrown its current structure and suggests targeted upgrades. Activates when repeated task patterns, workflow friction, structural gaps, or business growth signals are detected.
|
|
3
|
+
description: Notice repeated user behaviors and suggest new commands, workflows, structure, or integrations to streamline work. Also detects when the user's setup has outgrown its current structure and suggests targeted upgrades. Activates when repeated task patterns, workflow friction, structural gaps, or business growth signals are detected. See also: `pattern-recognizer` for theme detection upstream; `hire-agent` for adding specialized subagents.
|
|
4
4
|
user-invocable: false
|
|
5
5
|
invocation: proactive
|
|
6
6
|
effort-level: high
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: capture-meeting
|
|
3
|
-
description: Process meeting notes or transcript to extract decisions, commitments, and insights. Use when user shares transcript or says "capture this meeting", "here are my notes from the call".
|
|
3
|
+
description: Process meeting notes or transcript to extract decisions, commitments, and insights. Use when user shares transcript or says "capture this meeting", "here are my notes from the call". See also: `meeting-prep` for pre-call briefings; `follow-up-draft` for post-meeting emails.
|
|
4
4
|
effort-level: medium
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: connector-discovery
|
|
3
|
-
description: Help users connect their external tools in a gentle, non-technical way. Recommend solutions based on what works best, explain everything in plain language.
|
|
3
|
+
description: Help users connect their external tools in a gentle, non-technical way. Recommend solutions based on what works best, explain everything in plain language. Note: this is about external service connectors (Gmail, Calendar), not human connections. See `relationship-tracker` and `map-connections` for person and relationship features.
|
|
4
4
|
effort-level: high
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: diagnose
|
|
3
|
-
description: Check memory system health and troubleshoot connectivity issues. Use when memory commands aren't working, at session start if something seems wrong, or when user asks about memory status.
|
|
3
|
+
description: Check memory system health and troubleshoot connectivity issues. Use when memory commands aren't working, at session start if something seems wrong, or when user asks about memory status. See also: `memory-health` for the data-quality dashboard once connectivity is confirmed.
|
|
4
4
|
effort-level: low
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: draft-reply
|
|
3
|
-
description: Draft an email response with tone matching the relationship context. Shows draft for approval before sending. Use when user says "draft a reply", "respond to this email", "write a response to [person]", or shares an email and asks for help replying.
|
|
3
|
+
description: Draft an email response with tone matching the relationship context. Shows draft for approval before sending. Use when user says "draft a reply", "respond to this email", "write a response to [person]", or shares an email and asks for help replying. See also: `follow-up-draft` for post-meeting thank-yous with meeting context.
|
|
4
4
|
effort-level: medium
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: file-document
|
|
3
|
-
description: Store a document, email, or text for future reference with entity linking and provenance.
|
|
3
|
+
description: Store a document, email, or text for future reference with entity linking and provenance. See also: `ingest-sources` for multiple files; `capture-meeting` if it's meeting notes; `summarize-doc` to get a summary without filing.
|
|
4
4
|
effort-level: medium
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: follow-up-draft
|
|
3
|
-
description: Create a post-meeting thank-you or follow-up email with key points and next steps. Use when user says "follow-up email", "thank you note", "post-meeting email", "send a follow-up to [person]", or after a meeting capture when next steps need communicating.
|
|
3
|
+
description: Create a post-meeting thank-you or follow-up email with key points and next steps. Use when user says "follow-up email", "thank you note", "post-meeting email", "send a follow-up to [person]", or after a meeting capture when next steps need communicating. See also: `draft-reply` for general email responses unrelated to a meeting.
|
|
4
4
|
argument-hint: "[person name]"
|
|
5
5
|
effort-level: medium
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: growth-check
|
|
3
|
-
description: Periodic reflection on development, skills, learning, and progress toward goals. Triggers on "am I growing?", "development check", "personal growth review".
|
|
3
|
+
description: Periodic reflection on development, skills, learning, and progress toward goals. Triggers on "am I growing?", "development check", "personal growth review". See also: `weekly-review` for tactical week recap; `meditate` for session-level reflection.
|
|
4
4
|
effort-level: low
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: hire-agent
|
|
3
|
-
description: Suggests new agents based on repeated task patterns.
|
|
3
|
+
description: Suggests new agents based on repeated task patterns. See also: `capability-suggester` for skill or command-level additions; `agent-dispatcher` for routing logic.
|
|
4
4
|
user-invocable: false
|
|
5
5
|
invocation: proactive
|
|
6
6
|
effort-level: high
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: inbox-check
|
|
3
|
-
description: Lightweight inbox triage across all configured email accounts. Dispatches fast subagent to fetch, then reviews with judgment. Use when user says "check my inbox", "any new emails?", "check email".
|
|
3
|
+
description: Lightweight inbox triage across all configured email accounts. Dispatches fast subagent to fetch, then reviews with judgment. Use when user says "check my inbox", "any new emails?", "check email". See also: `draft-reply` once you pick an email to respond to.
|
|
4
4
|
effort-level: low
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ingest-sources
|
|
3
|
-
description: Process multiple source documents with Extract-Then-Aggregate discipline. Use when user shares multiple transcripts, emails, or documents for batch processing.
|
|
3
|
+
description: Process multiple source documents with Extract-Then-Aggregate discipline. Use when user shares multiple transcripts, emails, or documents for batch processing. See also: `capture-meeting` for a single meeting transcript; `file-document` for a single document; `summarize-doc` when you only need a summary.
|
|
4
4
|
argument-hint: [folder-path]
|
|
5
5
|
effort-level: max
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: judgment-awareness
|
|
3
|
-
description: Load and apply user-defined judgment rules from context/judgment.yaml to inform priority conflicts, escalation decisions, surfacing, and delegation.
|
|
3
|
+
description: Load and apply user-defined judgment rules from context/judgment.yaml to inform priority conflicts, escalation decisions, surfacing, and delegation. See also: `pattern-recognizer` for theme detection; `meditate` updates judgment rules at session end.
|
|
4
4
|
user-invocable: false
|
|
5
5
|
invocation: proactive
|
|
6
6
|
effort-level: low
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: map-connections
|
|
3
|
-
description: Scan context files to extract entities and relationships into the memory system. Triggers on "who knows who?", "network graph", "map my connections", "extract relationships".
|
|
3
|
+
description: Scan context files to extract entities and relationships into the memory system. Triggers on "who knows who?", "network graph", "map my connections", "extract relationships". See also: `brain` for graph visualization once relationships are extracted.
|
|
4
4
|
argument-hint: "[--incremental] [file-path]"
|
|
5
5
|
effort-level: high
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: meditate
|
|
3
|
-
description: End-of-session reflection generating persistent learnings about user preferences, communication patterns, and cross-session insights. Activates when wrapping up a session, or when user says "let's wrap up", "end the session", "time to reflect", or "meditate". Also extracts judgment rules from decisions made during the session.
|
|
3
|
+
description: End-of-session reflection generating persistent learnings about user preferences, communication patterns, and cross-session insights. Activates when wrapping up a session, or when user says "let's wrap up", "end the session", "time to reflect", or "meditate". Also extracts judgment rules from decisions made during the session. See also: `weekly-review` and `growth-check` for time-based reflection cadences.
|
|
4
4
|
effort-level: high
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: meeting-prep
|
|
3
|
-
description: One-page briefing before a call or meeting with person context, open items, and talking points. Use when user says "prep me for my call with [person]", "meeting prep", "brief me before my meeting", "get ready for my call", or mentions an upcoming meeting where context would help.
|
|
3
|
+
description: One-page briefing before a call or meeting with person context, open items, and talking points. Use when user says "prep me for my call with [person]", "meeting prep", "brief me before my meeting", "get ready for my call", or mentions an upcoming meeting where context would help. See also: `capture-meeting` for processing notes after the call; `follow-up-draft` for thank-yous.
|
|
4
4
|
argument-hint: [person or meeting name]
|
|
5
5
|
effort-level: medium
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: memory-audit
|
|
3
|
-
description: Show everything Claudia knows with provenance tracing and entity counts. Triggers on "what do you know?", "show memories", "memory audit", "what do you remember about".
|
|
3
|
+
description: Show everything Claudia knows with provenance tracing and entity counts. Triggers on "what do you know?", "show memories", "memory audit", "what do you remember about". See also: `memory-health` for system-level stats and data quality; `diagnose` for connectivity troubleshooting.
|
|
4
4
|
argument-hint: "[entity name]"
|
|
5
5
|
effort-level: medium
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: memory-health
|
|
3
|
-
description: Check memory system health and data quality. Use when user asks "how's my memory?", "system health", "memory stats", "data quality", "how's my brain?", or for periodic self-diagnostics.
|
|
3
|
+
description: Check memory system health and data quality. Use when user asks "how's my memory?", "system health", "memory stats", "data quality", "how's my brain?", or for periodic self-diagnostics. See also: `memory-audit` for content-level provenance; `diagnose` for daemon connectivity issues.
|
|
4
4
|
effort-level: medium
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: morning-brief
|
|
3
|
-
description: Daily digest of commitments, warnings, and relationship health. Use when starting your day or asking "what's on my plate".
|
|
3
|
+
description: Daily digest of commitments, warnings, and relationship health. Use when starting your day or asking "what's on my plate". See also: `weekly-review` (end of week), `growth-check` (monthly+), `meditate` (end of session).
|
|
4
4
|
effort-level: low
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: new-person
|
|
3
|
-
description: Create a relationship tracking file for a person with contact info, history, and communication preferences. Use when user says "new person", "add [name]", "create a file for [name]", "track this person", or mentions someone important who doesn't have a file yet.
|
|
3
|
+
description: Create a relationship tracking file for a person with contact info, history, and communication preferences. Use when user says "new person", "add [name]", "create a file for [name]", "track this person", or mentions someone important who doesn't have a file yet. See also: `relationship-tracker` for ongoing health; `meeting-prep` when you have a call coming up.
|
|
4
4
|
argument-hint: "[name]"
|
|
5
5
|
effort-level: medium
|
|
6
6
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: pattern-recognizer
|
|
3
|
-
description: Notice trends, recurring themes, and patterns across conversations and surface them when relevant. Activates when the same topic, frustration, or behavior appears across 3+ interactions. Use for "I've noticed you keep...", "this is the third time...", recurring scheduling issues, or avoidance patterns.
|
|
3
|
+
description: Notice trends, recurring themes, and patterns across conversations and surface them when relevant. Activates when the same topic, frustration, or behavior appears across 3+ interactions. Use for "I've noticed you keep...", "this is the third time...", recurring scheduling issues, or avoidance patterns. See also: `judgment-awareness` for applying user-set decision rules; `capability-suggester` for converting patterns into new commands.
|
|
4
4
|
user-invocable: false
|
|
5
5
|
invocation: proactive
|
|
6
6
|
effort-level: high
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: relationship-tracker
|
|
3
|
-
description: Surface relevant context when people are mentioned in conversation, and track relationship health over time.
|
|
3
|
+
description: Surface relevant context when people are mentioned in conversation, and track relationship health over time. See also: `new-person` to create a file for someone important; `map-connections` to extract relationships across files.
|
|
4
4
|
user-invocable: false
|
|
5
5
|
invocation: proactive
|
|
6
6
|
effort-level: high
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: risk-surfacer
|
|
3
|
-
description: Proactively identify and surface potential problems before they become crises.
|
|
3
|
+
description: Proactively identify and surface potential problems before they become crises. See also: `what-am-i-missing` for a user-invoked, full-sweep version.
|
|
4
4
|
user-invocable: false
|
|
5
5
|
invocation: proactive
|
|
6
6
|
effort-level: high
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: summarize-doc
|
|
3
|
-
description: Create an executive summary of any document at the appropriate level of detail. Triggers on "summarize this", "main points", "give me the gist".
|
|
3
|
+
description: Create an executive summary of any document at the appropriate level of detail. Triggers on "summarize this", "main points", "give me the gist". See also: `file-document` if you also want to save it; `capture-meeting` if it's meeting notes.
|
|
4
4
|
effort-level: medium
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: weekly-review
|
|
3
|
-
description: Guided weekly reflection across all relationships, commitments, and projects with pattern analysis. Use at end of week, or when user says "weekly review", "end of week", "reflect on this week", "weekly check-in", or "how did my week go".
|
|
3
|
+
description: Guided weekly reflection across all relationships, commitments, and projects with pattern analysis. Use at end of week, or when user says "weekly review", "end of week", "reflect on this week", "weekly check-in", or "how did my week go". See also: `morning-brief` (daily), `growth-check` (zoom out), `meditate` (session reflection).
|
|
4
4
|
effort-level: high
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: what-am-i-missing
|
|
3
|
-
description: Surface risks, blind spots, overlooked items, and accountability across commitments and relationships. Triggers on "what am I overlooking?", "blind spots", "what's falling through the cracks", "what do I owe?", "am I overdue?", "check my commitments".
|
|
3
|
+
description: Surface risks, blind spots, overlooked items, and accountability across commitments and relationships. Triggers on "what am I overlooking?", "blind spots", "what's falling through the cracks", "what do I owe?", "am I overdue?", "check my commitments". See also: `risk-surfacer` for the proactive auto-firing version on overdue items and cooling relationships.
|
|
4
4
|
argument-hint: "[person name or 'overdue']"
|
|
5
5
|
effort-level: high
|
|
6
6
|
---
|
package/template-v2/CLAUDE.md
CHANGED
|
@@ -104,7 +104,7 @@ Uses three shades to approximate the installer's coloring: `▓▓` = hair, `█
|
|
|
104
104
|
|
|
105
105
|
```
|
|
106
106
|
|
|
107
|
-
|
|
107
|
+
▓▓▓▓▓▓▓▓▒▒
|
|
108
108
|
▓▓██████████▒▒
|
|
109
109
|
▓▓██ ██ ██▓▓
|
|
110
110
|
██████████
|
|
@@ -304,6 +304,27 @@ I use proactive, contextual, and explicit skills. See `.claude/skills/README.md`
|
|
|
304
304
|
| My learnings about you | `context/learnings.md` |
|
|
305
305
|
| Project details | `projects/[project]/overview.md` |
|
|
306
306
|
| Filed documents | `~/.claudia/files/` (entity-routed) |
|
|
307
|
+
| Shell helper init | `~/.claudia/shell-init.sh` (sourced from `.zshrc`/`.bashrc`) |
|
|
308
|
+
| Install path pointer | `~/.claudia/claudia-home` (one line, absolute path) |
|
|
309
|
+
|
|
310
|
+
---
|
|
311
|
+
|
|
312
|
+
## Launching from the Terminal
|
|
313
|
+
|
|
314
|
+
Once installed, the `claudia` shell command works from any directory:
|
|
315
|
+
|
|
316
|
+
| You type | What happens |
|
|
317
|
+
|----------|--------------|
|
|
318
|
+
| `claudia` | cd to your Claudia folder, launch `claude` |
|
|
319
|
+
| `claudia yolo` | cd, launch `claude --dangerously-skip-permissions` |
|
|
320
|
+
| `claudia -c "morning brief"` | cd, launch `claude -c "morning brief"` (any `claude` flag passes through) |
|
|
321
|
+
| `claudia --resume` | cd, launch `claude --resume` |
|
|
322
|
+
| `claudia update` / `update-claudia` | runs `npx get-claudia <your-install-path>` from anywhere — no need to cd first |
|
|
323
|
+
| `claudia setup` / `claudia system-health` | passes through to the npm `claudia` CLI binary |
|
|
324
|
+
|
|
325
|
+
The folder location is stored in `~/.claudia/claudia-home`. Move your install? Edit that file. Re-run `npx get-claudia .` from a new location and it'll update automatically.
|
|
326
|
+
|
|
327
|
+
On Windows the shell function is written to `~/.claudia/shell-init.sh` but not auto-sourced. WSL or Git Bash users can `source ~/.claudia/shell-init.sh` manually (or add it to their rc file).
|
|
307
328
|
|
|
308
329
|
---
|
|
309
330
|
|