@symerian/symi 3.0.17 → 3.0.19

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.
Files changed (259) hide show
  1. package/dist/{audio-preflight-CBDFctZN.js → audio-preflight-BfmZbg4Y.js} +4 -4
  2. package/dist/{audio-preflight-gsZSpG-6.js → audio-preflight-DcuC-liM.js} +4 -4
  3. package/dist/build-info.json +3 -3
  4. package/dist/bundled/boot-md/handler.js +8 -8
  5. package/dist/bundled/session-memory/handler.js +7 -7
  6. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  7. package/dist/{chrome-nPMY1XTJ.js → chrome-Bo7cbvFK.js} +5 -5
  8. package/dist/{chrome-BjVab8gM.js → chrome-DYp18Q0t.js} +5 -5
  9. package/dist/{deliver-D-QFqm31.js → deliver-ChSIbiMM.js} +1 -1
  10. package/dist/{deliver-B4-bcot9.js → deliver-DEgRQM4J.js} +1 -1
  11. package/dist/extensionAPI.js +7 -7
  12. package/dist/{image-CDwtQjmt.js → image-Bx-hvoNJ.js} +1 -1
  13. package/dist/{image-CcS-vzTA.js → image-CQl_mjWk.js} +1 -1
  14. package/dist/llm-slug-generator.js +7 -7
  15. package/dist/{manager-BnEdHzmO.js → manager-D_pn0urG.js} +1 -1
  16. package/dist/{manager-09r0qPze.js → manager-YQxK2t0C.js} +1 -1
  17. package/dist/{pi-embedded-CWsY69-4.js → pi-embedded-CLw_ZzEZ.js} +16 -16
  18. package/dist/{pi-embedded-helpers-BBMy-lqr.js → pi-embedded-helpers-B5I53aw6.js} +4 -4
  19. package/dist/{pi-embedded-helpers-ChEYbgVj.js → pi-embedded-helpers-sUAEIC9X.js} +4 -4
  20. package/dist/plugin-sdk/{accounts-BfyWsC_i.js → accounts-CWFytwbR.js} +3 -3
  21. package/dist/plugin-sdk/{active-listener-DcJW7xAT.js → active-listener-BkZ4jHrL.js} +2 -2
  22. package/dist/plugin-sdk/{agent-scope-ChbGV6of.js → agent-scope-C9gfY_Gk.js} +2 -2
  23. package/dist/plugin-sdk/{audio-preflight-D3GtNLqW.js → audio-preflight-HKbdzXLZ.js} +21 -21
  24. package/dist/plugin-sdk/{bindings-CN2Qmefj.js → bindings-BaKIqPPy.js} +2 -2
  25. package/dist/plugin-sdk/{channel-web-DTyqujjA.js → channel-web-D5nWiTH1.js} +18 -18
  26. package/dist/plugin-sdk/{chrome-BKzAKr3K.js → chrome-klTSnz-9.js} +3 -3
  27. package/dist/plugin-sdk/{chunk-DhDkBujV.js → chunk-BbrYSny_.js} +1 -1
  28. package/dist/plugin-sdk/{command-format-CVrYFyZS.js → command-format-BN6tyZt6.js} +1 -1
  29. package/dist/plugin-sdk/{commands-registry-17yfZkHZ.js → commands-registry-CTzKKtY6.js} +4 -4
  30. package/dist/plugin-sdk/{config-7wk65zKC.js → config-Crv2qEdJ.js} +9 -9
  31. package/dist/plugin-sdk/{consolidate-exbAW0ml.js → consolidate-DT1QH65Q.js} +2 -2
  32. package/dist/plugin-sdk/{deliver-TxAcw7J5.js → deliver-7rOvAlrc.js} +12 -12
  33. package/dist/plugin-sdk/{diagnostic-Debx4frd.js → diagnostic-0nsxhWp7.js} +1 -1
  34. package/dist/plugin-sdk/{fs-safe-wBYbAkJF.js → fs-safe-DfWYBeWF.js} +1 -1
  35. package/dist/plugin-sdk/{gemini-auth-7U2pm2Ky.js → gemini-auth-C0N0_u49.js} +1 -1
  36. package/dist/plugin-sdk/{image-BtDVmYA5.js → image-WOSl2apK.js} +4 -4
  37. package/dist/plugin-sdk/index.js +43 -43
  38. package/dist/plugin-sdk/{ir-CKMvRrGW.js → ir-9J84MTls.js} +4 -4
  39. package/dist/plugin-sdk/{local-roots-c_gaPs01.js → local-roots-OLRDbvyY.js} +3 -3
  40. package/dist/plugin-sdk/{login-DUym1Jy0.js → login-C7x4q0i2.js} +7 -7
  41. package/dist/plugin-sdk/{login-qr-B-WBdvrX.js → login-qr-Dv5_MoAW.js} +9 -9
  42. package/dist/plugin-sdk/{manager-B71SCzos.js → manager-C83tK17x.js} +8 -8
  43. package/dist/plugin-sdk/{manifest-registry-Dnic6Chh.js → manifest-registry-CJMV-PI7.js} +1 -1
  44. package/dist/plugin-sdk/{markdown-tables-Dur7OTlM.js → markdown-tables-DXNKz5y_.js} +1 -1
  45. package/dist/plugin-sdk/{message-channel-BrAhJJV_.js → message-channel-aGy1HbQQ.js} +1 -1
  46. package/dist/plugin-sdk/{model-selection-B9qaVQSJ.js → model-selection-C-3-tpe7.js} +4 -4
  47. package/dist/plugin-sdk/{outbound-DB1wDM8b.js → outbound-DquCeSy5.js} +6 -6
  48. package/dist/plugin-sdk/{pi-auth-json-ZO118hoy.js → pi-auth-json-D9PDCXGn.js} +1 -1
  49. package/dist/plugin-sdk/{pi-embedded-helpers-s_U0Un7j.js → pi-embedded-helpers-D3ygfH7l.js} +16 -16
  50. package/dist/plugin-sdk/{plugins-DF81oSaI.js → plugins-DOwnSg9D.js} +4 -4
  51. package/dist/plugin-sdk/{pw-ai-CTwP02uv.js → pw-ai-rlengLjb.js} +8 -8
  52. package/dist/plugin-sdk/{qmd-manager-CBaSGant.js → qmd-manager-BzxFjRFa.js} +4 -4
  53. package/dist/plugin-sdk/{registry-CZVURNhF.js → registry-5iFfixlB.js} +2 -2
  54. package/dist/plugin-sdk/{replies-hwRbkU3z.js → replies-BXOzO_H5.js} +7 -7
  55. package/dist/plugin-sdk/{reply-prefix-CaXmzZlx.js → reply-prefix-INAKTqCU.js} +1 -1
  56. package/dist/plugin-sdk/{resolve-outbound-target-fxVSOBmk.js → resolve-outbound-target-DvbxHtqp.js} +2 -2
  57. package/dist/plugin-sdk/{resolve-route-ClCyiOeu.js → resolve-route-URXlY3AK.js} +3 -3
  58. package/dist/plugin-sdk/{runner-Cq5jvwQ7.js → runner-Bv0_DWoH.js} +9 -9
  59. package/dist/plugin-sdk/{session-B_TkB65Y.js → session-C3r8l7ou.js} +4 -4
  60. package/dist/plugin-sdk/{skill-commands-0LF9HTGr.js → skill-commands-KjLUGIdZ.js} +5 -5
  61. package/dist/plugin-sdk/{skills-BIT_O7J0.js → skills-BrsD4L5c.js} +7 -7
  62. package/dist/plugin-sdk/{sqlite-Bx5Y5U5X.js → sqlite-CjW7ME1H.js} +1 -1
  63. package/dist/plugin-sdk/{subsystem-CXqYeDy-.js → subsystem-DcOg1xJr.js} +1 -1
  64. package/dist/plugin-sdk/{synthesis-DtsYAj1E.js → synthesis-CY7YAasV.js} +38 -38
  65. package/dist/plugin-sdk/{target-errors-B8mokOeH.js → target-errors-BVWJGWFq.js} +2 -2
  66. package/dist/plugin-sdk/{thinking-Ca0DhqzO.js → thinking-CtsTDPOi.js} +3 -3
  67. package/dist/plugin-sdk/{tokens-CvlONEqh.js → tokens-8lqOTZCB.js} +1 -1
  68. package/dist/plugin-sdk/{tool-images-DpBaWEHT.js → tool-images-Cl_rGIUZ.js} +2 -2
  69. package/dist/plugin-sdk/{tool-loop-detection-BOvUFa0f.js → tool-loop-detection-Da4WUT_P.js} +2 -2
  70. package/dist/plugin-sdk/{unified-runner-CnM7lyNd.js → unified-runner-nwMnsZyj.js} +60 -60
  71. package/dist/plugin-sdk/web-BlweOZDp.js +54 -0
  72. package/dist/plugin-sdk/{whatsapp-actions-CvnfsFJm.js → whatsapp-actions-DpfaGYs7.js} +21 -21
  73. package/dist/{pw-ai-BW8_KeDf.js → pw-ai-BqxJG-Wh.js} +1 -1
  74. package/dist/{pw-ai-j9IE1K0-.js → pw-ai-C-NSGye0.js} +1 -1
  75. package/dist/{runner-8ALr2UII.js → runner-COGFTeDw.js} +1 -1
  76. package/dist/{runner-C4-9kFdR.js → runner-DhCi2lT1.js} +1 -1
  77. package/dist/{synthesis-Cph3LhA1.js → synthesis-CXZu24Vx.js} +7 -7
  78. package/dist/{synthesis-Cus0A2dL.js → synthesis-DrPxcMlQ.js} +7 -7
  79. package/dist/{unified-runner-CX80YMTk.js → unified-runner-iByUazvW.js} +16 -16
  80. package/dist/{web-ChozvJ7I.js → web-EsMQBIYf.js} +7 -7
  81. package/dist/{web-DFlsbXmQ.js → web-PPg5y6xI.js} +7 -7
  82. package/package.json +1 -1
  83. package/dist/plugin-sdk/web-CIPJBHAU.js +0 -54
  84. package/extensions/copilot-proxy/README.md +0 -24
  85. package/extensions/copilot-proxy/index.ts +0 -154
  86. package/extensions/copilot-proxy/node_modules/.bin/symi +0 -21
  87. package/extensions/copilot-proxy/package.json +0 -15
  88. package/extensions/copilot-proxy/symi.plugin.json +0 -9
  89. package/extensions/device-pair/index.ts +0 -642
  90. package/extensions/device-pair/symi.plugin.json +0 -20
  91. package/extensions/diagnostics-otel/index.ts +0 -15
  92. package/extensions/diagnostics-otel/node_modules/.bin/acorn +0 -21
  93. package/extensions/diagnostics-otel/node_modules/.bin/symi +0 -21
  94. package/extensions/diagnostics-otel/package.json +0 -27
  95. package/extensions/diagnostics-otel/src/service.test.ts +0 -290
  96. package/extensions/diagnostics-otel/src/service.ts +0 -666
  97. package/extensions/diagnostics-otel/symi.plugin.json +0 -8
  98. package/extensions/google-antigravity-auth/README.md +0 -24
  99. package/extensions/google-antigravity-auth/index.ts +0 -424
  100. package/extensions/google-antigravity-auth/node_modules/.bin/symi +0 -21
  101. package/extensions/google-antigravity-auth/package.json +0 -15
  102. package/extensions/google-antigravity-auth/symi.plugin.json +0 -9
  103. package/extensions/google-gemini-cli-auth/README.md +0 -35
  104. package/extensions/google-gemini-cli-auth/index.ts +0 -75
  105. package/extensions/google-gemini-cli-auth/node_modules/.bin/symi +0 -21
  106. package/extensions/google-gemini-cli-auth/oauth.test.ts +0 -162
  107. package/extensions/google-gemini-cli-auth/oauth.ts +0 -636
  108. package/extensions/google-gemini-cli-auth/package.json +0 -15
  109. package/extensions/google-gemini-cli-auth/symi.plugin.json +0 -9
  110. package/extensions/learning-loop/index.ts +0 -159
  111. package/extensions/learning-loop/node_modules/.bin/symi +0 -21
  112. package/extensions/learning-loop/package.json +0 -18
  113. package/extensions/learning-loop/src/analytics/gateway-methods.ts +0 -230
  114. package/extensions/learning-loop/src/analytics/metrics-aggregator.ts +0 -153
  115. package/extensions/learning-loop/src/capture/run-tracker.ts +0 -181
  116. package/extensions/learning-loop/src/capture/serializer.ts +0 -74
  117. package/extensions/learning-loop/src/db.ts +0 -583
  118. package/extensions/learning-loop/src/feedback/explicit-feedback.ts +0 -58
  119. package/extensions/learning-loop/src/feedback/implicit-signals.ts +0 -89
  120. package/extensions/learning-loop/src/graph/edge-inference.ts +0 -189
  121. package/extensions/learning-loop/src/graph/graph-retrieval.ts +0 -144
  122. package/extensions/learning-loop/src/graph/graph-store.ts +0 -183
  123. package/extensions/learning-loop/src/hooks.ts +0 -244
  124. package/extensions/learning-loop/src/injection/cache.ts +0 -73
  125. package/extensions/learning-loop/src/injection/context-injector.ts +0 -104
  126. package/extensions/learning-loop/src/injection/prompt-builder.ts +0 -43
  127. package/extensions/learning-loop/src/learning/embedding-bridge.ts +0 -54
  128. package/extensions/learning-loop/src/learning/learning-extractor.ts +0 -217
  129. package/extensions/learning-loop/src/learning/learning-store.ts +0 -158
  130. package/extensions/learning-loop/src/learning/retrieval.ts +0 -87
  131. package/extensions/learning-loop/src/math/confidence-intervals.ts +0 -62
  132. package/extensions/learning-loop/src/math/ewma.ts +0 -51
  133. package/extensions/learning-loop/src/math/weighted-scorer.ts +0 -42
  134. package/extensions/learning-loop/src/schema.ts +0 -176
  135. package/extensions/learning-loop/src/scoring/normalization.ts +0 -32
  136. package/extensions/learning-loop/src/scoring/quality-engine.ts +0 -78
  137. package/extensions/learning-loop/src/scoring/signal-extractors.ts +0 -155
  138. package/extensions/learning-loop/src/test/context-injector.test.ts +0 -142
  139. package/extensions/learning-loop/src/test/fixes.test.ts +0 -1286
  140. package/extensions/learning-loop/src/test/graph.test.ts +0 -711
  141. package/extensions/learning-loop/src/test/integration.test.ts +0 -312
  142. package/extensions/learning-loop/src/test/learning-store.test.ts +0 -191
  143. package/extensions/learning-loop/src/test/math.test.ts +0 -148
  144. package/extensions/learning-loop/src/test/quality-engine.test.ts +0 -231
  145. package/extensions/learning-loop/src/test/run-tracker.test.ts +0 -143
  146. package/extensions/learning-loop/src/types.ts +0 -281
  147. package/extensions/learning-loop/symi.plugin.json +0 -46
  148. package/extensions/llm-task/README.md +0 -97
  149. package/extensions/llm-task/index.ts +0 -6
  150. package/extensions/llm-task/package.json +0 -12
  151. package/extensions/llm-task/src/llm-task-tool.test.ts +0 -138
  152. package/extensions/llm-task/src/llm-task-tool.ts +0 -249
  153. package/extensions/llm-task/symi.plugin.json +0 -21
  154. package/extensions/memory-lancedb/config.ts +0 -161
  155. package/extensions/memory-lancedb/index.test.ts +0 -330
  156. package/extensions/memory-lancedb/index.ts +0 -670
  157. package/extensions/memory-lancedb/node_modules/.bin/arrow2csv +0 -21
  158. package/extensions/memory-lancedb/node_modules/.bin/openai +0 -21
  159. package/extensions/memory-lancedb/node_modules/.bin/symi +0 -21
  160. package/extensions/memory-lancedb/package.json +0 -20
  161. package/extensions/memory-lancedb/symi.plugin.json +0 -71
  162. package/extensions/minimax-portal-auth/README.md +0 -33
  163. package/extensions/minimax-portal-auth/index.ts +0 -161
  164. package/extensions/minimax-portal-auth/node_modules/.bin/symi +0 -21
  165. package/extensions/minimax-portal-auth/oauth.ts +0 -247
  166. package/extensions/minimax-portal-auth/package.json +0 -15
  167. package/extensions/minimax-portal-auth/symi.plugin.json +0 -9
  168. package/extensions/model-equalizer/index.ts +0 -80
  169. package/extensions/model-equalizer/skills/model-equalizer/SKILL.md +0 -58
  170. package/extensions/model-equalizer/src/detection.ts +0 -62
  171. package/extensions/model-equalizer/src/enhancer.ts +0 -63
  172. package/extensions/model-equalizer/src/test/detection.test.ts +0 -218
  173. package/extensions/model-equalizer/src/test/enhancer.test.ts +0 -137
  174. package/extensions/model-equalizer/src/test/integration.test.ts +0 -185
  175. package/extensions/model-equalizer/src/types.ts +0 -24
  176. package/extensions/model-equalizer/symi.plugin.json +0 -12
  177. package/extensions/phone-control/index.ts +0 -421
  178. package/extensions/phone-control/symi.plugin.json +0 -10
  179. package/extensions/pipeline/README.md +0 -75
  180. package/extensions/pipeline/SKILL.md +0 -97
  181. package/extensions/pipeline/index.ts +0 -18
  182. package/extensions/pipeline/package.json +0 -11
  183. package/extensions/pipeline/src/pipeline-tool.test.ts +0 -345
  184. package/extensions/pipeline/src/pipeline-tool.ts +0 -266
  185. package/extensions/pipeline/src/windows-spawn.test.ts +0 -148
  186. package/extensions/pipeline/src/windows-spawn.ts +0 -193
  187. package/extensions/pipeline/symi.plugin.json +0 -10
  188. package/extensions/qwen-portal-auth/README.md +0 -24
  189. package/extensions/qwen-portal-auth/index.ts +0 -134
  190. package/extensions/qwen-portal-auth/oauth.ts +0 -190
  191. package/extensions/qwen-portal-auth/symi.plugin.json +0 -9
  192. package/extensions/talk-voice/index.ts +0 -150
  193. package/extensions/talk-voice/symi.plugin.json +0 -10
  194. package/extensions/thread-ownership/index.test.ts +0 -180
  195. package/extensions/thread-ownership/index.ts +0 -133
  196. package/extensions/thread-ownership/symi.plugin.json +0 -28
  197. package/skills/1password/SKILL.md +0 -71
  198. package/skills/1password/references/cli-examples.md +0 -29
  199. package/skills/1password/references/get-started.md +0 -17
  200. package/skills/apple-notes/SKILL.md +0 -78
  201. package/skills/apple-reminders/SKILL.md +0 -119
  202. package/skills/bear-notes/SKILL.md +0 -108
  203. package/skills/blogwatcher/SKILL.md +0 -70
  204. package/skills/blucli/SKILL.md +0 -48
  205. package/skills/bluebubbles/SKILL.md +0 -132
  206. package/skills/camsnap/SKILL.md +0 -46
  207. package/skills/canvas/SKILL.md +0 -204
  208. package/skills/connect-email/SKILL.md +0 -142
  209. package/skills/document-generation/SKILL.md +0 -83
  210. package/skills/eightctl/SKILL.md +0 -51
  211. package/skills/food-order/SKILL.md +0 -49
  212. package/skills/gemini/SKILL.md +0 -44
  213. package/skills/gh-issues/SKILL.md +0 -865
  214. package/skills/gifgrep/SKILL.md +0 -80
  215. package/skills/github/SKILL.md +0 -164
  216. package/skills/gog/SKILL.md +0 -117
  217. package/skills/goplaces/SKILL.md +0 -53
  218. package/skills/healthcheck/SKILL.md +0 -246
  219. package/skills/himalaya/SKILL.md +0 -258
  220. package/skills/himalaya/references/configuration.md +0 -184
  221. package/skills/himalaya/references/message-composition.md +0 -199
  222. package/skills/imsg/SKILL.md +0 -122
  223. package/skills/long-task/SKILL.md +0 -58
  224. package/skills/long-task/scripts/detach-task.sh +0 -187
  225. package/skills/nano-banana-pro/SKILL.md +0 -59
  226. package/skills/nano-banana-pro/scripts/generate_image.py +0 -184
  227. package/skills/nano-pdf/SKILL.md +0 -39
  228. package/skills/notion/SKILL.md +0 -173
  229. package/skills/obsidian/SKILL.md +0 -82
  230. package/skills/openai-image-gen/SKILL.md +0 -90
  231. package/skills/openai-image-gen/scripts/gen.py +0 -240
  232. package/skills/openai-whisper/SKILL.md +0 -39
  233. package/skills/openai-whisper-api/SKILL.md +0 -53
  234. package/skills/openai-whisper-api/scripts/transcribe.sh +0 -85
  235. package/skills/openhue/SKILL.md +0 -113
  236. package/skills/oracle/SKILL.md +0 -126
  237. package/skills/ordercli/SKILL.md +0 -79
  238. package/skills/peekaboo/SKILL.md +0 -191
  239. package/skills/reactions-extensive/SKILL.md +0 -30
  240. package/skills/reactions-minimal/SKILL.md +0 -31
  241. package/skills/safe-edit/SKILL.md +0 -51
  242. package/skills/sag/SKILL.md +0 -88
  243. package/skills/sherpa-onnx-tts/SKILL.md +0 -104
  244. package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +0 -178
  245. package/skills/songsee/SKILL.md +0 -50
  246. package/skills/sonoscli/SKILL.md +0 -66
  247. package/skills/spotify-player/SKILL.md +0 -65
  248. package/skills/symihub/SKILL.md +0 -78
  249. package/skills/things-mac/SKILL.md +0 -87
  250. package/skills/tmux/SKILL.md +0 -153
  251. package/skills/tmux/scripts/find-sessions.sh +0 -112
  252. package/skills/tmux/scripts/wait-for-text.sh +0 -83
  253. package/skills/trello/SKILL.md +0 -96
  254. package/skills/video-frames/SKILL.md +0 -47
  255. package/skills/video-frames/scripts/frame.sh +0 -81
  256. package/skills/voice-call/SKILL.md +0 -46
  257. package/skills/wacli/SKILL.md +0 -73
  258. package/skills/weather/SKILL.md +0 -113
  259. package/skills/xurl/SKILL.md +0 -462
@@ -1,80 +0,0 @@
1
- ---
2
- name: gifgrep
3
- description: Search GIF providers with CLI/TUI, download results, and extract stills/sheets.
4
- homepage: https://gifgrep.com
5
- metadata:
6
- {
7
- "symi":
8
- {
9
- "emoji": "🧲",
10
- "requires": { "bins": ["gifgrep"] },
11
- "install":
12
- [
13
- {
14
- "id": "brew",
15
- "kind": "brew",
16
- "formula": "steipete/tap/gifgrep",
17
- "bins": ["gifgrep"],
18
- "label": "Install gifgrep (brew)",
19
- },
20
- {
21
- "id": "go",
22
- "kind": "go",
23
- "module": "github.com/steipete/gifgrep/cmd/gifgrep@latest",
24
- "bins": ["gifgrep"],
25
- "label": "Install gifgrep (go)",
26
- },
27
- ],
28
- },
29
- }
30
- triggers: [gifgrep]
31
- ---
32
-
33
- # gifgrep
34
-
35
- Use `gifgrep` to search GIF providers (Tenor/Giphy), browse in a TUI, download results, and extract stills or sheets.
36
-
37
- GIF-Grab (gifgrep workflow)
38
-
39
- - Search → preview → download → extract (still/sheet) for fast review and sharing.
40
-
41
- Quick start
42
-
43
- - `gifgrep cats --max 5`
44
- - `gifgrep cats --format url | head -n 5`
45
- - `gifgrep search --json cats | jq '.[0].url'`
46
- - `gifgrep tui "office handshake"`
47
- - `gifgrep cats --download --max 1 --format url`
48
-
49
- TUI + previews
50
-
51
- - TUI: `gifgrep tui "query"`
52
- - CLI still previews: `--thumbs` (Kitty/Ghostty only; still frame)
53
-
54
- Download + reveal
55
-
56
- - `--download` saves to `~/Downloads`
57
- - `--reveal` shows the last download in Finder
58
-
59
- Stills + sheets
60
-
61
- - `gifgrep still ./clip.gif --at 1.5s -o still.png`
62
- - `gifgrep sheet ./clip.gif --frames 9 --cols 3 -o sheet.png`
63
- - Sheets = single PNG grid of sampled frames (great for quick review, docs, PRs, chat).
64
- - Tune: `--frames` (count), `--cols` (grid width), `--padding` (spacing).
65
-
66
- Providers
67
-
68
- - `--source auto|tenor|giphy`
69
- - `GIPHY_API_KEY` required for `--source giphy`
70
- - `TENOR_API_KEY` optional (Tenor demo key used if unset)
71
-
72
- Output
73
-
74
- - `--json` prints an array of results (`id`, `title`, `url`, `preview_url`, `tags`, `width`, `height`)
75
- - `--format` for pipe-friendly fields (e.g., `url`)
76
-
77
- Environment tweaks
78
-
79
- - `GIFGREP_SOFTWARE_ANIM=1` to force software animation
80
- - `GIFGREP_CELL_ASPECT=0.5` to tweak preview geometry
@@ -1,164 +0,0 @@
1
- ---
2
- name: github
3
- description: "GitHub operations via `gh` CLI: issues, PRs, CI runs, code review, API queries. Use when: (1) checking PR status or CI, (2) creating/commenting on issues, (3) listing/filtering PRs or issues, (4) viewing run logs. NOT for: complex web UI interactions requiring manual browser flows (use browser tooling when available), bulk operations across many repos (script with gh api), or when gh auth is not configured."
4
- metadata:
5
- {
6
- "symi":
7
- {
8
- "emoji": "🐙",
9
- "requires": { "bins": ["gh"] },
10
- "install":
11
- [
12
- {
13
- "id": "brew",
14
- "kind": "brew",
15
- "formula": "gh",
16
- "bins": ["gh"],
17
- "label": "Install GitHub CLI (brew)",
18
- },
19
- {
20
- "id": "apt",
21
- "kind": "apt",
22
- "package": "gh",
23
- "bins": ["gh"],
24
- "label": "Install GitHub CLI (apt)",
25
- },
26
- ],
27
- },
28
- }
29
- triggers: [github]
30
- ---
31
-
32
- # GitHub Skill
33
-
34
- Use the `gh` CLI to interact with GitHub repositories, issues, PRs, and CI.
35
-
36
- ## When to Use
37
-
38
- ✅ **USE this skill when:**
39
-
40
- - Checking PR status, reviews, or merge readiness
41
- - Viewing CI/workflow run status and logs
42
- - Creating, closing, or commenting on issues
43
- - Creating or merging pull requests
44
- - Querying GitHub API for repository data
45
- - Listing repos, releases, or collaborators
46
-
47
- ## When NOT to Use
48
-
49
- ❌ **DON'T use this skill when:**
50
-
51
- - Local git operations (commit, push, pull, branch) → use `git` directly
52
- - Non-GitHub repos (GitLab, Bitbucket, self-hosted) → different CLIs
53
- - Cloning repositories → use `git clone`
54
- - Reviewing actual code changes → use `coding-agent` skill
55
- - Complex multi-file diffs → use `coding-agent` or read files directly
56
-
57
- ## Setup
58
-
59
- ```bash
60
- # Authenticate (one-time)
61
- gh auth login
62
-
63
- # Verify
64
- gh auth status
65
- ```
66
-
67
- ## Common Commands
68
-
69
- ### Pull Requests
70
-
71
- ```bash
72
- # List PRs
73
- gh pr list --repo owner/repo
74
-
75
- # Check CI status
76
- gh pr checks 55 --repo owner/repo
77
-
78
- # View PR details
79
- gh pr view 55 --repo owner/repo
80
-
81
- # Create PR
82
- gh pr create --title "feat: add feature" --body "Description"
83
-
84
- # Merge PR
85
- gh pr merge 55 --squash --repo owner/repo
86
- ```
87
-
88
- ### Issues
89
-
90
- ```bash
91
- # List issues
92
- gh issue list --repo owner/repo --state open
93
-
94
- # Create issue
95
- gh issue create --title "Bug: something broken" --body "Details..."
96
-
97
- # Close issue
98
- gh issue close 42 --repo owner/repo
99
- ```
100
-
101
- ### CI/Workflow Runs
102
-
103
- ```bash
104
- # List recent runs
105
- gh run list --repo owner/repo --limit 10
106
-
107
- # View specific run
108
- gh run view <run-id> --repo owner/repo
109
-
110
- # View failed step logs only
111
- gh run view <run-id> --repo owner/repo --log-failed
112
-
113
- # Re-run failed jobs
114
- gh run rerun <run-id> --failed --repo owner/repo
115
- ```
116
-
117
- ### API Queries
118
-
119
- ```bash
120
- # Get PR with specific fields
121
- gh api repos/owner/repo/pulls/55 --jq '.title, .state, .user.login'
122
-
123
- # List all labels
124
- gh api repos/owner/repo/labels --jq '.[].name'
125
-
126
- # Get repo stats
127
- gh api repos/owner/repo --jq '{stars: .stargazers_count, forks: .forks_count}'
128
- ```
129
-
130
- ## JSON Output
131
-
132
- Most commands support `--json` for structured output with `--jq` filtering:
133
-
134
- ```bash
135
- gh issue list --repo owner/repo --json number,title --jq '.[] | "\(.number): \(.title)"'
136
- gh pr list --json number,title,state,mergeable --jq '.[] | select(.mergeable == "MERGEABLE")'
137
- ```
138
-
139
- ## Templates
140
-
141
- ### PR Review Summary
142
-
143
- ```bash
144
- # Get PR overview for review
145
- PR=55 REPO=owner/repo
146
- echo "## PR #$PR Summary"
147
- gh pr view $PR --repo $REPO --json title,body,author,additions,deletions,changedFiles \
148
- --jq '"**\(.title)** by @\(.author.login)\n\n\(.body)\n\n📊 +\(.additions) -\(.deletions) across \(.changedFiles) files"'
149
- gh pr checks $PR --repo $REPO
150
- ```
151
-
152
- ### Issue Triage
153
-
154
- ```bash
155
- # Quick issue triage view
156
- gh issue list --repo owner/repo --state open --json number,title,labels,createdAt \
157
- --jq '.[] | "[\(.number)] \(.title) - \([.labels[].name] | join(", ")) (\(.createdAt[:10]))"'
158
- ```
159
-
160
- ## Notes
161
-
162
- - Always specify `--repo owner/repo` when not in a git directory
163
- - Use URLs directly: `gh pr view https://github.com/owner/repo/pull/55`
164
- - Rate limits apply; use `gh api --cache 1h` for repeated queries
@@ -1,117 +0,0 @@
1
- ---
2
- name: gog
3
- description: Google Workspace CLI for Gmail, Calendar, Drive, Contacts, Sheets, and Docs.
4
- homepage: https://gogcli.sh
5
- metadata:
6
- {
7
- "symi":
8
- {
9
- "emoji": "🎮",
10
- "requires": { "bins": ["gog"] },
11
- "install":
12
- [
13
- {
14
- "id": "brew",
15
- "kind": "brew",
16
- "formula": "steipete/tap/gogcli",
17
- "bins": ["gog"],
18
- "label": "Install gog (brew)",
19
- },
20
- ],
21
- },
22
- }
23
- triggers: [gog]
24
- ---
25
-
26
- # gog
27
-
28
- Use `gog` for Gmail/Calendar/Drive/Contacts/Sheets/Docs. Requires OAuth setup.
29
-
30
- Setup (once)
31
-
32
- - `gog auth credentials /path/to/client_secret.json`
33
- - `gog auth add you@gmail.com --services gmail,calendar,drive,contacts,docs,sheets`
34
- - `gog auth list`
35
-
36
- Common commands
37
-
38
- - Gmail search: `gog gmail search 'newer_than:7d' --max 10`
39
- - Gmail messages search (per email, ignores threading): `gog gmail messages search "in:inbox from:ryanair.com" --max 20 --account you@example.com`
40
- - Gmail send (plain): `gog gmail send --to a@b.com --subject "Hi" --body "Hello"`
41
- - Gmail send (multi-line): `gog gmail send --to a@b.com --subject "Hi" --body-file ./message.txt`
42
- - Gmail send (stdin): `gog gmail send --to a@b.com --subject "Hi" --body-file -`
43
- - Gmail send (HTML): `gog gmail send --to a@b.com --subject "Hi" --body-html "<p>Hello</p>"`
44
- - Gmail draft: `gog gmail drafts create --to a@b.com --subject "Hi" --body-file ./message.txt`
45
- - Gmail send draft: `gog gmail drafts send <draftId>`
46
- - Gmail reply: `gog gmail send --to a@b.com --subject "Re: Hi" --body "Reply" --reply-to-message-id <msgId>`
47
- - Calendar list events: `gog calendar events <calendarId> --from <iso> --to <iso>`
48
- - Calendar create event: `gog calendar create <calendarId> --summary "Title" --from <iso> --to <iso>`
49
- - Calendar create with color: `gog calendar create <calendarId> --summary "Title" --from <iso> --to <iso> --event-color 7`
50
- - Calendar update event: `gog calendar update <calendarId> <eventId> --summary "New Title" --event-color 4`
51
- - Calendar show colors: `gog calendar colors`
52
- - Drive search: `gog drive search "query" --max 10`
53
- - Contacts: `gog contacts list --max 20`
54
- - Sheets get: `gog sheets get <sheetId> "Tab!A1:D10" --json`
55
- - Sheets update: `gog sheets update <sheetId> "Tab!A1:B2" --values-json '[["A","B"],["1","2"]]' --input USER_ENTERED`
56
- - Sheets append: `gog sheets append <sheetId> "Tab!A:C" --values-json '[["x","y","z"]]' --insert INSERT_ROWS`
57
- - Sheets clear: `gog sheets clear <sheetId> "Tab!A2:Z"`
58
- - Sheets metadata: `gog sheets metadata <sheetId> --json`
59
- - Docs export: `gog docs export <docId> --format txt --out /tmp/doc.txt`
60
- - Docs cat: `gog docs cat <docId>`
61
-
62
- Calendar Colors
63
-
64
- - Use `gog calendar colors` to see all available event colors (IDs 1-11)
65
- - Add colors to events with `--event-color <id>` flag
66
- - Event color IDs (from `gog calendar colors` output):
67
- - 1: #a4bdfc
68
- - 2: #7ae7bf
69
- - 3: #dbadff
70
- - 4: #ff887c
71
- - 5: #fbd75b
72
- - 6: #ffb878
73
- - 7: #46d6db
74
- - 8: #e1e1e1
75
- - 9: #5484ed
76
- - 10: #51b749
77
- - 11: #dc2127
78
-
79
- Email Formatting
80
-
81
- - Prefer plain text. Use `--body-file` for multi-paragraph messages (or `--body-file -` for stdin).
82
- - Same `--body-file` pattern works for drafts and replies.
83
- - `--body` does not unescape `\n`. If you need inline newlines, use a heredoc or `$'Line 1\n\nLine 2'`.
84
- - Use `--body-html` only when you need rich formatting.
85
- - HTML tags: `<p>` for paragraphs, `<br>` for line breaks, `<strong>` for bold, `<em>` for italic, `<a href="url">` for links, `<ul>`/`<li>` for lists.
86
- - Example (plain text via stdin):
87
-
88
- ```bash
89
- gog gmail send --to recipient@example.com \
90
- --subject "Meeting Follow-up" \
91
- --body-file - <<'EOF'
92
- Hi Name,
93
-
94
- Thanks for meeting today. Next steps:
95
- - Item one
96
- - Item two
97
-
98
- Best regards,
99
- Your Name
100
- EOF
101
- ```
102
-
103
- - Example (HTML list):
104
- ```bash
105
- gog gmail send --to recipient@example.com \
106
- --subject "Meeting Follow-up" \
107
- --body-html "<p>Hi Name,</p><p>Thanks for meeting today. Here are the next steps:</p><ul><li>Item one</li><li>Item two</li></ul><p>Best regards,<br>Your Name</p>"
108
- ```
109
-
110
- Notes
111
-
112
- - Set `GOG_ACCOUNT=you@gmail.com` to avoid repeating `--account`.
113
- - For scripting, prefer `--json` plus `--no-input`.
114
- - Sheets values can be passed via `--values-json` (recommended) or as inline rows.
115
- - Docs supports export/cat/copy. In-place edits require a Docs API client (not in gog).
116
- - Confirm before sending mail or creating events.
117
- - `gog gmail search` returns one row per thread; use `gog gmail messages search` when you need every individual email returned separately.
@@ -1,53 +0,0 @@
1
- ---
2
- name: goplaces
3
- description: Query Google Places API (New) via the goplaces CLI for text search, place details, resolve, and reviews. Use for human-friendly place lookup or JSON output for scripts.
4
- homepage: https://github.com/steipete/goplaces
5
- metadata:
6
- {
7
- "symi":
8
- {
9
- "emoji": "📍",
10
- "requires": { "bins": ["goplaces"], "env": ["GOOGLE_PLACES_API_KEY"] },
11
- "primaryEnv": "GOOGLE_PLACES_API_KEY",
12
- "install":
13
- [
14
- {
15
- "id": "brew",
16
- "kind": "brew",
17
- "formula": "steipete/tap/goplaces",
18
- "bins": ["goplaces"],
19
- "label": "Install goplaces (brew)",
20
- },
21
- ],
22
- },
23
- }
24
- triggers: [goplaces]
25
- ---
26
-
27
- # goplaces
28
-
29
- Modern Google Places API (New) CLI. Human output by default, `--json` for scripts.
30
-
31
- Install
32
-
33
- - Homebrew: `brew install steipete/tap/goplaces`
34
-
35
- Config
36
-
37
- - `GOOGLE_PLACES_API_KEY` required.
38
- - Optional: `GOOGLE_PLACES_BASE_URL` for testing/proxying.
39
-
40
- Common commands
41
-
42
- - Search: `goplaces search "coffee" --open-now --min-rating 4 --limit 5`
43
- - Bias: `goplaces search "pizza" --lat 40.8 --lng -73.9 --radius-m 3000`
44
- - Pagination: `goplaces search "pizza" --page-token "NEXT_PAGE_TOKEN"`
45
- - Resolve: `goplaces resolve "Soho, London" --limit 5`
46
- - Details: `goplaces details <place_id> --reviews`
47
- - JSON: `goplaces search "sushi" --json`
48
-
49
- Notes
50
-
51
- - `--no-color` or `NO_COLOR` disables ANSI color.
52
- - Price levels: 0..4 (free → very expensive).
53
- - Type filter sends only the first `--type` value (API accepts one).
@@ -1,246 +0,0 @@
1
- ---
2
- name: healthcheck
3
- description: Host security hardening and risk-tolerance configuration for Symi deployments. Use when a user asks for security audits, firewall/SSH/update hardening, risk posture, exposure review, Symi cron scheduling for periodic checks, or version status checks on a machine running Symi (laptop, workstation, Pi, VPS).
4
- triggers: [healthcheck]
5
- ---
6
-
7
- # Symi Host Hardening
8
-
9
- ## Overview
10
-
11
- Assess and harden the host running Symi, then align it to a user-defined risk tolerance without breaking access. Use Symi security tooling as a first-class signal, but treat OS hardening as a separate, explicit set of steps.
12
-
13
- ## Core rules
14
-
15
- - Recommend running this skill with a state-of-the-art model (e.g., Opus 4.5, GPT 5.2+). The agent should self-check the current model and suggest switching if below that level; do not block execution.
16
- - Require explicit approval before any state-changing action.
17
- - Do not modify remote access settings without confirming how the user connects.
18
- - Prefer reversible, staged changes with a rollback plan.
19
- - Never claim Symi changes the host firewall, SSH, or OS updates; it does not.
20
- - If role/identity is unknown, provide recommendations only.
21
- - Formatting: every set of user choices must be numbered so the user can reply with a single digit.
22
- - System-level backups are recommended; try to verify status.
23
-
24
- ## Workflow (follow in order)
25
-
26
- ### 0) Model self-check (non-blocking)
27
-
28
- Before starting, check the current model. If it is below state-of-the-art (e.g., Opus 4.5, GPT 5.2+), recommend switching. Do not block execution.
29
-
30
- ### 1) Establish context (read-only)
31
-
32
- Try to infer 1–5 from the environment before asking. Prefer simple, non-technical questions if you need confirmation.
33
-
34
- Determine (in order):
35
-
36
- 1. OS and version (Linux/macOS/Windows), container vs host.
37
- 2. Privilege level (root/admin vs user).
38
- 3. Access path (local console, SSH, RDP, tailnet).
39
- 4. Network exposure (public IP, reverse proxy, tunnel).
40
- 5. Symi gateway status and bind address.
41
- 6. Backup system and status (e.g., Time Machine, system images, snapshots).
42
- 7. Deployment context (local mac app, headless gateway host, remote gateway, container/CI).
43
- 8. Disk encryption status (FileVault/LUKS/BitLocker).
44
- 9. OS automatic security updates status.
45
- Note: these are not blocking items, but are highly recommended, especially if Symi can access sensitive data.
46
- 10. Usage mode for a personal assistant with full access (local workstation vs headless/remote vs other).
47
-
48
- First ask once for permission to run read-only checks. If granted, run them by default and only ask questions for items you cannot infer or verify. Do not ask for information already visible in runtime or command output. Keep the permission ask as a single sentence, and list follow-up info needed as an unordered list (not numbered) unless you are presenting selectable choices.
49
-
50
- If you must ask, use non-technical prompts:
51
-
52
- - “Are you using a Mac, Windows PC, or Linux?”
53
- - “Are you logged in directly on the machine, or connecting from another computer?”
54
- - “Is this machine reachable from the public internet, or only on your home/network?”
55
- - “Do you have backups enabled (e.g., Time Machine), and are they current?”
56
- - “Is disk encryption turned on (FileVault/BitLocker/LUKS)?”
57
- - “Are automatic security updates enabled?”
58
- - “How do you use this machine?”
59
- Examples:
60
- - Personal machine shared with the assistant
61
- - Dedicated local machine for the assistant
62
- - Dedicated remote machine/server accessed remotely (always on)
63
- - Something else?
64
-
65
- Only ask for the risk profile after system context is known.
66
-
67
- If the user grants read-only permission, run the OS-appropriate checks by default. If not, offer them (numbered). Examples:
68
-
69
- 1. OS: `uname -a`, `sw_vers`, `cat /etc/os-release`.
70
- 2. Listening ports:
71
- - Linux: `ss -ltnup` (or `ss -ltnp` if `-u` unsupported).
72
- - macOS: `lsof -nP -iTCP -sTCP:LISTEN`.
73
- 3. Firewall status:
74
- - Linux: `ufw status`, `firewall-cmd --state`, `nft list ruleset` (pick what is installed).
75
- - macOS: `/usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate` and `pfctl -s info`.
76
- 4. Backups (macOS): `tmutil status` (if Time Machine is used).
77
-
78
- ### 2) Run Symi security audits (read-only)
79
-
80
- As part of the default read-only checks, run `symi security audit --deep`. Only offer alternatives if the user requests them:
81
-
82
- 1. `symi security audit` (faster, non-probing)
83
- 2. `symi security audit --json` (structured output)
84
-
85
- Offer to apply Symi safe defaults (numbered):
86
-
87
- 1. `symi security audit --fix`
88
-
89
- Be explicit that `--fix` only tightens Symi defaults and file permissions. It does not change host firewall, SSH, or OS update policies.
90
-
91
- If browser control is enabled, recommend that 2FA be enabled on all important accounts, with hardware keys preferred and SMS not sufficient.
92
-
93
- ### 3) Check Symi version/update status (read-only)
94
-
95
- As part of the default read-only checks, run `symi update status`.
96
-
97
- Report the current channel and whether an update is available.
98
-
99
- ### 4) Determine risk tolerance (after system context)
100
-
101
- Ask the user to pick or confirm a risk posture and any required open services/ports (numbered choices below).
102
- Do not pigeonhole into fixed profiles; if the user prefers, capture requirements instead of choosing a profile.
103
- Offer suggested profiles as optional defaults (numbered). Note that most users pick Home/Workstation Balanced:
104
-
105
- 1. Home/Workstation Balanced (most common): firewall on with reasonable defaults, remote access restricted to LAN or tailnet.
106
- 2. VPS Hardened: deny-by-default inbound firewall, minimal open ports, key-only SSH, no root login, automatic security updates.
107
- 3. Developer Convenience: more local services allowed, explicit exposure warnings, still audited.
108
- 4. Custom: user-defined constraints (services, exposure, update cadence, access methods).
109
-
110
- ### 5) Produce a remediation plan
111
-
112
- Provide a plan that includes:
113
-
114
- - Target profile
115
- - Current posture summary
116
- - Gaps vs target
117
- - Step-by-step remediation with exact commands
118
- - Access-preservation strategy and rollback
119
- - Risks and potential lockout scenarios
120
- - Least-privilege notes (e.g., avoid admin usage, tighten ownership/permissions where safe)
121
- - Credential hygiene notes (location of Symi creds, prefer disk encryption)
122
-
123
- Always show the plan before any changes.
124
-
125
- ### 6) Offer execution options
126
-
127
- Offer one of these choices (numbered so users can reply with a single digit):
128
-
129
- 1. Do it for me (guided, step-by-step approvals)
130
- 2. Show plan only
131
- 3. Fix only critical issues
132
- 4. Export commands for later
133
-
134
- ### 7) Execute with confirmations
135
-
136
- For each step:
137
-
138
- - Show the exact command
139
- - Explain impact and rollback
140
- - Confirm access will remain available
141
- - Stop on unexpected output and ask for guidance
142
-
143
- ### 8) Verify and report
144
-
145
- Re-check:
146
-
147
- - Firewall status
148
- - Listening ports
149
- - Remote access still works
150
- - Symi security audit (re-run)
151
-
152
- Deliver a final posture report and note any deferred items.
153
-
154
- ## Required confirmations (always)
155
-
156
- Require explicit approval for:
157
-
158
- - Firewall rule changes
159
- - Opening/closing ports
160
- - SSH/RDP configuration changes
161
- - Installing/removing packages
162
- - Enabling/disabling services
163
- - User/group modifications
164
- - Scheduling tasks or startup persistence
165
- - Update policy changes
166
- - Access to sensitive files or credentials
167
-
168
- If unsure, ask.
169
-
170
- ## Periodic checks
171
-
172
- After Symi install or first hardening pass, run at least one baseline audit and version check:
173
-
174
- - `symi security audit`
175
- - `symi security audit --deep`
176
- - `symi update status`
177
-
178
- Ongoing monitoring is recommended. Use the Symi cron tool/CLI to schedule periodic audits (Gateway scheduler). Do not create scheduled tasks without explicit approval. Store outputs in a user-approved location and avoid secrets in logs.
179
- When scheduling headless cron runs, include a note in the output that instructs the user to call `healthcheck` so issues can be fixed.
180
-
181
- ### Required prompt to schedule (always)
182
-
183
- After any audit or hardening pass, explicitly offer scheduling and require a direct response. Use a short prompt like (numbered):
184
-
185
- 1. “Do you want me to schedule periodic audits (e.g., daily/weekly) via `symi cron add`?”
186
-
187
- If the user says yes, ask for:
188
-
189
- - cadence (daily/weekly), preferred time window, and output location
190
- - whether to also schedule `symi update status`
191
-
192
- Use a stable cron job name so updates are deterministic. Prefer exact names:
193
-
194
- - `healthcheck:security-audit`
195
- - `healthcheck:update-status`
196
-
197
- Before creating, `symi cron list` and match on exact `name`. If found, `symi cron edit <id> ...`.
198
- If not found, `symi cron add --name <name> ...`.
199
-
200
- Also offer a periodic version check so the user can decide when to update (numbered):
201
-
202
- 1. `symi update status` (preferred for source checkouts and channels)
203
- 2. `npm view symi version` (published npm version)
204
-
205
- ## Symi command accuracy
206
-
207
- Use only supported commands and flags:
208
-
209
- - `symi security audit [--deep] [--fix] [--json]`
210
- - `symi status` / `symi status --deep`
211
- - `symi health --json`
212
- - `symi update status`
213
- - `symi cron add|list|runs|run`
214
-
215
- Do not invent CLI flags or imply Symi enforces host firewall/SSH policies.
216
-
217
- ## Logging and audit trail
218
-
219
- Record:
220
-
221
- - Gateway identity and role
222
- - Plan ID and timestamp
223
- - Approved steps and exact commands
224
- - Exit codes and files modified (best effort)
225
-
226
- Redact secrets. Never log tokens or full credential contents.
227
-
228
- ## Memory writes (conditional)
229
-
230
- Only write to memory files when the user explicitly opts in and the session is a private/local workspace
231
- (per `docs/reference/templates/AGENTS.md`). Otherwise provide a redacted, paste-ready summary the user can
232
- decide to save elsewhere.
233
-
234
- Follow the durable-memory prompt format used by Symi compaction:
235
-
236
- - Write lasting notes to `memory/YYYY-MM-DD.md`.
237
-
238
- After each audit/hardening run, if opted-in, append a short, dated summary to `memory/YYYY-MM-DD.md`
239
- (what was checked, key findings, actions taken, any scheduled cron jobs, key decisions,
240
- and all commands executed). Append-only: never overwrite existing entries.
241
- Redact sensitive host details (usernames, hostnames, IPs, serials, service names, tokens).
242
- If there are durable preferences or decisions (risk posture, allowed ports, update policy),
243
- also update `MEMORY.md` (long-term memory is optional and only used in private sessions).
244
-
245
- If the session cannot write to the workspace, ask for permission or provide exact entries
246
- the user can paste into the memory files.