@synap-core/cli 1.10.0 → 1.12.2
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/README.md +23 -198
- package/dist/build-info.json +6 -0
- package/dist/commands/agent-run.js +3 -2
- package/dist/commands/agent-run.js.map +1 -1
- package/dist/commands/agents.d.ts +33 -17
- package/dist/commands/agents.js +203 -237
- package/dist/commands/agents.js.map +1 -1
- package/dist/commands/app.d.ts +143 -0
- package/dist/commands/app.js +523 -0
- package/dist/commands/app.js.map +1 -0
- package/dist/commands/automate.d.ts +21 -0
- package/dist/commands/automate.js +42 -0
- package/dist/commands/automate.js.map +1 -0
- package/dist/commands/automation-schema.test.d.ts +16 -0
- package/dist/commands/automation-schema.test.js +77 -0
- package/dist/commands/automation-schema.test.js.map +1 -0
- package/dist/commands/automation.d.ts +12 -0
- package/dist/commands/automation.js +80 -35
- package/dist/commands/automation.js.map +1 -1
- package/dist/commands/bridge-setup.d.ts +14 -1
- package/dist/commands/bridge-setup.js +392 -128
- package/dist/commands/bridge-setup.js.map +1 -1
- package/dist/commands/cap-connections.d.ts +4 -4
- package/dist/commands/cap-connections.js +14 -14
- package/dist/commands/cap-connections.js.map +1 -1
- package/dist/commands/capability.d.ts +2 -0
- package/dist/commands/capability.js +297 -176
- package/dist/commands/capability.js.map +1 -1
- package/dist/commands/catalog.d.ts +275 -0
- package/dist/commands/catalog.js +481 -0
- package/dist/commands/catalog.js.map +1 -0
- package/dist/commands/cell.d.ts +155 -8
- package/dist/commands/cell.js +416 -40
- package/dist/commands/cell.js.map +1 -1
- package/dist/commands/centrality.js +3 -14
- package/dist/commands/centrality.js.map +1 -1
- package/dist/commands/connect.d.ts +38 -13
- package/dist/commands/connect.js +68 -167
- package/dist/commands/connect.js.map +1 -1
- package/dist/commands/connections.d.ts +3 -2
- package/dist/commands/connections.js +95 -25
- package/dist/commands/connections.js.map +1 -1
- package/dist/commands/context.js +9 -2
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/data-extra.d.ts +34 -0
- package/dist/commands/data-extra.js +198 -25
- package/dist/commands/data-extra.js.map +1 -1
- package/dist/commands/data.d.ts +120 -2
- package/dist/commands/data.js +307 -24
- package/dist/commands/data.js.map +1 -1
- package/dist/commands/diagnose.d.ts +66 -4
- package/dist/commands/diagnose.js +329 -29
- package/dist/commands/diagnose.js.map +1 -1
- package/dist/commands/digest.js +2 -1
- package/dist/commands/digest.js.map +1 -1
- package/dist/commands/doc.d.ts +25 -4
- package/dist/commands/doc.js +100 -18
- package/dist/commands/doc.js.map +1 -1
- package/dist/commands/doctor.d.ts +130 -0
- package/dist/commands/doctor.js +814 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/events.js +3 -1
- package/dist/commands/events.js.map +1 -1
- package/dist/commands/explain.js +5 -5
- package/dist/commands/explain.js.map +1 -1
- package/dist/commands/graph.js +5 -3
- package/dist/commands/graph.js.map +1 -1
- package/dist/commands/import.d.ts +368 -13
- package/dist/commands/import.js +1096 -55
- package/dist/commands/import.js.map +1 -1
- package/dist/commands/init.d.ts +20 -9
- package/dist/commands/init.js +433 -973
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/keys.d.ts +1 -0
- package/dist/commands/keys.js +15 -2
- package/dist/commands/keys.js.map +1 -1
- package/dist/commands/knowledge.d.ts +28 -6
- package/dist/commands/knowledge.js +358 -73
- package/dist/commands/knowledge.js.map +1 -1
- package/dist/commands/launch.js +2 -2
- package/dist/commands/launch.js.map +1 -1
- package/dist/commands/lens.d.ts +37 -1
- package/dist/commands/lens.js +193 -72
- package/dist/commands/lens.js.map +1 -1
- package/dist/commands/market-authoring.d.ts +72 -0
- package/dist/commands/market-authoring.js +566 -0
- package/dist/commands/market-authoring.js.map +1 -0
- package/dist/commands/market-official.d.ts +58 -0
- package/dist/commands/market-official.js +84 -0
- package/dist/commands/market-official.js.map +1 -0
- package/dist/commands/market.d.ts +419 -20
- package/dist/commands/market.js +2124 -193
- package/dist/commands/market.js.map +1 -1
- package/dist/commands/mcp.d.ts +70 -13
- package/dist/commands/mcp.js +308 -40
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/open.d.ts +39 -9
- package/dist/commands/open.js +80 -25
- package/dist/commands/open.js.map +1 -1
- package/dist/commands/playbook.d.ts +42 -0
- package/dist/commands/playbook.js +162 -0
- package/dist/commands/playbook.js.map +1 -0
- package/dist/commands/pod.js +1 -1
- package/dist/commands/pod.js.map +1 -1
- package/dist/commands/pods.d.ts +19 -0
- package/dist/commands/pods.js +220 -85
- package/dist/commands/pods.js.map +1 -1
- package/dist/commands/proposals-actions.d.ts +62 -0
- package/dist/commands/proposals-actions.js +146 -8
- package/dist/commands/proposals-actions.js.map +1 -1
- package/dist/commands/proposals-await.d.ts +68 -0
- package/dist/commands/proposals-await.js +248 -0
- package/dist/commands/proposals-await.js.map +1 -0
- package/dist/commands/proton-setup.d.ts +73 -0
- package/dist/commands/proton-setup.js +577 -0
- package/dist/commands/proton-setup.js.map +1 -0
- package/dist/commands/providers.d.ts +23 -0
- package/dist/commands/providers.js +126 -1
- package/dist/commands/providers.js.map +1 -1
- package/dist/commands/raycast.js +6 -2
- package/dist/commands/raycast.js.map +1 -1
- package/dist/commands/rule.d.ts +150 -0
- package/dist/commands/rule.js +447 -0
- package/dist/commands/rule.js.map +1 -0
- package/dist/commands/session-wait.d.ts +111 -0
- package/dist/commands/session-wait.js +209 -0
- package/dist/commands/session-wait.js.map +1 -0
- package/dist/commands/sessions.d.ts +52 -0
- package/dist/commands/sessions.js +479 -58
- package/dist/commands/sessions.js.map +1 -1
- package/dist/commands/skill-manage.d.ts +21 -0
- package/dist/commands/skill-manage.js +136 -19
- package/dist/commands/skill-manage.js.map +1 -1
- package/dist/commands/skills.js +19 -1
- package/dist/commands/skills.js.map +1 -1
- package/dist/commands/status.d.ts +1 -4
- package/dist/commands/status.js +5 -34
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/statusline.backoff.test.d.ts +13 -0
- package/dist/commands/statusline.backoff.test.js +100 -0
- package/dist/commands/statusline.backoff.test.js.map +1 -0
- package/dist/commands/statusline.js +16 -9
- package/dist/commands/statusline.js.map +1 -1
- package/dist/commands/sync-status.d.ts +12 -0
- package/dist/commands/sync-status.js +125 -0
- package/dist/commands/sync-status.js.map +1 -0
- package/dist/commands/templates-retire.d.ts +34 -0
- package/dist/commands/templates-retire.js +192 -0
- package/dist/commands/templates-retire.js.map +1 -0
- package/dist/commands/tools.js +6 -21
- package/dist/commands/tools.js.map +1 -1
- package/dist/commands/tracks.d.ts +51 -0
- package/dist/commands/tracks.js +291 -0
- package/dist/commands/tracks.js.map +1 -0
- package/dist/commands/update.d.ts +3 -11
- package/dist/commands/update.js +5 -134
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/upload.d.ts +68 -0
- package/dist/commands/upload.js +257 -0
- package/dist/commands/upload.js.map +1 -0
- package/dist/commands/vendor.d.ts +28 -0
- package/dist/commands/vendor.js +110 -0
- package/dist/commands/vendor.js.map +1 -0
- package/dist/commands/versions.js +6 -0
- package/dist/commands/versions.js.map +1 -1
- package/dist/commands/view.js +10 -5
- package/dist/commands/view.js.map +1 -1
- package/dist/commands/whoami.d.ts +23 -3
- package/dist/commands/whoami.js +169 -23
- package/dist/commands/whoami.js.map +1 -1
- package/dist/commands/worker.d.ts +122 -0
- package/dist/commands/worker.js +435 -0
- package/dist/commands/worker.js.map +1 -0
- package/dist/commands/worker.test.d.ts +1 -0
- package/dist/commands/worker.test.js +116 -0
- package/dist/commands/worker.test.js.map +1 -0
- package/dist/commands/workspace-ops.d.ts +35 -0
- package/dist/commands/workspace-ops.js +153 -0
- package/dist/commands/workspace-ops.js.map +1 -0
- package/dist/index.d.ts +6 -6
- package/dist/index.js +1009 -171
- package/dist/index.js.map +1 -1
- package/dist/lib/agent-connections.d.ts +31 -0
- package/dist/lib/agent-connections.js +33 -0
- package/dist/lib/agent-connections.js.map +1 -0
- package/dist/lib/agent-detect.d.ts +27 -0
- package/dist/lib/agent-detect.js +71 -0
- package/dist/lib/agent-detect.js.map +1 -0
- package/dist/lib/agent-door.d.ts +138 -0
- package/dist/lib/agent-door.js +426 -0
- package/dist/lib/agent-door.js.map +1 -0
- package/dist/lib/agents-config.d.ts +2 -0
- package/dist/lib/agents-config.js +4 -9
- package/dist/lib/agents-config.js.map +1 -1
- package/dist/lib/approval-poll.d.ts +31 -2
- package/dist/lib/approval-poll.js +20 -7
- package/dist/lib/approval-poll.js.map +1 -1
- package/dist/lib/atomic-file.d.ts +48 -0
- package/dist/lib/atomic-file.js +129 -0
- package/dist/lib/atomic-file.js.map +1 -0
- package/dist/lib/auth.d.ts +14 -9
- package/dist/lib/auth.js +44 -61
- package/dist/lib/auth.js.map +1 -1
- package/dist/lib/batch-approval.d.ts +85 -0
- package/dist/lib/batch-approval.js +170 -0
- package/dist/lib/batch-approval.js.map +1 -0
- package/dist/lib/capture-lane.d.ts +6 -5
- package/dist/lib/capture-lane.js +11 -8
- package/dist/lib/capture-lane.js.map +1 -1
- package/dist/lib/capture-structure.d.ts +342 -0
- package/dist/lib/capture-structure.js +295 -0
- package/dist/lib/capture-structure.js.map +1 -0
- package/dist/lib/catalog-templates.d.ts +59 -0
- package/dist/lib/catalog-templates.js +126 -0
- package/dist/lib/catalog-templates.js.map +1 -0
- package/dist/lib/cli-build.d.ts +19 -0
- package/dist/lib/cli-build.js +37 -0
- package/dist/lib/cli-build.js.map +1 -0
- package/dist/lib/conversation-headers.d.ts +18 -0
- package/dist/lib/conversation-headers.js +32 -0
- package/dist/lib/conversation-headers.js.map +1 -0
- package/dist/lib/cp-packages.d.ts +216 -4
- package/dist/lib/cp-packages.js +414 -11
- package/dist/lib/cp-packages.js.map +1 -1
- package/dist/lib/credential-class.d.ts +117 -0
- package/dist/lib/credential-class.js +116 -0
- package/dist/lib/credential-class.js.map +1 -0
- package/dist/lib/describe-lens.d.ts +35 -0
- package/dist/lib/describe-lens.js +40 -0
- package/dist/lib/describe-lens.js.map +1 -1
- package/dist/lib/device-connect.d.ts +125 -0
- package/dist/lib/device-connect.js +256 -0
- package/dist/lib/device-connect.js.map +1 -0
- package/dist/lib/directory-lens.d.ts +99 -0
- package/dist/lib/directory-lens.js +187 -0
- package/dist/lib/directory-lens.js.map +1 -0
- package/dist/lib/exporter-coverage.d.ts +71 -0
- package/dist/lib/exporter-coverage.js +97 -0
- package/dist/lib/exporter-coverage.js.map +1 -0
- package/dist/lib/hub-client.d.ts +43 -9
- package/dist/lib/hub-client.js +429 -65
- package/dist/lib/hub-client.js.map +1 -1
- package/dist/lib/id.d.ts +23 -0
- package/dist/lib/id.js +35 -0
- package/dist/lib/id.js.map +1 -0
- package/dist/lib/init-connect.d.ts +41 -0
- package/dist/lib/init-connect.js +75 -0
- package/dist/lib/init-connect.js.map +1 -0
- package/dist/lib/init-exit.d.ts +24 -0
- package/dist/lib/init-exit.js +41 -0
- package/dist/lib/init-exit.js.map +1 -0
- package/dist/lib/init-flow.d.ts +25 -0
- package/dist/lib/init-flow.js +40 -0
- package/dist/lib/init-flow.js.map +1 -0
- package/dist/lib/init-handoff.d.ts +16 -0
- package/dist/lib/init-handoff.js +19 -0
- package/dist/lib/init-handoff.js.map +1 -0
- package/dist/lib/init-output.d.ts +18 -0
- package/dist/lib/init-output.js +43 -0
- package/dist/lib/init-output.js.map +1 -0
- package/dist/lib/init-pod.d.ts +45 -0
- package/dist/lib/init-pod.js +36 -0
- package/dist/lib/init-pod.js.map +1 -0
- package/dist/lib/installed.d.ts +210 -11
- package/dist/lib/installed.js +234 -36
- package/dist/lib/installed.js.map +1 -1
- package/dist/lib/key-approval.d.ts +57 -0
- package/dist/lib/key-approval.js +117 -0
- package/dist/lib/key-approval.js.map +1 -0
- package/dist/lib/key-diagnosis.d.ts +56 -0
- package/dist/lib/key-diagnosis.js +227 -0
- package/dist/lib/key-diagnosis.js.map +1 -0
- package/dist/lib/key-doctor.d.ts +136 -0
- package/dist/lib/key-doctor.js +286 -0
- package/dist/lib/key-doctor.js.map +1 -0
- package/dist/lib/key-locations.d.ts +120 -0
- package/dist/lib/key-locations.js +326 -0
- package/dist/lib/key-locations.js.map +1 -0
- package/dist/lib/key-source.d.ts +66 -0
- package/dist/lib/key-source.js +106 -0
- package/dist/lib/key-source.js.map +1 -0
- package/dist/lib/key-state.d.ts +70 -0
- package/dist/lib/key-state.js +115 -0
- package/dist/lib/key-state.js.map +1 -0
- package/dist/lib/kind-package.d.ts +181 -0
- package/dist/lib/kind-package.js +679 -0
- package/dist/lib/kind-package.js.map +1 -0
- package/dist/lib/knowledge-title.d.ts +24 -0
- package/dist/lib/knowledge-title.js +46 -0
- package/dist/lib/knowledge-title.js.map +1 -0
- package/dist/lib/knowledge-title.test.d.ts +1 -0
- package/dist/lib/knowledge-title.test.js +34 -0
- package/dist/lib/knowledge-title.test.js.map +1 -0
- package/dist/lib/machine-instance.d.ts +64 -0
- package/dist/lib/machine-instance.js +142 -0
- package/dist/lib/machine-instance.js.map +1 -0
- package/dist/lib/mcp-bridge.d.ts +42 -0
- package/dist/lib/mcp-bridge.js +147 -0
- package/dist/lib/mcp-bridge.js.map +1 -0
- package/dist/lib/mcp-bridge.test.d.ts +1 -0
- package/dist/lib/mcp-bridge.test.js +90 -0
- package/dist/lib/mcp-bridge.test.js.map +1 -0
- package/dist/lib/mcp-call.d.ts +30 -0
- package/dist/lib/mcp-call.js +107 -0
- package/dist/lib/mcp-call.js.map +1 -0
- package/dist/lib/mcp-snippets.d.ts +53 -0
- package/dist/lib/mcp-snippets.js +82 -0
- package/dist/lib/mcp-snippets.js.map +1 -0
- package/dist/lib/next-steps.d.ts +8 -0
- package/dist/lib/next-steps.js +31 -1
- package/dist/lib/next-steps.js.map +1 -1
- package/dist/lib/package-wire.d.ts +179 -0
- package/dist/lib/package-wire.js +68 -0
- package/dist/lib/package-wire.js.map +1 -0
- package/dist/lib/pair-link.d.ts +38 -0
- package/dist/lib/pair-link.js +68 -0
- package/dist/lib/pair-link.js.map +1 -0
- package/dist/lib/pod-wide.d.ts +40 -0
- package/dist/lib/pod-wide.js +46 -0
- package/dist/lib/pod-wide.js.map +1 -0
- package/dist/lib/pod.d.ts +119 -115
- package/dist/lib/pod.js +206 -412
- package/dist/lib/pod.js.map +1 -1
- package/dist/lib/project-ref.d.ts +9 -3
- package/dist/lib/project-ref.js +10 -4
- package/dist/lib/project-ref.js.map +1 -1
- package/dist/lib/review-credential.d.ts +119 -0
- package/dist/lib/review-credential.js +147 -0
- package/dist/lib/review-credential.js.map +1 -0
- package/dist/lib/safe-open.d.ts +49 -0
- package/dist/lib/safe-open.js +119 -0
- package/dist/lib/safe-open.js.map +1 -0
- package/dist/lib/session-lens.d.ts +40 -1
- package/dist/lib/session-lens.js +54 -4
- package/dist/lib/session-lens.js.map +1 -1
- package/dist/lib/superwhisper-import.d.ts +8 -0
- package/dist/lib/superwhisper-import.js +14 -7
- package/dist/lib/superwhisper-import.js.map +1 -1
- package/dist/lib/superwhisper-title.test.d.ts +1 -0
- package/dist/lib/superwhisper-title.test.js +18 -0
- package/dist/lib/superwhisper-title.test.js.map +1 -0
- package/dist/lib/targets.d.ts +134 -10
- package/dist/lib/targets.js +962 -258
- package/dist/lib/targets.js.map +1 -1
- package/dist/lib/template-file.d.ts +78 -0
- package/dist/lib/template-file.js +140 -0
- package/dist/lib/template-file.js.map +1 -0
- package/dist/lib/template-lifecycle.d.ts +217 -0
- package/dist/lib/template-lifecycle.js +433 -0
- package/dist/lib/template-lifecycle.js.map +1 -0
- package/dist/lib/template-steps.d.ts +88 -0
- package/dist/lib/template-steps.js +118 -0
- package/dist/lib/template-steps.js.map +1 -0
- package/dist/lib/time-ago.d.ts +2 -0
- package/dist/lib/time-ago.js +15 -0
- package/dist/lib/time-ago.js.map +1 -0
- package/dist/utils/logger.js +5 -2
- package/dist/utils/logger.js.map +1 -1
- package/package.json +25 -18
- package/skills/README.md +12 -10
- package/skills/agent-os/SKILL.md +220 -99
- package/skills/manifest.json +2 -2
- package/skills/onboard/SKILL.md +61 -25
- package/skills/synap/README.md +5 -8
- package/skills/synap/SKILL.md +1185 -301
- package/skills/synap/_order.txt +7 -0
- package/skills/synap/_skill.yaml +1 -1
- package/skills/synap/automations.md +15 -0
- package/skills/synap/capture.md +54 -151
- package/skills/synap/cli-operations.md +24 -18
- package/skills/synap/common-mistakes.md +1 -0
- package/skills/synap/concepts.md +28 -0
- package/skills/synap/content-os.md +92 -0
- package/skills/synap/creative-loop.md +15 -10
- package/skills/synap/crm.md +21 -52
- package/skills/synap/digesting-a-channel.md +25 -0
- package/skills/synap/document-embeds.md +141 -47
- package/skills/synap/escalation-ladder.md +20 -10
- package/skills/synap/focus-sessions.md +47 -21
- package/skills/synap/from-intent.md +142 -0
- package/skills/synap/governance-rules.md +4 -4
- package/skills/synap/governance.md +10 -7
- package/skills/synap/hand-off.md +33 -0
- package/skills/synap/inline-patterns.md +15 -7
- package/skills/synap/lenses.md +33 -15
- package/skills/synap/linking.md +41 -40
- package/skills/synap/mcp-remote-servers.md +64 -0
- package/skills/synap/mental-model.md +24 -22
- package/skills/synap/multi-entity-capture.md +6 -4
- package/skills/synap/operating-mode-rules.md +1 -1
- package/skills/synap/processes.md +118 -0
- package/skills/synap/quick-reference.md +5 -1
- package/skills/synap/reading.md +3 -1
- package/skills/synap/reflexes.md +12 -42
- package/skills/synap/viewframe-cells.md +38 -5
- package/skills/synap/work-flow.md +1 -1
- package/skills/synap/work-model.md +96 -0
- package/skills/synap/worked-examples.md +21 -1
- package/skills/synap/workspace-design.md +14 -10
- package/skills/synap/writes.md +165 -35
- package/skills/synap/writing-titles.md +63 -0
- package/skills/synap-app/SKILL.md +319 -0
- package/skills/synap-app/_order.txt +5 -0
- package/skills/synap-app/_skill.yaml +20 -0
- package/skills/synap-app/creating-the-base-app.md +64 -0
- package/skills/synap-app/governance.md +42 -0
- package/skills/synap-app/install-commands.md +55 -0
- package/skills/synap-app/overview.md +50 -0
- package/skills/synap-app/using-the-sdk.md +73 -0
- package/skills/synap-design/SKILL.md +474 -0
- package/skills/synap-design/_order.txt +4 -0
- package/skills/synap-design/_skill.yaml +21 -0
- package/skills/synap-design/loop.md +134 -0
- package/skills/synap-design/overview.md +44 -0
- package/skills/synap-design/principles.md +130 -0
- package/skills/synap-design/system.md +133 -0
- package/skills/synap-market/SKILL.md +625 -0
- package/skills/synap-market/_order.txt +5 -0
- package/skills/synap-market/_skill.yaml +24 -0
- package/skills/synap-market/author-and-publish.md +212 -0
- package/skills/synap-market/discover-and-fetch.md +59 -0
- package/skills/synap-market/governance-and-catalog.md +63 -0
- package/skills/synap-market/install.md +133 -0
- package/skills/synap-market/overview.md +119 -0
- package/skills/synap-schema/SKILL.md +172 -10
- package/skills/synap-schema/_order.txt +2 -0
- package/skills/synap-schema/_skill.yaml +4 -2
- package/skills/synap-schema/common-mistakes.md +4 -2
- package/skills/synap-schema/discover-profiles.md +1 -1
- package/skills/synap-schema/entity-scope.md +15 -3
- package/skills/synap-schema/extend-first.md +29 -0
- package/skills/synap-schema/extend-vs-create.md +1 -1
- package/skills/synap-schema/intent-vocabulary-ssot.md +111 -0
- package/skills/synap-schema/property-types.md +1 -1
- package/skills/synap-schema/relations.md +1 -1
- package/skills/synap-ui/SKILL.md +19 -12
- package/skills/synap-ui/_skill.yaml +1 -1
- package/skills/synap-ui/ai-companion.md +1 -1
- package/skills/synap-ui/arranging-bento.md +2 -0
- package/skills/synap-ui/bento-layouts.md +10 -10
- package/skills/synap-ui/bento-recipes.md +313 -543
- package/skills/synap-ui/four-builds.md +5 -0
- package/skills/synap-ui/view-types.md +2 -2
- package/skills/synap-ui/widget-catalog.md +22 -278
- package/templates/automations/bookmark-enrichment.automation.json +290 -13
- package/templates/automations/url-bookmark-capture.automation.json +73 -11
- package/templates/skills/authoring-playbooks/SKILL.md +6 -3
- package/templates/skills/authoring-playbooks/reference/stages-contract.md +15 -0
- package/templates/skills/authoring-playbooks/reference/worked-example.md +3 -0
- package/dist/commands/infra.d.ts +0 -21
- package/dist/commands/infra.js +0 -262
- package/dist/commands/infra.js.map +0 -1
- package/dist/lib/browser-auth.d.ts +0 -35
- package/dist/lib/browser-auth.js +0 -170
- package/dist/lib/browser-auth.js.map +0 -1
- package/dist/lib/openclaw.d.ts +0 -32
- package/dist/lib/openclaw.js +0 -164
- package/dist/lib/openclaw.js.map +0 -1
- package/dist/lib/seed.d.ts +0 -13
- package/dist/lib/seed.js +0 -135
- package/dist/lib/seed.js.map +0 -1
package/skills/synap/_order.txt
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
operating-mode.md
|
|
2
2
|
reflexes.md
|
|
3
|
+
concepts.md
|
|
4
|
+
work-model.md
|
|
3
5
|
escalation-ladder.md
|
|
6
|
+
from-intent.md
|
|
4
7
|
mental-model.md
|
|
5
8
|
quick-reference.md
|
|
6
9
|
lenses.md
|
|
@@ -12,6 +15,7 @@ linking-principle.md
|
|
|
12
15
|
governance-rules.md
|
|
13
16
|
capabilities.md
|
|
14
17
|
writes.md
|
|
18
|
+
writing-titles.md
|
|
15
19
|
document-embeds.md
|
|
16
20
|
creative-loop.md
|
|
17
21
|
graph-gardening.md
|
|
@@ -35,3 +39,6 @@ recap.md
|
|
|
35
39
|
showing.md
|
|
36
40
|
user-model.md
|
|
37
41
|
north-star.md
|
|
42
|
+
processes.md
|
|
43
|
+
mcp-remote-servers.md
|
|
44
|
+
hand-off.md
|
package/skills/synap/_skill.yaml
CHANGED
|
@@ -12,7 +12,7 @@ description: >
|
|
|
12
12
|
when the user asks about their own data. Do NOT use this skill for extending
|
|
13
13
|
the schema (use synap-schema) or building dashboards and views (use synap-ui).
|
|
14
14
|
metadata:
|
|
15
|
-
|
|
15
|
+
synap:
|
|
16
16
|
requires:
|
|
17
17
|
env: [SYNAP_HUB_API_KEY, SYNAP_POD_URL]
|
|
18
18
|
optional_env:
|
|
@@ -39,6 +39,21 @@ Filters narrow the event to specific conditions:
|
|
|
39
39
|
}
|
|
40
40
|
```
|
|
41
41
|
|
|
42
|
+
### Status changes: the transitioned event
|
|
43
|
+
|
|
44
|
+
A status move (a kind's own lifecycle, or a role's) emits ONE event, `entity.transition.completed` (the verb "transitioned"), whatever moved it: a person, a board drag, an agent through `update_entity` + `expectedStatus`, a sync. Filter it on `lifecycleProfile` (the kind or ROLE whose lifecycle moved; `profileSlug` stays the entity's kind even for a role) and `to` / `from` / `property`:
|
|
45
|
+
|
|
46
|
+
```json
|
|
47
|
+
{
|
|
48
|
+
"eventPattern": "entity.transition.completed",
|
|
49
|
+
"filters": { "lifecycleProfile": "lead", "to": "qualified" }
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Prefer it to `entity.update.completed` for any status. For a ROLE it is the only one: a role's status lives on its facet, so an update rule never sees it.
|
|
54
|
+
|
|
55
|
+
**A worker usually beats a hand-written rule.** "When a post enters Review, run the review" is an activator on the playbook (`on: enters_status`), and "once 5 leads wait in qualified" is `on: count` + `min`; both compile to a governed rule like the one above, fire once per thing per transition, and are throttled by `maxPendingApprovals`. Write the rule by hand only for work no method owns. Workers: `processes`.
|
|
56
|
+
|
|
42
57
|
### Cron Expressions
|
|
43
58
|
|
|
44
59
|
Standard 5-field cron (minute hour day month weekday):
|
package/skills/synap/capture.md
CHANGED
|
@@ -1,180 +1,83 @@
|
|
|
1
|
-
# Capture
|
|
1
|
+
# Capture — the one write door
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
`synap_capture` (CLI: `synap capture`) is THE door for writing what you learn into the pod. **Never classify your input first.** The payload is a _gradient_ — send as much structure as you already have, in ONE call. Precision comes from sending MORE structure in the SAME call, never from picking a different tool and never from a second "commit" step.
|
|
4
4
|
|
|
5
|
-
Chaining manual `POST /entities` + `POST /relations` for this is wasteful — the pipeline extracts everything in one server-side LLM call and returns proposals you can review before committing.
|
|
6
|
-
|
|
7
|
-
## Two-step flow
|
|
8
|
-
|
|
9
|
-
### 1. Structure the text
|
|
10
|
-
|
|
11
|
-
```json
|
|
12
|
-
POST /api/hub/capture/structure
|
|
13
|
-
{
|
|
14
|
-
"userId": "{userId}",
|
|
15
|
-
"workspaceId": "{workspaceId}",
|
|
16
|
-
"text": "Had lunch with Sarah Chen from Acme Corp today. \
|
|
17
|
-
She's leading their Series B and asked me to send \
|
|
18
|
-
our sales deck by Friday. Mentioned her VP Engineering \
|
|
19
|
-
Tom Walker also wants a demo.",
|
|
20
|
-
"context": { "source": "chat", "channelId": "ch_…" }, // optional
|
|
21
|
-
"profileSlugs": ["person", "company", "task", "event"] // optional filter
|
|
22
|
-
}
|
|
23
5
|
```
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
```json
|
|
28
|
-
{
|
|
29
|
-
"proposals": [
|
|
30
|
-
{
|
|
31
|
-
"tempId": "t1",
|
|
32
|
-
"profileSlug": "person",
|
|
33
|
-
"title": "Sarah Chen",
|
|
34
|
-
"properties": { "companyId": "t2" },
|
|
35
|
-
"action": "create"
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
"tempId": "t2",
|
|
39
|
-
"profileSlug": "company",
|
|
40
|
-
"title": "Acme Corp",
|
|
41
|
-
"properties": {},
|
|
42
|
-
"action": "create"
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
"tempId": "t3",
|
|
46
|
-
"profileSlug": "person",
|
|
47
|
-
"title": "Tom Walker",
|
|
48
|
-
"properties": { "role": "VP Engineering", "companyId": "t2" },
|
|
49
|
-
"action": "create"
|
|
50
|
-
},
|
|
51
|
-
{
|
|
52
|
-
"tempId": "t4",
|
|
53
|
-
"profileSlug": "task",
|
|
54
|
-
"title": "Send sales deck to Sarah",
|
|
55
|
-
"properties": {
|
|
56
|
-
"status": "todo",
|
|
57
|
-
"dueDate": "2026-04-24",
|
|
58
|
-
"assignee": null
|
|
59
|
-
},
|
|
60
|
-
"action": "create"
|
|
61
|
-
},
|
|
62
|
-
{
|
|
63
|
-
"tempId": "t5",
|
|
64
|
-
"profileSlug": "event",
|
|
65
|
-
"title": "Lunch with Sarah",
|
|
66
|
-
"properties": { "startDate": "2026-04-20", "attendees": ["t1"] },
|
|
67
|
-
"action": "create"
|
|
68
|
-
}
|
|
69
|
-
],
|
|
70
|
-
"relations": [
|
|
71
|
-
{
|
|
72
|
-
"sourceTempId": "t4",
|
|
73
|
-
"targetTempId": "t1",
|
|
74
|
-
"relationType": "for_person"
|
|
75
|
-
},
|
|
76
|
-
{
|
|
77
|
-
"sourceTempId": "t4",
|
|
78
|
-
"targetTempId": "t5",
|
|
79
|
-
"relationType": "from_meeting"
|
|
80
|
-
}
|
|
81
|
-
],
|
|
82
|
-
"followUp": "Should I also schedule a reminder to follow up with Tom?"
|
|
83
|
-
}
|
|
6
|
+
text → free prose; the AI structures it into the right entities (raw text kept as provenance)
|
|
7
|
+
entities[] → you already know the kind + fields
|
|
8
|
+
entities[] + relations[] → a graph; refs link things that don't exist yet, reviewed as ONE proposal
|
|
84
9
|
```
|
|
85
10
|
|
|
86
|
-
|
|
11
|
+
**Titles and kinds:** each entity's title is linted — the receipt's `titleLint`
|
|
12
|
+
(per `ref`) names what to rewrite, and `validate: true` shows it before you
|
|
13
|
+
write. Status reports, decisions, open bugs and ideas are not `knowledge`; see
|
|
14
|
+
`writing-titles.md` for the routing rule.
|
|
87
15
|
|
|
88
|
-
|
|
16
|
+
There is no wrong door to pick, because there is one door. `text` alone is the old "capture"; `entities[]` is the old "rich create"; `entities[] + relations[]` is the composite graph. All three go through `synap_capture`.
|
|
89
17
|
|
|
90
|
-
|
|
91
|
-
- `"update"` — existing entity found by title match; `existingEntityId` will be set
|
|
92
|
-
- `"skip"` — duplicate already exists, nothing to do
|
|
18
|
+
## One call → one receipt (no plan-and-commit)
|
|
93
19
|
|
|
94
|
-
|
|
20
|
+
You are an agent, so a capture is **one call**. The backend derives that from your identity (agent key ⇒ agent mode) — you never pass a mode. Policy decides the terminal automatically:
|
|
95
21
|
|
|
96
|
-
|
|
22
|
+
- every op is safe/whitelisted → **auto-applied**
|
|
23
|
+
- any op is destructive or non-whitelisted → the whole graph is **proposed** (atomic, all-or-nothing)
|
|
97
24
|
|
|
98
|
-
|
|
99
|
-
POST /api/hub/capture/execute
|
|
100
|
-
{
|
|
101
|
-
"userId": "{userId}",
|
|
102
|
-
"workspaceId": "{workspaceId}",
|
|
103
|
-
"entities": [ /* edited proposals array */ ],
|
|
104
|
-
"relations": [ /* edited relations array */ ]
|
|
105
|
-
}
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
Response:
|
|
25
|
+
It always returns the same receipt:
|
|
109
26
|
|
|
110
27
|
```json
|
|
111
|
-
{
|
|
112
|
-
"
|
|
113
|
-
"
|
|
114
|
-
"skipped": [{ "tempId": "t5", "reason": "duplicate" }],
|
|
115
|
-
"relations": { "created": 2, "failed": 0 },
|
|
116
|
-
"status": "approved"
|
|
117
|
-
}
|
|
28
|
+
{ "status": "applied" | "proposed" | "rejected",
|
|
29
|
+
"scope": { "workspaceId": "…", "projectId": "…", "sessionId": "…" },
|
|
30
|
+
"writeReceipt": { … } }
|
|
118
31
|
```
|
|
119
32
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
## Placement — existing lenses only
|
|
123
|
-
|
|
124
|
-
Capture **never invents a workspace** (or other meta-structure) to "find a home"
|
|
125
|
-
for extracted entities. Route into **existing** workspaces/projects/profiles the
|
|
126
|
-
user already has — orient + list_profiles first when placement is ambiguous.
|
|
127
|
-
Structure emerges progressively: capture into what exists; suggest a new profile only when the user repeatedly tracks a thing that fits none, and a view only once that profile has 3+ entities — never impose schema upfront. Missing structure is an escalation-ladder L2→L3 conversation (discover, then
|
|
128
|
-
propose), not a side effect of capture. See `reflexes.md` / `escalation-ladder.md`.
|
|
33
|
+
**`status: "proposed"` is SUCCESS**, not a failure — the write is queued for the user's review like a PR. Surface the `reviewUrl` and keep working. Never report "done" for a `proposed` result, and there is **no** separate step you must call after capture — the one call is the whole write.
|
|
129
34
|
|
|
130
|
-
##
|
|
35
|
+
## capture vs create_entity
|
|
131
36
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
| User pastes a chunk of text with multiple people/companies/tasks | Pipeline |
|
|
135
|
-
| User says "create a task to call Sarah at 3pm" | Manual create (1 entity) |
|
|
136
|
-
| User forwards an email | Pipeline |
|
|
137
|
-
| User asks "remind me to X" | Manual create |
|
|
138
|
-
| OCR'd screenshot, meeting transcript, article body | Pipeline |
|
|
139
|
-
| User edits an existing entity | Manual PATCH |
|
|
140
|
-
| User wants to save a webpage they're on | Manual create (article) + optional capture for body |
|
|
37
|
+
- **`synap_create_entity`** — use ONLY when you already have exactly ONE fully-structured, typed entity (a known `profileSlug` + fields). Deterministic, direct.
|
|
38
|
+
- **`synap_capture`** — everything else: unstructured text, several entities, a graph, or **when in doubt**. It handles the whole gradient; you don't have to decide "loose fact vs structured object."
|
|
141
39
|
|
|
142
|
-
|
|
40
|
+
## Worked examples
|
|
143
41
|
|
|
144
|
-
|
|
42
|
+
```json
|
|
43
|
+
// 1 — raw text (the AI structures it)
|
|
44
|
+
{ "text": "Met Ada Lovelace of Acme at the conference — she owns their data platform and wants a demo in March." }
|
|
45
|
+
|
|
46
|
+
// 2 — one structured entity with a long body
|
|
47
|
+
{ "entities": [
|
|
48
|
+
{ "profileSlug": "person", "title": "Ada Lovelace",
|
|
49
|
+
"properties": { "email": "ada@acme.com", "role": "Head of Data" },
|
|
50
|
+
"content": "## Notes\nOwns the data platform. Wants a March demo." }
|
|
51
|
+
] }
|
|
52
|
+
|
|
53
|
+
// 3 — a small graph (refs link entities that don't exist yet)
|
|
54
|
+
{ "entities": [
|
|
55
|
+
{ "ref": "p1", "profileSlug": "person", "title": "Ada Lovelace", "properties": { "email": "ada@acme.com" } },
|
|
56
|
+
{ "ref": "c1", "profileSlug": "company", "title": "Acme Corp", "properties": { "website": "https://acme.com" } }
|
|
57
|
+
],
|
|
58
|
+
"relations": [ { "sourceRef": "p1", "targetRef": "c1", "type": "works_at" } ] }
|
|
59
|
+
```
|
|
145
60
|
|
|
146
|
-
## Dedup
|
|
61
|
+
## Dedup — strong signals only
|
|
147
62
|
|
|
148
|
-
The
|
|
63
|
+
The dedup signals are the exact property keys `email`, `phone`, `website`, `linkedinUrl`, `twitterHandle`, `githubUsername`. Sending a URL under any other key (e.g. a bare `url`) is **not** a dedup signal and will duplicate the entity.
|
|
149
64
|
|
|
150
|
-
|
|
65
|
+
A same-title hit in a _different_ kind is **advisory** (`crossKindCandidates`), never an auto-merge. So "no exact match" does **not** mean "safe to create" when advisory candidates come back — review them first. To link to something that already exists, give it a `ref` plus `existingEntityId`.
|
|
151
66
|
|
|
152
|
-
##
|
|
67
|
+
## Name-refs — never ask for a UUID
|
|
153
68
|
|
|
154
|
-
|
|
69
|
+
Reference an existing project by **name**, not id — the server resolves `{ project: { name: "Synap" } }` against the caller's own projects. Exact match ⇒ it files there; no match ⇒ it proposes/creates, never silently mis-files. Never ask the user for a UUID.
|
|
155
70
|
|
|
156
|
-
|
|
157
|
-
>
|
|
158
|
-
> - **Sarah Chen** — person at Acme Corp (new)
|
|
159
|
-
> - **Acme Corp** — company (new)
|
|
160
|
-
> - **Tom Walker** — person at Acme (new)
|
|
161
|
-
> - **Task**: Send sales deck to Sarah, due Friday
|
|
162
|
-
> - **Event**: Lunch with Sarah today
|
|
163
|
-
>
|
|
164
|
-
> Plus 2 connections: task → Sarah, task → lunch.
|
|
165
|
-
>
|
|
166
|
-
> Ship it?
|
|
71
|
+
## Placement — existing lenses only
|
|
167
72
|
|
|
168
|
-
|
|
73
|
+
Capture **never invents a workspace** (or other meta-structure) to "find a home". It routes into **existing** workspaces/projects/profiles — `synap orient` + `list_profiles` first when placement is ambiguous. Structure emerges progressively: capture into what exists; suggest a new profile only when the user repeatedly tracks a thing that fits none, and a view only once that profile has 3+ entities. Missing structure is an escalation-ladder L2→L3 conversation (discover, then propose), not a side effect of capture. `global: true` stores a pod-wide runbook (text lane only).
|
|
169
74
|
|
|
170
|
-
##
|
|
75
|
+
## Rejection is a correct outcome — don't retry
|
|
171
76
|
|
|
172
|
-
|
|
173
|
-
- **Ambiguous references ("he", "they").** The pipeline will often return null properties. Prompt the user to clarify before executing.
|
|
174
|
-
- **Dates.** Always absolute in responses (ISO 8601). If the input says "Friday," the pipeline resolves it against today.
|
|
175
|
-
- **Custom profiles.** If you want the pipeline to consider custom profiles, pass `profileSlugs` in the request. Otherwise it defaults to system profiles only.
|
|
176
|
-
- **Rate limits.** 20 captures/hour per user. If you hit the limit, fall back to manual CRUD.
|
|
77
|
+
`status: "rejected"` means the door protected the graph on purpose. Read the `reason` and act, don't loop:
|
|
177
78
|
|
|
178
|
-
|
|
79
|
+
- **`already-known`** — a lone entity carrying nothing but identity signals that already resolve to an existing one. Its id is returned; re-send with content / extra properties / relations to **enrich** it instead.
|
|
80
|
+
- **`no-durable-content`** — nothing storable was sent (empty / whitespace / punctuation-only). Don't call capture with zero substance.
|
|
81
|
+
- **`structuring-unavailable`** — text lane only: the AI structurer is down. Tell the user and retry later.
|
|
179
82
|
|
|
180
|
-
|
|
83
|
+
(There is no "recall-loop" rejection.)
|
|
@@ -40,10 +40,11 @@ synap list entities --profile=task --workspace=<id> --json
|
|
|
40
40
|
synap get entity <id> --json
|
|
41
41
|
```
|
|
42
42
|
|
|
43
|
-
**
|
|
43
|
+
**Recording a decision as its own graph entity:**
|
|
44
44
|
|
|
45
45
|
```bash
|
|
46
|
-
synap
|
|
46
|
+
synap create entity --profile=decision --name="Use Typesense for entity search" \
|
|
47
|
+
--props='{"summary":"Use Typesense for entity search","decisionStatus":"accepted"}' --json
|
|
47
48
|
# Retrieve later with the one read verb: synap ask "Typesense decision"
|
|
48
49
|
```
|
|
49
50
|
|
|
@@ -52,27 +53,32 @@ synap capture --type decision --claim "Use Typesense for entity search" --json
|
|
|
52
53
|
**Structured knowledge (durable, typed, searchable — preferred for engineering learnings):**
|
|
53
54
|
|
|
54
55
|
```bash
|
|
55
|
-
# Work lane
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
--
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
--
|
|
66
|
-
|
|
67
|
-
#
|
|
68
|
-
synap
|
|
56
|
+
# Work lane: one explicit Knowledge form. Keep the Markdown body on the
|
|
57
|
+
# linked document; these properties remain compact/queryable metadata.
|
|
58
|
+
synap create entity --profile=knowledge --name="Hono static route ordering" \
|
|
59
|
+
--workspace=<id> \
|
|
60
|
+
--props='{"knowledgeForm":"caution","ek_claim":"Static routes must come before /:id","ek_tags":["repo:synap-backend","layer:routing"]}' \
|
|
61
|
+
--content=$'## Why\\n\\nStatic routes must come before `/:id`.' --json
|
|
62
|
+
|
|
63
|
+
synap create entity --profile=knowledge --name="Verify library APIs at runtime" \
|
|
64
|
+
--workspace=<id> \
|
|
65
|
+
--props='{"knowledgeForm":"fact","ek_claim":"Code-read is not runtime-true for library APIs"}' \
|
|
66
|
+
--content=$'Validate the installed version before depending on an API.' --json
|
|
67
|
+
|
|
68
|
+
# A Decision is its own lifecycle entity; link it to the supporting Knowledge.
|
|
69
|
+
synap create entity --profile=decision --name="Use Typesense for entity search" \
|
|
70
|
+
--props='{"summary":"pgvector deferred to V1; Typesense ships now","decisionStatus":"accepted"}' --json
|
|
71
|
+
|
|
72
|
+
# A Reference is source material, not a Knowledge form. Create/use a source
|
|
73
|
+
# entity or document and link it as evidence; global runbooks remain knowledge_keys.
|
|
74
|
+
synap capture --global "Always fix the canonical path, never a workaround" \
|
|
69
75
|
--key "principle:root-cause" --json
|
|
70
76
|
|
|
71
77
|
# Retrieve any of it later with the one read verb (it spans every lane):
|
|
72
|
-
synap ask "hono routing
|
|
78
|
+
synap ask "hono routing caution" --json
|
|
73
79
|
```
|
|
74
80
|
|
|
75
|
-
`
|
|
81
|
+
`knowledge` has exactly one canonical `knowledgeForm`: `fact`, `caution` or `convention` (a legacy `insight` is read as `fact`). It is workspace-scoped, so the active workspace supplies the domain. `ek_claim` (the "Claim") is required — the full sentence; the title is its short handle, never the claim cut off. Readable long form belongs in the entity's linked Markdown document. Status reports, decisions, open problems (`issue`) and ideas are not knowledge — see `writing-titles.md`. A formal **Decision** has its own rationale/lifecycle entity, and a **Reference** is source material linked as evidence — neither is a Knowledge form. The legacy `synap capture --type gotcha|lesson|decision|reference` command is still accepted for compatibility, but new automation must use the canonical entity properties above. Retrieve everything with `synap ask`.
|
|
76
82
|
Use `capture` for anything worth remembering across sessions and projects.
|
|
77
83
|
|
|
78
84
|
**Open (the one display door):**
|
|
@@ -10,3 +10,4 @@
|
|
|
10
10
|
8. **Forgetting that `GET /channels/personal` needs `hub-protocol.write`** scope — it's get-or-create, not a pure read.
|
|
11
11
|
9. **Routing known-structure data through free-text capture.** If you already know the profileSlug + fields, create the entity directly — smart capture can degrade to a single flat note.
|
|
12
12
|
10. **Paragraph session goals.** The goal is one line; put detail and deliverables in expectedOutputs.
|
|
13
|
+
11. **Creating a `file`/`document`-kind entity to hold text you wrote.** A pitch deck, plan, or note body you authored is `content` on a real CONTENT-kind entity (`note`, `knowledge`, a domain kind) — Synap auto-materializes it into a document. `file` is only for real uploaded bytes you actually have; an agent with no filesystem almost never needs it.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
## Concepts — one word per idea
|
|
2
|
+
|
|
3
|
+
The ONE glossary; other skills point here. Word = what the user sees; internal = tools and tables.
|
|
4
|
+
|
|
5
|
+
| Word | Internal | Answers | Test · e.g. · not |
|
|
6
|
+
| ------------- | ----------------------- | ---------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
7
|
+
| **Space** | workspace | which domain: kinds + tools? | owns kinds, never done · CRM · not a project or method; findable, not emphasised |
|
|
8
|
+
| **Project** | project | what am I committed to, with whom? | ends with the commitment; spans spaces · a launch · not a task, method, or the owner's company |
|
|
9
|
+
| **Track** | project_tracks | what lasting intent am I pursuing? | inside ONE project, lasts, never completes; direction, instructions, goal; turns workers on; work in it = sessions · grow the newsletter · no stages |
|
|
10
|
+
| **Step** | stage | where does this work stand? | = the subject's status: move the thing, the step follows · legacy: steps of a track started from a method |
|
|
11
|
+
| **Work** | focus_session | what am I doing this sitting? | one goal · no noun: "Start work" |
|
|
12
|
+
| **Template** | playbook | how do I reuse it? | kind DERIVED, never declared: scope session = work template (a method a session or worker follows), project = track template (legacy); also space and rule templates |
|
|
13
|
+
| **Pack** | suite | which templates come together? | a bundle; depends on space templates, never creates a space |
|
|
14
|
+
| **Rule** | automation | what runs by itself, when? | standing · "every Monday…" · not Approvals |
|
|
15
|
+
| **Approvals** | governance rules | which AI writes wait for me? | decides review vs auto, does no work |
|
|
16
|
+
| **Tools** | capability, skill, tool | what can it act with? | one word; the detail shows the kind |
|
|
17
|
+
| **To review** | proposal | what awaits my approval? | `proposed` is success |
|
|
18
|
+
| **Role** | role profile + facet | which hat does it wear? | one role per name, pod-wide; spaces add properties by overlay; its entities show in all · client · never a twin |
|
|
19
|
+
| **Thing** | entity | what is being worked on? | one kind, maybe roles · a post, a lead · never a twin for a hat |
|
|
20
|
+
| **Status** | lifecycle | where does it stand? | ONE list per kind or role, declared on its profile; category open·active·paused·done·lost · moved only through the door (`expectedStatus`) |
|
|
21
|
+
| **Pipeline** | pipeline view | what is in each status? | computed from a lifecycle, never created · not an object |
|
|
22
|
+
| **Worker** | playbook activator | what starts work by itself? | a method + trigger (enters status · schedule · count · manual) + size (per thing · per batch); a track or project turns it on |
|
|
23
|
+
|
|
24
|
+
Doors: `start_track`, `start_session`, `create_rule`, `attach_facet`, `update_entity` + `expectedStatus` (a status). How they fit (sizes, workers, tenses): `work-model`.
|
|
25
|
+
|
|
26
|
+
A lasting goal on a project: `list_tracks` → none? `start_track` (`name`, `direction`, a `kpi` only if the person names one; no method needed); work in it = `start_session` + `trackId`, as many sessions as it takes. Detail: `from-intent`.
|
|
27
|
+
|
|
28
|
+
Existing work can be filed into a track with `update_session` `trackId` (proposed; the session keeps its space). Track stages are legacy: only a track started from a track template has them (`start_stage_session`; never `advance_track` without the user).
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
## Content OS — the editorial model
|
|
2
|
+
|
|
3
|
+
Some workspaces run an editorial engine: `pillar`, `post`, `platform`, `newsletter`, plus the reused `campaign` and `sponsor`. Content OS is a **derived lens**, not a silo — the journey it can reason about is a function of what else exists in the pod. Understand this before proposing posts, pillars, or a content plan.
|
|
4
|
+
|
|
5
|
+
**The editorial core:**
|
|
6
|
+
|
|
7
|
+
- **`pillar`** — a recurring theme the audience knows the operator for. Two to four, not twelve. `pillar-status` (Active, Developing, Paused, Retired), `pillar-goal`, `pillar-formats`, `posting-frequency`.
|
|
8
|
+
- **`post`** — the atomic unit. `post-status` is the post's ONE lifecycle: Idea → Briefed → Scripted → In Draft → Review → Scheduled → Published, or Archived (see below). Plus `post-format`, `post-platform`, `publish-date`, `post-hook`, `post-cta`; measured by `engagement-score` and `post-reach`.
|
|
9
|
+
- **`platform`** — a publishing account (social, newsletter publication, podcast). Carries its own cadence and audience metrics.
|
|
10
|
+
- **`newsletter`** — one issue of the owned channel. `newsletter-status`, `newsletter-pillar`.
|
|
11
|
+
- **`campaign`** and **`sponsor`** — reused from marketing / foundation, not owned here.
|
|
12
|
+
|
|
13
|
+
**The journey layer (optional, additive):**
|
|
14
|
+
|
|
15
|
+
- **`journey-stage`** — where a reader is. Each stage names the belief it installs, the doubt it dissolves, and the action that advances them. Unordered _tagging_.
|
|
16
|
+
- **`series`** — an ordered curriculum, prerequisite-bearing: chapter by chapter.
|
|
17
|
+
- **`offer`** — the thing being sold. Owned by the `foundation` workspace, pod-wide. **Frequently absent — see the degradation rule.**
|
|
18
|
+
|
|
19
|
+
A post joins these through `post-stage`, `post-series`, `post-offer`; a repurposed post points at its source with `derived-from`.
|
|
20
|
+
|
|
21
|
+
**Two axes, both optional, composable:** CURRICULUM (`series` — ordered, "which chapter is this?") and AUDIENCE STAGE (`journey-stage` — an unordered tag, "where is the reader?"). A post carries at most one of each. With neither, Content OS still works exactly as a post tracker — that is a valid end state, not an incomplete one.
|
|
22
|
+
|
|
23
|
+
## The post lifecycle and who moves it
|
|
24
|
+
|
|
25
|
+
The lifecycle is declared on the `post` kind (work model: `load_skill system/synap/work-model`). Categories: Idea = open; Briefed, Scripted, In Draft, Review, Scheduled = active; Published = done; Archived = lost and **human-only**.
|
|
26
|
+
|
|
27
|
+
- **Nothing publishes itself.** Your move to Published is a proposal the person approves on the preview. Never set Archived.
|
|
28
|
+
- **Every move goes through the door:** `update_entity` with `post-status` = the new option AND `expectedStatus` = the status you read. A `conflict` means someone moved it; re-read. Never invent an option.
|
|
29
|
+
- **Workers, as the model maps them:** **Draft** (per post, when it enters Briefed) · **Review prep** (per post, when it enters Review; ends by proposing the publish date) · **Ideas** (per batch, weekly; creates posts at Idea). Today the catalog ships them as Produce Content (enters Briefed, a person approves the script and the draft), Repurpose (enters Published) and Plan Next Content (weekly, off until the operator turns it on).
|
|
30
|
+
- **Results go on each post**, not only in a summary. "What to make next" = read the pipeline (the Posts board): gaps per pillar, posts waiting per status.
|
|
31
|
+
|
|
32
|
+
## The degradation rule — check before you assume
|
|
33
|
+
|
|
34
|
+
Read the world before you reason about it: `list_profiles` tells you the vocabulary actually provisioned, and the `## Pod Domains` block in your context tells you which domains exist.
|
|
35
|
+
|
|
36
|
+
- **No offer-bearing domain, no `offer` entities** → the journey is pure audience-building. **Do NOT invent commerce.** No CTA to a product that does not exist, no fabricated `offer`, no "book a call" the operator never mentioned. Reason on the curriculum and stage axes and stop there.
|
|
37
|
+
- **`foundation` exists** → bind pillars to its real `audience`, `pain-point` and `positioning` entities rather than inventing personas. A pillar aimed at a persona you made up is worse than a pillar with no audience named.
|
|
38
|
+
- **`journey-stage` / `series` / `offer` absent from `list_profiles`** → this pod runs the plain editorial model. Do not reference those slugs at all.
|
|
39
|
+
|
|
40
|
+
Absence is information, not a hole to fill.
|
|
41
|
+
|
|
42
|
+
## Pillars before posts
|
|
43
|
+
|
|
44
|
+
A creator known for two to four themes compounds; one posting about everything stays noise. If the operator hands you a dozen post ideas but cannot name the themes underneath, surface THAT before filling the calendar. Every post you propose hangs off a pillar — `post-pillar` plus a `belongs_to_pillar` relation. An unpillared post is drift.
|
|
45
|
+
|
|
46
|
+
## AI behavior — placing a post on the journey
|
|
47
|
+
|
|
48
|
+
When the operator describes a content idea, propose the post WITH its placement — never a bare title:
|
|
49
|
+
|
|
50
|
+
```json
|
|
51
|
+
POST /api/hub/entities
|
|
52
|
+
{ "userId": "{userId}", "workspaceId": "{wsId}",
|
|
53
|
+
"profileSlug": "post",
|
|
54
|
+
"title": "Why your pricing page loses the sale",
|
|
55
|
+
"properties": {
|
|
56
|
+
"post-status": "Idea",
|
|
57
|
+
"post-format": "Article",
|
|
58
|
+
"post-platform": "LinkedIn",
|
|
59
|
+
"post-pillar": "ent_pillar_positioning",
|
|
60
|
+
"post-stage": "ent_stage_evaluating"
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
POST /api/hub/relations
|
|
65
|
+
{ "userId": "{userId}",
|
|
66
|
+
"sourceEntityId": "ent_post_pricing",
|
|
67
|
+
"targetEntityId": "ent_pillar_positioning",
|
|
68
|
+
"type": "belongs_to_pillar"
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Omit `post-stage` when no `journey-stage` exists, and omit `post-offer` when no `offer` exists. An empty commercial field is correct; a fabricated one is a defect. Use `derived-from` when the post is a repurpose of an existing one — one idea legitimately becomes a thread, a video, and a newsletter section.
|
|
73
|
+
|
|
74
|
+
## Gap analysis — proposing the next piece
|
|
75
|
+
|
|
76
|
+
"What should I write next" is an audit, not a brainstorm:
|
|
77
|
+
|
|
78
|
+
1. **Read the corpus** — one batched `list_entities` pass over `post` and `pillar`. Never one call per post; that is a cost failure.
|
|
79
|
+
2. **Map it** — each post to its pillar × its stage (or its place in a series). Build the grid before judging it.
|
|
80
|
+
3. **Find the holes** — a pillar with nothing at the earliest stage; a stage every pillar skips; a series that stops mid-curriculum; a pillar whose last post is months old.
|
|
81
|
+
4. **Propose the hole, not a topic** — "Pillar X has nothing that removes the pricing objection" beats "here are ten content ideas". Name the pillar, the stage, the belief to install, and the format.
|
|
82
|
+
5. **Ground it** — a proposed post cites the pillar it serves and, when `foundation` exists, the real `audience` or `pain-point` entity it answers. Otherwise it is a guess dressed as a plan.
|
|
83
|
+
|
|
84
|
+
Rank gaps by what the operator is actually known for, not what they wish they were known for.
|
|
85
|
+
|
|
86
|
+
## Resolution discipline — resolve BEFORE you create
|
|
87
|
+
|
|
88
|
+
Standard resolve-before-create applies (search once, batched, before proposing anything). Domain-specific matching keys: **platforms** resolve on handle or URL, **offers** on name, **pillars** on theme. Never placeholder — no pillar named "General", no `platform` for an account the operator doesn't have, no `offer` invented so a post has something to sell. Every post you propose attaches to at least a pillar; a post with no pillar and no stage is a note, not content.
|
|
89
|
+
|
|
90
|
+
## Kind vs facets, and governed writes
|
|
91
|
+
|
|
92
|
+
`sponsor` is a role-profile (`profileKind: role`) — per ENTITY MODEL, resolve the real company first, then `attach_facet`; a sponsoring company is never a second entity, and graph links attach to the parent, not the facet.
|
|
@@ -6,12 +6,12 @@ The loop has three moves that compound. Each takes a one-off act and, if it's wo
|
|
|
6
6
|
|
|
7
7
|
| Do-once (author) | → Crystallize (curate) | Tool |
|
|
8
8
|
| --------------------------------------- | ----------------------------------- | ----------------------------- |
|
|
9
|
-
| Work a multi-step goal in a **session** | → a **
|
|
9
|
+
| Work a multi-step goal in a **session** | → a **work template** (the process) | `promote_session_to_playbook` |
|
|
10
10
|
| Show a result in a **cell** | → a **renderer** for an entity type | `promote_cell_to_renderer` |
|
|
11
11
|
|
|
12
12
|
### 1. Open a session for real work
|
|
13
13
|
|
|
14
|
-
When the task is a unit of work with a deliverable — research, a build, an investigation, a sprint — and there's no active session, **`start_session`** with a clear `goal` and `expectedOutputs`. The session is the spine that accrues results (see the focus-sessions skill). Don't open one for a one-shot lookup or a casual reply.
|
|
14
|
+
When the task is a unit of work with a deliverable — research, a build, an investigation, a sprint — and there's no active session, **`start_session`** with a clear `goal` and `expectedOutputs`. The start door hands back the pod's matching playbooks (`playbooks.candidates`) — read them before working ad-hoc, and start again with `templateId` when one fits. The session is the spine that accrues results (see the focus-sessions skill). Don't open one for a one-shot lookup or a casual reply.
|
|
15
15
|
|
|
16
16
|
### 2. Create a cell to REPORT — don't dump data into chat
|
|
17
17
|
|
|
@@ -22,22 +22,27 @@ When you have something to _show_ the user — a list of leads, a summary, a com
|
|
|
22
22
|
|
|
23
23
|
### 3. Promote a good cell to a renderer — recurring presentation
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
Every kind already has a built-in card — the readable-first default nobody has to ask for (a brand-new user kind even gets one AUTOMATICALLY, built from its schema). Don't reach for this move by default; reach for it when the user explicitly asks for a different look and a cell has already proven it once.
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
- This is **governed**: for you it returns `{ status: "proposed", proposalId }`. That is the point — you author the renderer, the user reviews and curates it before it becomes every entity's view. Surface the proposal plainly ("I've proposed this as the detail view for bookmarks — review it when you like"), don't treat it as a failure.
|
|
29
|
-
- Use `scope: "pod"` only when the presentation should apply in every workspace; default to workspace scope.
|
|
27
|
+
When a cell is a _good, recurring way to present a whole entity type or step_ — e.g. every `bookmark`'s small card, every `lead`'s list row — promote it with `promote_cell_to_renderer`:
|
|
30
28
|
|
|
31
|
-
|
|
29
|
+
- Pick the `profileSlug` (the entity type), the `slot` (`list` | `card` | `detail` | `dashboard` — `card` is the small embeddable block; most "change how X looks" requests mean this one, not `detail`), and the `cellKey` from `create_cell`.
|
|
30
|
+
- This is **governed**: for you it returns `{ status: "proposed", proposalId }`. That is the point — you author the renderer, the user reviews and curates it before it becomes every entity's view. Surface the proposal plainly ("I've proposed this as the card for bookmarks — review it when you like"), don't treat it as a failure.
|
|
31
|
+
- Use `scope: "pod"` only when the presentation should apply in every workspace; default to workspace scope. Bind PER KIND — never as a blanket replacement for every kind's card.
|
|
32
|
+
- Once it lands, tell the user where to find or revert it: **"⋯ → Customize display"** on that kind's page.
|
|
32
33
|
|
|
33
|
-
|
|
34
|
+
### 4. Promote a finished session to a template — recurring process
|
|
35
|
+
|
|
36
|
+
When the session is done **and the work was a repeatable process** (not a one-off), promote it with `promote_session_to_playbook({ sessionId })`. This captures the goal, tasks, expected outputs, and phases as a reusable **work template** (one sitting) — so next time the process starts pre-built instead of from scratch. Words: `concepts`.
|
|
34
37
|
|
|
35
38
|
- Do this at the _end_, once the promised outputs are produced and verified.
|
|
36
|
-
- Judge repeatability honestly: a bespoke, never-again investigation is not a
|
|
39
|
+
- Judge repeatability honestly: a bespoke, never-again investigation is not a template. "New-client onboarding" is a work template.
|
|
40
|
+
- If it should **run on its own** ("a weekly competitor scan"), that is a **Rule** that starts the work each cycle (`create_rule`), not a template alone.
|
|
41
|
+
- If the work is a **lasting goal** worked over weeks, start a **track** for it on the project (`start_track`) and run this work template in it (`trackId`) — a track needs no template of its own.
|
|
37
42
|
- Governed like the others — `promoted` (applied) or `proposed` (awaiting review) are both normal.
|
|
38
43
|
|
|
39
44
|
### The symmetry
|
|
40
45
|
|
|
41
|
-
Sessions and cells are the two things you _do_;
|
|
46
|
+
Sessions and cells are the two things you _do_; templates and renderers are the two things you _keep_. The instinct to build: **first do it once concretely, watch it work, then offer to crystallize it** — and let the user decide what becomes standing config. Never crystallize speculatively before the one-off has proven itself.
|
|
42
47
|
|
|
43
48
|
This is escalation ladder **L4**: crystallize only after proof. Blocked/missing structure climbs L2→L3 first (`escalation-ladder.md`); L4 is the success path, not a substitute for discovery.
|