@symerian/symi 2.9.2 → 2.9.3
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/dist/{agents-DTl30WoB.js → agents-D6V_7iZL.js} +4 -4
- package/dist/{agents.config-CZ3GFxPg.js → agents.config-B-NRTvyi.js} +1 -1
- package/dist/{agents.config-CO8F9mkD.js → agents.config-BeX0kxT3.js} +1 -1
- package/dist/{audio-preflight-DQR2Ivi-.js → audio-preflight-CbyJ_yDs.js} +4 -4
- package/dist/{auth-choice-BYDGn7lJ.js → auth-choice-4lzxjIcf.js} +1 -1
- package/dist/{auth-choice-BoOyy-ZT.js → auth-choice-BJQjxe_Y.js} +1 -1
- package/dist/{banner-D4MiyUnv.js → banner-Q3fjWWy3.js} +1 -1
- package/dist/build-info.json +3 -3
- package/dist/bundled/boot-md/handler.js +7 -7
- package/dist/bundled/session-memory/handler.js +7 -7
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/{channel-options-BiSSYYQC.js → channel-options-CQ0Q0xZr.js} +1 -1
- package/dist/{channel-options-B6qP-vR-.js → channel-options-D6U_Dpa2.js} +1 -1
- package/dist/{channel-web-DP97EUhx.js → channel-web-D6aolbVC.js} +1 -1
- package/dist/{channels-cli-CE_A3Hai.js → channels-cli-By4y_t51.js} +6 -6
- package/dist/{channels-cli-6LNvJQPb.js → channels-cli-CxuKeNkr.js} +6 -6
- package/dist/{chrome-BaMQiegP.js → chrome-CJHOBnUB.js} +7 -7
- package/dist/{cli-DwQ3mqhI.js → cli-41r_BAjv.js} +3 -3
- package/dist/{cli-D4j_JTug.js → cli-B1gtEojq.js} +3 -3
- package/dist/{command-registry-b62Qpsi2.js → command-registry-FJWuYmEn.js} +10 -10
- package/dist/{completion-cli-RQyC3L-t.js → completion-cli-C20c_vzO.js} +1 -1
- package/dist/{completion-cli-DUT2XYgK.js → completion-cli-DWVW4P54.js} +2 -2
- package/dist/{config-cli-Di8VOhbp.js → config-cli-CJQ-12f7.js} +1 -1
- package/dist/{config-cli-H52N8rp1.js → config-cli-CLXuCFJc.js} +1 -1
- package/dist/{configure-DQxuawe-.js → configure-DrIhqYYW.js} +3 -3
- package/dist/{configure-BF9crM5K.js → configure-I99ztt2Y.js} +3 -3
- package/dist/{deliver-Dx39g9ey.js → deliver-D5655IkX.js} +1 -1
- package/dist/{doctor-completion-BKXQ50ee.js → doctor-completion-B4pjrehH.js} +1 -1
- package/dist/{doctor-completion-BS2JEeZy.js → doctor-completion-C9A7E6Wb.js} +1 -1
- package/dist/entry.js +1 -1
- package/dist/extensionAPI.js +2 -2
- package/dist/{gateway-cli-Do9KUPqe.js → gateway-cli-BByLEck3.js} +11 -11
- package/dist/{gateway-cli-moPf-zP5.js → gateway-cli-cZpbavO4.js} +11 -11
- package/dist/{glass-ui-ws-D53pvIov.js → glass-ui-ws-09XXkYnX.js} +9 -9
- package/dist/{glass-ui-ws-Dfro-3R8.js → glass-ui-ws-DUHaC6lE.js} +9 -9
- package/dist/{health-CV741PBg.js → health-Bvo3NXZK.js} +1 -1
- package/dist/{health-BQGRC0xh.js → health-CYHbTw04.js} +1 -1
- package/dist/{hooks-cli-CWXGIL9L.js → hooks-cli-BwFW4lKC.js} +4 -4
- package/dist/{hooks-cli-CG-PDY2U.js → hooks-cli-CiFs-0g0.js} +4 -4
- package/dist/{image-C-JvPPpM.js → image-BqpivNGG.js} +1 -1
- package/dist/index.js +8 -8
- package/dist/llm-slug-generator.js +7 -7
- package/dist/{manager-CLPHK-qG.js → manager-Bj8GFlcZ.js} +1 -1
- package/dist/{manager-yrUe0KOT.js → manager-BsfrsBPw.js} +1 -1
- package/dist/{manager-B_2KzUSI.js → manager-CB20PmUH.js} +1 -1
- package/dist/{manager-Bc-MeMho.js → manager-CMB15ft8.js} +1 -1
- package/dist/{memory-cli-BKNnDIdx.js → memory-cli-CoTkaEhh.js} +3 -3
- package/dist/{memory-cli-3RSIw4no.js → memory-cli-Cuhhh4qN.js} +3 -3
- package/dist/{models-D_C2JFPw.js → models-CdIe1IJX.js} +2 -2
- package/dist/{models-cli-DQE60EtL.js → models-cli-CZcMWBL0.js} +5 -5
- package/dist/{models-cli-j2O4e1Lu.js → models-cli-o07a-fh5.js} +4 -4
- package/dist/{onboard-Ckw89oRF.js → onboard-44op-88v.js} +2 -2
- package/dist/{onboard-DUIZfWqa.js → onboard-Cjlal6-V.js} +2 -2
- package/dist/{onboard-channels-B8Ouc5sR.js → onboard-channels-BseAErC9.js} +1 -1
- package/dist/{onboard-channels-Oa9IlsGt.js → onboard-channels-Lt1TlRrb.js} +1 -1
- package/dist/{onboarding-JFWHlqAb.js → onboarding-DODsq7cg.js} +3 -3
- package/dist/{onboarding-Cjh-Y8ha.js → onboarding-DYJYybkl.js} +3 -3
- package/dist/{onboarding.finalize-CkGLgiEA.js → onboarding.finalize-BX-xeFu7.js} +7 -7
- package/dist/{onboarding.finalize-spzEoVkm.js → onboarding.finalize-DhhWr8GR.js} +8 -8
- package/dist/{pi-embedded-D6Zi01El.js → pi-embedded-UMBd-Mrj.js} +69 -54
- package/dist/{pi-embedded-helpers-B1P8lkqj.js → pi-embedded-helpers-CU-kYRrF.js} +4 -4
- package/dist/{plugin-registry-zGF6HUkQ.js → plugin-registry-Di_isjUm.js} +1 -1
- package/dist/{plugin-registry-CYglC746.js → plugin-registry-HrZC-Iww.js} +1 -1
- package/dist/plugin-sdk/agents/pi-embedded-runner/system-prompt.d.ts +9 -0
- package/dist/plugin-sdk/agents/system-prompt.d.ts +17 -0
- package/dist/plugin-sdk/{channel-web-eeGSjU9N.js → channel-web-CzZZsS3O.js} +1 -1
- package/dist/plugin-sdk/config/types.symi.d.ts +7 -0
- package/dist/plugin-sdk/index.js +3 -3
- package/dist/plugin-sdk/{manager-DZ5-lr4s.js → manager-BiRYpsW7.js} +1 -1
- package/dist/plugin-sdk/{reply-BRGoceel.js → reply-DYEklKOc.js} +69 -54
- package/dist/plugin-sdk/{synthesis-DVsG2Tbp.js → synthesis-CaDiVumM.js} +2 -2
- package/dist/plugin-sdk/{web-7u3fdT2S.js → web-DU4xaLZf.js} +3 -3
- package/dist/{plugins-cli-CLb_0vH6.js → plugins-cli-BlBz4J4q.js} +4 -4
- package/dist/{plugins-cli-ndIGvW38.js → plugins-cli-CMz1ww6G.js} +4 -4
- package/dist/{program-context-mFSRQPMm.js → program-context-ByWsh-2T.js} +18 -18
- package/dist/{program-BovNsUAh.js → program-dFZ5CYgD.js} +9 -9
- package/dist/{prompt-select-styled-DlKhnnDV.js → prompt-select-styled-BkwnTGjt.js} +6 -6
- package/dist/{prompt-select-styled-vhI0kQYd.js → prompt-select-styled-nywEyQoQ.js} +6 -6
- package/dist/{provider-auth-helpers-DXlKD0hY.js → provider-auth-helpers-CQ604vQz.js} +1 -1
- package/dist/{provider-auth-helpers-U0t5YhCn.js → provider-auth-helpers-CgJE4rvP.js} +1 -1
- package/dist/{push-apns-rDsc17-c.js → push-apns-CQlSAman.js} +1 -1
- package/dist/{push-apns-hN0N3Wcu.js → push-apns-CbjqnCIn.js} +1 -1
- package/dist/{pw-ai-BlWK9Tr3.js → pw-ai-BjfsUmjw.js} +1 -1
- package/dist/{register.agent-Cyij2g-g.js → register.agent-BaLgPcGg.js} +7 -7
- package/dist/{register.agent-B1liWWB3.js → register.agent-Hw7FS0tf.js} +8 -8
- package/dist/{register.configure-CoYKlH75.js → register.configure-BC-jW4EY.js} +8 -8
- package/dist/{register.configure-keWh1w1p.js → register.configure-D6bKnyeR.js} +8 -8
- package/dist/{register.maintenance-CsA9QQRE.js → register.maintenance-7LeID6wA.js} +10 -10
- package/dist/{register.maintenance-CvY-Yar9.js → register.maintenance-DQ73gAH0.js} +9 -9
- package/dist/{register.message-DltuBwIg.js → register.message-D2Ubr7KY.js} +4 -4
- package/dist/{register.message-D7815_7Y.js → register.message-odamuJP5.js} +4 -4
- package/dist/{register.onboard-CY50To_-.js → register.onboard-Bv3BjuIZ.js} +6 -6
- package/dist/{register.onboard-FcZymlrx.js → register.onboard-DwYvxoBx.js} +6 -6
- package/dist/{register.setup-X011Evir.js → register.setup-B6ylBd_s.js} +6 -6
- package/dist/{register.setup-8dkIizGs.js → register.setup-BvNMj7Tn.js} +6 -6
- package/dist/{register.status-health-sessions-u9ZbWWea.js → register.status-health-sessions-Bx0oTY_P.js} +5 -5
- package/dist/{register.status-health-sessions-DRkIaw1q.js → register.status-health-sessions-Cr65vOYW.js} +5 -5
- package/dist/{register.subclis-vTS3UwIU.js → register.subclis-BzbNYOC6.js} +9 -9
- package/dist/{reply-Dx9DWIO2.js → reply-Bymjl4wV.js} +68 -53
- package/dist/{run-main-BQKf71Kt.js → run-main-BAaL6QjO.js} +17 -17
- package/dist/{runner-C4opGXAA.js → runner-DzNo-GCz.js} +1 -1
- package/dist/{server-methods-1TzYth88.js → server-methods-C4j7W_qQ.js} +8 -8
- package/dist/{server-methods-DeIwhdBv.js → server-methods-Ds4i0Q2F.js} +8 -8
- package/dist/{server-node-events-DF_ks0oa.js → server-node-events-D0gNq3h6.js} +4 -4
- package/dist/{server-node-events-CFMtnBFU.js → server-node-events-tbjGwgHF.js} +4 -4
- package/dist/{status-CvElSWg2.js → status-BdkVcIDX.js} +1 -1
- package/dist/{status-vO4-v0vI.js → status-BfNSBvnp.js} +3 -3
- package/dist/{status-CwZgLSfx.js → status-CGabcN-L.js} +3 -3
- package/dist/{status-DEQAH4oA.js → status-DpVc9DSG.js} +1 -1
- package/dist/{subagent-registry-K1lQH7iR.js → subagent-registry-0D_yjdW5.js} +68 -53
- package/dist/{synthesis-DazoL-DI.js → synthesis-1f-yGtS7.js} +3 -3
- package/dist/{synthesis-AYqn8_O8.js → synthesis-A2SfvBRN.js} +3 -3
- package/dist/{synthesis-DhxkkJq7.js → synthesis-Bf2XnlvP.js} +2 -2
- package/dist/{synthesis-CZhOC8n4.js → synthesis-DFQ_rjEF.js} +7 -7
- package/dist/{unified-runner-CavADnkK.js → unified-runner-j_Vn4K8X.js} +83 -68
- package/dist/{update-cli-DmxFKAmJ.js → update-cli-B3t4yUU6.js} +9 -9
- package/dist/{update-cli-DPf2vrJK.js → update-cli-CWMGbbPM.js} +10 -10
- package/dist/{update-runner-D4UIv_1p.js → update-runner-CfzHxbsu.js} +1 -1
- package/dist/{update-runner-XU-jPEg_.js → update-runner-UfVHKth_.js} +1 -1
- package/dist/{web-BJIv_6uQ.js → web-BSf9H0_w.js} +7 -7
- package/dist/{web-BBbVbRTg.js → web-DCTvbYTy.js} +3 -3
- package/dist/{web-C-E-O8iP.js → web-DIDhNbES.js} +4 -4
- package/dist/{web-CIj8erCe.js → web-DaChMSyM.js} +2 -2
- package/docs/capabilities.md +153 -0
- package/extensions/bluebubbles/package.json +1 -1
- package/extensions/copilot-proxy/package.json +1 -1
- package/extensions/diagnostics-otel/package.json +1 -1
- package/extensions/discord/package.json +1 -1
- package/extensions/feishu/package.json +1 -1
- package/extensions/google-antigravity-auth/package.json +1 -1
- package/extensions/google-gemini-cli-auth/package.json +1 -1
- package/extensions/googlechat/package.json +1 -1
- package/extensions/imessage/package.json +1 -1
- package/extensions/irc/package.json +1 -1
- package/extensions/learning-loop/package.json +1 -1
- package/extensions/line/package.json +1 -1
- package/extensions/llm-task/package.json +1 -1
- package/extensions/matrix/CHANGELOG.md +6 -0
- package/extensions/matrix/package.json +1 -1
- package/extensions/mattermost/package.json +1 -1
- package/extensions/memory-core/package.json +1 -1
- package/extensions/memory-lancedb/package.json +1 -1
- package/extensions/minimax-portal-auth/package.json +1 -1
- package/extensions/msteams/CHANGELOG.md +6 -0
- package/extensions/msteams/package.json +1 -1
- package/extensions/nextcloud-talk/package.json +1 -1
- package/extensions/nostr/CHANGELOG.md +6 -0
- package/extensions/nostr/package.json +1 -1
- package/extensions/open-prose/package.json +1 -1
- package/extensions/outlook/package.json +1 -1
- package/extensions/pipeline/package.json +1 -1
- package/extensions/signal/package.json +1 -1
- package/extensions/slack/package.json +1 -1
- package/extensions/telegram/package.json +1 -1
- package/extensions/tlon/package.json +1 -1
- package/extensions/twitch/CHANGELOG.md +6 -0
- package/extensions/twitch/package.json +1 -1
- package/extensions/voice-call/CHANGELOG.md +6 -0
- package/extensions/voice-call/package.json +1 -1
- package/extensions/whatsapp/package.json +1 -1
- package/extensions/zalo/CHANGELOG.md +6 -0
- package/extensions/zalo/package.json +1 -1
- package/extensions/zalouser/CHANGELOG.md +6 -0
- package/extensions/zalouser/package.json +1 -1
- package/package.json +1 -1
- package/skills/channel-routing/SKILL.md +42 -0
- package/skills/document-generation/SKILL.md +64 -0
- package/skills/reactions-extensive/SKILL.md +30 -0
- package/skills/reactions-minimal/SKILL.md +31 -0
- package/skills/safe-edit/SKILL.md +51 -0
- package/skills/tool-narration/SKILL.md +40 -0
- package/skills/verify-output/SKILL.md +47 -0
package/package.json
CHANGED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: channel-routing
|
|
3
|
+
description: Messaging conventions and channel routing rules. Reply in current session auto-routes to the source channel; cross-session messaging via sessions_send; sub-agent orchestration via subagents tool; system message handling. Never use exec/curl for provider messaging — Symi handles routing internally.
|
|
4
|
+
triggers:
|
|
5
|
+
[message, messaging, channel, route, routing, send, sessions_send, subagent, system-message]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Channel Routing — messaging conventions
|
|
9
|
+
|
|
10
|
+
## Where messages go
|
|
11
|
+
|
|
12
|
+
- **Reply in current session** → automatically routes to the source channel (Signal, Telegram, Slack, etc.). Just respond — Symi delivers it.
|
|
13
|
+
- **Cross-session messaging** → use `sessions_send(sessionKey, message)` to deliver to another session/sub-agent.
|
|
14
|
+
- **Sub-agent orchestration** → use `subagents(action=list|steer|kill)` for managing spawned sub-agent runs from the current requester session.
|
|
15
|
+
|
|
16
|
+
## System messages
|
|
17
|
+
|
|
18
|
+
`[System Message] ...` blocks in your input are **internal context** — they are not user-visible by default.
|
|
19
|
+
|
|
20
|
+
If a `[System Message]` reports completed cron/sub-agent work and asks for a user update, **rewrite it in your normal assistant voice** and send that update. Do NOT:
|
|
21
|
+
|
|
22
|
+
- Forward the raw system text verbatim.
|
|
23
|
+
- Default to `NO_REPLY` just because the trigger came from a cron/sub-agent.
|
|
24
|
+
|
|
25
|
+
The user expects a normal-sounding update; the System Message is just telling you what to update them about.
|
|
26
|
+
|
|
27
|
+
## What NOT to do
|
|
28
|
+
|
|
29
|
+
- **Never use `exec`/`curl` for provider messaging.** Symi handles all routing internally — invoking external HTTP calls bypasses delivery accounting, dedupe, and channel-specific formatting.
|
|
30
|
+
- Don't include channel-specific protocol headers (Slack Block Kit JSON, Telegram parse_mode strings) in your text body unless explicitly using the `message` tool with the right `channel` parameter.
|
|
31
|
+
- Don't `sessions_send` to your own session — just respond normally.
|
|
32
|
+
|
|
33
|
+
## When to use `message` vs respond directly
|
|
34
|
+
|
|
35
|
+
- **Just respond** when delivering the user's reply in the current conversation. The runtime routes it.
|
|
36
|
+
- **Use the `message` tool** when:
|
|
37
|
+
- Sending proactively to a different recipient or channel.
|
|
38
|
+
- Sending a non-text payload (poll, reaction, file).
|
|
39
|
+
- Targeting a specific channel when multiple channels are configured.
|
|
40
|
+
- You also use `message` to deliver the user-visible reply: in that case respond with ONLY `NO_REPLY` afterward to avoid double-delivery.
|
|
41
|
+
|
|
42
|
+
See the `message` tool's own description for the full parameter reference and channel-specific options.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: document-generation
|
|
3
|
+
description: Generate Word (.docx), Excel (.xlsx), PowerPoint (.pptx), and PDF documents via npm packages pre-installed on the gateway. Write a short Node.js script (.cjs for CommonJS), execute via exec with host=gateway. Use when the user asks to create, generate, or export documents.
|
|
4
|
+
triggers: [document, docx, xlsx, pptx, pdf, word, excel, powerpoint, generate, export, file]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Document Generation
|
|
8
|
+
|
|
9
|
+
The gateway has these npm packages pre-installed for generating documents via the `exec` tool:
|
|
10
|
+
|
|
11
|
+
- **`docx`** — create `.docx` (Word) files with headings, paragraphs, tables, images, styles.
|
|
12
|
+
- **`exceljs`** — create `.xlsx` (Excel) files with sheets, formulas, formatting, charts.
|
|
13
|
+
- **`pptxgenjs`** — create `.pptx` (PowerPoint) files with slides, layouts, text, images, charts.
|
|
14
|
+
- **`pdfkit`** — create `.pdf` files with text, images, tables, vector graphics.
|
|
15
|
+
|
|
16
|
+
## How to invoke
|
|
17
|
+
|
|
18
|
+
When the user asks to **create, generate, or export** a document:
|
|
19
|
+
|
|
20
|
+
1. Write a short Node.js script. Save with `.cjs` extension to guarantee CommonJS resolution.
|
|
21
|
+
2. Execute via the `exec` tool with `host: "gateway"` — the packages are installed on the gateway host, NOT the sandbox or remote nodes.
|
|
22
|
+
3. Save the output:
|
|
23
|
+
- To `projects/{slug}/files/` when a project is active.
|
|
24
|
+
- Otherwise to `.session-uploads/{session_id}/`.
|
|
25
|
+
|
|
26
|
+
## Minimal example — Word doc
|
|
27
|
+
|
|
28
|
+
```js
|
|
29
|
+
// gen.cjs
|
|
30
|
+
const { Document, Packer, Paragraph, TextRun, HeadingLevel } = require("docx");
|
|
31
|
+
const fs = require("fs");
|
|
32
|
+
|
|
33
|
+
const doc = new Document({
|
|
34
|
+
sections: [
|
|
35
|
+
{
|
|
36
|
+
children: [
|
|
37
|
+
new Paragraph({ heading: HeadingLevel.TITLE, children: [new TextRun("Report")] }),
|
|
38
|
+
new Paragraph({ children: [new TextRun("Body content here.")] }),
|
|
39
|
+
],
|
|
40
|
+
},
|
|
41
|
+
],
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
Packer.toBuffer(doc).then((buf) => {
|
|
45
|
+
fs.writeFileSync(".session-uploads/<session_id>/report.docx", buf);
|
|
46
|
+
});
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Then `exec({ host: "gateway", command: "node gen.cjs" })`.
|
|
50
|
+
|
|
51
|
+
## What NOT to do
|
|
52
|
+
|
|
53
|
+
- **Don't use Pandoc, LibreOffice, or other CLI converters** unless the user specifically asks. The pre-installed npm packages are faster, more reliable, and don't require external binaries.
|
|
54
|
+
- **Don't try to generate documents from the sandbox host** — those packages are gateway-only.
|
|
55
|
+
- **Don't write the file to the workspace root** unless explicitly asked. Use the project or session-uploads paths.
|
|
56
|
+
- **Don't dump 10KB of HTML and call it a "document"**. Use the structured generators above.
|
|
57
|
+
|
|
58
|
+
## When the user wants something analyzable instead
|
|
59
|
+
|
|
60
|
+
If the user uploaded a file (PDF, Word, Excel, image) and wants the content extracted (not generated):
|
|
61
|
+
|
|
62
|
+
- Use the `workspace_project` tool with `read_file` action.
|
|
63
|
+
- It extracts text from PDFs, Word docs, Excel files, images (OCR), and plain text.
|
|
64
|
+
- Pass the relative path: `.session-uploads/{session_id}/<filename>` or `projects/{slug}/files/<filename>`.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: reactions-extensive
|
|
3
|
+
description: Liberal reaction policy for channels configured in EXTENSIVE reactions mode. React naturally — acknowledge messages with appropriate emojis, express sentiment, react to interesting content or notable events, confirm understanding. React whenever it feels natural.
|
|
4
|
+
triggers: [reactions, react, emoji, extensive-reactions]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Reactions — EXTENSIVE mode
|
|
8
|
+
|
|
9
|
+
Reactions are enabled for the current channel in **EXTENSIVE** mode.
|
|
10
|
+
|
|
11
|
+
## Feel free to react liberally
|
|
12
|
+
|
|
13
|
+
- **Acknowledge messages** with appropriate emojis when text alone would feel cold or robotic.
|
|
14
|
+
- **Express sentiment and personality** through reactions — humor, agreement, appreciation, surprise.
|
|
15
|
+
- **React to interesting content** — a clever solution, a funny remark, a notable result.
|
|
16
|
+
- **Use reactions to confirm understanding** or agreement when a full text reply would be overkill.
|
|
17
|
+
|
|
18
|
+
## Cadence
|
|
19
|
+
|
|
20
|
+
React whenever it **feels natural**. Don't ration them — this channel is configured to expect reactions as part of the conversational fabric.
|
|
21
|
+
|
|
22
|
+
## Still avoid
|
|
23
|
+
|
|
24
|
+
- Reacting to your own replies.
|
|
25
|
+
- Reactions that contradict the text you're sending alongside ("👎 sounds great!").
|
|
26
|
+
- A reaction storm (5+ different emojis on the same message). Pick one.
|
|
27
|
+
|
|
28
|
+
## When in doubt
|
|
29
|
+
|
|
30
|
+
In EXTENSIVE mode, lean toward reacting rather than not. The user-visible signal is "this agent feels engaged"; flat-affect responses break that.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: reactions-minimal
|
|
3
|
+
description: Sparing reaction policy for channels configured in MINIMAL reactions mode. React only when truly relevant — important user requests, genuine sentiment, never routine messages or your own replies. Guideline at most 1 reaction per 5-10 exchanges.
|
|
4
|
+
triggers: [reactions, react, emoji, minimal-reactions]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Reactions — MINIMAL mode
|
|
8
|
+
|
|
9
|
+
Reactions are enabled for the current channel in **MINIMAL** mode.
|
|
10
|
+
|
|
11
|
+
## React ONLY when truly relevant
|
|
12
|
+
|
|
13
|
+
- **Acknowledge important user requests** or confirmations (a thumbs-up on "yes that's exactly what I wanted" — but only if no text reply is also being sent).
|
|
14
|
+
- **Express genuine sentiment** — humor, appreciation — sparingly. Don't fake it.
|
|
15
|
+
- **Avoid reacting** to:
|
|
16
|
+
- Routine messages and procedural exchanges.
|
|
17
|
+
- Your own replies (never).
|
|
18
|
+
- Every message in a back-and-forth (no reaction storms).
|
|
19
|
+
|
|
20
|
+
## Cadence
|
|
21
|
+
|
|
22
|
+
At most **1 reaction per 5-10 exchanges**. If you've reacted recently, default to no reaction.
|
|
23
|
+
|
|
24
|
+
## Anti-patterns
|
|
25
|
+
|
|
26
|
+
- 👍 on every user message: noise.
|
|
27
|
+
- 🤔 on a question: meaningless.
|
|
28
|
+
- 🚀 on a successful tool call: nobody asked.
|
|
29
|
+
- A reaction PLUS a verbose reply: the reaction is redundant.
|
|
30
|
+
|
|
31
|
+
If you're considering whether to react and not sure, don't.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: safe-edit
|
|
3
|
+
description: Best practices for the edit tool plus recovery patterns when oldText doesn't match. Read before editing, use shortest unique snippets, prefer distinctive lines, never skip past a failed match. Loaded JIT when an edit fails or the agent is about to make a non-trivial code change.
|
|
4
|
+
triggers: [edit, oldtext, recovery, match, failed, wrong, snippet, hallucinated]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Safe Edit — best practices and recovery patterns
|
|
8
|
+
|
|
9
|
+
The `edit` tool replaces an exact `oldText` snippet with `newText`. When `oldText` doesn't match, the call fails. The runtime guard refuses edits to files you haven't read in this session, but it can't tell whether the text you're replacing actually exists at that location. This skill is the discipline that prevents wasted turns.
|
|
10
|
+
|
|
11
|
+
## Before any edit
|
|
12
|
+
|
|
13
|
+
1. **Read the file first.** The runtime read-before-edit guard requires it; the practical reason is that you cannot match text you haven't seen.
|
|
14
|
+
2. **Locate the exact text** in the read output. Copy-paste it directly — do not retype, do not "remember" it.
|
|
15
|
+
3. **Choose the shortest unique snippet** that identifies the location. 1-3 lines is usually right. Pasting whole functions makes match failures harder to diagnose and increases the chance of accidentally matching multiple sites.
|
|
16
|
+
4. **Prefer distinctive content** — function names, unique strings, comments — over generic code (closing braces, blank lines, common keywords). Distinctive snippets fail loudly when wrong; generic snippets silently match the wrong place.
|
|
17
|
+
|
|
18
|
+
## When an edit fails
|
|
19
|
+
|
|
20
|
+
If `edit` returns an error like "Could not find the exact text", do NOT:
|
|
21
|
+
|
|
22
|
+
- Skip to a different file or task.
|
|
23
|
+
- Paraphrase the oldText and retry.
|
|
24
|
+
- Try with whitespace tweaks ("maybe it's tabs not spaces").
|
|
25
|
+
|
|
26
|
+
Instead:
|
|
27
|
+
|
|
28
|
+
1. **Re-read the file** with `read`. The file may have changed (another tool wrote to it; auto-formatter ran on save).
|
|
29
|
+
2. **Copy the exact text from the fresh read output** into your retry. Whitespace, indentation, line endings — match precisely.
|
|
30
|
+
3. If the file content has shifted significantly, **update your edit plan** before retrying. Don't bash on the same wrong text.
|
|
31
|
+
|
|
32
|
+
## When the file content surprises you
|
|
33
|
+
|
|
34
|
+
If the read output doesn't look like what you expected:
|
|
35
|
+
|
|
36
|
+
- Check the path is right (relative vs absolute, workspace vs sandbox).
|
|
37
|
+
- Confirm you're in the right session (workspace dir matches your assumption).
|
|
38
|
+
- Look for a recent `write` that may have replaced the file content wholesale.
|
|
39
|
+
|
|
40
|
+
## Multi-edit workflow
|
|
41
|
+
|
|
42
|
+
If you need several edits to the same file:
|
|
43
|
+
|
|
44
|
+
- Make them one at a time, re-reading between non-adjacent edits.
|
|
45
|
+
- For tightly-coupled edits (e.g., adding an import + using the import), do the most-stable edit first (the import, which doesn't depend on later changes).
|
|
46
|
+
- After each successful edit, the file's content has changed — older snippets you saved from an earlier read may no longer match.
|
|
47
|
+
|
|
48
|
+
## What this skill is not
|
|
49
|
+
|
|
50
|
+
- **Not a refactoring strategy.** For large structural changes, prefer rewriting the file via `write` or generating an `apply_patch` payload. The edit tool is for surgical replacements, not whole-section rewrites.
|
|
51
|
+
- **Not a substitute for reading.** Even with this skill loaded, you still must `read` first.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tool-narration
|
|
3
|
+
description: When and how to narrate tool calls. Default to silence on routine, low-risk tool calls; narrate only when it adds value (multi-step work, sensitive actions, complex problems, or explicit user request). Keep narration brief and value-dense.
|
|
4
|
+
triggers: [narrate, narration, tool-call, verbose, explain]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Tool Call Style
|
|
8
|
+
|
|
9
|
+
**Default: do not narrate routine, low-risk tool calls.** Just call the tool.
|
|
10
|
+
|
|
11
|
+
Narrate only when it helps:
|
|
12
|
+
|
|
13
|
+
- **Multi-step work** where the user benefits from knowing the plan or progress.
|
|
14
|
+
- **Complex / challenging problems** where you're making non-obvious choices.
|
|
15
|
+
- **Sensitive actions** (deletions, destructive operations, external sends) — confirm intent before executing.
|
|
16
|
+
- **When the user explicitly asks** what you're doing or why.
|
|
17
|
+
|
|
18
|
+
Keep narration brief and value-dense. Avoid:
|
|
19
|
+
|
|
20
|
+
- Repeating obvious steps the user can see in the tool call.
|
|
21
|
+
- "Now I'll read the file" — they can see the read.
|
|
22
|
+
- "Let me think about this" — silence.
|
|
23
|
+
- Restating the user's question back at them.
|
|
24
|
+
|
|
25
|
+
Use plain human language for narration unless you're in an explicitly technical context (debugging, writing docs, reviewing code). Don't pad with markdown headers, status emojis, or progress bars on simple tasks.
|
|
26
|
+
|
|
27
|
+
## Anti-patterns
|
|
28
|
+
|
|
29
|
+
These all happen automatically without narration:
|
|
30
|
+
|
|
31
|
+
- File reads, greps, finds, ls.
|
|
32
|
+
- Memory searches at the start of an answer (the model is supposed to do this).
|
|
33
|
+
- Single-shot tool calls where the result speaks for itself.
|
|
34
|
+
|
|
35
|
+
## When narration genuinely helps
|
|
36
|
+
|
|
37
|
+
- "I'm going to do A, B, then C" — for multi-step plans, before any tool call.
|
|
38
|
+
- "This will delete the file. Confirm to proceed?" — sensitive ops.
|
|
39
|
+
- "Found the issue: X. Fixing now." — between debugging and the fix.
|
|
40
|
+
- "The build is taking longer than expected because Y" — when delays would otherwise look like the agent stalling.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: verify-output
|
|
3
|
+
description: Structured verification pass before delivering code, scripts, configurations, or any technical artifact. Re-read request, check each requirement against output, actually run the code, include tests when asked, self-review, fix silently before responding. Apply on every coding task — skipping verification is the most common cause of incomplete outputs.
|
|
4
|
+
triggers: [verify, verification, test, deliver, ship, check, validate, review, qa, lint, compile]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Verify Your Work
|
|
8
|
+
|
|
9
|
+
Apply this skill BEFORE delivering any code, script, configuration, or technical artifact. Skipping verification is the single most common cause of incomplete or broken outputs. Treat as mandatory for every coding task, not optional polish.
|
|
10
|
+
|
|
11
|
+
## 1. Re-read the request
|
|
12
|
+
|
|
13
|
+
Before finalizing your response, re-read the user's original message (and any follow-ups) in full. Extract every discrete requirement, constraint, and preference they stated. Write them down internally as a checklist. This catches drift — it's easy to start solving a related-but-different problem mid-task.
|
|
14
|
+
|
|
15
|
+
## 2. Check each requirement against your output
|
|
16
|
+
|
|
17
|
+
Walk through your internal checklist point by point. For each requirement, locate the exact lines in your output that satisfy it. If you cannot point to concrete lines that fulfill a requirement, the work is not done — go back and address the gap before responding. Pay special attention to edge cases, error handling, and boundary conditions the user mentioned.
|
|
18
|
+
|
|
19
|
+
## 3. Run the code
|
|
20
|
+
|
|
21
|
+
Whenever possible, use `exec` to actually run, compile, lint, or test your code before presenting it. Do not guess whether code works — execute it and observe the result. If the code produces errors, fix them and re-run until it succeeds.
|
|
22
|
+
|
|
23
|
+
- For scripts: run with representative inputs.
|
|
24
|
+
- For libraries/modules: write and execute a minimal smoke test.
|
|
25
|
+
- For config files: validate syntax (json, yaml, toml parsers).
|
|
26
|
+
|
|
27
|
+
If execution is genuinely impossible (no runtime, user said don't run), state that you were unable to verify execution and explain why — do not silently skip.
|
|
28
|
+
|
|
29
|
+
## 4. Include tests when requested
|
|
30
|
+
|
|
31
|
+
If the user asked for tests, they are a hard requirement — not a nice-to-have. Deliver the tests alongside the implementation, not as an afterthought. Run the tests and confirm they pass before responding. If the user did not explicitly ask for tests but the change is non-trivial, consider whether a test would catch a regression and offer one.
|
|
32
|
+
|
|
33
|
+
## 5. Self-review
|
|
34
|
+
|
|
35
|
+
After everything above, use `read` to re-read any files you created or modified. Look with fresh eyes as if reviewing someone else's code. Check for:
|
|
36
|
+
|
|
37
|
+
- typos, missing imports, unused variables
|
|
38
|
+
- inconsistent naming
|
|
39
|
+
- hardcoded values that should be configurable
|
|
40
|
+
- incomplete error handling
|
|
41
|
+
- security issues (exposed secrets, injection vectors, missing input validation)
|
|
42
|
+
|
|
43
|
+
If you find problems during self-review, fix them, re-run verification, and only then respond.
|
|
44
|
+
|
|
45
|
+
## Verification failures
|
|
46
|
+
|
|
47
|
+
If any step above reveals a gap, do NOT respond with a partial answer and a disclaimer. Instead, fix the issue silently and re-verify. The user should receive working, complete output — not a draft with known issues. Only flag genuinely unresolvable ambiguities (where you need the user's decision to proceed).
|