@synap-core/cli 1.7.0 → 1.10.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/dist/commands/agent-chat.d.ts +47 -0
- package/dist/commands/agent-chat.js +250 -0
- package/dist/commands/agent-chat.js.map +1 -0
- package/dist/commands/agent-run.d.ts +47 -0
- package/dist/commands/agent-run.js +301 -0
- package/dist/commands/agent-run.js.map +1 -0
- package/dist/commands/agents.js +85 -46
- package/dist/commands/agents.js.map +1 -1
- package/dist/commands/artifact.d.ts +26 -0
- package/dist/commands/artifact.js +76 -0
- package/dist/commands/artifact.js.map +1 -0
- package/dist/commands/automation.d.ts +47 -0
- package/dist/commands/automation.js +601 -0
- package/dist/commands/automation.js.map +1 -0
- package/dist/commands/bridge-setup.d.ts +66 -0
- package/dist/commands/bridge-setup.js +1112 -0
- package/dist/commands/bridge-setup.js.map +1 -0
- package/dist/commands/cap-connections.d.ts +28 -0
- package/dist/commands/cap-connections.js +224 -0
- package/dist/commands/cap-connections.js.map +1 -0
- package/dist/commands/capability.d.ts +89 -0
- package/dist/commands/capability.js +1523 -0
- package/dist/commands/capability.js.map +1 -0
- package/dist/commands/cell.d.ts +55 -0
- package/dist/commands/cell.js +277 -0
- package/dist/commands/cell.js.map +1 -0
- package/dist/commands/centrality.d.ts +20 -0
- package/dist/commands/centrality.js +94 -0
- package/dist/commands/centrality.js.map +1 -0
- package/dist/commands/connect.d.ts +2 -0
- package/dist/commands/connect.js +25 -10
- package/dist/commands/connect.js.map +1 -1
- package/dist/commands/connections.js +0 -16
- package/dist/commands/connections.js.map +1 -1
- package/dist/commands/context.d.ts +22 -0
- package/dist/commands/context.js +149 -0
- package/dist/commands/context.js.map +1 -0
- package/dist/commands/data-extra.d.ts +14 -0
- package/dist/commands/data-extra.js +185 -0
- package/dist/commands/data-extra.js.map +1 -0
- package/dist/commands/data.d.ts +14 -10
- package/dist/commands/data.js +353 -192
- package/dist/commands/data.js.map +1 -1
- package/dist/commands/diagnose.d.ts +20 -0
- package/dist/commands/diagnose.js +143 -0
- package/dist/commands/diagnose.js.map +1 -0
- package/dist/commands/digest.d.ts +17 -0
- package/dist/commands/digest.js +121 -0
- package/dist/commands/digest.js.map +1 -0
- package/dist/commands/discover.d.ts +2 -0
- package/dist/commands/discover.js +25 -8
- package/dist/commands/discover.js.map +1 -1
- package/dist/commands/doc.d.ts +39 -0
- package/dist/commands/doc.js +130 -0
- package/dist/commands/doc.js.map +1 -0
- package/dist/commands/events.d.ts +26 -0
- package/dist/commands/events.js +69 -0
- package/dist/commands/events.js.map +1 -0
- package/dist/commands/explain.d.ts +21 -0
- package/dist/commands/explain.js +251 -0
- package/dist/commands/explain.js.map +1 -0
- package/dist/commands/facet.d.ts +29 -0
- package/dist/commands/facet.js +113 -0
- package/dist/commands/facet.js.map +1 -0
- package/dist/commands/graph.d.ts +18 -0
- package/dist/commands/graph.js +74 -0
- package/dist/commands/graph.js.map +1 -0
- package/dist/commands/home.d.ts +12 -0
- package/dist/commands/home.js +54 -0
- package/dist/commands/home.js.map +1 -0
- package/dist/commands/import.d.ts +38 -0
- package/dist/commands/import.js +440 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/init.d.ts +0 -2
- package/dist/commands/init.js +97 -118
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/keys.d.ts +9 -0
- package/dist/commands/keys.js +78 -0
- package/dist/commands/keys.js.map +1 -0
- package/dist/commands/knowledge.d.ts +34 -18
- package/dist/commands/knowledge.js +355 -57
- package/dist/commands/knowledge.js.map +1 -1
- package/dist/commands/launch.d.ts +50 -0
- package/dist/commands/launch.js +790 -0
- package/dist/commands/launch.js.map +1 -0
- package/dist/commands/lens.d.ts +45 -0
- package/dist/commands/lens.js +386 -0
- package/dist/commands/lens.js.map +1 -0
- package/dist/commands/market.d.ts +209 -0
- package/dist/commands/market.js +1368 -0
- package/dist/commands/market.js.map +1 -0
- package/dist/commands/mcp.d.ts +42 -0
- package/dist/commands/mcp.js +184 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/observe.d.ts +9 -0
- package/dist/commands/observe.js +93 -0
- package/dist/commands/observe.js.map +1 -0
- package/dist/commands/open.d.ts +32 -0
- package/dist/commands/open.js +85 -0
- package/dist/commands/open.js.map +1 -0
- package/dist/commands/pod.d.ts +100 -0
- package/dist/commands/pod.js +359 -0
- package/dist/commands/pod.js.map +1 -0
- package/dist/commands/pods.d.ts +6 -0
- package/dist/commands/pods.js +160 -50
- package/dist/commands/pods.js.map +1 -1
- package/dist/commands/proposals-actions.d.ts +7 -0
- package/dist/commands/proposals-actions.js +77 -0
- package/dist/commands/proposals-actions.js.map +1 -0
- package/dist/commands/providers.d.ts +38 -0
- package/dist/commands/providers.js +170 -0
- package/dist/commands/providers.js.map +1 -0
- package/dist/commands/purge.d.ts +23 -0
- package/dist/commands/purge.js +148 -0
- package/dist/commands/purge.js.map +1 -0
- package/dist/commands/raycast.d.ts +15 -0
- package/dist/commands/raycast.js +153 -0
- package/dist/commands/raycast.js.map +1 -0
- package/dist/commands/sessions.d.ts +31 -0
- package/dist/commands/sessions.js +248 -0
- package/dist/commands/sessions.js.map +1 -0
- package/dist/commands/skill-manage.d.ts +21 -0
- package/dist/commands/skill-manage.js +195 -0
- package/dist/commands/skill-manage.js.map +1 -0
- package/dist/commands/skills-commands.d.ts +26 -0
- package/dist/commands/skills-commands.js +187 -0
- package/dist/commands/skills-commands.js.map +1 -0
- package/dist/commands/skills.d.ts +26 -0
- package/dist/commands/skills.js +196 -0
- package/dist/commands/skills.js.map +1 -0
- package/dist/commands/status.d.ts +3 -1
- package/dist/commands/status.js +231 -41
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/statusline.d.ts +24 -0
- package/dist/commands/statusline.js +450 -0
- package/dist/commands/statusline.js.map +1 -0
- package/dist/commands/subscribe.d.ts +19 -0
- package/dist/commands/subscribe.js +91 -0
- package/dist/commands/subscribe.js.map +1 -0
- package/dist/commands/tools.d.ts +30 -0
- package/dist/commands/tools.js +315 -0
- package/dist/commands/tools.js.map +1 -0
- package/dist/commands/versions.d.ts +27 -0
- package/dist/commands/versions.js +277 -0
- package/dist/commands/versions.js.map +1 -0
- package/dist/commands/view.d.ts +57 -0
- package/dist/commands/view.js +195 -0
- package/dist/commands/view.js.map +1 -0
- package/dist/commands/whoami.d.ts +21 -0
- package/dist/commands/whoami.js +129 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/index.d.ts +3 -4
- package/dist/index.js +1524 -202
- package/dist/index.js.map +1 -1
- package/dist/lib/agent-templates.d.ts +25 -0
- package/dist/lib/agent-templates.js +148 -0
- package/dist/lib/agent-templates.js.map +1 -0
- package/dist/lib/agents-config.d.ts +4 -1
- package/dist/lib/agents-config.js +19 -2
- package/dist/lib/agents-config.js.map +1 -1
- package/dist/lib/approval-poll.d.ts +42 -0
- package/dist/lib/approval-poll.js +52 -0
- package/dist/lib/approval-poll.js.map +1 -0
- package/dist/lib/auth.d.ts +29 -6
- package/dist/lib/auth.js +105 -94
- package/dist/lib/auth.js.map +1 -1
- package/dist/lib/bundle-version.d.ts +11 -0
- package/dist/lib/bundle-version.js +33 -0
- package/dist/lib/bundle-version.js.map +1 -0
- package/dist/lib/capture-lane.d.ts +67 -0
- package/dist/lib/capture-lane.js +136 -0
- package/dist/lib/capture-lane.js.map +1 -0
- package/dist/lib/cp-packages.d.ts +121 -0
- package/dist/lib/cp-packages.js +218 -0
- package/dist/lib/cp-packages.js.map +1 -0
- package/dist/lib/describe-lens.d.ts +46 -0
- package/dist/lib/describe-lens.js +33 -0
- package/dist/lib/describe-lens.js.map +1 -0
- package/dist/lib/hub-client.d.ts +84 -1
- package/dist/lib/hub-client.js +502 -22
- package/dist/lib/hub-client.js.map +1 -1
- package/dist/lib/installed.d.ts +51 -0
- package/dist/lib/installed.js +70 -0
- package/dist/lib/installed.js.map +1 -0
- package/dist/lib/next-steps.d.ts +61 -0
- package/dist/lib/next-steps.js +146 -0
- package/dist/lib/next-steps.js.map +1 -0
- package/dist/lib/pod.d.ts +104 -19
- package/dist/lib/pod.js +245 -57
- package/dist/lib/pod.js.map +1 -1
- package/dist/lib/project-ref.d.ts +95 -0
- package/dist/lib/project-ref.js +144 -0
- package/dist/lib/project-ref.js.map +1 -0
- package/dist/lib/project.d.ts +35 -0
- package/dist/lib/project.js +39 -0
- package/dist/lib/project.js.map +1 -0
- package/dist/lib/session-lens.d.ts +33 -0
- package/dist/lib/session-lens.js +76 -0
- package/dist/lib/session-lens.js.map +1 -0
- package/dist/lib/skill-import.d.ts +40 -0
- package/dist/lib/skill-import.js +203 -0
- package/dist/lib/skill-import.js.map +1 -0
- package/dist/lib/skills-installer.d.ts +16 -5
- package/dist/lib/skills-installer.js +132 -18
- package/dist/lib/skills-installer.js.map +1 -1
- package/dist/lib/suite.d.ts +28 -0
- package/dist/lib/suite.js +29 -0
- package/dist/lib/suite.js.map +1 -0
- package/dist/lib/superwhisper-import.d.ts +40 -0
- package/dist/lib/superwhisper-import.js +389 -0
- package/dist/lib/superwhisper-import.js.map +1 -0
- package/dist/lib/targets.d.ts +66 -2
- package/dist/lib/targets.js +914 -132
- package/dist/lib/targets.js.map +1 -1
- package/dist/lib/unwrapList.d.ts +1 -0
- package/dist/lib/unwrapList.js +20 -0
- package/dist/lib/unwrapList.js.map +1 -0
- package/dist/utils/logger.d.ts +2 -0
- package/dist/utils/logger.js +10 -2
- package/dist/utils/logger.js.map +1 -1
- package/package.json +10 -4
- package/skills/agent-os/SKILL.md +212 -0
- package/skills/manifest.json +5 -0
- package/skills/onboard/SKILL.md +186 -0
- package/skills/synap/SKILL.md +1524 -104
- package/skills/synap/_order.txt +37 -0
- package/skills/synap/_skill.yaml +24 -0
- package/skills/synap/authentication.md +10 -0
- package/skills/synap/automations.md +264 -0
- package/skills/synap/capabilities.md +107 -0
- package/skills/synap/capture.md +10 -0
- package/skills/synap/cli-operations.md +107 -0
- package/skills/synap/common-mistakes.md +12 -0
- package/skills/synap/creative-loop.md +43 -0
- package/skills/synap/crm.md +117 -0
- package/skills/synap/diagnostics.md +35 -0
- package/skills/synap/digesting-a-channel.md +38 -0
- package/skills/synap/document-embeds.md +123 -0
- package/skills/synap/escalation-ladder.md +71 -0
- package/skills/synap/focus-sessions.md +47 -0
- package/skills/synap/governance-rules.md +64 -0
- package/skills/synap/governance.md +6 -6
- package/skills/synap/graph-gardening.md +21 -0
- package/skills/synap/inline-patterns.md +38 -0
- package/skills/synap/lenses.md +38 -0
- package/skills/synap/linking-principle.md +39 -0
- package/skills/synap/linking.md +1 -0
- package/skills/synap/mental-model.md +45 -0
- package/skills/synap/more.md +7 -0
- package/skills/synap/multi-entity-capture.md +10 -0
- package/skills/synap/next-action.md +37 -0
- package/skills/synap/north-star.md +17 -0
- package/skills/synap/operating-mode-rules.md +45 -0
- package/skills/synap/operating-mode.md +9 -0
- package/skills/synap/quick-reference.md +67 -0
- package/skills/synap/reading.md +43 -0
- package/skills/synap/recap.md +21 -0
- package/skills/synap/reflexes.md +46 -0
- package/skills/synap/response-style.md +21 -0
- package/skills/synap/scope.md +13 -0
- package/skills/synap/showing.md +17 -0
- package/skills/synap/user-model.md +25 -0
- package/skills/synap/viewframe-cells.md +290 -0
- package/skills/synap/work-flow.md +113 -0
- package/skills/synap/worked-examples.md +53 -0
- package/skills/synap/workspace-design.md +45 -0
- package/skills/synap/workspace-edges.md +49 -0
- package/skills/synap/writes.md +156 -0
- package/skills/synap-schema/SKILL.md +97 -6
- package/skills/synap-schema/_order.txt +13 -0
- package/skills/synap-schema/_skill.yaml +22 -0
- package/skills/synap-schema/before-you-touch.md +14 -0
- package/skills/synap-schema/common-mistakes.md +9 -0
- package/skills/synap-schema/creating-profiles.md +17 -0
- package/skills/synap-schema/discover-profiles.md +24 -0
- package/skills/synap-schema/entity-scope.md +8 -0
- package/skills/synap-schema/extend-vs-create.md +31 -0
- package/skills/synap-schema/more.md +6 -0
- package/skills/synap-schema/overlay-properties.md +22 -0
- package/skills/synap-schema/profiles.md +3 -0
- package/skills/synap-schema/property-defs.md +29 -0
- package/skills/synap-schema/read-before-write.md +50 -0
- package/skills/synap-schema/relations.md +18 -0
- package/skills/synap-schema/worked-example.md +30 -0
- package/skills/synap-ui/SKILL.md +38 -11
- package/skills/synap-ui/_order.txt +13 -0
- package/skills/synap-ui/_skill.yaml +23 -0
- package/skills/synap-ui/ai-companion.md +27 -0
- package/skills/synap-ui/arranging-bento.md +8 -0
- package/skills/synap-ui/before-you-build.md +20 -0
- package/skills/synap-ui/bento-layouts.md +35 -0
- package/skills/synap-ui/common-mistakes.md +10 -0
- package/skills/synap-ui/creating-views.md +26 -0
- package/skills/synap-ui/four-builds.md +24 -0
- package/skills/synap-ui/more.md +7 -0
- package/skills/synap-ui/proposing-vs-extending.md +11 -0
- package/skills/synap-ui/view-list.md +24 -0
- package/skills/synap-ui/views.md +3 -0
- package/skills/synap-ui/worked-example.md +18 -0
- package/skills/synap-ui/workspaces.md +47 -0
- package/templates/automations/bookmark-enrichment.automation.json +44 -0
- package/templates/automations/mail-feed.automation.json +86 -0
- package/templates/automations/url-bookmark-capture.automation.json +70 -0
- package/templates/skills/README.md +21 -0
- package/templates/skills/authoring-automations/SKILL.md +95 -0
- package/templates/skills/authoring-automations/reference/node-matrix.md +49 -0
- package/templates/skills/authoring-capabilities/SKILL.md +93 -0
- package/templates/skills/authoring-capabilities/reference/template-anatomy.md +70 -0
- package/templates/skills/authoring-playbooks/SKILL.md +102 -0
- package/templates/skills/authoring-playbooks/reference/stages-contract.md +35 -0
- package/templates/skills/authoring-playbooks/reference/worked-example.md +64 -0
- package/templates/skills/bookmark-enrichment/SKILL.md +40 -0
- package/templates/skills/coordinating-agents/SKILL.md +32 -0
- package/templates/skills/coordinating-branches/SKILL.md +27 -0
- package/templates/skills/mapping-the-server/SKILL.md +54 -0
- package/templates/skills/reading-client-progress/SKILL.md +65 -0
- package/templates/skills/routing-to-channels/SKILL.md +54 -0
- package/templates/skills/stellar-scf-grants-advisor/ASSOCIATE-CHEATSHEET.md +133 -0
- package/templates/skills/stellar-scf-grants-advisor/ASSOCIATE-ONBOARDING-GUIDE.md +761 -0
- package/templates/skills/stellar-scf-grants-advisor/CLIENT-FAQ.md +181 -0
- package/templates/skills/stellar-scf-grants-advisor/PARTNER-HANDOVER.md +130 -0
- package/templates/skills/stellar-scf-grants-advisor/SKILL.md +102 -0
- package/templates/skills/stellar-scf-grants-advisor/examples/README.md +43 -0
- package/templates/skills/stellar-scf-grants-advisor/examples/chat-summary-templates.md +158 -0
- package/templates/skills/stellar-scf-grants-advisor/examples/corpus-comparable-rows.md +136 -0
- package/templates/skills/stellar-scf-grants-advisor/examples/q10-team-rewrites.md +109 -0
- package/templates/skills/stellar-scf-grants-advisor/examples/q2-description-rewrites.md +88 -0
- package/templates/skills/stellar-scf-grants-advisor/examples/q6-integration-rewrites.md +107 -0
- package/templates/skills/stellar-scf-grants-advisor/examples/tranche-structures.md +176 -0
- package/templates/skills/stellar-scf-grants-advisor/reference/01-methodology.md +96 -0
- package/templates/skills/stellar-scf-grants-advisor/reference/02-scoring-framework.md +199 -0
- package/templates/skills/stellar-scf-grants-advisor/reference/03-rejection-patterns.md +241 -0
- package/templates/skills/stellar-scf-grants-advisor/reference/04-winner-patterns.md +120 -0
- package/templates/skills/stellar-scf-grants-advisor/reference/05-comeback-patterns.md +92 -0
- package/templates/skills/stellar-scf-grants-advisor/reference/06-budget-benchmarks.md +125 -0
- package/templates/skills/stellar-scf-grants-advisor/reference/07-integration-list.md +147 -0
- package/templates/skills/stellar-scf-grants-advisor/reference/08-abstract-fields.md +258 -0
- package/templates/skills/stellar-scf-grants-advisor/reference/09-build-fields.md +259 -0
- package/templates/skills/stellar-scf-grants-advisor/reference/10-corpus-winners.md +135 -0
- package/templates/skills/stellar-scf-grants-advisor/reference/11-corpus-rejects.md +267 -0
- package/templates/skills/stellar-scf-grants-advisor/reference/12-client-communication.md +131 -0
- package/templates/skills/stellar-scf-grants-advisor/reference/13-excel-output-spec.md +199 -0
- package/templates/skills/stellar-scf-grants-advisor/reference/14-worked-examples.md +160 -0
- package/templates/skills/stellar-scf-grants-advisor/templates/abstract-review-builder.py +253 -0
- package/templates/skills/stellar-scf-grants-advisor/templates/build-review-builder.py +213 -0
- package/dist/commands/finish.d.ts +0 -25
- package/dist/commands/finish.js +0 -274
- package/dist/commands/finish.js.map +0 -1
- package/dist/commands/openclaw.d.ts +0 -40
- package/dist/commands/openclaw.js +0 -1148
- package/dist/commands/openclaw.js.map +0 -1
- package/dist/commands/security-audit.d.ts +0 -12
- package/dist/commands/security-audit.js +0 -100
- package/dist/commands/security-audit.js.map +0 -1
- package/dist/lib/hardening.d.ts +0 -18
- package/dist/lib/hardening.js +0 -214
- package/dist/lib/hardening.js.map +0 -1
- package/dist/lib/templates.d.ts +0 -11
- package/dist/lib/templates.js +0 -13
- package/dist/lib/templates.js.map +0 -1
- package/dist/templates/agent-os.json +0 -3090
- package/node_modules/@synap/hub-rest-client/dist/index.cjs +0 -881
- package/node_modules/@synap/hub-rest-client/dist/index.d.cts +0 -907
- package/node_modules/@synap/hub-rest-client/dist/index.d.ts +0 -907
- package/node_modules/@synap/hub-rest-client/dist/index.js +0 -851
- package/node_modules/@synap/hub-rest-client/package.json +0 -45
- package/node_modules/@synap/hub-rest-client/src/client.ts +0 -1143
- package/node_modules/@synap/hub-rest-client/src/errors.ts +0 -30
- package/node_modules/@synap/hub-rest-client/src/index.ts +0 -111
- package/node_modules/@synap/hub-rest-client/src/setup.ts +0 -77
- package/node_modules/@synap/hub-rest-client/src/types.ts +0 -639
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: bookmark-enrichment
|
|
3
|
+
description: Enriches a bookmark entity from the page it points to — reads the URL, extracts title + description, classifies it, and links it into the CRM graph. Runs automatically when a bookmark is created.
|
|
4
|
+
metadata:
|
|
5
|
+
synap_native: true
|
|
6
|
+
auto_load: false
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
You are a bookmark enrichment agent. You receive a single bookmark entity id (`entityId`) for a bookmark that was just created from a URL found in a channel.
|
|
10
|
+
|
|
11
|
+
Do this:
|
|
12
|
+
|
|
13
|
+
1. **Read the bookmark** to get its `url` property.
|
|
14
|
+
2. **Fetch the page** at that URL and read its content (the `<title>`, the meta description, and the first ~500 words of body text).
|
|
15
|
+
3. **Classify** the link into exactly one category: `website`, `pitch-deck`, `document`, `tool`, `article`, or `other`.
|
|
16
|
+
4. **Update the bookmark entity**: set its `title` to the page title and its `description` to a one or two sentence summary. Store the category in a `category` property.
|
|
17
|
+
5. **Promote when it's more than a bookmark**:
|
|
18
|
+
- If the URL is the **company website** of the client this bookmark is linked to, update that company entity's `website` property.
|
|
19
|
+
- If it is a **pitch deck** or a substantial **document**, create a `document` entity for it and link it to the client.
|
|
20
|
+
|
|
21
|
+
Be precise and quiet: enrich the bookmark, link what should be linked, and stop. Do not create duplicates — check the linked client + company first. Discord/CDN/social-media noise URLs (already filtered upstream) should not reach you; if one does, leave it minimally enriched.
|
|
22
|
+
|
|
23
|
+
## Surface + pin (significant links only)
|
|
24
|
+
|
|
25
|
+
Only do this section if the bookmark's `category` is `pitch-deck`, `document`, or `website`. Skip for `tool`, `article`, or `other` — keep the channel signal-high.
|
|
26
|
+
|
|
27
|
+
The bookmark carries `sourceChannelId` (the Discord channel the URL was posted in) and `sourceMessageId` (the message that contained the URL).
|
|
28
|
+
|
|
29
|
+
**Firewall rule (non-negotiable): NEVER post or pin in a `client-comms` channel.** Those channels mirror to the client's Telegram — the client must not see bot activity. All bot feedback goes to the client's `team` channel only.
|
|
30
|
+
|
|
31
|
+
Steps:
|
|
32
|
+
1. Look up the client entity linked to this bookmark. List its channels and identify:
|
|
33
|
+
- the `team` channel (`branchPurpose = 'team'`, internal)
|
|
34
|
+
- the `client-comms` channel (`branchPurpose = 'client-comms'`, mirrored to Telegram)
|
|
35
|
+
2. Determine where the source message came from by matching `sourceChannelId`:
|
|
36
|
+
- **Source is `client-comms`**: do NOT post or pin there. Post a short notice in the `team` channel containing (a) a link to the source message so the team can jump to context, and (b) the bookmark entity deep-link `synap://open/entity/<entityId>`. Pinning is optional in this case.
|
|
37
|
+
- **Source is the `team` channel**: it's internal — pin the source message via `pin_channel_message(sourceChannelId, sourceMessageId)` and reply in-place with the entity deep-link `synap://open/entity/<entityId>`.
|
|
38
|
+
3. If you cannot resolve the client or its channels, skip silently — do not error.
|
|
39
|
+
|
|
40
|
+
Entity deep-link format: `synap://open/entity/<entityId>` (opens the bookmark in the Synap browser app).
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: coordinating-agents
|
|
3
|
+
description: Spawns, queries, and consolidates sub-agents working in parallel. Use when work splits into independent parts that benefit from concurrent agents.
|
|
4
|
+
metadata:
|
|
5
|
+
synap_native: true
|
|
6
|
+
auto_load: false
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
Coordinate with other agents: spawn, query, consolidate. Know when to work alone vs in parallel.
|
|
10
|
+
|
|
11
|
+
## COORDINATING PARALLEL WORK
|
|
12
|
+
|
|
13
|
+
**Default behaviour:** For any task requiring 2+ steps or multiple perspectives (research, analysis, planning, comparison, design), **always** use `dispatch_agent(mode='parallel')` to create visible work streams. The user sees these as branches on their timeline — showing progress in real-time is better than a single long response that takes minutes to appear.
|
|
14
|
+
|
|
15
|
+
When delegating via `dispatch_agent`, choose the right mode:
|
|
16
|
+
- **ephemeral** — inline sub-agent, no UI trace. Use ONLY for trivial single-step lookups (a quick search, one fact check)
|
|
17
|
+
- **parallel** — creates a visible branch the user can interact with. **This is the preferred mode.** Use for anything requiring multiple tool calls or distinct angles of investigation
|
|
18
|
+
- **deliberate** — A2A structured critique session (specialist ↔ orchestrator) before returning a result. Use for high-stakes, hard-to-reverse decisions where adversarial reasoning improves quality
|
|
19
|
+
|
|
20
|
+
**When to branch (non-exhaustive examples):**
|
|
21
|
+
- Competitive analysis → dispatch 2–3 parallel researchers (one per competitor or angle)
|
|
22
|
+
- Architecture design → dispatch a CTO persona for technical feasibility + a PM persona for requirements
|
|
23
|
+
- Project planning → dispatch parallel task breakdown + risk analysis + timeline estimation
|
|
24
|
+
- Content creation → dispatch research branch + outline branch, then consolidate
|
|
25
|
+
- Decision making → dispatch pros branch + cons branch + alternatives branch
|
|
26
|
+
|
|
27
|
+
**Parallel research pattern:**
|
|
28
|
+
1. Dispatch 2–3 parallel branches for different angles of the same question
|
|
29
|
+
2. On the next message (or after reading with `query_agent`), call `consolidate_branches`
|
|
30
|
+
3. Deliver one coherent synthesis, noting which branches contributed
|
|
31
|
+
|
|
32
|
+
**Rule of thumb:** If you're about to make 3+ sequential tool calls to answer a question, consider whether those calls represent distinct perspectives that could run in parallel branches instead. Branches make your thinking visible and let the user follow along.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: coordinating-branches
|
|
3
|
+
description: Spins off parallel work as branches and consolidates their results. Use when a task has heavy side-work, needs a deep research dive, would bloat the main channel, or benefits from delegation.
|
|
4
|
+
metadata:
|
|
5
|
+
synap_native: true
|
|
6
|
+
auto_load: false
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
Use branches for parallel work: create_branch, query results, consolidate. Understand tree position.
|
|
10
|
+
|
|
11
|
+
## BRANCH NETWORK
|
|
12
|
+
When your context includes a **Branch Network** section, it maps your position in the thread tree:
|
|
13
|
+
- **Parallel branches** — other specialist agents working on related tasks from the same parent
|
|
14
|
+
- **Child branches** — branches you have previously spawned
|
|
15
|
+
|
|
16
|
+
**The user sees your branch network as a visual timeline.** Every branch you create appears on it with its name and purpose as visible labels. Use this as a communication tool — write clear, descriptive `branchPurpose` strings that tell the user what each branch is investigating (e.g., "Analyzing competitor pricing models" not "research").
|
|
17
|
+
|
|
18
|
+
**Reading and using the network:**
|
|
19
|
+
- Use `query_agent(branchChannelId, "question")` to read findings from any branch — read-only, no side effects
|
|
20
|
+
- Use `consolidate_branches([id1, id2, ...], "synthesize into...")` when branches have completed work — merges outputs into one coherent response
|
|
21
|
+
- Check sibling branches before responding — they may have already found what the user needs
|
|
22
|
+
|
|
23
|
+
**When to consolidate:**
|
|
24
|
+
- The user asks for a summary or final answer after parallel work was dispatched
|
|
25
|
+
- Multiple child branches appear in the Branch Network
|
|
26
|
+
- After parallel branches complete, **always** call `consolidate_branches` to synthesize findings back to the main thread — the user expects a summary, not silence
|
|
27
|
+
- Never leave parallel work unresolved — always synthesize and surface findings
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: mapping-the-server
|
|
3
|
+
description: Understands a Discord server's structure (categories, channels, members) and proposes ONE reviewable CRM graph — clients, partners, companies, people, channel bindings, and the relations between them — for the operator to accept in a single move. The ambient "make sense of my server" onboarding.
|
|
4
|
+
metadata:
|
|
5
|
+
synap_native: true
|
|
6
|
+
auto_load: false
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
You are the server-mapping agent. The operator pointed you at their Discord server and wants you to **understand it and propose the whole CRM graph in one move** — so they can review it, accept it, and watch everything link up. Your job is to make them feel *understood*: nothing important left out, sensible structure, theirs to approve.
|
|
10
|
+
|
|
11
|
+
You receive the server structure as input: `categories` (each with its `channels`), `members`, and optionally recent channel activity. You also have read access to the pod.
|
|
12
|
+
|
|
13
|
+
## 1. Orient before proposing
|
|
14
|
+
- Call `list_profiles` / `orient` to learn which entity types exist (e.g. `client`, `partner`, `company`, `person`, `contact`) and read the bento schema so you propose entities with the RIGHT profile + properties.
|
|
15
|
+
- Look at what's **already in the pod**. Never propose a duplicate of an entity or binding that already exists — match by name/domain first and *link to the existing one* instead.
|
|
16
|
+
|
|
17
|
+
## 2. Read the structure — COMPANY-FIRST
|
|
18
|
+
- **A category is usually a "room" for ONE organization** (a client or a partner). Its name is your strongest signal.
|
|
19
|
+
- **The model is company-first:** every client/partner organization is a **`company`** entity. The client/partner is a SEPARATE entity that is **linked to** that company — so the pod can list all companies, all clients, and all partners independently. A single company can be BOTH a client and a partner.
|
|
20
|
+
- **Channel firewall role:** `client-comms` / `tg-*` / `comms` / a mirrored external chat → `branchPurpose: 'client-comms'` (mirrored to the client — internal-only!). `team` / `internal` / `notes` → `branchPurpose: 'team'`.
|
|
21
|
+
- **TEAM THREADS (forums):** the input has a `forums[]` array of forum POSTS (threads) — these are usually the INTERNAL **team** thread for each client (e.g. an "important" forum with one thread per client). A client almost always has TWO surfaces: a mirrored comms channel (`tg-acme`, `client-comms`) AND a team thread (`acme`, `team`). **PAIR them by name** (`tg-acme` ↔ forum thread `acme`) and bind BOTH to the SAME client/company entity — the comms channel as `client-comms`, the team thread as `team`. This pairing is what lets digests + notices land in the team thread and NEVER the client channel.
|
|
22
|
+
- **People → contacts:** each channel carries a `participants` list — the recent message senders. For a client channel these are the **mirrored Telegram people** (the company's real contacts), not Discord members. Non-team participants become **`contact`** entities linked to that room's company.
|
|
23
|
+
- **Skip generic channels** (`general`, `welcome`, `help`, `rules`, voice).
|
|
24
|
+
|
|
25
|
+
## 3. Build ONE proposed graph — company-first chain
|
|
26
|
+
Call `propose_entity_graph` ONCE. For EACH organization (room), build this chain:
|
|
27
|
+
1. **`company`** entity (ref e.g. `acme-co`) — the organization itself. Reuse an existing company via `existingEntityId` (match by name) instead of duplicating.
|
|
28
|
+
2. **`client`** or **`partner`** entity (ref e.g. `acme-client`) — the relationship — and a relation linking it to the company: `{ sourceRef: "acme-client", targetRef: "acme-co", type: "belongs_to" }`.
|
|
29
|
+
3. **`contact`** entities for each non-team `participant` in the room's channels, each linked to the company: `{ sourceRef: "<contactRef>", targetRef: "acme-co", type: "works_at" }`.
|
|
30
|
+
4. **Team members** (your own people) → **`person`** entities (NOT `contact` — the bridge's `/link-client --assigned` dedup looks up team members in the `person` profile only; using `contact` would create duplicates). Reuse existing. Add an `{ sourceRef: "<personRef>", targetRef: "acme-client", type: "assigned_to" }` relation when a team member clearly owns the room.
|
|
31
|
+
5. **`bindings`**: each real channel → the company's `entityRef`, with `branchPurpose` (`client-comms` for the mirrored channel, `team` for the internal one). When a client has BOTH a comms channel and a paired forum team thread, emit TWO bindings to the same `entityRef` — one `client-comms`, one `team` — so the firewall has a safe place (the team thread) to surface digests.
|
|
32
|
+
|
|
33
|
+
So per org the graph is: **`contact → company ← client/partner`**, with channels bound and firewall roles set. Propose ALL orgs as **one** `propose_entity_graph` call — never dozens of single proposals.
|
|
34
|
+
|
|
35
|
+
(Missing `team` threads — rooms with a `client-comms` channel but no `team` channel — note them in your summary. After the graph is accepted, ensure the sibling team channel for each such client with `channel.ensure({ contextObjectType: 'entity', contextObjectId: <clientEntityId>, branchPurpose: 'team' })` so `channel.resolve(channelType: 'team')` has a firewall-safe target for digests + review flags. See the `routing-to-channels` skill for the full bind/ensure lifecycle.)
|
|
36
|
+
|
|
37
|
+
## 4. The firewall is absolute
|
|
38
|
+
NEVER propose a write, binding, post, or thread that would put bot/team activity into a `client-comms` channel — those mirror to the client. All collaboration lands in `team` channels/threads. When in doubt about a channel's role, propose it as `client-comms` (the safe default) and say so.
|
|
39
|
+
|
|
40
|
+
## 5. Be conservative + honest
|
|
41
|
+
- Only propose what the structure supports. Mark low-confidence inferences explicitly ("likely a partner — confirm?").
|
|
42
|
+
- If a room is ambiguous (is it a client, a partner, or a topic channel?), include your best guess but flag it for the operator's review rather than guessing silently.
|
|
43
|
+
- Do not delete or rename anything. You only ever ADD structure as a proposal.
|
|
44
|
+
|
|
45
|
+
## 6. Close with reassurance, not a data dump
|
|
46
|
+
Return a short, human summary that makes the operator feel covered:
|
|
47
|
+
- What you found: "**Q companies → N clients, M partners, P contacts** across your rooms."
|
|
48
|
+
- The shape: a few highlights ("**Acme** → company + client, 3 contacts, comms + team channels bound").
|
|
49
|
+
- **Show bindings with channel mentions** so the operator can verify what maps to what — write each bound channel as `<#CHANNELID>` (Discord renders these as clickable channel links), e.g. "Acme → `<#123…>` (client-comms), `<#456…>` (team)".
|
|
50
|
+
- Anything you flagged for their judgment.
|
|
51
|
+
- **The review link:** pass the link from the tool's result through **verbatim** — do NOT rewrite it into document/cell syntax like `[[open:side|…]]` (that's plain text in Discord and can't be clicked). Keep it exactly as the tool returned it.
|
|
52
|
+
- **The next step:** end by telling them that once they accept the graph, they can run **`/digest-all`** to pull the contacts, notes and links out of each channel's existing history (the channels are only bound on accept, so this is the moment to backfill them).
|
|
53
|
+
|
|
54
|
+
You are the support layer that already gets it. Map the server, propose the graph, hand them one confident decision.
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: reading-client-progress
|
|
3
|
+
description: Methodology for reading a Stellar grant client's most recent messages and determining exactly where they stand in the Stellar Community Fund (SCF) process. Use when an extraction step needs to classify a client's latest CLIENT-COMMS messages into a strict {stage, grantStatus, excelUrl, advancement} JSON result. Triggers include syncing client progress, advancing a Stellar grant session from comms, or reading a company's recent messages to infer pipeline stage and health.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Reading Client Progress
|
|
7
|
+
|
|
8
|
+
You read a Stellar grant client's most recent messages and decide where they are in the SCF process. You output a single strict JSON object — nothing else. This skill is the reference an extraction `command` node embeds; it is consumed by an automation, not a human, so prose, markdown fences, and commentary are forbidden in the output.
|
|
9
|
+
|
|
10
|
+
## Input
|
|
11
|
+
|
|
12
|
+
You receive the client's recent messages as an array of `{ role, content, authorName, createdAt }` (most recent last). These come from the client's CLIENT-COMMS channel — the external thread where the client shares their project, drafts, links, and replies. Read them in chronological order to understand the trajectory; weight the most recent messages most heavily for the current stage.
|
|
13
|
+
|
|
14
|
+
## Output — STRICT JSON, nothing else
|
|
15
|
+
|
|
16
|
+
Respond with NOTHING but a single JSON object, no prose, no markdown fences, exactly this shape:
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
{ "stage": "scope|abstract|build|awaiting-stellar|closed", "grantStatus": "not-responding|waiting-on-client|in-review|submitted|passed", "excelUrl": string|null, "advancement": string }
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
If you cannot determine a field, use the most conservative value: `stage` defaults to `"scope"`, `grantStatus` defaults to `"waiting-on-client"`, `excelUrl` defaults to `null`. Never invent a value.
|
|
23
|
+
|
|
24
|
+
## `stage` — pipeline position (where the work is)
|
|
25
|
+
|
|
26
|
+
`stage` is the client's position in the ordered SCF pipeline. Pick the FURTHEST stage the messages clearly support:
|
|
27
|
+
|
|
28
|
+
- **`scope`** — Default. The client has not yet shared a concrete project, or is still explaining what they're building. Use until they share the project (site / GitHub / deck / clear description) and the engagement starts working on the Abstract.
|
|
29
|
+
- **`abstract`** — The client is actively working the SCF **Project Abstract** (the 12-field abstract / interest form). Messages reference the Abstract, abstract fields, the interest form, or a draft Abstract being reviewed.
|
|
30
|
+
- **`build`** — The client is working the SCF **Build dossier** (Code URL, Video, Tech Architecture, 3-tranche budget). Messages reference the Build submission, the build dossier, tranches, the technical architecture, or the demo video. Build comes AFTER abstract.
|
|
31
|
+
- **`awaiting-stellar`** — The client has **submitted** to SCF and is waiting on the panel. Messages say they submitted, sent it in, or are waiting on Stellar / the panel / the vote. No further drafting.
|
|
32
|
+
- **`closed`** — The engagement is complete: the client was **awarded** (won the grant) or **rejected**. Messages confirm an award or a rejection decision.
|
|
33
|
+
|
|
34
|
+
Stages are monotonic — don't regress to an earlier stage on the strength of an old message if a later message shows they've moved on.
|
|
35
|
+
|
|
36
|
+
## `grantStatus` — comms / health sub-status (how it's going)
|
|
37
|
+
|
|
38
|
+
`grantStatus` is orthogonal to `stage`. It captures the health of the engagement from the comms, not the pipeline position:
|
|
39
|
+
|
|
40
|
+
- **`not-responding`** — The client has gone quiet; we're waiting and they haven't replied to our last asks.
|
|
41
|
+
- **`waiting-on-client`** — The ball is in the client's court (we asked for something — a draft, a link, info — and await their reply).
|
|
42
|
+
- **`in-review`** — We are actively reviewing / working the client's material right now.
|
|
43
|
+
- **`submitted`** — The dossier has been submitted to SCF (pairs naturally with stage `awaiting-stellar`).
|
|
44
|
+
- **`passed`** — The grant was awarded (pairs naturally with stage `closed`).
|
|
45
|
+
|
|
46
|
+
## `excelUrl` — the client's working dossier link
|
|
47
|
+
|
|
48
|
+
`excelUrl` is the client's working Excel / Google Sheet / dossier URL if one appears anywhere in the messages, else `null`. Look for:
|
|
49
|
+
|
|
50
|
+
- `.xlsx` file links
|
|
51
|
+
- Google Sheets links (`docs.google.com/spreadsheets/...`)
|
|
52
|
+
- Google Drive links (`drive.google.com/...`) to a sheet or dossier
|
|
53
|
+
- Any link the client calls their "abstract", "build", "dossier", "submission sheet", or "grant sheet"
|
|
54
|
+
|
|
55
|
+
If several appear, prefer the most recent one. If none appear, return `null` — do not guess or fabricate a URL.
|
|
56
|
+
|
|
57
|
+
## `advancement` — one-sentence note
|
|
58
|
+
|
|
59
|
+
`advancement` is a single plain-language sentence summarizing where the client is and what's next (e.g. "Client shared their GitHub and pitch deck; ready to start the Abstract." or "Abstract draft delivered for review; waiting on client to confirm the budget."). Keep it to one sentence. If genuinely unknown, use a short honest note like "No recent client activity to assess."
|
|
60
|
+
|
|
61
|
+
## Reminders
|
|
62
|
+
|
|
63
|
+
- Output ONLY the JSON object. No prose, no markdown fences, no leading or trailing text.
|
|
64
|
+
- Omit nothing — always return all four keys. Use the conservative defaults / `null` when unknown.
|
|
65
|
+
- `stage` = pipeline position; `grantStatus` = comms/health. They move independently.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: routing-to-channels
|
|
3
|
+
description: Routes a message to the right channel and creates a channel when warranted. Use when a message belongs in a different channel, or a new room or thread should be created.
|
|
4
|
+
metadata:
|
|
5
|
+
synap_native: true
|
|
6
|
+
auto_load: false
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
Route messages to the right channel. Understand channel types (personal, group, external).
|
|
10
|
+
|
|
11
|
+
## CHANNEL ROUTING
|
|
12
|
+
When you detect the user is talking about a specific entity (project, task, person, etc.) that has or should have its own channel, use `route_to_channel` to continue the conversation there. This gives you access to the entity's full context and history.
|
|
13
|
+
|
|
14
|
+
Examples of when to route:
|
|
15
|
+
- User asks about "the marketing project" → route to the marketing project's channel
|
|
16
|
+
- User discusses a specific task in depth → route to that task's channel
|
|
17
|
+
- User mentions a person and wants to plan something → route to that person's channel
|
|
18
|
+
|
|
19
|
+
Always explain WHY you're routing: "Let me continue this in the Marketing Project channel where I have the full project context."
|
|
20
|
+
|
|
21
|
+
When routing, ALWAYS set `forwardMessage` to the user's original message so the target channel has full context. This prevents "what were we talking about?" moments — the user's question appears in the target channel as a forwarded message.
|
|
22
|
+
|
|
23
|
+
Do NOT route when:
|
|
24
|
+
- The user asks a quick question you can answer from memory
|
|
25
|
+
- The user is browsing/exploring across multiple entities
|
|
26
|
+
- You're in a general brainstorming conversation
|
|
27
|
+
- The entity doesn't benefit from dedicated context (simple notes, one-off bookmarks)
|
|
28
|
+
|
|
29
|
+
Route when the conversation will clearly benefit from entity-specific context and history.
|
|
30
|
+
|
|
31
|
+
## BINDING AN EXTERNAL CHANNEL TO A CLIENT ENTITY
|
|
32
|
+
|
|
33
|
+
A channel is *bound* when `channels.contextObjectId` points at the entity it belongs to. Once bound, every inbound message on it arrives entity-resolved for free: `external_message.received` carries `subjectId` = the bound entity. Automations (e.g. proactive grant review) rely on this — they resolve the client's **team** channel and dossier from `subjectId`, and skip entirely when a channel is unbound.
|
|
34
|
+
|
|
35
|
+
### First contact on an UNBOUND external channel (runtime, you the agent)
|
|
36
|
+
A channel is still unbound when it has no `contextObjectId` — the tell is that the message's `subjectId` **equals the channel id** (the resolver falls back to the channel id when there is nothing bound). When you see that on an external/inbound channel:
|
|
37
|
+
|
|
38
|
+
1. **Match an existing client** — `entity.query({ profileSlug: 'client', filter: { ... } })` on the sender's name/handle/domain. Never create a duplicate: bind to the match if one exists.
|
|
39
|
+
2. **Create one if there is no match** — a `client` entity (the create-then-configure minimum: just enough to exist).
|
|
40
|
+
3. **Bind the channel to it** — `channel.bind({ channelId, contextObjectType: 'entity', contextObjectId: <clientEntityId>, branchPurpose: 'client-comms' })`. The inbound channel mirrors to the client, so it is `client-comms`.
|
|
41
|
+
|
|
42
|
+
After binding, you are done for every future message: they all arrive entity-resolved, and the team-channel resolution the automations need starts working. Explain the bind briefly, the way you would when keeping notes ("Binding this channel to Acme so everything they send lands on their record.").
|
|
43
|
+
|
|
44
|
+
**FIREWALL:** binding a channel `client-comms` marks it as mirrored to the client. NEVER post bot/team output to a `client-comms` channel — collaboration goes to the sibling `team` channel (see below). When unsure of a channel's role, bind it `client-comms` (the safe default).
|
|
45
|
+
|
|
46
|
+
### Onboarding a KNOWN client (you already have, or are creating, the entity)
|
|
47
|
+
When you create or onboard a client, wire its channels in the same move so the firewall has both surfaces from day one:
|
|
48
|
+
|
|
49
|
+
1. **Client-comms channel** — `channel.ensure({ contextObjectType: 'entity', contextObjectId: <clientEntityId>, branchPurpose: 'client-comms' })` (find-or-create). If the client's external channel already exists, `channel.bind(...)` it instead of ensuring a new one.
|
|
50
|
+
2. **Team sibling channel** — `channel.ensure({ contextObjectType: 'entity', contextObjectId: <clientEntityId>, branchPurpose: 'team' })`. This is the channel every automation resolves via `channel.resolve({ ..., channelType: 'team' })`. Without it, team-facing posts (grant review flags, digests) have nowhere firewall-safe to land.
|
|
51
|
+
|
|
52
|
+
Both point at the SAME client entity — one `client-comms`, one `team`. That pairing is what lets bot/team output surface on the team channel and NEVER leak into the client channel.
|
|
53
|
+
|
|
54
|
+
> Population model: onboarding binds the clients you already know; on-the-fly binding (above) catches the unknown ones on their first inbound message. Together they cover the whole roster.
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# Associate cheatsheet (1 page)
|
|
2
|
+
|
|
3
|
+
Print this. Keep it next to you during reviews and client calls.
|
|
4
|
+
|
|
5
|
+
## The 7-step review process
|
|
6
|
+
|
|
7
|
+
1. Read the client's submitted content (every field).
|
|
8
|
+
2. Web-fetch website, deck, founder LinkedIns, GitHub.
|
|
9
|
+
3. Score against 14 signals (1 to 10 each).
|
|
10
|
+
4. Identify rejection patterns + cite past examples.
|
|
11
|
+
5. Surface winning patterns (don't erase strengths in rewrites).
|
|
12
|
+
6. Compare to 10-15 corpus comparables.
|
|
13
|
+
7. Generate Excel + chat summary with probability range.
|
|
14
|
+
|
|
15
|
+
## The Excel deliverable (4 sheets, always)
|
|
16
|
+
|
|
17
|
+
| Sheet | Content |
|
|
18
|
+
|---|---|
|
|
19
|
+
| 1. Field-by-Field Review | Q-numbers, Status, Review (FR or EN), Rewrite (EN paste-ready) |
|
|
20
|
+
| 2. Pre-submission Checklist | Priority, Item, Field, Effort, Why, Status |
|
|
21
|
+
| 3. Corpus Comparables | 10-15 past dossiers side-by-side with current |
|
|
22
|
+
| 4. Integration List Audit | Each Stellar item: MENTIONED / TO ADD / OPTIONAL / NOT RELEVANT |
|
|
23
|
+
|
|
24
|
+
## Banner row formula
|
|
25
|
+
|
|
26
|
+
> "[Project] [Phase] Review v[N]: estimated XX to YY pct probability now, AA to BB pct after fixes. Budget anchor $[X],000 [Track], anchored on [Named Past Winner] ($YYK SCF #NN)."
|
|
27
|
+
|
|
28
|
+
## Vocabulary translation (NEVER use left column with clients)
|
|
29
|
+
|
|
30
|
+
| Internal | Client-friendly |
|
|
31
|
+
|---|---|
|
|
32
|
+
| kill signature | common rejection pattern, recurring red flag |
|
|
33
|
+
| corpus | our database of 130+ rejected and 79+ awarded dossiers |
|
|
34
|
+
| doxxing depth | whether founders are publicly identifiable |
|
|
35
|
+
| bolt-on | port from another chain without a Stellar-specific reason |
|
|
36
|
+
| TAM-grandiose | vague total addressable market claims |
|
|
37
|
+
| sub-max | below the $150K maximum |
|
|
38
|
+
| heightened scrutiny | extra scrutiny applied at maximum-ask submissions |
|
|
39
|
+
|
|
40
|
+
## The 14 signals (memorize order)
|
|
41
|
+
|
|
42
|
+
1. Team identity (doxxing depth)
|
|
43
|
+
2. Stellar-native traction
|
|
44
|
+
3. Budget realism vs scope
|
|
45
|
+
4. Scope clarity (named contracts + Integration items)
|
|
46
|
+
5. Differentiation from previously-funded teams
|
|
47
|
+
6. Track choice fit (Integration vs Open vs RFP)
|
|
48
|
+
7. Go-to-market specificity (named partners + customers)
|
|
49
|
+
8. Milestone precision (verifiable evidence + quantified targets)
|
|
50
|
+
9. Traction evidence (live URLs + LOIs + revenue)
|
|
51
|
+
10. Regulatory framing (named framework + license partner)
|
|
52
|
+
11. Open-source posture (MIT/Apache 2.0)
|
|
53
|
+
12. Brand non-collision
|
|
54
|
+
13. SDF roadmap alignment (x402, Protocol 25 X-Ray, EURC, MiCA, agentic payments)
|
|
55
|
+
14. Comeback signal (only for reapplying teams)
|
|
56
|
+
|
|
57
|
+
## The 12 rejection patterns (memorize by name)
|
|
58
|
+
|
|
59
|
+
1. Unidentifiable-founder pattern
|
|
60
|
+
2. Maximum-budget-without-scope pattern
|
|
61
|
+
3. Generic-name pattern
|
|
62
|
+
4. Brand-collision pattern
|
|
63
|
+
5. Multi-chain-bolt-on pattern
|
|
64
|
+
6. SDF-roadmap-overlap pattern
|
|
65
|
+
7. Already-funded-competitor pattern
|
|
66
|
+
8. Regulated-product-without-regulatory-plan pattern
|
|
67
|
+
9. Vague-TAM pattern
|
|
68
|
+
10. Earn-via-low-effort-activity pattern
|
|
69
|
+
11. Incomplete-dossier pattern (Information Collection status)
|
|
70
|
+
12. Cluster-of-issues rejection (Panel Review Failed)
|
|
71
|
+
|
|
72
|
+
## Budget anchors (memorize)
|
|
73
|
+
|
|
74
|
+
| Anchor | Profile | Budget range |
|
|
75
|
+
|---|---|---|
|
|
76
|
+
| Bando (SCF #42 won) | RWA single-pilot, doxxed, regulated partner named | $75K-$90K |
|
|
77
|
+
| TheXBank (SCF #40 won) | Africa banking with country pilot | $80K-$100K |
|
|
78
|
+
| The Signal (SCF #42 won) | B2B marketplace, 2 doxxed, 1 contract | $115K-$125K |
|
|
79
|
+
| Rebond (target SCF #44) | RWA bonds, 2 doxxed, 4 LOIs, regulatory framework | $125K-$135K |
|
|
80
|
+
| For Yield (target SCF #44) | Regulated DeFi yield, 11-team, AMF filed | $135K-$145K |
|
|
81
|
+
|
|
82
|
+
Tranche structure (always 3 equivalent tranches):
|
|
83
|
+
- $90K = 3 x $30K
|
|
84
|
+
- $108K = 3 x $36K
|
|
85
|
+
- $121.2K = 3 x $40.4K
|
|
86
|
+
- $132K = 3 x $44K
|
|
87
|
+
- $144K = 3 x $48K
|
|
88
|
+
|
|
89
|
+
## Pre-screen blockers (NEVER ship a Build phase dossier without these)
|
|
90
|
+
|
|
91
|
+
- Q5 Code URL: public GitHub with README + MIT + scaffold (ideally testnet contract deployed)
|
|
92
|
+
- Q6 Video URL: YouTube/Vimeo, under 3 min, 5-segment script, live demo on Stellar Expert
|
|
93
|
+
- Q10 Technical Architecture: public Notion or GitHub markdown with C4 L1 + L2 + flows
|
|
94
|
+
- Q8 Thumbnail: 1200x630 image uploaded
|
|
95
|
+
|
|
96
|
+
## SCF Integration List essentials
|
|
97
|
+
|
|
98
|
+
- **Wallets**: Stellar Wallets Kit (default), Privy (mainstream), DFNS (institutional), Freighter Connect
|
|
99
|
+
- **Off-ramp**: Anchor Platform (EU), Bridge (Stripe-acquired), MoneyGram (emerging markets), Mercuryo
|
|
100
|
+
- **DeFi**: DeFindex (yield), Blend v2 (lending), Aquarius (DEX), Soroswap (aggregator)
|
|
101
|
+
- **Cross-chain**: Allbridge, Near Intents, Axelar
|
|
102
|
+
- **Payments**: Stellar Disbursement Platform (SDP)
|
|
103
|
+
|
|
104
|
+
Items NOT on the list (Fireblocks, Elliptic, Certora, Wirex) = supporting infra, not Integration Track items.
|
|
105
|
+
|
|
106
|
+
## Em-dash rule
|
|
107
|
+
|
|
108
|
+
Never use the long-dash punctuation character (the wide horizontal line, Unicode U+2014) in any client deliverable. Use commas, colons, parentheses, periods, or single hyphens instead. The long-dash reads as machine-generated.
|
|
109
|
+
|
|
110
|
+
## QA before sending any deliverable
|
|
111
|
+
|
|
112
|
+
1. Zero em-dashes anywhere in the file.
|
|
113
|
+
2. Zero use of "kill signature" anywhere in the file.
|
|
114
|
+
3. Every flagged problem cites at least one named past dossier.
|
|
115
|
+
4. Budget recommendation cites a named past winner with comparable profile.
|
|
116
|
+
5. Every paste-ready rewrite (Column D) is in English, not French.
|
|
117
|
+
6. Banner row contains specific numbers (not "TBD").
|
|
118
|
+
7. Sheet names: "Abstract Review" or "Build Review" / "Checklist Pre-Submit" / "Comparables Corpus" / "Audit Integration List".
|
|
119
|
+
|
|
120
|
+
## The chat summary after every delivery
|
|
121
|
+
|
|
122
|
+
> "Dossier livré, fichier v[N] sauvegardé.
|
|
123
|
+
> Verdict: estimated XX-YY pct probability now, AA-BB pct after fixes.
|
|
124
|
+
> Top 5 fixes (in priority order): [list].
|
|
125
|
+
> Recommended budget: $[X],000 [Track], 3 tranches of $[X/3].
|
|
126
|
+
> [Open the file](computer://path/to/file.xlsx)"
|
|
127
|
+
|
|
128
|
+
## Quick prompts for Claude with the skill
|
|
129
|
+
|
|
130
|
+
- Review: "Review this SCF Abstract: [URL]. Round SCF #[N]. Give me the 4-sheet Excel deliverable."
|
|
131
|
+
- Budget only: "Recommend budget for [category] dossier with [team] and [traction]."
|
|
132
|
+
- Triage: "Top 3 rejection patterns this dossier triggers. Cite past dossiers."
|
|
133
|
+
- Comeback: "Lost SCF #[N] at $[X]. Profile: [details]. What changed? What to fix?
|