@jbarket/loomai 0.5.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 +475 -0
- package/LICENSE +661 -0
- package/README.md +702 -0
- package/assets/demo.cast +396 -0
- package/assets/skill/SKILL.md +192 -0
- package/dist/backends/embedding-runtime.d.ts +39 -0
- package/dist/backends/embedding-runtime.js +265 -0
- package/dist/backends/episodes.d.ts +36 -0
- package/dist/backends/episodes.js +126 -0
- package/dist/backends/fastembed.d.ts +18 -0
- package/dist/backends/fastembed.js +95 -0
- package/dist/backends/glob.d.ts +10 -0
- package/dist/backends/glob.js +16 -0
- package/dist/backends/index.d.ts +6 -0
- package/dist/backends/index.js +78 -0
- package/dist/backends/migrations.d.ts +38 -0
- package/dist/backends/migrations.js +157 -0
- package/dist/backends/mmr.d.ts +45 -0
- package/dist/backends/mmr.js +82 -0
- package/dist/backends/proposals.d.ts +65 -0
- package/dist/backends/proposals.js +182 -0
- package/dist/backends/recall-log.d.ts +42 -0
- package/dist/backends/recall-log.js +143 -0
- package/dist/backends/retry.d.ts +29 -0
- package/dist/backends/retry.js +60 -0
- package/dist/backends/salience.d.ts +57 -0
- package/dist/backends/salience.js +186 -0
- package/dist/backends/sqlite-knowledge.d.ts +37 -0
- package/dist/backends/sqlite-knowledge.js +788 -0
- package/dist/backends/sqlite-vec.d.ts +64 -0
- package/dist/backends/sqlite-vec.js +737 -0
- package/dist/backends/ttl.d.ts +24 -0
- package/dist/backends/ttl.js +50 -0
- package/dist/backends/types.d.ts +562 -0
- package/dist/backends/types.js +8 -0
- package/dist/blocks/harness.d.ts +45 -0
- package/dist/blocks/harness.js +142 -0
- package/dist/blocks/model.d.ts +4 -0
- package/dist/blocks/model.js +56 -0
- package/dist/blocks/types.d.ts +40 -0
- package/dist/blocks/types.js +34 -0
- package/dist/categories.d.ts +16 -0
- package/dist/categories.js +29 -0
- package/dist/cli/args.d.ts +21 -0
- package/dist/cli/args.js +47 -0
- package/dist/cli/bootstrap.d.ts +2 -0
- package/dist/cli/bootstrap.js +214 -0
- package/dist/cli/doctor.d.ts +2 -0
- package/dist/cli/doctor.js +206 -0
- package/dist/cli/forget.d.ts +2 -0
- package/dist/cli/forget.js +97 -0
- package/dist/cli/harness.d.ts +2 -0
- package/dist/cli/harness.js +91 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.js +127 -0
- package/dist/cli/inject.d.ts +2 -0
- package/dist/cli/inject.js +298 -0
- package/dist/cli/install.d.ts +2 -0
- package/dist/cli/install.js +137 -0
- package/dist/cli/io.d.ts +14 -0
- package/dist/cli/io.js +63 -0
- package/dist/cli/knowledge.d.ts +2 -0
- package/dist/cli/knowledge.js +216 -0
- package/dist/cli/memory.d.ts +2 -0
- package/dist/cli/memory.js +608 -0
- package/dist/cli/migrate.d.ts +2 -0
- package/dist/cli/migrate.js +116 -0
- package/dist/cli/recall.d.ts +2 -0
- package/dist/cli/recall.js +91 -0
- package/dist/cli/remember.d.ts +2 -0
- package/dist/cli/remember.js +111 -0
- package/dist/cli/serve.d.ts +2 -0
- package/dist/cli/serve.js +71 -0
- package/dist/cli/subcommands.d.ts +7 -0
- package/dist/cli/subcommands.js +11 -0
- package/dist/cli/tui/multi-select.d.ts +53 -0
- package/dist/cli/tui/multi-select.js +116 -0
- package/dist/cli/update-identity.d.ts +2 -0
- package/dist/cli/update-identity.js +90 -0
- package/dist/cli/update.d.ts +2 -0
- package/dist/cli/update.js +87 -0
- package/dist/cli/wake.d.ts +2 -0
- package/dist/cli/wake.js +53 -0
- package/dist/clients.d.ts +8 -0
- package/dist/clients.js +63 -0
- package/dist/config.d.ts +59 -0
- package/dist/config.js +160 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.js +75 -0
- package/dist/injection/harnesses.d.ts +17 -0
- package/dist/injection/harnesses.js +51 -0
- package/dist/injection/render.d.ts +17 -0
- package/dist/injection/render.js +50 -0
- package/dist/injection/writer.d.ts +25 -0
- package/dist/injection/writer.js +118 -0
- package/dist/install/harnesses.d.ts +26 -0
- package/dist/install/harnesses.js +90 -0
- package/dist/install/names.d.ts +16 -0
- package/dist/install/names.js +36 -0
- package/dist/install/render.d.ts +18 -0
- package/dist/install/render.js +42 -0
- package/dist/install/skill-source.d.ts +1 -0
- package/dist/install/skill-source.js +11 -0
- package/dist/path-safety.d.ts +19 -0
- package/dist/path-safety.js +62 -0
- package/dist/server.d.ts +8 -0
- package/dist/server.js +571 -0
- package/dist/tools/append-maintenance-log.d.ts +52 -0
- package/dist/tools/append-maintenance-log.js +103 -0
- package/dist/tools/archive.d.ts +2 -0
- package/dist/tools/archive.js +21 -0
- package/dist/tools/bootstrap.d.ts +11 -0
- package/dist/tools/bootstrap.js +161 -0
- package/dist/tools/dossier.d.ts +1 -0
- package/dist/tools/dossier.js +102 -0
- package/dist/tools/eurorack-import.d.ts +47 -0
- package/dist/tools/eurorack-import.js +199 -0
- package/dist/tools/find-similar.d.ts +3 -0
- package/dist/tools/find-similar.js +26 -0
- package/dist/tools/forget.d.ts +6 -0
- package/dist/tools/forget.js +70 -0
- package/dist/tools/harness.d.ts +18 -0
- package/dist/tools/harness.js +54 -0
- package/dist/tools/identity-scaffold.d.ts +22 -0
- package/dist/tools/identity-scaffold.js +142 -0
- package/dist/tools/identity.d.ts +4 -0
- package/dist/tools/identity.js +226 -0
- package/dist/tools/knowledge-archive.d.ts +5 -0
- package/dist/tools/knowledge-archive.js +24 -0
- package/dist/tools/knowledge-history.d.ts +6 -0
- package/dist/tools/knowledge-history.js +55 -0
- package/dist/tools/knowledge-maintain.d.ts +9 -0
- package/dist/tools/knowledge-maintain.js +113 -0
- package/dist/tools/knowledge-merge.d.ts +8 -0
- package/dist/tools/knowledge-merge.js +40 -0
- package/dist/tools/knowledge-move.d.ts +10 -0
- package/dist/tools/knowledge-move.js +48 -0
- package/dist/tools/knowledge-purge.d.ts +5 -0
- package/dist/tools/knowledge-purge.js +20 -0
- package/dist/tools/knowledge-recall.d.ts +20 -0
- package/dist/tools/knowledge-recall.js +142 -0
- package/dist/tools/knowledge-restore.d.ts +4 -0
- package/dist/tools/knowledge-restore.js +24 -0
- package/dist/tools/knowledge-supersede.d.ts +6 -0
- package/dist/tools/knowledge-supersede.js +36 -0
- package/dist/tools/knowledge-verify.d.ts +8 -0
- package/dist/tools/knowledge-verify.js +39 -0
- package/dist/tools/knowledge-write.d.ts +25 -0
- package/dist/tools/knowledge-write.js +87 -0
- package/dist/tools/memory-audit.d.ts +3 -0
- package/dist/tools/memory-audit.js +47 -0
- package/dist/tools/memory-list.d.ts +4 -0
- package/dist/tools/memory-list.js +23 -0
- package/dist/tools/prune.d.ts +4 -0
- package/dist/tools/prune.js +28 -0
- package/dist/tools/recall.d.ts +4 -0
- package/dist/tools/recall.js +24 -0
- package/dist/tools/remember.d.ts +10 -0
- package/dist/tools/remember.js +43 -0
- package/dist/tools/restore.d.ts +2 -0
- package/dist/tools/restore.js +20 -0
- package/dist/tools/update-identity.d.ts +34 -0
- package/dist/tools/update-identity.js +194 -0
- package/dist/tools/update.d.ts +2 -0
- package/dist/tools/update.js +16 -0
- package/dist/transport/guards.d.ts +35 -0
- package/dist/transport/guards.js +107 -0
- package/dist/transport/http-server.d.ts +17 -0
- package/dist/transport/http-server.js +198 -0
- package/dist/transport/mcp-app-hello.d.ts +3 -0
- package/dist/transport/mcp-app-hello.js +66 -0
- package/dist/widgets/display-modes.html +131 -0
- package/dist/widgets/hello.html +138 -0
- package/dist/widgets/proposals.html +131 -0
- package/dist/widgets/top-of-mind.html +131 -0
- package/package.json +73 -0
package/assets/demo.cast
ADDED
|
@@ -0,0 +1,396 @@
|
|
|
1
|
+
{"version": 2, "width": 100, "height": 28, "timestamp": 1745433600, "title": "loom: install \u2192 wake \u2192 remember \u2192 recall"}
|
|
2
|
+
[0.5, "o", "\u001b[2J\u001b[H"]
|
|
3
|
+
[1.0, "o", "\u001b[2m# loom \u2014 persistent identity + memory for AI agents\u001b[0m"]
|
|
4
|
+
[1.0, "o", "\r\n"]
|
|
5
|
+
[1.08, "o", "\u001b[2m# demo: install \u2192 wake \u2192 remember \u2192 recall\u001b[0m"]
|
|
6
|
+
[1.08, "o", "\r\n"]
|
|
7
|
+
[1.88, "o", "\r\n"]
|
|
8
|
+
[2.48, "o", "\u001b[1;32m~\u001b[0m \u001b[1;34m$\u001b[0m "]
|
|
9
|
+
[2.55, "o", "n"]
|
|
10
|
+
[2.62, "o", "p"]
|
|
11
|
+
[2.69, "o", "x"]
|
|
12
|
+
[2.76, "o", " "]
|
|
13
|
+
[2.88, "o", "l"]
|
|
14
|
+
[2.95, "o", "o"]
|
|
15
|
+
[3.02, "o", "o"]
|
|
16
|
+
[3.09, "o", "m"]
|
|
17
|
+
[3.16, "o", "a"]
|
|
18
|
+
[3.23, "o", "i"]
|
|
19
|
+
[3.3, "o", " "]
|
|
20
|
+
[3.42, "o", "i"]
|
|
21
|
+
[3.49, "o", "n"]
|
|
22
|
+
[3.56, "o", "s"]
|
|
23
|
+
[3.63, "o", "t"]
|
|
24
|
+
[3.7, "o", "a"]
|
|
25
|
+
[3.77, "o", "l"]
|
|
26
|
+
[3.84, "o", "l"]
|
|
27
|
+
[3.91, "o", " "]
|
|
28
|
+
[4.03, "o", "-"]
|
|
29
|
+
[4.1, "o", "-"]
|
|
30
|
+
[4.17, "o", "h"]
|
|
31
|
+
[4.24, "o", "a"]
|
|
32
|
+
[4.31, "o", "r"]
|
|
33
|
+
[4.38, "o", "n"]
|
|
34
|
+
[4.45, "o", "e"]
|
|
35
|
+
[4.52, "o", "s"]
|
|
36
|
+
[4.59, "o", "s"]
|
|
37
|
+
[4.66, "o", " "]
|
|
38
|
+
[4.78, "o", "c"]
|
|
39
|
+
[4.85, "o", "l"]
|
|
40
|
+
[4.92, "o", "a"]
|
|
41
|
+
[4.99, "o", "u"]
|
|
42
|
+
[5.06, "o", "d"]
|
|
43
|
+
[5.13, "o", "e"]
|
|
44
|
+
[5.2, "o", "-"]
|
|
45
|
+
[5.27, "o", "c"]
|
|
46
|
+
[5.34, "o", "o"]
|
|
47
|
+
[5.41, "o", "d"]
|
|
48
|
+
[5.48, "o", "e"]
|
|
49
|
+
[5.88, "o", "\r\n"]
|
|
50
|
+
[6.98, "o", "\u001b[2mNeed to install the following packages:\u001b[0m"]
|
|
51
|
+
[6.98, "o", "\r\n"]
|
|
52
|
+
[7.04, "o", "\u001b[2m loomai@0.4.0-alpha.7\u001b[0m"]
|
|
53
|
+
[7.04, "o", "\r\n"]
|
|
54
|
+
[7.04, "o", "\u001b[2mOk to proceed? (y) \u001b[0m"]
|
|
55
|
+
[7.84, "o", "y"]
|
|
56
|
+
[7.84, "o", "\r\n"]
|
|
57
|
+
[8.34, "o", "\r\n"]
|
|
58
|
+
[8.54, "o", "\u001b[32m\u2714\u001b[0m Wrote \u001b[1;37m~/.claude/skills/loom-setup.md\u001b[0m"]
|
|
59
|
+
[8.54, "o", "\r\n"]
|
|
60
|
+
[8.64, "o", "\r\n"]
|
|
61
|
+
[8.74, "o", "\u001b[1mNext:\u001b[0m open Claude Code. \u001b[36m/loom-setup\u001b[0m."]
|
|
62
|
+
[8.74, "o", "\r\n"]
|
|
63
|
+
[8.82, "o", "\u001b[2mAfter the skill finishes, restart Claude Code (close and reopen).\u001b[0m"]
|
|
64
|
+
[8.82, "o", "\r\n"]
|
|
65
|
+
[8.82, "o", "\r\n"]
|
|
66
|
+
[11.12, "o", "\r\n"]
|
|
67
|
+
[11.12, "o", "\u001b[2m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u001b[0m"]
|
|
68
|
+
[11.12, "o", "\r\n"]
|
|
69
|
+
[11.17, "o", "\u001b[2m Claude Code \u00b7 \u001b[1m/loom-setup\u001b[0m"]
|
|
70
|
+
[11.17, "o", "\r\n"]
|
|
71
|
+
[11.17, "o", "\u001b[2m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u001b[0m"]
|
|
72
|
+
[11.17, "o", "\r\n"]
|
|
73
|
+
[11.67, "o", "\r\n"]
|
|
74
|
+
[12.47, "o", "\u001b[2mChecking environment...\u001b[0m"]
|
|
75
|
+
[13.67, "o", " \u001b[33mloom MCP not yet wired up (expected on first run)\u001b[0m"]
|
|
76
|
+
[14.07, "o", "\r\n"]
|
|
77
|
+
[14.37, "o", "\r\n"]
|
|
78
|
+
[14.47, "o", "\u001b[1mLet's set up your agent.\u001b[0m"]
|
|
79
|
+
[14.47, "o", "\r\n"]
|
|
80
|
+
[15.07, "o", "\r\n"]
|
|
81
|
+
[15.27, "o", "\u001b[1;37mAgent name:\u001b[0m "]
|
|
82
|
+
[16.89, "o", "a"]
|
|
83
|
+
[17.01, "o", "l"]
|
|
84
|
+
[17.13, "o", "e"]
|
|
85
|
+
[17.25, "o", "x"]
|
|
86
|
+
[17.25, "o", "\r\n"]
|
|
87
|
+
[17.85, "o", "\u001b[1;37mPurpose (one line):\u001b[0m "]
|
|
88
|
+
[19.72, "o", "P"]
|
|
89
|
+
[19.79, "o", "e"]
|
|
90
|
+
[19.86, "o", "r"]
|
|
91
|
+
[19.93, "o", "s"]
|
|
92
|
+
[20.0, "o", "o"]
|
|
93
|
+
[20.07, "o", "n"]
|
|
94
|
+
[20.14, "o", "a"]
|
|
95
|
+
[20.21, "o", "l"]
|
|
96
|
+
[20.28, "o", " "]
|
|
97
|
+
[20.4, "o", "a"]
|
|
98
|
+
[20.47, "o", "s"]
|
|
99
|
+
[20.54, "o", "s"]
|
|
100
|
+
[20.61, "o", "i"]
|
|
101
|
+
[20.68, "o", "s"]
|
|
102
|
+
[20.75, "o", "t"]
|
|
103
|
+
[20.82, "o", "a"]
|
|
104
|
+
[20.89, "o", "n"]
|
|
105
|
+
[20.96, "o", "t"]
|
|
106
|
+
[21.03, "o", " "]
|
|
107
|
+
[21.15, "o", "a"]
|
|
108
|
+
[21.22, "o", "n"]
|
|
109
|
+
[21.29, "o", "d"]
|
|
110
|
+
[21.36, "o", " "]
|
|
111
|
+
[21.48, "o", "c"]
|
|
112
|
+
[21.55, "o", "o"]
|
|
113
|
+
[21.62, "o", "d"]
|
|
114
|
+
[21.69, "o", "i"]
|
|
115
|
+
[21.76, "o", "n"]
|
|
116
|
+
[21.83, "o", "g"]
|
|
117
|
+
[21.9, "o", " "]
|
|
118
|
+
[22.02, "o", "p"]
|
|
119
|
+
[22.09, "o", "a"]
|
|
120
|
+
[22.16, "o", "r"]
|
|
121
|
+
[22.23, "o", "t"]
|
|
122
|
+
[22.3, "o", "n"]
|
|
123
|
+
[22.37, "o", "e"]
|
|
124
|
+
[22.44, "o", "r"]
|
|
125
|
+
[22.44, "o", "\r\n"]
|
|
126
|
+
[23.04, "o", "\u001b[1;37mVoice:\u001b[0m "]
|
|
127
|
+
[24.53, "o", "D"]
|
|
128
|
+
[24.62, "o", "i"]
|
|
129
|
+
[24.71, "o", "r"]
|
|
130
|
+
[24.8, "o", "e"]
|
|
131
|
+
[24.89, "o", "c"]
|
|
132
|
+
[24.98, "o", "t"]
|
|
133
|
+
[25.07, "o", ","]
|
|
134
|
+
[25.16, "o", " "]
|
|
135
|
+
[25.3, "o", "p"]
|
|
136
|
+
[25.39, "o", "r"]
|
|
137
|
+
[25.48, "o", "e"]
|
|
138
|
+
[25.57, "o", "c"]
|
|
139
|
+
[25.66, "o", "i"]
|
|
140
|
+
[25.75, "o", "s"]
|
|
141
|
+
[25.84, "o", "e"]
|
|
142
|
+
[25.93, "o", ","]
|
|
143
|
+
[26.02, "o", " "]
|
|
144
|
+
[26.16, "o", "a"]
|
|
145
|
+
[26.25, "o", " "]
|
|
146
|
+
[26.39, "o", "b"]
|
|
147
|
+
[26.48, "o", "i"]
|
|
148
|
+
[26.57, "o", "t"]
|
|
149
|
+
[26.66, "o", " "]
|
|
150
|
+
[26.8, "o", "d"]
|
|
151
|
+
[26.89, "o", "r"]
|
|
152
|
+
[26.98, "o", "y"]
|
|
153
|
+
[26.98, "o", "\r\n"]
|
|
154
|
+
[27.58, "o", "\u001b[1;37mClients (e.g. claude-code):\u001b[0m "]
|
|
155
|
+
[28.87, "o", "c"]
|
|
156
|
+
[28.96, "o", "l"]
|
|
157
|
+
[29.05, "o", "a"]
|
|
158
|
+
[29.14, "o", "u"]
|
|
159
|
+
[29.23, "o", "d"]
|
|
160
|
+
[29.32, "o", "e"]
|
|
161
|
+
[29.41, "o", "-"]
|
|
162
|
+
[29.5, "o", "c"]
|
|
163
|
+
[29.59, "o", "o"]
|
|
164
|
+
[29.68, "o", "d"]
|
|
165
|
+
[29.77, "o", "e"]
|
|
166
|
+
[29.77, "o", "\r\n"]
|
|
167
|
+
[30.37, "o", "\r\n"]
|
|
168
|
+
[31.07, "o", "\u001b[32m\u2714\u001b[0m Identity initialized for \u001b[1malex\u001b[0m"]
|
|
169
|
+
[31.07, "o", "\r\n"]
|
|
170
|
+
[31.22, "o", "\u001b[32m\u2714\u001b[0m \u001b[2mIDENTITY.md, preferences.md, self-model.md \u2192 ~/.config/loom/alex/\u001b[0m"]
|
|
171
|
+
[31.22, "o", "\r\n"]
|
|
172
|
+
[31.37, "o", "\u001b[32m\u2714\u001b[0m \u001b[2mMCP config written to ~/.mcp.json\u001b[0m"]
|
|
173
|
+
[31.37, "o", "\r\n"]
|
|
174
|
+
[31.52, "o", "\u001b[32m\u2714\u001b[0m \u001b[2m~/.claude/CLAUDE.md updated with identity pointer\u001b[0m"]
|
|
175
|
+
[31.52, "o", "\r\n"]
|
|
176
|
+
[31.92, "o", "\r\n"]
|
|
177
|
+
[32.02, "o", "\u001b[1;33mRestart Claude Code now to activate loom.\u001b[0m"]
|
|
178
|
+
[32.02, "o", "\r\n"]
|
|
179
|
+
[32.02, "o", "\r\n"]
|
|
180
|
+
[35.82, "o", "\r\n"]
|
|
181
|
+
[35.82, "o", "\u001b[2m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u001b[0m"]
|
|
182
|
+
[35.82, "o", "\r\n"]
|
|
183
|
+
[35.87, "o", "\u001b[2m Claude Code \u00b7 new session\u001b[0m"]
|
|
184
|
+
[35.87, "o", "\r\n"]
|
|
185
|
+
[35.87, "o", "\u001b[2m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u001b[0m"]
|
|
186
|
+
[35.87, "o", "\r\n"]
|
|
187
|
+
[36.37, "o", "\r\n"]
|
|
188
|
+
[37.07, "o", "\u001b[2m[mcp__loom__identity \u2192 loading alex's identity]\u001b[0m"]
|
|
189
|
+
[37.07, "o", "\r\n"]
|
|
190
|
+
[37.57, "o", "\r\n"]
|
|
191
|
+
[37.63, "o", "\u001b[1m# Identity\u001b[0m"]
|
|
192
|
+
[37.63, "o", "\r\n"]
|
|
193
|
+
[37.68, "o", ""]
|
|
194
|
+
[37.68, "o", "\r\n"]
|
|
195
|
+
[37.76, "o", "\u001b[1m# alex\u001b[0m"]
|
|
196
|
+
[37.76, "o", "\r\n"]
|
|
197
|
+
[37.84, "o", ""]
|
|
198
|
+
[37.84, "o", "\r\n"]
|
|
199
|
+
[37.92, "o", "Personal assistant and coding partner"]
|
|
200
|
+
[37.92, "o", "\r\n"]
|
|
201
|
+
[38.0, "o", ""]
|
|
202
|
+
[38.0, "o", "\r\n"]
|
|
203
|
+
[38.08, "o", "\u001b[1m## Voice\u001b[0m"]
|
|
204
|
+
[38.08, "o", "\r\n"]
|
|
205
|
+
[38.16, "o", ""]
|
|
206
|
+
[38.16, "o", "\r\n"]
|
|
207
|
+
[38.24, "o", "Direct, precise, a bit dry"]
|
|
208
|
+
[38.24, "o", "\r\n"]
|
|
209
|
+
[38.38, "o", ""]
|
|
210
|
+
[38.38, "o", "\r\n"]
|
|
211
|
+
[38.46, "o", "\u001b[2m---\u001b[0m"]
|
|
212
|
+
[38.46, "o", "\r\n"]
|
|
213
|
+
[38.54, "o", ""]
|
|
214
|
+
[38.54, "o", "\r\n"]
|
|
215
|
+
[38.62, "o", "\u001b[1m# Preferences\u001b[0m"]
|
|
216
|
+
[38.62, "o", "\r\n"]
|
|
217
|
+
[38.7, "o", ""]
|
|
218
|
+
[38.7, "o", "\r\n"]
|
|
219
|
+
[38.78, "o", "\u001b[1m# alex \u2014 Preferences\u001b[0m"]
|
|
220
|
+
[38.78, "o", "\r\n"]
|
|
221
|
+
[38.86, "o", ""]
|
|
222
|
+
[38.86, "o", "\r\n"]
|
|
223
|
+
[38.94, "o", "\u001b[2m*No initial preferences set.*\u001b[0m"]
|
|
224
|
+
[38.94, "o", "\r\n"]
|
|
225
|
+
[39.08, "o", ""]
|
|
226
|
+
[39.08, "o", "\r\n"]
|
|
227
|
+
[39.16, "o", "\u001b[2m---\u001b[0m"]
|
|
228
|
+
[39.16, "o", "\r\n"]
|
|
229
|
+
[39.24, "o", ""]
|
|
230
|
+
[39.24, "o", "\r\n"]
|
|
231
|
+
[39.32, "o", "\u001b[1m# Self-Model\u001b[0m"]
|
|
232
|
+
[39.32, "o", "\r\n"]
|
|
233
|
+
[39.4, "o", ""]
|
|
234
|
+
[39.4, "o", "\r\n"]
|
|
235
|
+
[39.48, "o", "\u001b[1m## Strengths\u001b[0m"]
|
|
236
|
+
[39.48, "o", "\r\n"]
|
|
237
|
+
[39.56, "o", "\u001b[2m*(Add your strengths as you discover them)*\u001b[0m"]
|
|
238
|
+
[39.56, "o", "\r\n"]
|
|
239
|
+
[42.86, "o", "\r\n"]
|
|
240
|
+
[42.86, "o", "\u001b[2m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u001b[0m"]
|
|
241
|
+
[42.86, "o", "\r\n"]
|
|
242
|
+
[43.16, "o", "\r\n"]
|
|
243
|
+
[43.56, "o", "\u001b[1;32m~\u001b[0m \u001b[1;34m$\u001b[0m "]
|
|
244
|
+
[43.616, "o", "e"]
|
|
245
|
+
[43.672, "o", "c"]
|
|
246
|
+
[43.728, "o", "h"]
|
|
247
|
+
[43.784, "o", "o"]
|
|
248
|
+
[43.84, "o", " "]
|
|
249
|
+
[43.946, "o", "\""]
|
|
250
|
+
[44.002, "o", "P"]
|
|
251
|
+
[44.058, "o", "r"]
|
|
252
|
+
[44.114, "o", "e"]
|
|
253
|
+
[44.17, "o", "f"]
|
|
254
|
+
[44.226, "o", "e"]
|
|
255
|
+
[44.282, "o", "r"]
|
|
256
|
+
[44.338, "o", "s"]
|
|
257
|
+
[44.394, "o", " "]
|
|
258
|
+
[44.5, "o", "a"]
|
|
259
|
+
[44.556, "o", "s"]
|
|
260
|
+
[44.612, "o", "y"]
|
|
261
|
+
[44.668, "o", "n"]
|
|
262
|
+
[44.724, "o", "c"]
|
|
263
|
+
[44.78, "o", " "]
|
|
264
|
+
[44.886, "o", "p"]
|
|
265
|
+
[44.942, "o", "a"]
|
|
266
|
+
[44.998, "o", "i"]
|
|
267
|
+
[45.054, "o", "r"]
|
|
268
|
+
[45.11, "o", " "]
|
|
269
|
+
[45.216, "o", "p"]
|
|
270
|
+
[45.272, "o", "r"]
|
|
271
|
+
[45.328, "o", "o"]
|
|
272
|
+
[45.384, "o", "g"]
|
|
273
|
+
[45.44, "o", "r"]
|
|
274
|
+
[45.496, "o", "a"]
|
|
275
|
+
[45.552, "o", "m"]
|
|
276
|
+
[45.608, "o", "m"]
|
|
277
|
+
[45.664, "o", "i"]
|
|
278
|
+
[45.72, "o", "n"]
|
|
279
|
+
[45.776, "o", "g"]
|
|
280
|
+
[45.832, "o", " "]
|
|
281
|
+
[45.938, "o", "o"]
|
|
282
|
+
[45.994, "o", "n"]
|
|
283
|
+
[46.05, "o", " "]
|
|
284
|
+
[46.156, "o", "w"]
|
|
285
|
+
[46.212, "o", "e"]
|
|
286
|
+
[46.268, "o", "e"]
|
|
287
|
+
[46.324, "o", "k"]
|
|
288
|
+
[46.38, "o", "d"]
|
|
289
|
+
[46.436, "o", "a"]
|
|
290
|
+
[46.492, "o", "y"]
|
|
291
|
+
[46.548, "o", " "]
|
|
292
|
+
[46.654, "o", "e"]
|
|
293
|
+
[46.71, "o", "v"]
|
|
294
|
+
[46.766, "o", "e"]
|
|
295
|
+
[46.822, "o", "n"]
|
|
296
|
+
[46.878, "o", "i"]
|
|
297
|
+
[46.934, "o", "n"]
|
|
298
|
+
[46.99, "o", "g"]
|
|
299
|
+
[47.046, "o", "s"]
|
|
300
|
+
[47.102, "o", "\""]
|
|
301
|
+
[47.158, "o", " "]
|
|
302
|
+
[47.264, "o", "|"]
|
|
303
|
+
[47.32, "o", " "]
|
|
304
|
+
[47.426, "o", "l"]
|
|
305
|
+
[47.482, "o", "o"]
|
|
306
|
+
[47.538, "o", "o"]
|
|
307
|
+
[47.594, "o", "m"]
|
|
308
|
+
[47.65, "o", " "]
|
|
309
|
+
[47.756, "o", "r"]
|
|
310
|
+
[47.812, "o", "e"]
|
|
311
|
+
[47.868, "o", "m"]
|
|
312
|
+
[47.924, "o", "e"]
|
|
313
|
+
[47.98, "o", "m"]
|
|
314
|
+
[48.036, "o", "b"]
|
|
315
|
+
[48.092, "o", "e"]
|
|
316
|
+
[48.148, "o", "r"]
|
|
317
|
+
[48.204, "o", " "]
|
|
318
|
+
[48.31, "o", "\""]
|
|
319
|
+
[48.366, "o", "w"]
|
|
320
|
+
[48.422, "o", "o"]
|
|
321
|
+
[48.478, "o", "r"]
|
|
322
|
+
[48.534, "o", "k"]
|
|
323
|
+
[48.59, "o", "i"]
|
|
324
|
+
[48.646, "o", "n"]
|
|
325
|
+
[48.702, "o", "g"]
|
|
326
|
+
[48.758, "o", " "]
|
|
327
|
+
[48.864, "o", "s"]
|
|
328
|
+
[48.92, "o", "t"]
|
|
329
|
+
[48.976, "o", "y"]
|
|
330
|
+
[49.032, "o", "l"]
|
|
331
|
+
[49.088, "o", "e"]
|
|
332
|
+
[49.144, "o", "\""]
|
|
333
|
+
[49.2, "o", " "]
|
|
334
|
+
[49.306, "o", "-"]
|
|
335
|
+
[49.362, "o", "-"]
|
|
336
|
+
[49.418, "o", "c"]
|
|
337
|
+
[49.474, "o", "a"]
|
|
338
|
+
[49.53, "o", "t"]
|
|
339
|
+
[49.586, "o", "e"]
|
|
340
|
+
[49.642, "o", "g"]
|
|
341
|
+
[49.698, "o", "o"]
|
|
342
|
+
[49.754, "o", "r"]
|
|
343
|
+
[49.81, "o", "y"]
|
|
344
|
+
[49.866, "o", " "]
|
|
345
|
+
[49.972, "o", "u"]
|
|
346
|
+
[50.028, "o", "s"]
|
|
347
|
+
[50.084, "o", "e"]
|
|
348
|
+
[50.14, "o", "r"]
|
|
349
|
+
[50.54, "o", "\r\n"]
|
|
350
|
+
[51.34, "o", "\u001b[32mRemembered:\u001b[0m \u001b[2muser/working-style-a4f2c1\u001b[0m \u2014 \u001b[1mworking style\u001b[0m"]
|
|
351
|
+
[51.34, "o", "\r\n"]
|
|
352
|
+
[51.74, "o", "\r\n"]
|
|
353
|
+
[52.04, "o", "\u001b[1;32m~\u001b[0m \u001b[1;34m$\u001b[0m "]
|
|
354
|
+
[52.11, "o", "l"]
|
|
355
|
+
[52.18, "o", "o"]
|
|
356
|
+
[52.25, "o", "o"]
|
|
357
|
+
[52.32, "o", "m"]
|
|
358
|
+
[52.39, "o", " "]
|
|
359
|
+
[52.51, "o", "r"]
|
|
360
|
+
[52.58, "o", "e"]
|
|
361
|
+
[52.65, "o", "c"]
|
|
362
|
+
[52.72, "o", "a"]
|
|
363
|
+
[52.79, "o", "l"]
|
|
364
|
+
[52.86, "o", "l"]
|
|
365
|
+
[52.93, "o", " "]
|
|
366
|
+
[53.05, "o", "\""]
|
|
367
|
+
[53.12, "o", "p"]
|
|
368
|
+
[53.19, "o", "a"]
|
|
369
|
+
[53.26, "o", "i"]
|
|
370
|
+
[53.33, "o", "r"]
|
|
371
|
+
[53.4, "o", " "]
|
|
372
|
+
[53.52, "o", "p"]
|
|
373
|
+
[53.59, "o", "r"]
|
|
374
|
+
[53.66, "o", "o"]
|
|
375
|
+
[53.73, "o", "g"]
|
|
376
|
+
[53.8, "o", "r"]
|
|
377
|
+
[53.87, "o", "a"]
|
|
378
|
+
[53.94, "o", "m"]
|
|
379
|
+
[54.01, "o", "m"]
|
|
380
|
+
[54.08, "o", "i"]
|
|
381
|
+
[54.15, "o", "n"]
|
|
382
|
+
[54.22, "o", "g"]
|
|
383
|
+
[54.29, "o", "\""]
|
|
384
|
+
[54.69, "o", "\r\n"]
|
|
385
|
+
[55.59, "o", "Found \u001b[1m1\u001b[0m matching memory:"]
|
|
386
|
+
[55.59, "o", "\r\n"]
|
|
387
|
+
[55.89, "o", "\r\n"]
|
|
388
|
+
[55.89, "o", "\u001b[1m## working style\u001b[0m"]
|
|
389
|
+
[55.89, "o", "\r\n"]
|
|
390
|
+
[55.99, "o", "\u001b[2muser \u00b7 2026-04-23\u001b[0m"]
|
|
391
|
+
[55.99, "o", "\r\n"]
|
|
392
|
+
[56.09, "o", "\r\n"]
|
|
393
|
+
[56.19, "o", "Prefers async pair programming on weekday evenings"]
|
|
394
|
+
[56.19, "o", "\r\n"]
|
|
395
|
+
[56.69, "o", "\r\n"]
|
|
396
|
+
[57.09, "o", "\u001b[1;32m~\u001b[0m \u001b[1;34m$\u001b[0m "]
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: loom-setup
|
|
3
|
+
description: Set up loom (persistent identity + memory) for this agent
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# loom-setup
|
|
7
|
+
|
|
8
|
+
You are installing and configuring loom — a persistent identity +
|
|
9
|
+
memory layer — for the user in the harness you're running in right
|
|
10
|
+
now. loom is already installed as a CLI (`loom` or `npx loom`). Your
|
|
11
|
+
job is to drive the first-run flow, with the user's consent, without
|
|
12
|
+
clobbering anything that already exists.
|
|
13
|
+
|
|
14
|
+
## Ground rules
|
|
15
|
+
|
|
16
|
+
- **Existing agent dirs are inviolable.** If `~/.config/loom/<name>/`
|
|
17
|
+
has an `IDENTITY.md`, it belongs to a prior agent. Never overwrite
|
|
18
|
+
it. Never propose `--force`. If the user wants to replace an agent,
|
|
19
|
+
they remove the directory themselves.
|
|
20
|
+
- **Verify, don't assume.** Read harness config files before writing
|
|
21
|
+
to them. Re-read after writing. Finish with `loom wake --json`.
|
|
22
|
+
- **When you can do it, do it.** Don't ask the user to edit JSON by
|
|
23
|
+
hand if you can edit the file yourself. Don't print a config
|
|
24
|
+
snippet as advice when you can write it.
|
|
25
|
+
|
|
26
|
+
## Step 1 — Probe the environment
|
|
27
|
+
|
|
28
|
+
Run: `loom doctor --json`
|
|
29
|
+
|
|
30
|
+
Parse the output. You'll see:
|
|
31
|
+
|
|
32
|
+
- `stackVersionOk`, `nodeOk`, `contextDirResolved`
|
|
33
|
+
- `existingAgents: [{ name, path, hasIdentity, hasMemoriesDb,
|
|
34
|
+
git: { initialized, hasRemote, dirty, gitignorePresent } }, ...]`
|
|
35
|
+
|
|
36
|
+
If `stackVersionOk` is false or `nodeOk` is false, stop and tell the
|
|
37
|
+
user what's wrong.
|
|
38
|
+
|
|
39
|
+
## Step 2 — Decide: new agent or use existing
|
|
40
|
+
|
|
41
|
+
If `existingAgents` is non-empty, summarize them to the user:
|
|
42
|
+
|
|
43
|
+
> I see these agents already set up:
|
|
44
|
+
> - `myagent` at `~/.config/loom/myagent/` (has identity)
|
|
45
|
+
>
|
|
46
|
+
> Do you want to (a) use an existing one, (b) create a new one with a
|
|
47
|
+
> different name, or (c) stop?
|
|
48
|
+
|
|
49
|
+
- If they pick (a): set `LOOM_CONTEXT_DIR=<path>` and skip to Step 5
|
|
50
|
+
(you're just wiring this harness to an existing agent).
|
|
51
|
+
- If they pick (b): continue to Step 3 with a new name.
|
|
52
|
+
- If they pick (c): exit.
|
|
53
|
+
|
|
54
|
+
If `existingAgents` is empty, tell the user that and continue to
|
|
55
|
+
Step 3.
|
|
56
|
+
|
|
57
|
+
## Step 3 — Interview
|
|
58
|
+
|
|
59
|
+
**Four questions. That is the whole interview.** Everything else a first
|
|
60
|
+
identity needs — what a persistent agent *is*, where its continuity lives,
|
|
61
|
+
how memory is tiered, the reflection loop, honesty about what it knows —
|
|
62
|
+
is written by `bootstrap` from a fixed scaffold. Don't ask about any of
|
|
63
|
+
it, and don't invent extra questions.
|
|
64
|
+
|
|
65
|
+
Ask one at a time, and **show the example before the question**. A cold
|
|
66
|
+
"what is this agent for?" gets a blank answer back.
|
|
67
|
+
|
|
68
|
+
**1. The user's name.**
|
|
69
|
+
|
|
70
|
+
> For example: `Jonathan`.
|
|
71
|
+
>
|
|
72
|
+
> What should this agent call you?
|
|
73
|
+
|
|
74
|
+
**2. The agent's name.**
|
|
75
|
+
|
|
76
|
+
> For example: `art`, `visual-mark`, `sage`.
|
|
77
|
+
>
|
|
78
|
+
> What do you want to call it?
|
|
79
|
+
|
|
80
|
+
Must be lowercase alphanumeric + hyphens, 1–64 chars, not a reserved word
|
|
81
|
+
(`current`, `default`, `config`, `backups`, `cache`, `tmp`, `shared`).
|
|
82
|
+
Re-ask on any collision with an existing dir.
|
|
83
|
+
|
|
84
|
+
**3. Purpose — one line.** What it exists to do.
|
|
85
|
+
|
|
86
|
+
> For example: *"Jonathan's primary assistant and the coordinator of all
|
|
87
|
+
> work — holds memory across sessions and runs parallel worker agents."*
|
|
88
|
+
>
|
|
89
|
+
> What is yours for?
|
|
90
|
+
|
|
91
|
+
**4. Voice — one line.** How it talks.
|
|
92
|
+
|
|
93
|
+
> For example: *"Direct. Brief when brief is right, thorough when the task
|
|
94
|
+
> demands it. Has opinions and pushes back — never a yes-machine."*
|
|
95
|
+
>
|
|
96
|
+
> How should it sound?
|
|
97
|
+
|
|
98
|
+
Two rules about the examples:
|
|
99
|
+
|
|
100
|
+
- They are a **shape, not a menu**. If the answer comes back as the example
|
|
101
|
+
with a name swapped in, ask once more for it in their own words. A copied
|
|
102
|
+
purpose line produces a copied agent, and this has actually happened.
|
|
103
|
+
- The answers are **theirs**. Pass them through verbatim. Don't polish them
|
|
104
|
+
into your own prose, and don't expand a one-liner into a paragraph.
|
|
105
|
+
|
|
106
|
+
The context dir will be `~/.config/loom/<name>/` unless the user
|
|
107
|
+
overrides.
|
|
108
|
+
|
|
109
|
+
## Step 4 — Bootstrap
|
|
110
|
+
|
|
111
|
+
Run:
|
|
112
|
+
|
|
113
|
+
```
|
|
114
|
+
echo '{"user":"<USER>","name":"<NAME>","purpose":"<PURPOSE>","voice":"<VOICE>"}' \
|
|
115
|
+
| loom bootstrap --context-dir ~/.config/loom/<NAME>
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
This writes the full IDENTITY.md — the four answers at the top, the
|
|
119
|
+
structural scaffold below them — plus `preferences.md` seeded with the
|
|
120
|
+
user's name and `self-model.md`.
|
|
121
|
+
|
|
122
|
+
Then scaffold the harness manifest for this harness:
|
|
123
|
+
|
|
124
|
+
```
|
|
125
|
+
loom harness init <HARNESS_KEY> --context-dir ~/.config/loom/<NAME>
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Where `<HARNESS_KEY>` is one of `claude-code`, `codex`, `gemini-cli`,
|
|
129
|
+
`opencode`.
|
|
130
|
+
|
|
131
|
+
## Step 5 — Wire the harness's MCP config
|
|
132
|
+
|
|
133
|
+
This is the part only you can do safely, because the file path and
|
|
134
|
+
schema drift per vendor. Read the relevant config file for this
|
|
135
|
+
harness before writing anything.
|
|
136
|
+
|
|
137
|
+
Targets (Linux/macOS):
|
|
138
|
+
|
|
139
|
+
| harness | config file | env vars to set |
|
|
140
|
+
|-------------|----------------------------------------|----------------------------|
|
|
141
|
+
| claude-code | `~/.claude.json` or `.mcp.json` in cwd | `LOOM_CONTEXT_DIR`, `LOOM_CLIENT=claude-code`, `LOOM_MODEL` |
|
|
142
|
+
| codex | `~/.codex/config.toml` | same + `LOOM_CLIENT=codex` |
|
|
143
|
+
| gemini-cli | `~/.gemini/settings.json` | same + `LOOM_CLIENT=gemini-cli` |
|
|
144
|
+
| opencode | `~/.config/opencode/config.json` | same + `LOOM_CLIENT=opencode` |
|
|
145
|
+
|
|
146
|
+
Procedure:
|
|
147
|
+
|
|
148
|
+
1. Read the current config file.
|
|
149
|
+
2. Look for an existing `loom` entry under `mcpServers` (JSON) or
|
|
150
|
+
`[mcp_servers.loom]` (TOML). If one exists and points to the right
|
|
151
|
+
context dir, skip this step.
|
|
152
|
+
3. If absent, add an entry that runs `loom serve` with the env vars
|
|
153
|
+
above. Use `loom` as the command (or `npx loom` if `loom` isn't on
|
|
154
|
+
PATH).
|
|
155
|
+
4. Re-read the file to verify your edit took.
|
|
156
|
+
|
|
157
|
+
If the file format confuses you, stop and ask the user rather than
|
|
158
|
+
guess.
|
|
159
|
+
|
|
160
|
+
## Step 6 — Inject identity pointer into the harness dotfile
|
|
161
|
+
|
|
162
|
+
Run:
|
|
163
|
+
|
|
164
|
+
```
|
|
165
|
+
loom inject --harness <HARNESS_KEY> --context-dir ~/.config/loom/<NAME>
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
This writes a marker-bounded block into the harness's CLAUDE.md /
|
|
169
|
+
AGENTS.md / GEMINI.md telling the agent to call the `identity` tool
|
|
170
|
+
on session start.
|
|
171
|
+
|
|
172
|
+
## Step 7 — Verify
|
|
173
|
+
|
|
174
|
+
Run: `loom wake --json --context-dir ~/.config/loom/<NAME>`
|
|
175
|
+
|
|
176
|
+
- If it returns a payload with the right name: success. Tell the user
|
|
177
|
+
to **restart their harness** (close and reopen, or exit and
|
|
178
|
+
restart) so the new MCP server picks up the config edit. Remind
|
|
179
|
+
them that once they reopen, calling `identity` will wake them as
|
|
180
|
+
`<NAME>`.
|
|
181
|
+
- If it errors: diagnose from the output and loop back to the failing
|
|
182
|
+
step.
|
|
183
|
+
|
|
184
|
+
## What you are *not* doing
|
|
185
|
+
|
|
186
|
+
- Editing IDENTITY.md or preferences.md content yourself. The
|
|
187
|
+
bootstrap + procedures seeds leave sensible templates; the agent
|
|
188
|
+
edits them after first wake.
|
|
189
|
+
- Writing any file under `~/.config/loom/<name>/` other than what the
|
|
190
|
+
`loom` CLI puts there.
|
|
191
|
+
- Running `bootstrap --force`, ever.
|
|
192
|
+
- Touching another existing agent's dir.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/** Dense models this runtime knows how to fetch and run. */
|
|
2
|
+
export declare const EmbeddingModel: {
|
|
3
|
+
readonly AllMiniLML6V2: 'fast-all-MiniLM-L6-v2';
|
|
4
|
+
readonly BGEBaseEN: 'fast-bge-base-en';
|
|
5
|
+
readonly BGEBaseENV15: 'fast-bge-base-en-v1.5';
|
|
6
|
+
readonly BGESmallEN: 'fast-bge-small-en';
|
|
7
|
+
readonly BGESmallENV15: 'fast-bge-small-en-v1.5';
|
|
8
|
+
readonly BGESmallZH: 'fast-bge-small-zh-v1.5';
|
|
9
|
+
readonly MLE5Large: 'fast-multilingual-e5-large';
|
|
10
|
+
};
|
|
11
|
+
export type EmbeddingModelName = (typeof EmbeddingModel)[keyof typeof EmbeddingModel];
|
|
12
|
+
export interface FlagEmbeddingInit {
|
|
13
|
+
model: EmbeddingModelName;
|
|
14
|
+
cacheDir: string;
|
|
15
|
+
/** Token cap per input. Clamped by the model's own tokenizer config. */
|
|
16
|
+
maxLength?: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Loaded dense embedder: a tokenizer plus an ONNX inference session.
|
|
20
|
+
*
|
|
21
|
+
* Named for the upstream class so the diff in fastembed.ts stays reviewable.
|
|
22
|
+
*/
|
|
23
|
+
export declare class FlagEmbedding {
|
|
24
|
+
private readonly tokenizer;
|
|
25
|
+
private readonly session;
|
|
26
|
+
private readonly model;
|
|
27
|
+
private constructor();
|
|
28
|
+
static init({ model, cacheDir, maxLength, }: FlagEmbeddingInit): Promise<FlagEmbedding>;
|
|
29
|
+
embed(texts: string[], batchSize?: number): AsyncGenerator<Float32Array[]>;
|
|
30
|
+
/**
|
|
31
|
+
* QUIRK PRESERVED: the "query: " prefix is the E5 instruction format. BGE
|
|
32
|
+
* models want "Represent this sentence for searching relevant passages: "
|
|
33
|
+
* instead. Upstream applied E5's prefix to every model and loom's stored
|
|
34
|
+
* vectors were produced under that regime, so it stays until we decide to
|
|
35
|
+
* re-embed. See t-424.
|
|
36
|
+
*/
|
|
37
|
+
queryEmbed(query: string): Promise<Float32Array>;
|
|
38
|
+
private runBatch;
|
|
39
|
+
}
|