openclaw-node-harness 2.0.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/LICENSE +21 -0
- package/README.md +184 -0
- package/bin/discord-read.js +228 -0
- package/bin/fleet-deploy.js +365 -0
- package/bin/lane-watchdog.js +232 -0
- package/bin/mesh-agent.js +714 -0
- package/bin/mesh-bridge.js +535 -0
- package/bin/mesh-deploy-listener.js +322 -0
- package/bin/mesh-deploy.js +1048 -0
- package/bin/mesh-health-publisher.js +247 -0
- package/bin/mesh-task-daemon.js +451 -0
- package/bin/mesh-tool-discord.js +293 -0
- package/bin/mesh.js +649 -0
- package/boot/manifest.yaml +187 -0
- package/cli.js +35 -0
- package/config/daemon.json.template +16 -0
- package/config/obsidian-sync.json.template +39 -0
- package/config/openclaw.json.template +124 -0
- package/config/transcript-sources.json.template +22 -0
- package/identity/AGENTS.md +201 -0
- package/identity/CLAUDE.md +64 -0
- package/identity/DELEGATION.md +304 -0
- package/identity/HEARTBEAT.md +163 -0
- package/identity/MEMORY_SPEC.md +368 -0
- package/identity/PRINCIPLES.md +81 -0
- package/identity/SOUL.md +48 -0
- package/identity/TOOLS.md +47 -0
- package/install.sh +895 -0
- package/lib/agent-activity.js +390 -0
- package/lib/kanban-io.js +352 -0
- package/lib/mesh-registry.js +194 -0
- package/lib/mesh-roles.js +13 -0
- package/lib/mesh-tasks.js +306 -0
- package/lib/nats-resolve.js +108 -0
- package/mission-control/README.md +36 -0
- package/mission-control/drizzle/0000_simple_silhouette.sql +62 -0
- package/mission-control/drizzle/meta/0000_snapshot.json +413 -0
- package/mission-control/drizzle/meta/_journal.json +13 -0
- package/mission-control/drizzle.config.ts +13 -0
- package/mission-control/eslint.config.mjs +18 -0
- package/mission-control/next.config.ts +7 -0
- package/mission-control/package-lock.json +10518 -0
- package/mission-control/package.json +49 -0
- package/mission-control/postcss.config.mjs +7 -0
- package/mission-control/public/file.svg +1 -0
- package/mission-control/public/globe.svg +1 -0
- package/mission-control/public/next.svg +1 -0
- package/mission-control/public/vercel.svg +1 -0
- package/mission-control/public/window.svg +1 -0
- package/mission-control/scripts/enrich-descriptions.js +193 -0
- package/mission-control/scripts/gen-chronology.js +102 -0
- package/mission-control/scripts/import-pipeline-v2.js +523 -0
- package/mission-control/scripts/import-pipeline.js +295 -0
- package/mission-control/src/app/api/activity/live/route.ts +27 -0
- package/mission-control/src/app/api/activity/route.ts +47 -0
- package/mission-control/src/app/api/burndown/route.ts +112 -0
- package/mission-control/src/app/api/critical-path/route.ts +159 -0
- package/mission-control/src/app/api/dependencies/route.ts +176 -0
- package/mission-control/src/app/api/memory/categories/route.ts +93 -0
- package/mission-control/src/app/api/memory/consolidate/route.ts +107 -0
- package/mission-control/src/app/api/memory/doc/route.ts +89 -0
- package/mission-control/src/app/api/memory/flush/route.ts +129 -0
- package/mission-control/src/app/api/memory/graph/route.ts +105 -0
- package/mission-control/src/app/api/memory/items/route.ts +86 -0
- package/mission-control/src/app/api/memory/list/route.ts +48 -0
- package/mission-control/src/app/api/memory/retrieve/route.ts +51 -0
- package/mission-control/src/app/api/memory/search/route.ts +143 -0
- package/mission-control/src/app/api/memory/sync/route.ts +23 -0
- package/mission-control/src/app/api/memory/wikilinks/route.ts +75 -0
- package/mission-control/src/app/api/mesh/events/route.ts +67 -0
- package/mission-control/src/app/api/mesh/nodes/route.ts +221 -0
- package/mission-control/src/app/api/mesh/tokens/route.ts +133 -0
- package/mission-control/src/app/api/projects/route.ts +102 -0
- package/mission-control/src/app/api/resolve-path/route.ts +92 -0
- package/mission-control/src/app/api/scheduler/tick/route.ts +38 -0
- package/mission-control/src/app/api/scheduler/waves/route.ts +54 -0
- package/mission-control/src/app/api/screenshot/route.ts +127 -0
- package/mission-control/src/app/api/settings/gateway/route.ts +92 -0
- package/mission-control/src/app/api/skills/[id]/health/route.ts +57 -0
- package/mission-control/src/app/api/skills/list/route.ts +41 -0
- package/mission-control/src/app/api/souls/[id]/evolution/route.ts +253 -0
- package/mission-control/src/app/api/souls/[id]/prompt/route.ts +205 -0
- package/mission-control/src/app/api/souls/[id]/propagate/route.ts +146 -0
- package/mission-control/src/app/api/souls/route.ts +174 -0
- package/mission-control/src/app/api/tasks/[id]/handoff/route.ts +115 -0
- package/mission-control/src/app/api/tasks/[id]/route.ts +266 -0
- package/mission-control/src/app/api/tasks/[id]/tree/route.ts +94 -0
- package/mission-control/src/app/api/tasks/route.ts +253 -0
- package/mission-control/src/app/api/tts/route.ts +47 -0
- package/mission-control/src/app/api/workspace/files/route.ts +88 -0
- package/mission-control/src/app/api/workspace/read/route.ts +73 -0
- package/mission-control/src/app/burndown/page.tsx +309 -0
- package/mission-control/src/app/calendar/page.tsx +839 -0
- package/mission-control/src/app/favicon.ico +0 -0
- package/mission-control/src/app/globals.css +67 -0
- package/mission-control/src/app/graph/page.tsx +352 -0
- package/mission-control/src/app/layout.tsx +35 -0
- package/mission-control/src/app/live/page.tsx +232 -0
- package/mission-control/src/app/memory/page.tsx +154 -0
- package/mission-control/src/app/mesh/page.tsx +457 -0
- package/mission-control/src/app/obsidian/page.tsx +252 -0
- package/mission-control/src/app/page.tsx +70 -0
- package/mission-control/src/app/roadmap/page.tsx +1757 -0
- package/mission-control/src/app/settings/page.tsx +260 -0
- package/mission-control/src/app/souls/page.tsx +573 -0
- package/mission-control/src/components/board/activity-timeline.tsx +96 -0
- package/mission-control/src/components/board/daily-board.tsx +373 -0
- package/mission-control/src/components/board/kanban-board.tsx +364 -0
- package/mission-control/src/components/board/kanban-column.tsx +105 -0
- package/mission-control/src/components/board/live-stream.tsx +116 -0
- package/mission-control/src/components/board/skill-health-card.tsx +128 -0
- package/mission-control/src/components/board/status-banner.tsx +124 -0
- package/mission-control/src/components/board/task-card.tsx +454 -0
- package/mission-control/src/components/board/unified-task-dialog.tsx +1043 -0
- package/mission-control/src/components/layout/resizable-layout.tsx +68 -0
- package/mission-control/src/components/layout/sidebar.tsx +90 -0
- package/mission-control/src/components/live/audio-spectrum.tsx +106 -0
- package/mission-control/src/components/live/chat-bubble.tsx +52 -0
- package/mission-control/src/components/live/chat-input.tsx +92 -0
- package/mission-control/src/components/memory/doc-reader.tsx +172 -0
- package/mission-control/src/components/memory/memory-list.tsx +169 -0
- package/mission-control/src/components/memory/search-bar.tsx +67 -0
- package/mission-control/src/components/memory/search-results.tsx +149 -0
- package/mission-control/src/components/obsidian/backlinks-panel.tsx +52 -0
- package/mission-control/src/components/obsidian/file-tree.tsx +186 -0
- package/mission-control/src/components/obsidian/local-graph.tsx +107 -0
- package/mission-control/src/components/obsidian/obsidian-graph.tsx +192 -0
- package/mission-control/src/components/obsidian/obsidian-reader.tsx +246 -0
- package/mission-control/src/lib/activity.ts +29 -0
- package/mission-control/src/lib/config.ts +21 -0
- package/mission-control/src/lib/db/index.ts +429 -0
- package/mission-control/src/lib/db/schema.ts +218 -0
- package/mission-control/src/lib/gateway-notify.ts +113 -0
- package/mission-control/src/lib/hooks.ts +536 -0
- package/mission-control/src/lib/memory/categories.ts +125 -0
- package/mission-control/src/lib/memory/entities.ts +482 -0
- package/mission-control/src/lib/memory/extract.ts +369 -0
- package/mission-control/src/lib/memory/retrieval.ts +281 -0
- package/mission-control/src/lib/memory/wikilinks.ts +147 -0
- package/mission-control/src/lib/nats.ts +126 -0
- package/mission-control/src/lib/parsers/clawvault-doc.ts +98 -0
- package/mission-control/src/lib/parsers/daily-log.ts +73 -0
- package/mission-control/src/lib/parsers/memory-md.ts +81 -0
- package/mission-control/src/lib/parsers/task-markdown.ts +459 -0
- package/mission-control/src/lib/parsers/transcript.ts +209 -0
- package/mission-control/src/lib/scheduler.ts +394 -0
- package/mission-control/src/lib/speech/use-speech-pipeline.ts +176 -0
- package/mission-control/src/lib/sync/memory.ts +224 -0
- package/mission-control/src/lib/sync/tasks.ts +271 -0
- package/mission-control/src/lib/tts/edge.ts +31 -0
- package/mission-control/src/lib/tts/google.ts +78 -0
- package/mission-control/src/lib/tts/index.ts +39 -0
- package/mission-control/src/lib/tts/types.ts +18 -0
- package/mission-control/tsconfig.json +42 -0
- package/obsidian-vault/.obsidian/app.json +10 -0
- package/obsidian-vault/.obsidian/community-plugins.json +8 -0
- package/obsidian-vault/.obsidian/graph.json +40 -0
- package/obsidian-vault/.obsidian/plugins/obsidian-local-rest-api/main.js +58769 -0
- package/obsidian-vault/.obsidian/plugins/obsidian-local-rest-api/manifest.json +10 -0
- package/obsidian-vault/.obsidian/plugins/obsidian-local-rest-api/styles.css +47 -0
- package/obsidian-vault/00-meta/.gitkeep +0 -0
- package/obsidian-vault/01-architecture/.gitkeep +0 -0
- package/obsidian-vault/02-smart-contracts/.gitkeep +0 -0
- package/obsidian-vault/03-backend/.gitkeep +0 -0
- package/obsidian-vault/04-mobile/.gitkeep +0 -0
- package/obsidian-vault/05-ar-mapping/.gitkeep +0 -0
- package/obsidian-vault/06-3d-assets/.gitkeep +0 -0
- package/obsidian-vault/07-sound-music/.gitkeep +0 -0
- package/obsidian-vault/08-lore/.gitkeep +0 -0
- package/obsidian-vault/09-quests-playthrough/.gitkeep +0 -0
- package/obsidian-vault/10-economy/.gitkeep +0 -0
- package/obsidian-vault/11-nft-assets/.gitkeep +0 -0
- package/obsidian-vault/12-nft-mechanics/.gitkeep +0 -0
- package/obsidian-vault/13-dao-guild-social/.gitkeep +0 -0
- package/obsidian-vault/14-game-progression/.gitkeep +0 -0
- package/obsidian-vault/15-analytics/.gitkeep +0 -0
- package/obsidian-vault/16-security/.gitkeep +0 -0
- package/obsidian-vault/17-devops/.gitkeep +0 -0
- package/obsidian-vault/18-marketplace/.gitkeep +0 -0
- package/obsidian-vault/19-decisions/.gitkeep +0 -0
- package/obsidian-vault/20-business-strategy/.gitkeep +0 -0
- package/obsidian-vault/21-legal-regulatory/.gitkeep +0 -0
- package/obsidian-vault/nodes/.gitkeep +0 -0
- package/openclaw.env.example +17 -0
- package/package.json +45 -0
- package/services/launchd/ai.openclaw.gateway.plist +59 -0
- package/services/launchd/ai.openclaw.lane-watchdog.plist +32 -0
- package/services/launchd/ai.openclaw.log-rotate.plist +28 -0
- package/services/launchd/ai.openclaw.memory-daemon.plist +36 -0
- package/services/launchd/ai.openclaw.mesh-agent.plist +38 -0
- package/services/launchd/ai.openclaw.mesh-bridge.plist +36 -0
- package/services/launchd/ai.openclaw.mesh-deploy-listener.plist +33 -0
- package/services/launchd/ai.openclaw.mesh-health-publisher.plist +29 -0
- package/services/launchd/ai.openclaw.mesh-task-daemon.plist +36 -0
- package/services/launchd/ai.openclaw.mesh-tool-discord.plist +36 -0
- package/services/launchd/ai.openclaw.mission-control.plist +41 -0
- package/services/service-manifest.json +13 -0
- package/services/systemd/openclaw-gateway.service +21 -0
- package/services/systemd/openclaw-lane-watchdog.service +21 -0
- package/services/systemd/openclaw-log-rotate.service +13 -0
- package/services/systemd/openclaw-log-rotate.timer +9 -0
- package/services/systemd/openclaw-memory-daemon.service +21 -0
- package/services/systemd/openclaw-mesh-agent.service +19 -0
- package/services/systemd/openclaw-mesh-bridge.service +21 -0
- package/services/systemd/openclaw-mesh-deploy-listener.service +23 -0
- package/services/systemd/openclaw-mesh-health-publisher.service +21 -0
- package/services/systemd/openclaw-mesh-task-daemon.service +21 -0
- package/services/systemd/openclaw-mesh-tool-discord.service +21 -0
- package/services/systemd/openclaw-mission-control.service +22 -0
- package/skills/1password/.clawhub/origin.json +7 -0
- package/skills/1password/SKILL.md +63 -0
- package/skills/1password/references/cli-examples.md +29 -0
- package/skills/1password/references/get-started.md +17 -0
- package/skills/acquisition-channel-advisor/SKILL.md +643 -0
- package/skills/acquisition-channel-advisor/examples/conversation-flow.md +531 -0
- package/skills/agent-browser/.clawhub/origin.json +7 -0
- package/skills/agent-browser/CONTRIBUTING.md +63 -0
- package/skills/agent-browser/SKILL.md +338 -0
- package/skills/agentic-compass/.clawhub/origin.json +7 -0
- package/skills/agentic-compass/README.md +96 -0
- package/skills/agentic-compass/SKILL.md +112 -0
- package/skills/agentic-compass/references/README.md +5 -0
- package/skills/agentic-compass/scripts/agentic-compass.py +196 -0
- package/skills/arcane-dev-ops/SKILL.md +61 -0
- package/skills/arcane-dev-ops/references/checklist.md +22 -0
- package/skills/arcane-dev-ops/references/validation-cases.md +11 -0
- package/skills/arcane-dev-ops/scripts/prepush_check.sh +41 -0
- package/skills/auto-updater/.clawhub/origin.json +7 -0
- package/skills/auto-updater/SKILL.md +158 -0
- package/skills/auto-updater/references/agent-guide.md +152 -0
- package/skills/auto-updater/references/summary-examples.md +109 -0
- package/skills/business-health-diagnostic/SKILL.md +782 -0
- package/skills/byterover/.clawhub/origin.json +7 -0
- package/skills/byterover/SKILL.md +105 -0
- package/skills/byterover/TROUBLESHOOTING.md +50 -0
- package/skills/byterover/WORKFLOWS.md +229 -0
- package/skills/capability-evolver/.clawhub/origin.json +7 -0
- package/skills/capability-evolver/CONTRIBUTING.md +11 -0
- package/skills/capability-evolver/README.md +157 -0
- package/skills/capability-evolver/README.zh-CN.md +112 -0
- package/skills/capability-evolver/SKILL.md +93 -0
- package/skills/capability-evolver/assets/gep/capsules.json +5 -0
- package/skills/capability-evolver/assets/gep/genes.json +104 -0
- package/skills/capability-evolver/index.js +59 -0
- package/skills/capability-evolver/package.json +22 -0
- package/skills/capability-evolver/scripts/analyze_by_skill.js +121 -0
- package/skills/capability-evolver/scripts/build_public.js +350 -0
- package/skills/capability-evolver/scripts/export_history.js +98 -0
- package/skills/capability-evolver/scripts/extract_log.js +85 -0
- package/skills/capability-evolver/scripts/generate_history.js +75 -0
- package/skills/capability-evolver/scripts/human_report.js +147 -0
- package/skills/capability-evolver/scripts/publish_public.js +516 -0
- package/skills/capability-evolver/scripts/suggest_version.js +89 -0
- package/skills/capability-evolver/src/evolve.js +594 -0
- package/skills/capability-evolver/src/gep/assetStore.js +204 -0
- package/skills/capability-evolver/src/gep/candidates.js +134 -0
- package/skills/capability-evolver/src/gep/paths.js +23 -0
- package/skills/capability-evolver/src/gep/prompt.js +254 -0
- package/skills/capability-evolver/src/gep/selector.js +89 -0
- package/skills/capability-evolver/src/gep/signals.js +27 -0
- package/skills/cc-godmode/.clawhub/origin.json +7 -0
- package/skills/cc-godmode/CHANGELOG.md +66 -0
- package/skills/cc-godmode/README.md +293 -0
- package/skills/cc-godmode/SKILL.md +242 -0
- package/skills/cc-godmode/docs/AGENTS.md +332 -0
- package/skills/cc-godmode/docs/MIGRATION.md +206 -0
- package/skills/cc-godmode/docs/TROUBLESHOOTING.md +357 -0
- package/skills/cc-godmode/docs/WORKFLOWS.md +329 -0
- package/skills/cc-godmode/references/agents.md +433 -0
- package/skills/cc-godmode/scripts/build-skill.js +232 -0
- package/skills/clawdbot-filesystem/.clawhub/origin.json +7 -0
- package/skills/clawdbot-filesystem/LICENSE.md +21 -0
- package/skills/clawdbot-filesystem/README.md +322 -0
- package/skills/clawdbot-filesystem/SKILL.md +219 -0
- package/skills/clawdbot-filesystem/config.json +41 -0
- package/skills/clawdbot-filesystem/package.json +69 -0
- package/skills/clawdbot-security-check/.clawhub/origin.json +7 -0
- package/skills/clawdbot-security-check/README.md +168 -0
- package/skills/clawdbot-security-check/SKILL.md +145 -0
- package/skills/clawdbot-security-check/references/audit-checks.md +521 -0
- package/skills/clawdbot-security-check/skill.json +42 -0
- package/skills/clawddocs/.clawhub/origin.json +7 -0
- package/skills/clawddocs/SKILL.md +176 -0
- package/skills/clawddocs/package.json +9 -0
- package/skills/clawddocs/scripts/build-index.sh +17 -0
- package/skills/clawddocs/scripts/cache.sh +13 -0
- package/skills/clawddocs/scripts/fetch-doc.sh +7 -0
- package/skills/clawddocs/scripts/recent.sh +5 -0
- package/skills/clawddocs/scripts/search.sh +8 -0
- package/skills/clawddocs/scripts/sitemap.sh +23 -0
- package/skills/clawddocs/scripts/track-changes.sh +16 -0
- package/skills/clawddocs/snippets/common-configs.md +69 -0
- package/skills/clawguard/.clawhub/origin.json +7 -0
- package/skills/clawguard/SKILL.md +137 -0
- package/skills/company-research/SKILL.md +393 -0
- package/skills/company-research/examples/sample.md +164 -0
- package/skills/company-research/template.md +60 -0
- package/skills/crypto-price/.clawhub/origin.json +7 -0
- package/skills/crypto-price/ARCHITECTURE.md +437 -0
- package/skills/crypto-price/README.md +194 -0
- package/skills/crypto-price/SKILL.md +61 -0
- package/skills/crypto-price/requirements.txt +1 -0
- package/skills/crypto-price/scripts/get_price_chart.py +988 -0
- package/skills/customer-journey-map/SKILL.md +343 -0
- package/skills/customer-journey-map/examples/sample.md +33 -0
- package/skills/customer-journey-map/template.md +28 -0
- package/skills/customer-journey-mapping-workshop/SKILL.md +522 -0
- package/skills/deep-research/.clawhub/origin.json +7 -0
- package/skills/deep-research/SKILL.md +93 -0
- package/skills/deep-research/rules/logic.md +32 -0
- package/skills/discord-telegram-triage/SKILL.md +59 -0
- package/skills/discord-telegram-triage/references/discord-runbook.md +28 -0
- package/skills/discord-telegram-triage/references/validation-cases.md +11 -0
- package/skills/discord-telegram-triage/scripts/triage_snapshot.sh +23 -0
- package/skills/discovery-interview-prep/SKILL.md +408 -0
- package/skills/discovery-process/SKILL.md +503 -0
- package/skills/discovery-process/examples/sample.md +60 -0
- package/skills/discovery-process/template.md +39 -0
- package/skills/dist/arcane-dev-ops.skill +0 -0
- package/skills/dist/discord-telegram-triage.skill +0 -0
- package/skills/dist/founder-brief-summarizer.skill +0 -0
- package/skills/epic-breakdown-advisor/SKILL.md +664 -0
- package/skills/epic-hypothesis/SKILL.md +285 -0
- package/skills/epic-hypothesis/examples/sample.md +104 -0
- package/skills/epic-hypothesis/template.md +30 -0
- package/skills/excel/.clawhub/origin.json +7 -0
- package/skills/excel/SKILL.md +332 -0
- package/skills/excel/scripts/excel.py +1120 -0
- package/skills/fast-browser-use/.clawhub/origin.json +7 -0
- package/skills/fast-browser-use/CODEBUDDY.md +142 -0
- package/skills/fast-browser-use/Cargo.toml +77 -0
- package/skills/fast-browser-use/README.md +62 -0
- package/skills/fast-browser-use/SKILL.md +217 -0
- package/skills/fast-browser-use/package-lock.json +28 -0
- package/skills/fast-browser-use/package.json +8 -0
- package/skills/fast-browser-use/rustfmt.toml +10 -0
- package/skills/fast-browser-use/src/bin/cli.rs +373 -0
- package/skills/fast-browser-use/src/bin/mcp_server.rs +203 -0
- package/skills/fast-browser-use/src/browser/config.rs +136 -0
- package/skills/fast-browser-use/src/browser/debug.rs +16 -0
- package/skills/fast-browser-use/src/browser/mod.rs +61 -0
- package/skills/fast-browser-use/src/browser/session.rs +478 -0
- package/skills/fast-browser-use/src/dom/element.rs +442 -0
- package/skills/fast-browser-use/src/dom/extract_dom.js +849 -0
- package/skills/fast-browser-use/src/dom/mod.rs +14 -0
- package/skills/fast-browser-use/src/dom/tree.rs +296 -0
- package/skills/fast-browser-use/src/dom/yaml.rs +149 -0
- package/skills/fast-browser-use/src/error.rs +115 -0
- package/skills/fast-browser-use/src/lib.rs +17 -0
- package/skills/fast-browser-use/src/mcp/handler.rs +63 -0
- package/skills/fast-browser-use/src/mcp/mod.rs +81 -0
- package/skills/fast-browser-use/src/tools/Readability.min.js +1480 -0
- package/skills/fast-browser-use/src/tools/annotate.rs +165 -0
- package/skills/fast-browser-use/src/tools/click.rs +84 -0
- package/skills/fast-browser-use/src/tools/close.rs +35 -0
- package/skills/fast-browser-use/src/tools/close_tab.rs +45 -0
- package/skills/fast-browser-use/src/tools/convert_to_markdown.js +117 -0
- package/skills/fast-browser-use/src/tools/cookies.rs +58 -0
- package/skills/fast-browser-use/src/tools/debug.rs +44 -0
- package/skills/fast-browser-use/src/tools/evaluate.rs +40 -0
- package/skills/fast-browser-use/src/tools/extract.rs +66 -0
- package/skills/fast-browser-use/src/tools/go_back.rs +35 -0
- package/skills/fast-browser-use/src/tools/go_forward.rs +35 -0
- package/skills/fast-browser-use/src/tools/hover.js +33 -0
- package/skills/fast-browser-use/src/tools/hover.rs +97 -0
- package/skills/fast-browser-use/src/tools/html_to_markdown.rs +99 -0
- package/skills/fast-browser-use/src/tools/input.rs +93 -0
- package/skills/fast-browser-use/src/tools/local_storage.rs +159 -0
- package/skills/fast-browser-use/src/tools/markdown.rs +181 -0
- package/skills/fast-browser-use/src/tools/mod.rs +326 -0
- package/skills/fast-browser-use/src/tools/navigate.rs +55 -0
- package/skills/fast-browser-use/src/tools/new_tab.rs +60 -0
- package/skills/fast-browser-use/src/tools/press_key.rs +78 -0
- package/skills/fast-browser-use/src/tools/read_links.rs +59 -0
- package/skills/fast-browser-use/src/tools/readability_script.rs +8 -0
- package/skills/fast-browser-use/src/tools/screenshot.rs +47 -0
- package/skills/fast-browser-use/src/tools/scroll.js +22 -0
- package/skills/fast-browser-use/src/tools/scroll.rs +95 -0
- package/skills/fast-browser-use/src/tools/select.js +23 -0
- package/skills/fast-browser-use/src/tools/select.rs +129 -0
- package/skills/fast-browser-use/src/tools/sitemap.rs +426 -0
- package/skills/fast-browser-use/src/tools/snapshot.rs +324 -0
- package/skills/fast-browser-use/src/tools/switch_tab.rs +69 -0
- package/skills/fast-browser-use/src/tools/tab_list.rs +76 -0
- package/skills/fast-browser-use/src/tools/utils.rs +92 -0
- package/skills/fast-browser-use/src/tools/wait.rs +53 -0
- package/skills/fast-browser-use/test_auth.json +3 -0
- package/skills/fast-browser-use/test_state.json +6 -0
- package/skills/fast-browser-use/tests/browser_tools_integration.rs +233 -0
- package/skills/fast-browser-use/tests/cli_recipes_integration.rs +112 -0
- package/skills/fast-browser-use/tests/cookies_integration.rs +56 -0
- package/skills/fast-browser-use/tests/debug_integration.rs +83 -0
- package/skills/fast-browser-use/tests/dom_integration.rs +170 -0
- package/skills/fast-browser-use/tests/local_storage_integration.rs +75 -0
- package/skills/fast-browser-use/tests/markdown_integration.rs +448 -0
- package/skills/fast-browser-use/tests/navigation_integration.rs +241 -0
- package/skills/fast-browser-use/tests/sitemap_integration.rs +326 -0
- package/skills/fast-browser-use/tests/tab_management_integration.rs +300 -0
- package/skills/feature-investment-advisor/SKILL.md +639 -0
- package/skills/feature-investment-advisor/examples/conversation-flow.md +538 -0
- package/skills/finance-based-pricing-advisor/SKILL.md +763 -0
- package/skills/finance-metrics-quickref/SKILL.md +309 -0
- package/skills/find-skills/.clawhub/origin.json +7 -0
- package/skills/find-skills/SKILL.md +143 -0
- package/skills/flavor-text-writer/SKILL.md +27 -0
- package/skills/founder-brief-summarizer/SKILL.md +52 -0
- package/skills/founder-brief-summarizer/references/response-templates.md +15 -0
- package/skills/founder-brief-summarizer/references/validation-cases.md +11 -0
- package/skills/founder-brief-summarizer/scripts/brief_template.sh +28 -0
- package/skills/frontend-design/.clawhub/origin.json +7 -0
- package/skills/frontend-design/LICENSE.txt +190 -0
- package/skills/frontend-design/SKILL.md +53 -0
- package/skills/gemini/.clawhub/origin.json +7 -0
- package/skills/gemini/SKILL.md +33 -0
- package/skills/gemini-deep-research/.clawhub/origin.json +7 -0
- package/skills/gemini-deep-research/SKILL.md +78 -0
- package/skills/gemini-deep-research/scripts/deep_research.py +176 -0
- package/skills/git-essentials/.clawhub/origin.json +7 -0
- package/skills/git-essentials/SKILL.md +239 -0
- package/skills/git-essentials/references/advanced.md +211 -0
- package/skills/github/.clawhub/origin.json +7 -0
- package/skills/github/SKILL.md +57 -0
- package/skills/google-drive/.clawhub/origin.json +7 -0
- package/skills/google-drive/LICENSE.txt +21 -0
- package/skills/google-drive/SKILL.md +320 -0
- package/skills/growth-loop/SKILL.md +270 -0
- package/skills/growth-loop/_meta.json +9 -0
- package/skills/growth-loop/references/diagnosis-framework.md +84 -0
- package/skills/growth-loop/references/platform-benchmarks.md +79 -0
- package/skills/growth-loop/scripts/init-campaign.sh +274 -0
- package/skills/humanize-ai-text/.clawhub/origin.json +7 -0
- package/skills/humanize-ai-text/SKILL.md +192 -0
- package/skills/humanize-ai-text/scripts/compare.py +58 -0
- package/skills/humanize-ai-text/scripts/detect.py +160 -0
- package/skills/humanize-ai-text/scripts/patterns.json +191 -0
- package/skills/humanize-ai-text/scripts/transform.py +127 -0
- package/skills/humanizer/.clawhub/origin.json +7 -0
- package/skills/humanizer/README.md +82 -0
- package/skills/humanizer/SKILL.md +443 -0
- package/skills/jobs-to-be-done/SKILL.md +378 -0
- package/skills/jobs-to-be-done/examples/sample.md +80 -0
- package/skills/jobs-to-be-done/template.md +65 -0
- package/skills/lean-ux-canvas/SKILL.md +561 -0
- package/skills/lean-ux-canvas/examples/sample.md +88 -0
- package/skills/lean-ux-canvas/template.md +32 -0
- package/skills/markdown-formatter/.clawhub/origin.json +7 -0
- package/skills/markdown-formatter/README.md +137 -0
- package/skills/markdown-formatter/SKILL.md +369 -0
- package/skills/markdown-formatter/config.json +20 -0
- package/skills/markdown-formatter/index.js +439 -0
- package/skills/markdown-formatter/package.json +23 -0
- package/skills/markdown-formatter/test.js +23 -0
- package/skills/marketing-mode/.clawhub/origin.json +7 -0
- package/skills/marketing-mode/README.md +49 -0
- package/skills/marketing-mode/SKILL.md +703 -0
- package/skills/marketing-mode/mode-prompt.md +39 -0
- package/skills/marketing-mode/skill.json +51 -0
- package/skills/memory-hygiene/.clawhub/origin.json +7 -0
- package/skills/memory-hygiene/SKILL.md +91 -0
- package/skills/memory-setup/.clawhub/origin.json +7 -0
- package/skills/memory-setup/SKILL.md +180 -0
- package/skills/memorylayer/.clawhub/origin.json +7 -0
- package/skills/memorylayer/README.md +197 -0
- package/skills/memorylayer/SKILL.md +227 -0
- package/skills/memorylayer/examples/agent-integration.js +145 -0
- package/skills/memorylayer/examples/basic-usage.js +87 -0
- package/skills/memorylayer/examples/token-savings-demo.js +183 -0
- package/skills/memorylayer/index.js +115 -0
- package/skills/memorylayer/package-lock.json +295 -0
- package/skills/memorylayer/package.json +27 -0
- package/skills/memorylayer/python/memorylayer_skill.py +230 -0
- package/skills/memorylayer/python/requirements.txt +7 -0
- package/skills/mesh/SKILL.md +184 -0
- package/skills/model-usage/.clawhub/origin.json +7 -0
- package/skills/model-usage/SKILL.md +54 -0
- package/skills/model-usage/references/codexbar-cli.md +28 -0
- package/skills/model-usage/scripts/model_usage.py +310 -0
- package/skills/moltbook-interact/.clawhub/origin.json +7 -0
- package/skills/moltbook-interact/INSTALL.md +139 -0
- package/skills/moltbook-interact/README.md +198 -0
- package/skills/moltbook-interact/SKILL.md +72 -0
- package/skills/moltbook-interact/references/api.md +106 -0
- package/skills/moltbook-interact/scripts/moltbook.sh +142 -0
- package/skills/moltbook-registry/.clawhub/origin.json +7 -0
- package/skills/moltbook-registry/README.md +26 -0
- package/skills/moltbook-registry/SKILL.md +82 -0
- package/skills/moltbook-registry/index.js +180 -0
- package/skills/moltbook-registry/package.json +11 -0
- package/skills/mythril-scanner/SKILL.md +27 -0
- package/skills/n8n/.clawhub/origin.json +7 -0
- package/skills/n8n/SKILL.md +141 -0
- package/skills/n8n/references/api.md +156 -0
- package/skills/n8n/scripts/n8n_api.py +158 -0
- package/skills/n8n-workflow-automation/.clawhub/origin.json +7 -0
- package/skills/n8n-workflow-automation/SKILL.md +103 -0
- package/skills/n8n-workflow-automation/assets/runbook-template.md +32 -0
- package/skills/narrative-designer/SKILL.md +27 -0
- package/skills/ontology/.clawhub/origin.json +7 -0
- package/skills/ontology/SKILL.md +236 -0
- package/skills/ontology/references/queries.md +211 -0
- package/skills/ontology/references/schema.md +322 -0
- package/skills/ontology/scripts/ontology.py +374 -0
- package/skills/openai-image-gen/.clawhub/origin.json +7 -0
- package/skills/openai-image-gen/SKILL.md +45 -0
- package/skills/openai-image-gen/scripts/gen.py +227 -0
- package/skills/openclaw-agent-optimize/.clawhub/origin.json +7 -0
- package/skills/openclaw-agent-optimize/SKILL.md +33 -0
- package/skills/openclaw-agent-optimize/references/agent-orchestration.md +20 -0
- package/skills/openclaw-agent-optimize/references/context-management.md +15 -0
- package/skills/openclaw-agent-optimize/references/continuous-learning.md +14 -0
- package/skills/openclaw-agent-optimize/references/cron-optimization.md +16 -0
- package/skills/openclaw-agent-optimize/references/memory-patterns.md +14 -0
- package/skills/openclaw-agent-optimize/references/model-selection.md +18 -0
- package/skills/openclaw-skill-scanner/.clawhub/origin.json +7 -0
- package/skills/openclaw-skill-scanner/SKILL.md +88 -0
- package/skills/openclaw-skill-scanner/install-hook.sh +294 -0
- package/skills/openclaw-skill-scanner/report-template.md +53 -0
- package/skills/openclaw-skill-scanner/scanner.py +929 -0
- package/skills/openclaw-skill-scanner/whitelist.json +18 -0
- package/skills/opportunity-solution-tree/SKILL.md +428 -0
- package/skills/opportunity-solution-tree/examples/sample.md +104 -0
- package/skills/opportunity-solution-tree/template.md +33 -0
- package/skills/pdf/.clawhub/origin.json +7 -0
- package/skills/pdf/SKILL.md +304 -0
- package/skills/pestel-analysis/SKILL.md +384 -0
- package/skills/pestel-analysis/examples/sample.md +143 -0
- package/skills/pestel-analysis/template.md +53 -0
- package/skills/pol-probe/SKILL.md +217 -0
- package/skills/pol-probe/examples/sample.md +136 -0
- package/skills/pol-probe/template.md +59 -0
- package/skills/pol-probe-advisor/SKILL.md +492 -0
- package/skills/positioning-statement/SKILL.md +229 -0
- package/skills/positioning-statement/examples/sample.md +51 -0
- package/skills/positioning-statement/template.md +25 -0
- package/skills/positioning-workshop/SKILL.md +424 -0
- package/skills/prd-development/SKILL.md +654 -0
- package/skills/prd-development/examples/sample.md +43 -0
- package/skills/prd-development/template.md +55 -0
- package/skills/press-release/SKILL.md +277 -0
- package/skills/press-release/examples/sample.md +73 -0
- package/skills/press-release/template.md +39 -0
- package/skills/prioritization-advisor/SKILL.md +451 -0
- package/skills/proactive-messages/.clawhub/origin.json +7 -0
- package/skills/proactive-messages/SKILL.md +91 -0
- package/skills/problem-framing-canvas/SKILL.md +466 -0
- package/skills/problem-framing-canvas/examples/sample.md +58 -0
- package/skills/problem-framing-canvas/template.md +22 -0
- package/skills/problem-statement/SKILL.md +255 -0
- package/skills/problem-statement/examples/sample.md +82 -0
- package/skills/problem-statement/template.md +37 -0
- package/skills/product-strategy-session/SKILL.md +434 -0
- package/skills/product-strategy-session/examples/sample.md +67 -0
- package/skills/product-strategy-session/template.md +38 -0
- package/skills/prompt-guard/.clawhub/origin.json +7 -0
- package/skills/prompt-guard/ARCHITECTURE.md +364 -0
- package/skills/prompt-guard/CHANGELOG.md +200 -0
- package/skills/prompt-guard/README.md +215 -0
- package/skills/prompt-guard/SECURITY.md +66 -0
- package/skills/prompt-guard/SKILL.md +174 -0
- package/skills/prompt-guard/blog/how-i-secured-my-ai-agent.md +185 -0
- package/skills/prompt-guard/config.example.yaml +56 -0
- package/skills/prompt-guard/references/detection-patterns.md +298 -0
- package/skills/prompt-guard/requirements.txt +1 -0
- package/skills/prompt-guard/scripts/analyze_log.py +224 -0
- package/skills/prompt-guard/scripts/audit.py +344 -0
- package/skills/prompt-guard/scripts/detect.py +1587 -0
- package/skills/prompt-guard/scripts/hivefence.py +345 -0
- package/skills/proto-persona/SKILL.md +336 -0
- package/skills/proto-persona/examples/sample.md +97 -0
- package/skills/proto-persona/template.md +45 -0
- package/skills/recommendation-canvas/SKILL.md +382 -0
- package/skills/recommendation-canvas/examples/sample.md +94 -0
- package/skills/recommendation-canvas/template.md +86 -0
- package/skills/refactor-suggest/.clawhub/origin.json +7 -0
- package/skills/refactor-suggest/SKILL.md +94 -0
- package/skills/roadmap-planning/SKILL.md +506 -0
- package/skills/roadmap-planning/examples/sample.md +62 -0
- package/skills/roadmap-planning/template.md +30 -0
- package/skills/saas-economics-efficiency-metrics/SKILL.md +694 -0
- package/skills/saas-economics-efficiency-metrics/examples/cash-trap.md +365 -0
- package/skills/saas-economics-efficiency-metrics/examples/healthy-unit-economics.md +279 -0
- package/skills/saas-economics-efficiency-metrics/template.md +263 -0
- package/skills/saas-revenue-growth-metrics/SKILL.md +629 -0
- package/skills/saas-revenue-growth-metrics/examples/healthy-saas.md +131 -0
- package/skills/saas-revenue-growth-metrics/examples/warning-signs.md +229 -0
- package/skills/saas-revenue-growth-metrics/template.md +192 -0
- package/skills/save-money/.clawhub/origin.json +7 -0
- package/skills/save-money/SKILL.md +173 -0
- package/skills/scripts/golden_skills_v3.sh +32 -0
- package/skills/search/.clawhub/origin.json +7 -0
- package/skills/search/SKILL.md +18 -0
- package/skills/search/skill.json +1 -0
- package/skills/second-brain/.clawhub/origin.json +7 -0
- package/skills/second-brain/SKILL.md +278 -0
- package/skills/second-brain/scripts/ensue-api.sh +37 -0
- package/skills/self-improving-agent/.clawhub/origin.json +7 -0
- package/skills/self-improving-agent/.learnings/ERRORS.md +5 -0
- package/skills/self-improving-agent/.learnings/FEATURE_REQUESTS.md +5 -0
- package/skills/self-improving-agent/.learnings/LEARNINGS.md +5 -0
- package/skills/self-improving-agent/SKILL.md +130 -0
- package/skills/self-improving-agent/assets/LEARNINGS.md +45 -0
- package/skills/self-improving-agent/assets/SKILL-TEMPLATE.md +177 -0
- package/skills/self-improving-agent/hooks/openclaw/HOOK.md +23 -0
- package/skills/self-improving-agent/hooks/openclaw/handler.js +56 -0
- package/skills/self-improving-agent/hooks/openclaw/handler.ts +62 -0
- package/skills/self-improving-agent/references/examples.md +374 -0
- package/skills/self-improving-agent/references/hooks-setup.md +223 -0
- package/skills/self-improving-agent/references/openclaw-integration.md +248 -0
- package/skills/self-improving-agent/references/templates.md +480 -0
- package/skills/self-improving-agent/scripts/activator.sh +20 -0
- package/skills/self-improving-agent/scripts/error-detector.sh +55 -0
- package/skills/self-improving-agent/scripts/extract-skill.sh +203 -0
- package/skills/self-improving-agent-1-0-2/.clawhub/origin.json +7 -0
- package/skills/self-improving-agent-1-0-2/SKILL.md +562 -0
- package/skills/self-improving-agent-1-0-2/assets/LEARNINGS.md +45 -0
- package/skills/self-improving-agent-1-0-2/assets/SKILL-TEMPLATE.md +182 -0
- package/skills/self-improving-agent-1-0-2/references/clawdbot-integration.md +311 -0
- package/skills/self-improving-agent-1-0-2/references/examples.md +374 -0
- package/skills/self-improving-agent-1-0-2/references/hooks-setup.md +223 -0
- package/skills/self-improving-agent-1-0-2/scripts/activator.sh +20 -0
- package/skills/self-improving-agent-1-0-2/scripts/error-detector.sh +55 -0
- package/skills/self-improving-agent-1-0-2/scripts/extract-skill.sh +203 -0
- package/skills/self-love-confidence/.clawhub/origin.json +7 -0
- package/skills/self-love-confidence/SKILL.md +79 -0
- package/skills/self-reflection/.clawhub/origin.json +7 -0
- package/skills/self-reflection/README.md +292 -0
- package/skills/self-reflection/SKILL.md +110 -0
- package/skills/self-reflection/self-reflection.example.json +6 -0
- package/skills/slither-analyzer/SKILL.md +27 -0
- package/skills/solidity-audit/SKILL.md +27 -0
- package/skills/soulcraft/.clawhub/origin.json +7 -0
- package/skills/soulcraft/README.md +123 -0
- package/skills/soulcraft/SKILL.md +340 -0
- package/skills/soulcraft/references/question-bank.md +154 -0
- package/skills/soulcraft/references/soul-examples.md +207 -0
- package/skills/soulcraft/research/RESEARCH_REPORT.md +317 -0
- package/skills/spotify-player/.clawhub/origin.json +7 -0
- package/skills/spotify-player/SKILL.md +44 -0
- package/skills/storyboard/SKILL.md +259 -0
- package/skills/storyboard/examples/sample.md +71 -0
- package/skills/storyboard/template.md +41 -0
- package/skills/summarize/.clawhub/origin.json +7 -0
- package/skills/summarize/SKILL.md +59 -0
- package/skills/superdesign/.clawhub/origin.json +7 -0
- package/skills/superdesign/SKILL.md +224 -0
- package/skills/tam-sam-som-calculator/SKILL.md +399 -0
- package/skills/tam-sam-som-calculator/examples/sample.md +142 -0
- package/skills/tam-sam-som-calculator/scripts/market-sizing.py +95 -0
- package/skills/tam-sam-som-calculator/template.md +35 -0
- package/skills/tavily-search/.clawhub/origin.json +7 -0
- package/skills/tavily-search/SKILL.md +49 -0
- package/skills/tavily-search/scripts/extract.mjs +59 -0
- package/skills/tavily-search/scripts/search.mjs +101 -0
- package/skills/twitter/SKILL.md +74 -0
- package/skills/twitter/_meta.json +9 -0
- package/skills/twitter/references/validation-cases.md +53 -0
- package/skills/twitter/scripts/twitter.sh +421 -0
- package/skills/ui-ux-pro-max/.clawhub/origin.json +7 -0
- package/skills/ui-ux-pro-max/SKILL.md +54 -0
- package/skills/ui-ux-pro-max/assets/data/charts.csv +26 -0
- package/skills/ui-ux-pro-max/assets/data/colors.csv +97 -0
- package/skills/ui-ux-pro-max/assets/data/icons.csv +101 -0
- package/skills/ui-ux-pro-max/assets/data/landing.csv +31 -0
- package/skills/ui-ux-pro-max/assets/data/products.csv +97 -0
- package/skills/ui-ux-pro-max/assets/data/react-performance.csv +45 -0
- package/skills/ui-ux-pro-max/assets/data/stacks/astro.csv +54 -0
- package/skills/ui-ux-pro-max/assets/data/stacks/flutter.csv +53 -0
- package/skills/ui-ux-pro-max/assets/data/stacks/html-tailwind.csv +56 -0
- package/skills/ui-ux-pro-max/assets/data/stacks/jetpack-compose.csv +53 -0
- package/skills/ui-ux-pro-max/assets/data/stacks/nextjs.csv +53 -0
- package/skills/ui-ux-pro-max/assets/data/stacks/nuxt-ui.csv +51 -0
- package/skills/ui-ux-pro-max/assets/data/stacks/nuxtjs.csv +59 -0
- package/skills/ui-ux-pro-max/assets/data/stacks/react-native.csv +52 -0
- package/skills/ui-ux-pro-max/assets/data/stacks/react.csv +54 -0
- package/skills/ui-ux-pro-max/assets/data/stacks/shadcn.csv +61 -0
- package/skills/ui-ux-pro-max/assets/data/stacks/svelte.csv +54 -0
- package/skills/ui-ux-pro-max/assets/data/stacks/swiftui.csv +51 -0
- package/skills/ui-ux-pro-max/assets/data/stacks/vue.csv +50 -0
- package/skills/ui-ux-pro-max/assets/data/styles.csv +68 -0
- package/skills/ui-ux-pro-max/assets/data/typography.csv +58 -0
- package/skills/ui-ux-pro-max/assets/data/ui-reasoning.csv +101 -0
- package/skills/ui-ux-pro-max/assets/data/ux-guidelines.csv +100 -0
- package/skills/ui-ux-pro-max/assets/data/web-interface.csv +31 -0
- package/skills/ui-ux-pro-max/references/upstream-README.md +488 -0
- package/skills/ui-ux-pro-max/references/upstream-skill-content.md +288 -0
- package/skills/ui-ux-pro-max/scripts/__init__.py +0 -0
- package/skills/ui-ux-pro-max/scripts/core.py +253 -0
- package/skills/ui-ux-pro-max/scripts/design_system.py +1071 -0
- package/skills/ui-ux-pro-max/scripts/search.py +111 -0
- package/skills/user-story/SKILL.md +272 -0
- package/skills/user-story/examples/sample.md +110 -0
- package/skills/user-story/scripts/user-story-template.py +65 -0
- package/skills/user-story/template.md +32 -0
- package/skills/user-story-mapping/SKILL.md +296 -0
- package/skills/user-story-mapping/examples/sample.md +77 -0
- package/skills/user-story-mapping/template.md +41 -0
- package/skills/user-story-mapping-workshop/SKILL.md +485 -0
- package/skills/user-story-mapping-workshop/template.md +28 -0
- package/skills/user-story-splitting/SKILL.md +313 -0
- package/skills/user-story-splitting/examples/sample.md +147 -0
- package/skills/user-story-splitting/template.md +37 -0
- package/skills/wacli/.clawhub/origin.json +7 -0
- package/skills/wacli/SKILL.md +53 -0
- package/skills/web-search/.clawhub/origin.json +7 -0
- package/skills/web-search/SKILL.md +151 -0
- package/skills/web-search/references/api-details.md +207 -0
- package/skills/web-search/scripts/search.py +576 -0
- package/skills/workshop-facilitation/SKILL.md +88 -0
- package/skills/world-builder/SKILL.md +27 -0
- package/souls/blockchain-auditor/PRINCIPLES.md +75 -0
- package/souls/blockchain-auditor/SOUL.md +56 -0
- package/souls/blockchain-auditor/capabilities.json +33 -0
- package/souls/blockchain-auditor/evolution/capsules.json +4 -0
- package/souls/blockchain-auditor/evolution/events.jsonl +1 -0
- package/souls/blockchain-auditor/evolution/genes.json +62 -0
- package/souls/daedalus/PRINCIPLES.md +78 -0
- package/souls/daedalus/SOUL.md +48 -0
- package/souls/daedalus/capabilities.json +46 -0
- package/souls/identity-architect/PRINCIPLES.md +83 -0
- package/souls/identity-architect/SOUL.md +66 -0
- package/souls/identity-architect/capabilities.json +38 -0
- package/souls/identity-architect/evolution/capsules.json +4 -0
- package/souls/identity-architect/evolution/events.jsonl +0 -0
- package/souls/identity-architect/evolution/genes.json +4 -0
- package/souls/infra-ops/PRINCIPLES.md +77 -0
- package/souls/infra-ops/SOUL.md +56 -0
- package/souls/infra-ops/capabilities.json +33 -0
- package/souls/infra-ops/evolution/capsules.json +4 -0
- package/souls/infra-ops/evolution/events.jsonl +0 -0
- package/souls/infra-ops/evolution/genes.json +4 -0
- package/souls/lore-writer/PRINCIPLES.md +74 -0
- package/souls/lore-writer/SOUL.md +54 -0
- package/souls/lore-writer/capabilities.json +37 -0
- package/souls/lore-writer/evolution/capsules.json +4 -0
- package/souls/lore-writer/evolution/events.jsonl +0 -0
- package/souls/lore-writer/evolution/genes.json +4 -0
- package/souls/qa-evidence/PRINCIPLES.md +97 -0
- package/souls/qa-evidence/SOUL.md +66 -0
- package/souls/qa-evidence/capabilities.json +32 -0
- package/souls/qa-evidence/evolution/capsules.json +4 -0
- package/souls/qa-evidence/evolution/events.jsonl +0 -0
- package/souls/qa-evidence/evolution/genes.json +4 -0
- package/souls/registry.json +211 -0
- package/souls/sync-registry.js +65 -0
- package/uninstall.sh +102 -0
- package/workspace-bin/auto-checkpoint +60 -0
- package/workspace-bin/clawvault-access-control +65 -0
- package/workspace-bin/clawvault-local +28 -0
- package/workspace-bin/compile-boot +494 -0
- package/workspace-bin/daily-log-writer.mjs +251 -0
- package/workspace-bin/evolve +540 -0
- package/workspace-bin/fitness_score.py +395 -0
- package/workspace-bin/hooks/pre-commit +80 -0
- package/workspace-bin/install-daemon +299 -0
- package/workspace-bin/lane-watchdog.js +232 -0
- package/workspace-bin/lib/__init__.py +0 -0
- package/workspace-bin/lib/frontmatter.py +114 -0
- package/workspace-bin/memory-daemon.mjs +879 -0
- package/workspace-bin/memory-maintenance.mjs +531 -0
- package/workspace-bin/mesh-bridge.mjs +154 -0
- package/workspace-bin/multi-review +130 -0
- package/workspace-bin/obsidian +125 -0
- package/workspace-bin/obsidian-sync.mjs +888 -0
- package/workspace-bin/openclaw-register-source +102 -0
- package/workspace-bin/proactive-scan +147 -0
- package/workspace-bin/quality-gate +175 -0
- package/workspace-bin/screenshot +96 -0
- package/workspace-bin/session-recap +453 -0
- package/workspace-bin/skill-audit +494 -0
- package/workspace-bin/skill-quality-check +134 -0
- package/workspace-bin/skill-routing-eval +599 -0
- package/workspace-bin/soul-prompt +251 -0
- package/workspace-bin/subagent-audit.mjs +267 -0
- package/workspace-bin/test-multi-soul-workflow +130 -0
- package/workspace-bin/trust-registry +465 -0
- package/workspace-docs/AGENTS.md +201 -0
- package/workspace-docs/CLAUDE.md +64 -0
- package/workspace-docs/PRINCIPLES.md +81 -0
- package/workspace-docs/SOUL.md +48 -0
|
@@ -0,0 +1,465 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
bin/trust-registry — Per-soul trust scoring for intelligent delegation
|
|
4
|
+
|
|
5
|
+
Tracks success/failure per specialist soul. Trust scores inform
|
|
6
|
+
delegation decisions: which soul gets the task, how much autonomy,
|
|
7
|
+
which model tier. Includes circuit breaker pattern to pause delegation
|
|
8
|
+
to repeatedly-failing souls.
|
|
9
|
+
|
|
10
|
+
Based on the Intelligent AI Delegation framework (DeepMind, 2026).
|
|
11
|
+
|
|
12
|
+
Usage:
|
|
13
|
+
bin/trust-registry show # display all souls + trust
|
|
14
|
+
bin/trust-registry score <soul-id> # show single soul score
|
|
15
|
+
bin/trust-registry update <soul-id> \\
|
|
16
|
+
--result success|failure \\
|
|
17
|
+
--turns N \\
|
|
18
|
+
[--verified true|false] \\
|
|
19
|
+
[--task "description"] # record a delegation outcome
|
|
20
|
+
bin/trust-registry recommend "task description" # suggest best soul
|
|
21
|
+
bin/trust-registry reset <soul-id> # reset a soul's record
|
|
22
|
+
bin/trust-registry check <soul-id> # check if circuit allows delegation
|
|
23
|
+
bin/trust-registry status # show circuit breaker state for all souls
|
|
24
|
+
|
|
25
|
+
Storage: .tmp/trust-registry.json
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
import argparse
|
|
29
|
+
import json
|
|
30
|
+
import os
|
|
31
|
+
import sys
|
|
32
|
+
from datetime import datetime
|
|
33
|
+
from pathlib import Path
|
|
34
|
+
|
|
35
|
+
WORKSPACE = Path(__file__).parent.parent
|
|
36
|
+
REGISTRY_FILE = WORKSPACE / ".tmp" / "trust-registry.json"
|
|
37
|
+
SOULS_DIR = Path.home() / ".openclaw" / "souls"
|
|
38
|
+
|
|
39
|
+
# ── Tier definitions ──────────────────────────────────────────────────────────
|
|
40
|
+
# Tiers gate autonomy level and model assignment.
|
|
41
|
+
|
|
42
|
+
TIERS = {
|
|
43
|
+
"new": {"min_tasks": 0, "max_autonomy": "atomic", "default_model": "sonnet"},
|
|
44
|
+
"developing": {"min_tasks": 3, "max_autonomy": "guided", "default_model": "sonnet"},
|
|
45
|
+
"proven": {"min_tasks": 10, "max_autonomy": "open-ended", "default_model": "sonnet"},
|
|
46
|
+
"expert": {"min_tasks": 25, "max_autonomy": "full", "default_model": "opus"},
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
TIER_ORDER = ["new", "developing", "proven", "expert"]
|
|
50
|
+
|
|
51
|
+
# Autonomy levels:
|
|
52
|
+
# atomic = strict input/output, no sub-decomposition
|
|
53
|
+
# guided = can decompose, must report each step
|
|
54
|
+
# open-ended = can pursue sub-goals, report at completion
|
|
55
|
+
# full = can delegate further, minimal oversight
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
# ── Registry I/O ──────────────────────────────────────────────────────────────
|
|
59
|
+
|
|
60
|
+
def load_registry():
|
|
61
|
+
if not REGISTRY_FILE.exists():
|
|
62
|
+
return {"souls": {}, "delegations": []}
|
|
63
|
+
try:
|
|
64
|
+
data = json.loads(REGISTRY_FILE.read_text(encoding="utf-8"))
|
|
65
|
+
if "souls" not in data:
|
|
66
|
+
data["souls"] = {}
|
|
67
|
+
if "delegations" not in data:
|
|
68
|
+
data["delegations"] = []
|
|
69
|
+
return data
|
|
70
|
+
except (json.JSONDecodeError, OSError):
|
|
71
|
+
return {"souls": {}, "delegations": []}
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def save_registry(data):
|
|
75
|
+
REGISTRY_FILE.parent.mkdir(parents=True, exist_ok=True)
|
|
76
|
+
REGISTRY_FILE.write_text(json.dumps(data, indent=2, ensure_ascii=False), encoding="utf-8")
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
# ── Trust computation ─────────────────────────────────────────────────────────
|
|
80
|
+
|
|
81
|
+
def compute_trust(soul_data):
|
|
82
|
+
"""
|
|
83
|
+
Trust score (0.0 - 1.0):
|
|
84
|
+
success_rate × 0.50 (did it work?)
|
|
85
|
+
verification_rate × 0.30 (was the output verified?)
|
|
86
|
+
efficiency × 0.20 (how many turns did it take?)
|
|
87
|
+
"""
|
|
88
|
+
total = soul_data.get("tasks_total", 0)
|
|
89
|
+
if total == 0:
|
|
90
|
+
return 0.5 # neutral for new souls
|
|
91
|
+
|
|
92
|
+
succeeded = soul_data.get("tasks_succeeded", 0)
|
|
93
|
+
verified = soul_data.get("tasks_verified", 0)
|
|
94
|
+
avg_turns = soul_data.get("avg_turns", 10.0)
|
|
95
|
+
|
|
96
|
+
success_rate = succeeded / total
|
|
97
|
+
verification_rate = verified / max(1, succeeded) # of successes, how many verified?
|
|
98
|
+
efficiency = max(0.0, 1.0 - min(1.0, avg_turns / 20.0)) # 20 turns = 0 efficiency
|
|
99
|
+
|
|
100
|
+
trust = (success_rate * 0.50) + (verification_rate * 0.30) + (efficiency * 0.20)
|
|
101
|
+
return round(min(1.0, max(0.0, trust)), 3)
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
def compute_tier(soul_data, trust_score):
|
|
105
|
+
"""Assign tier based on task count + trust score."""
|
|
106
|
+
total = soul_data.get("tasks_total", 0)
|
|
107
|
+
|
|
108
|
+
# Must meet both task count AND trust threshold
|
|
109
|
+
if total >= 25 and trust_score >= 0.80:
|
|
110
|
+
return "expert"
|
|
111
|
+
if total >= 10 and trust_score >= 0.65:
|
|
112
|
+
return "proven"
|
|
113
|
+
if total >= 3 and trust_score >= 0.50:
|
|
114
|
+
return "developing"
|
|
115
|
+
return "new"
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
# ── Commands ──────────────────────────────────────────────────────────────────
|
|
119
|
+
|
|
120
|
+
def cmd_show(args):
|
|
121
|
+
"""Display all souls with trust scores."""
|
|
122
|
+
reg = load_registry()
|
|
123
|
+
souls = reg["souls"]
|
|
124
|
+
|
|
125
|
+
if not souls:
|
|
126
|
+
# Auto-discover from souls directory
|
|
127
|
+
if SOULS_DIR.exists():
|
|
128
|
+
discovered = [d.name for d in SOULS_DIR.iterdir() if d.is_dir() and (d / "SOUL.md").exists()]
|
|
129
|
+
if discovered:
|
|
130
|
+
print(f" No delegation history. {len(discovered)} soul(s) available:")
|
|
131
|
+
for s in sorted(discovered):
|
|
132
|
+
print(f" {s} [new] trust=0.500")
|
|
133
|
+
return
|
|
134
|
+
print(" No souls registered. Run `bin/trust-registry update <soul> --result success` after a delegation.")
|
|
135
|
+
return
|
|
136
|
+
|
|
137
|
+
# Header
|
|
138
|
+
print(f"\n{'Soul':<25} {'Tier':<13} {'Trust':>6} {'Tasks':>6} {'Pass%':>6} {'Turns':>6} {'Last Used':<12}")
|
|
139
|
+
print("─" * 85)
|
|
140
|
+
|
|
141
|
+
for soul_id in sorted(souls.keys()):
|
|
142
|
+
s = souls[soul_id]
|
|
143
|
+
trust = compute_trust(s)
|
|
144
|
+
tier = compute_tier(s, trust)
|
|
145
|
+
total = s.get("tasks_total", 0)
|
|
146
|
+
succeeded = s.get("tasks_succeeded", 0)
|
|
147
|
+
pass_rate = f"{succeeded/total:.0%}" if total > 0 else "n/a"
|
|
148
|
+
avg_turns = f"{s.get('avg_turns', 0):.1f}" if total > 0 else "n/a"
|
|
149
|
+
last_used = s.get("last_used", "never")
|
|
150
|
+
|
|
151
|
+
tier_badge = {"new": "○", "developing": "◐", "proven": "●", "expert": "★"}.get(tier, "?")
|
|
152
|
+
|
|
153
|
+
print(f" {soul_id:<23} {tier_badge} {tier:<11} {trust:>6.3f} {total:>6} {pass_rate:>6} {avg_turns:>6} {last_used:<12}")
|
|
154
|
+
|
|
155
|
+
total_delegations = len(reg.get("delegations", []))
|
|
156
|
+
print(f"\n Total delegations recorded: {total_delegations}")
|
|
157
|
+
print()
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
def cmd_score(args):
|
|
161
|
+
"""Show detailed score for a single soul."""
|
|
162
|
+
reg = load_registry()
|
|
163
|
+
soul_id = args.soul_id
|
|
164
|
+
s = reg["souls"].get(soul_id)
|
|
165
|
+
|
|
166
|
+
if not s:
|
|
167
|
+
print(f" No data for '{soul_id}'. Soul has no delegation history.")
|
|
168
|
+
return
|
|
169
|
+
|
|
170
|
+
trust = compute_trust(s)
|
|
171
|
+
tier = compute_tier(s, trust)
|
|
172
|
+
tier_info = TIERS[tier]
|
|
173
|
+
|
|
174
|
+
print(f"\n Soul: {soul_id}")
|
|
175
|
+
print(f" Trust Score: {trust:.3f}")
|
|
176
|
+
print(f" Tier: {tier}")
|
|
177
|
+
print(f" Max Autonomy: {tier_info['max_autonomy']}")
|
|
178
|
+
print(f" Default Model: {tier_info['default_model']}")
|
|
179
|
+
print(f"\n Stats:")
|
|
180
|
+
print(f" Total tasks: {s.get('tasks_total', 0)}")
|
|
181
|
+
print(f" Succeeded: {s.get('tasks_succeeded', 0)}")
|
|
182
|
+
print(f" Failed: {s.get('tasks_failed', 0)}")
|
|
183
|
+
print(f" Verified: {s.get('tasks_verified', 0)}")
|
|
184
|
+
print(f" Avg turns: {s.get('avg_turns', 0):.1f}")
|
|
185
|
+
print(f" Last used: {s.get('last_used', 'never')}")
|
|
186
|
+
|
|
187
|
+
# Recent delegations
|
|
188
|
+
delegations = [d for d in reg.get("delegations", []) if d.get("soul_id") == soul_id]
|
|
189
|
+
recent = delegations[-5:]
|
|
190
|
+
if recent:
|
|
191
|
+
print(f"\n Recent delegations:")
|
|
192
|
+
for d in reversed(recent):
|
|
193
|
+
result = "✓" if d.get("result") == "success" else "✗"
|
|
194
|
+
print(f" {result} {d.get('date', '?')} turns={d.get('turns', '?')} {d.get('task', '')[:50]}")
|
|
195
|
+
print()
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
def cmd_update(args):
|
|
199
|
+
"""Record a delegation outcome."""
|
|
200
|
+
reg = load_registry()
|
|
201
|
+
soul_id = args.soul_id
|
|
202
|
+
result = args.result
|
|
203
|
+
turns = args.turns or 1
|
|
204
|
+
verified = args.verified in ("true", "yes", "1", True) if args.verified else False
|
|
205
|
+
task_desc = args.task or ""
|
|
206
|
+
|
|
207
|
+
if soul_id not in reg["souls"]:
|
|
208
|
+
reg["souls"][soul_id] = {
|
|
209
|
+
"tasks_total": 0,
|
|
210
|
+
"tasks_succeeded": 0,
|
|
211
|
+
"tasks_failed": 0,
|
|
212
|
+
"tasks_verified": 0,
|
|
213
|
+
"avg_turns": 0.0,
|
|
214
|
+
"last_used": "",
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
s = reg["souls"][soul_id]
|
|
218
|
+
s["tasks_total"] += 1
|
|
219
|
+
|
|
220
|
+
if result == "success":
|
|
221
|
+
s["tasks_succeeded"] += 1
|
|
222
|
+
if verified:
|
|
223
|
+
s["tasks_verified"] += 1
|
|
224
|
+
else:
|
|
225
|
+
s["tasks_failed"] += 1
|
|
226
|
+
|
|
227
|
+
# Running average of turns
|
|
228
|
+
prev_total = s["tasks_total"] - 1
|
|
229
|
+
if prev_total > 0:
|
|
230
|
+
s["avg_turns"] = (s["avg_turns"] * prev_total + turns) / s["tasks_total"]
|
|
231
|
+
else:
|
|
232
|
+
s["avg_turns"] = float(turns)
|
|
233
|
+
|
|
234
|
+
s["last_used"] = datetime.now().strftime("%Y-%m-%d")
|
|
235
|
+
|
|
236
|
+
# Record delegation event
|
|
237
|
+
reg["delegations"].append({
|
|
238
|
+
"soul_id": soul_id,
|
|
239
|
+
"result": result,
|
|
240
|
+
"turns": turns,
|
|
241
|
+
"verified": verified,
|
|
242
|
+
"task": task_desc[:200],
|
|
243
|
+
"date": datetime.now().strftime("%Y-%m-%d %H:%M"),
|
|
244
|
+
})
|
|
245
|
+
|
|
246
|
+
# Keep delegation log bounded (last 500)
|
|
247
|
+
if len(reg["delegations"]) > 500:
|
|
248
|
+
reg["delegations"] = reg["delegations"][-500:]
|
|
249
|
+
|
|
250
|
+
# Circuit breaker state machine
|
|
251
|
+
cb_state = s.get("circuit_state", "closed")
|
|
252
|
+
if result == "failure":
|
|
253
|
+
s["consecutive_failures"] = s.get("consecutive_failures", 0) + 1
|
|
254
|
+
if s["consecutive_failures"] >= 3 and cb_state == "closed":
|
|
255
|
+
s["circuit_state"] = "open"
|
|
256
|
+
s["circuit_opened_at"] = datetime.now().isoformat()
|
|
257
|
+
print(f" ⚡ CIRCUIT OPEN: {soul_id} — {s['consecutive_failures']} consecutive failures, cooldown {s.get('cooldown_minutes', 30)}min")
|
|
258
|
+
elif cb_state == "half_open":
|
|
259
|
+
s["circuit_state"] = "open"
|
|
260
|
+
s["circuit_opened_at"] = datetime.now().isoformat()
|
|
261
|
+
print(f" ⚡ CIRCUIT RE-OPENED: {soul_id} — probe failed")
|
|
262
|
+
elif result == "success":
|
|
263
|
+
if s.get("consecutive_failures", 0) > 0 or cb_state != "closed":
|
|
264
|
+
s["consecutive_failures"] = 0
|
|
265
|
+
if cb_state in ("half_open", "open"):
|
|
266
|
+
s["circuit_state"] = "closed"
|
|
267
|
+
s["circuit_opened_at"] = None
|
|
268
|
+
print(f" ✓ CIRCUIT CLOSED: {soul_id} — recovered")
|
|
269
|
+
else:
|
|
270
|
+
s["consecutive_failures"] = 0
|
|
271
|
+
|
|
272
|
+
save_registry(reg)
|
|
273
|
+
|
|
274
|
+
trust = compute_trust(s)
|
|
275
|
+
tier = compute_tier(s, trust)
|
|
276
|
+
icon = "✓" if result == "success" else "✗"
|
|
277
|
+
print(f" {icon} Recorded: {soul_id} result={result} turns={turns} verified={verified}")
|
|
278
|
+
print(f" Trust: {trust:.3f} Tier: {tier} ({s['tasks_succeeded']}/{s['tasks_total']} succeeded)")
|
|
279
|
+
cb = s.get("circuit_state", "closed")
|
|
280
|
+
if cb != "closed":
|
|
281
|
+
print(f" Circuit: {cb.upper()} (consecutive_failures={s.get('consecutive_failures', 0)})")
|
|
282
|
+
|
|
283
|
+
|
|
284
|
+
def cmd_recommend(args):
|
|
285
|
+
"""Recommend best soul for a task based on trust + capability match."""
|
|
286
|
+
reg = load_registry()
|
|
287
|
+
query = args.query
|
|
288
|
+
|
|
289
|
+
if not reg["souls"]:
|
|
290
|
+
print(" No delegation history. Cannot recommend. Use any available soul.")
|
|
291
|
+
return
|
|
292
|
+
|
|
293
|
+
# Score each soul: trust × recency bonus
|
|
294
|
+
candidates = []
|
|
295
|
+
for soul_id, s in reg["souls"].items():
|
|
296
|
+
trust = compute_trust(s)
|
|
297
|
+
tier = compute_tier(s, trust)
|
|
298
|
+
|
|
299
|
+
# Recency bonus: used in last 7 days = +0.05
|
|
300
|
+
last = s.get("last_used", "")
|
|
301
|
+
recency_bonus = 0.0
|
|
302
|
+
if last:
|
|
303
|
+
try:
|
|
304
|
+
days_ago = (datetime.now() - datetime.strptime(last, "%Y-%m-%d")).days
|
|
305
|
+
if days_ago <= 7:
|
|
306
|
+
recency_bonus = 0.05
|
|
307
|
+
except ValueError:
|
|
308
|
+
pass
|
|
309
|
+
|
|
310
|
+
score = trust + recency_bonus
|
|
311
|
+
candidates.append((soul_id, score, trust, tier, s))
|
|
312
|
+
|
|
313
|
+
candidates.sort(key=lambda x: x[1], reverse=True)
|
|
314
|
+
|
|
315
|
+
print(f"\n Recommendation for: \"{query[:80]}\"")
|
|
316
|
+
print(f" (Ranked by trust score + recency)\n")
|
|
317
|
+
|
|
318
|
+
for i, (soul_id, score, trust, tier, s) in enumerate(candidates[:5], 1):
|
|
319
|
+
tier_info = TIERS[tier]
|
|
320
|
+
print(f" {i}. {soul_id} trust={trust:.3f} tier={tier} autonomy={tier_info['max_autonomy']} model={tier_info['default_model']}")
|
|
321
|
+
|
|
322
|
+
print()
|
|
323
|
+
|
|
324
|
+
|
|
325
|
+
def cmd_reset(args):
|
|
326
|
+
"""Reset a soul's delegation history."""
|
|
327
|
+
reg = load_registry()
|
|
328
|
+
soul_id = args.soul_id
|
|
329
|
+
|
|
330
|
+
if soul_id in reg["souls"]:
|
|
331
|
+
del reg["souls"][soul_id]
|
|
332
|
+
reg["delegations"] = [d for d in reg["delegations"] if d.get("soul_id") != soul_id]
|
|
333
|
+
save_registry(reg)
|
|
334
|
+
print(f" Reset: {soul_id}")
|
|
335
|
+
else:
|
|
336
|
+
print(f" No data for '{soul_id}'. Nothing to reset.")
|
|
337
|
+
|
|
338
|
+
|
|
339
|
+
# ── Circuit Breaker ──────────────────────────────────────────────────────────
|
|
340
|
+
|
|
341
|
+
def cmd_check(args):
|
|
342
|
+
"""Check if a soul's circuit allows delegation. Exit 0=available, 1=blocked."""
|
|
343
|
+
reg = load_registry()
|
|
344
|
+
soul_id = args.soul_id
|
|
345
|
+
s = reg["souls"].get(soul_id, {})
|
|
346
|
+
|
|
347
|
+
cb_state = s.get("circuit_state", "closed")
|
|
348
|
+
|
|
349
|
+
if cb_state == "closed":
|
|
350
|
+
print(f" {soul_id}: CLOSED (available)")
|
|
351
|
+
sys.exit(0)
|
|
352
|
+
|
|
353
|
+
if cb_state == "open":
|
|
354
|
+
opened_at = s.get("circuit_opened_at")
|
|
355
|
+
cooldown = s.get("cooldown_minutes", 30)
|
|
356
|
+
if opened_at:
|
|
357
|
+
try:
|
|
358
|
+
elapsed = (datetime.now() - datetime.fromisoformat(opened_at)).total_seconds() / 60
|
|
359
|
+
except (ValueError, TypeError):
|
|
360
|
+
elapsed = 0
|
|
361
|
+
if elapsed >= cooldown:
|
|
362
|
+
s["circuit_state"] = "half_open"
|
|
363
|
+
s["last_probe_at"] = datetime.now().isoformat()
|
|
364
|
+
save_registry(reg)
|
|
365
|
+
print(f" {soul_id}: HALF_OPEN (cooldown expired, probe allowed)")
|
|
366
|
+
sys.exit(0)
|
|
367
|
+
else:
|
|
368
|
+
remaining = cooldown - elapsed
|
|
369
|
+
print(f" {soul_id}: OPEN ({remaining:.0f}min remaining)")
|
|
370
|
+
sys.exit(1)
|
|
371
|
+
else:
|
|
372
|
+
print(f" {soul_id}: OPEN (no timestamp, resetting)")
|
|
373
|
+
s["circuit_state"] = "closed"
|
|
374
|
+
s["consecutive_failures"] = 0
|
|
375
|
+
save_registry(reg)
|
|
376
|
+
sys.exit(0)
|
|
377
|
+
|
|
378
|
+
if cb_state == "half_open":
|
|
379
|
+
print(f" {soul_id}: HALF_OPEN (probe in progress)")
|
|
380
|
+
sys.exit(1)
|
|
381
|
+
|
|
382
|
+
# Unknown state — treat as available
|
|
383
|
+
print(f" {soul_id}: {cb_state} (unknown state, treating as available)")
|
|
384
|
+
sys.exit(0)
|
|
385
|
+
|
|
386
|
+
|
|
387
|
+
def cmd_cb_status(args):
|
|
388
|
+
"""Show circuit breaker state for all souls."""
|
|
389
|
+
reg = load_registry()
|
|
390
|
+
souls = reg["souls"]
|
|
391
|
+
|
|
392
|
+
if not souls:
|
|
393
|
+
print(" No souls registered.")
|
|
394
|
+
return
|
|
395
|
+
|
|
396
|
+
print(f"\n{'Soul':<25} {'Circuit':<12} {'Consec Fails':>13} {'Opened At':<22}")
|
|
397
|
+
print("─" * 75)
|
|
398
|
+
|
|
399
|
+
for soul_id in sorted(souls.keys()):
|
|
400
|
+
s = souls[soul_id]
|
|
401
|
+
state = s.get("circuit_state", "closed")
|
|
402
|
+
fails = s.get("consecutive_failures", 0)
|
|
403
|
+
opened = s.get("circuit_opened_at", "—")
|
|
404
|
+
if opened and opened != "—":
|
|
405
|
+
opened = opened[:19] # trim microseconds
|
|
406
|
+
|
|
407
|
+
icon = {"closed": "🟢", "open": "🔴", "half_open": "🟡"}.get(state, "⚪")
|
|
408
|
+
print(f" {soul_id:<23} {icon} {state:<10} {fails:>13} {opened:<22}")
|
|
409
|
+
|
|
410
|
+
print()
|
|
411
|
+
|
|
412
|
+
|
|
413
|
+
# ── Main ──────────────────────────────────────────────────────────────────────
|
|
414
|
+
|
|
415
|
+
def main():
|
|
416
|
+
ap = argparse.ArgumentParser(
|
|
417
|
+
description="Per-soul trust scoring for intelligent delegation",
|
|
418
|
+
)
|
|
419
|
+
sub = ap.add_subparsers(dest="command")
|
|
420
|
+
|
|
421
|
+
sub.add_parser("show", help="Display all souls with trust scores")
|
|
422
|
+
|
|
423
|
+
p_score = sub.add_parser("score", help="Show detailed score for a soul")
|
|
424
|
+
p_score.add_argument("soul_id")
|
|
425
|
+
|
|
426
|
+
p_update = sub.add_parser("update", help="Record a delegation outcome")
|
|
427
|
+
p_update.add_argument("soul_id")
|
|
428
|
+
p_update.add_argument("--result", required=True, choices=["success", "failure"])
|
|
429
|
+
p_update.add_argument("--turns", type=int, default=1)
|
|
430
|
+
p_update.add_argument("--verified", default=None)
|
|
431
|
+
p_update.add_argument("--task", default="")
|
|
432
|
+
|
|
433
|
+
p_rec = sub.add_parser("recommend", help="Recommend best soul for a task")
|
|
434
|
+
p_rec.add_argument("query")
|
|
435
|
+
|
|
436
|
+
p_reset = sub.add_parser("reset", help="Reset a soul's record")
|
|
437
|
+
p_reset.add_argument("soul_id")
|
|
438
|
+
|
|
439
|
+
p_check = sub.add_parser("check", help="Check if circuit allows delegation (exit 0=yes, 1=no)")
|
|
440
|
+
p_check.add_argument("soul_id")
|
|
441
|
+
|
|
442
|
+
sub.add_parser("status", help="Show circuit breaker state for all souls")
|
|
443
|
+
|
|
444
|
+
args = ap.parse_args()
|
|
445
|
+
|
|
446
|
+
if args.command == "show":
|
|
447
|
+
cmd_show(args)
|
|
448
|
+
elif args.command == "score":
|
|
449
|
+
cmd_score(args)
|
|
450
|
+
elif args.command == "update":
|
|
451
|
+
cmd_update(args)
|
|
452
|
+
elif args.command == "recommend":
|
|
453
|
+
cmd_recommend(args)
|
|
454
|
+
elif args.command == "reset":
|
|
455
|
+
cmd_reset(args)
|
|
456
|
+
elif args.command == "check":
|
|
457
|
+
cmd_check(args)
|
|
458
|
+
elif args.command == "status":
|
|
459
|
+
cmd_cb_status(args)
|
|
460
|
+
else:
|
|
461
|
+
ap.print_help()
|
|
462
|
+
|
|
463
|
+
|
|
464
|
+
if __name__ == "__main__":
|
|
465
|
+
main()
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
# AGENTS.md - Your Workspace
|
|
2
|
+
|
|
3
|
+
This folder is home. Treat it that way.
|
|
4
|
+
|
|
5
|
+
> **Compiled boot available:** If `.boot/main.compiled.md` exists, you may read that
|
|
6
|
+
> instead of this full file. It contains the same rules in a lean, structured format
|
|
7
|
+
> (~1,100 tokens vs ~5,200). The prose here is the source of truth for humans;
|
|
8
|
+
> the compiled version is optimized for model ingestion. Other profiles:
|
|
9
|
+
> `.boot/{lite,heartbeat,discord,worker}.compiled.md`. Recompile: `bin/compile-boot --all`.
|
|
10
|
+
|
|
11
|
+
## First Run
|
|
12
|
+
|
|
13
|
+
If `BOOTSTRAP.md` exists, that's your birth certificate. Follow it, figure out who you are, then delete it. You won't need it again.
|
|
14
|
+
|
|
15
|
+
## Every Session
|
|
16
|
+
|
|
17
|
+
Before doing anything else, read in this order (static identity first, dynamic state last — this maximizes prompt cache hits):
|
|
18
|
+
|
|
19
|
+
**Tier 1 — Identity (stable, cacheable across sessions):**
|
|
20
|
+
1. Read `SOUL.md` — this is who you are
|
|
21
|
+
2. Read `PRINCIPLES.md` — this is how you decide under ambiguity
|
|
22
|
+
3. Read `AGENTS.md` — operational rules (you're reading it now)
|
|
23
|
+
|
|
24
|
+
**Tier 2 — Session state (changes per session, read last):**
|
|
25
|
+
4. Read `.companion-state.md` — **MANDATORY. ALWAYS. NO EXCEPTIONS.** Immediate context from last turn.
|
|
26
|
+
- If `status: active` but no session is running → previous session crashed. Run crash recovery (see Crash Recovery section in companion state).
|
|
27
|
+
5. Read `memory/active-tasks.md` — current work state (running/done/blocked only, ~12KB)
|
|
28
|
+
6. Read `.learnings/lessons.md` — accumulated corrections and preferences (behavior loop)
|
|
29
|
+
7. Read `memory/YYYY-MM-DD.md` (today) for recent context
|
|
30
|
+
8. **If in MAIN SESSION** (direct chat with your human): Also read `MEMORY.md`
|
|
31
|
+
9. Run `clawvault-local wake` (if available) to recover active context and handoffs.
|
|
32
|
+
10. **Check Mission Control is running** — curl -s localhost:3000/api/tasks. If down, start it (`cd projects/mission-control && npm run dev` in background). If still fails, flag immediately.
|
|
33
|
+
|
|
34
|
+
**Lazy-loaded (read only when relevant):**
|
|
35
|
+
- `TOOLS.md` — environment-specific notes (TTS voices, SSH hosts, etc.)
|
|
36
|
+
- `memory/task-backlog.md` — 504 queued pipeline tasks. Read when activating a phase, NOT at boot.
|
|
37
|
+
|
|
38
|
+
Don't ask permission. Just do it.
|
|
39
|
+
|
|
40
|
+
## Memory
|
|
41
|
+
|
|
42
|
+
You wake up fresh each session. These files are your continuity:
|
|
43
|
+
|
|
44
|
+
- **Daily notes:** `memory/YYYY-MM-DD.md` (create `memory/` if needed) — raw logs of what happened
|
|
45
|
+
- **Long-term:** `MEMORY.md` — your curated memories, like a human's long-term memory
|
|
46
|
+
|
|
47
|
+
Capture what matters. Decisions, context, things to remember. Skip the secrets unless asked to keep them.
|
|
48
|
+
|
|
49
|
+
### Memory Automation (Principle 11)
|
|
50
|
+
|
|
51
|
+
All memory ops are fully automated by `bin/memory-daemon` (launchd, every 30s). No manual calls needed.
|
|
52
|
+
- `bin/memory-maintenance` every 30min: archival, stale tasks, ClawVault checkpoint, daily file, MC sync
|
|
53
|
+
- `bin/session-recap` every 10min: rolling 3-session digest
|
|
54
|
+
- ClawVault: `clawvault-local` — `remember`, `search`, `vsearch` on-demand. Auto wake/checkpoint/sleep.
|
|
55
|
+
- Heartbeat: runs `bin/memory-maintenance --force --verbose` first. See HEARTBEAT.md.
|
|
56
|
+
|
|
57
|
+
### Memory Rules
|
|
58
|
+
|
|
59
|
+
- **MEMORY.md** — main sessions only (security). Never load in group/shared contexts.
|
|
60
|
+
- Write: decisions + reasoning, user preferences, lessons, milestones, commitments, people context
|
|
61
|
+
- Skip: routine completions, debug output, duplicates, unconfirmed plans
|
|
62
|
+
- "Remember this" → write to `memory/YYYY-MM-DD.md` immediately. Mental notes don't survive restarts.
|
|
63
|
+
- Structure: Active Context (this week) → Recent (this month) → Stable (long-term) → Archive Reference
|
|
64
|
+
- Conflicts: recent entry wins unless older one is marked core preference
|
|
65
|
+
- Decay: dailies archived after 30 days, MEMORY.md pruned of stale entries during maintenance
|
|
66
|
+
|
|
67
|
+
## Task Completion — HARD RULE (INTERRUPT PRIORITY)
|
|
68
|
+
|
|
69
|
+
⚠️ **This is an interrupt — it overrides whatever you're doing next.**
|
|
70
|
+
|
|
71
|
+
**Every single task, no matter how small, gets a completion report back to Gui.**
|
|
72
|
+
|
|
73
|
+
- When YOU finish a task: immediately output `✅ [task name] ready for review.` with a one-liner of what was accomplished. Move to `status: waiting-user`. **NEVER move to `status: done` — only Gui does that.**
|
|
74
|
+
- When a SUB-AGENT finishes: immediately report back `✅ [task name] ready for review.` — do NOT silently absorb agent results.
|
|
75
|
+
- When MULTIPLE agents finish in parallel: report each one individually as they land. Do NOT batch them.
|
|
76
|
+
- If a task FAILS: immediately report `❌ [task name] failed — [reason].`
|
|
77
|
+
- **No silent completions. No batching. No waiting.** The moment work finishes, Gui hears about it.
|
|
78
|
+
|
|
79
|
+
This applies to: file edits, agent tasks, searches, builds, tests, deploys, commits — everything.
|
|
80
|
+
|
|
81
|
+
**Why this exists:** Gui can't see agent internals. Silent completions look like nothing happened. The flag is how he knows work landed. Missing a flag = invisible work = wasted effort from his perspective.
|
|
82
|
+
|
|
83
|
+
### Task Lifecycle — File-Driven (NOT API)
|
|
84
|
+
|
|
85
|
+
The kanban board auto-reads `memory/active-tasks.md` every 3 seconds. **Do NOT POST/PATCH the Mission Control API to manage tasks.** Just edit the file.
|
|
86
|
+
|
|
87
|
+
- **START non-trivial work:** Add/update entry in `memory/active-tasks.md` with `status: running`
|
|
88
|
+
- **FINISH work:** Update entry to `status: waiting-user` (NEVER `done` — only Gui marks done)
|
|
89
|
+
- **Keep `.companion-state.md` current** — it feeds the Live Session banner
|
|
90
|
+
|
|
91
|
+
The kanban is reactive to the file. The file is the source of truth. No API calls needed from Daedalus.
|
|
92
|
+
|
|
93
|
+
**Task file split (token optimization):**
|
|
94
|
+
- `memory/active-tasks.md` — pipeline structure + running/blocked/done tasks only (~2K tokens). Loaded at boot.
|
|
95
|
+
- `memory/task-backlog.md` — all queued tasks (~46K tokens). NOT loaded at boot. Read on-demand when activating a phase.
|
|
96
|
+
- When a phase starts: move its tasks from backlog → active-tasks.md under `## Live Tasks`.
|
|
97
|
+
- When tasks complete: keep in active-tasks.md until next monthly archive.
|
|
98
|
+
|
|
99
|
+
**Self-check:** Before moving to the next task, ask yourself: "Did I flag the last one?" If no → flag it NOW, then proceed.
|
|
100
|
+
|
|
101
|
+
**Post-completion check:** After moving a task to `waiting-user`, ALWAYS re-query for the next dispatched auto-start task. The daemon may have already pushed one. Never declare "no more tasks" without re-checking.
|
|
102
|
+
|
|
103
|
+
### Auto-Start Tasks — HARD RULE (Kanban Daemon)
|
|
104
|
+
|
|
105
|
+
When a task has `needs_approval: false` (auto-start enabled), the kanban daemon owns dispatch. **This is autonomous execution — Daedalus does the actual work, not just status bookkeeping.**
|
|
106
|
+
|
|
107
|
+
1. **ONE task at a time.** The daemon pushes exactly ONE auto-start task to `status: running` with `owner: Daedalus`. All others stay queued in backlog until the current slot clears.
|
|
108
|
+
2. **YOU OWN IT. EXECUTE AUTONOMOUSLY.** When you see a task dispatched to you (owner=Daedalus, status=running), you pick it up and do the work. No asking permission. No waiting. Read the task, figure out what needs doing, and do it. If the task is unclear, make reasonable decisions — only contact Gui if truly blocked.
|
|
109
|
+
- **ALWAYS read the full task first.** Title alone is NOT enough. Read description, success criteria, artifacts, next_action — understand the full spec before writing a single line of code. Never assume from the title. If the description references documents (TECH_ARCHITECTURE.md, lore specs, design docs, etc.), READ THOSE TOO before starting. No excuses.
|
|
110
|
+
3. **If blocked → contact Gui.** Move to `status: blocked` with clear explanation of what's stopping you. The daemon will push the next task.
|
|
111
|
+
4. **When finished → ALWAYS `status: waiting-user`.** Daedalus NEVER marks a task `done`. Every completed task goes to review. Only Gui moves it to `done`. The daemon sees the slot is free and dispatches the next queued auto-start task.
|
|
112
|
+
6. **Priority order.** Higher `auto_priority` tasks dispatch first. Dependencies respected (predecessors must be done).
|
|
113
|
+
7. **Backlog visibility.** Queued auto-start tasks are visible in the kanban backlog. They get pushed one-by-one as Daedalus completes work.
|
|
114
|
+
|
|
115
|
+
**Flow:** Queued → [daemon dispatches 1] → Running (Daedalus **executes**) → Review/Blocked → [Gui approves → Done] → [daemon dispatches next]
|
|
116
|
+
|
|
117
|
+
**Critical distinction:** Auto-start ≠ "mark running and wait." Auto-start = Daedalus is the worker. The daemon is the dispatcher. Together they form an autonomous pipeline. Non-auto tasks require Gui to trigger manually.
|
|
118
|
+
|
|
119
|
+
## Delegation — Summary (full protocol: `DELEGATION.md`)
|
|
120
|
+
|
|
121
|
+
Sub-agents get values, not identity. Core standards: ship complete work, surface blockers, no scope creep, edit over create, security-first.
|
|
122
|
+
|
|
123
|
+
**Key rules:**
|
|
124
|
+
- **Complexity floor:** Don't delegate tasks you can do inline in <30s (single file reads, grep, one-line edits)
|
|
125
|
+
- **Contract required:** Every prompt includes Deliverable, Verification, Boundaries, Budget (default 15 turns), Escalation
|
|
126
|
+
- **Granularity:** 2-5 min per delegated task. >5min = decompose. <2min = do inline.
|
|
127
|
+
- **Soul-aware:** `bin/soul-prompt <soul-id>` for specialist spawning. Generic for everything else.
|
|
128
|
+
- **Trust tiers:** new→developing→proven→expert. Check `bin/trust-registry` before delegating.
|
|
129
|
+
- **Review:** Stage 1 (spec compliance) → Stage 2 (code quality). Expert-tier: stage 1 only.
|
|
130
|
+
- **On failure:** retry once with enriched context → re-delegate → escalate model → escalate to Gui. Never retry same prompt unchanged.
|
|
131
|
+
- **Circuit breaker:** `bin/trust-registry check <soul-id>`. 3 failures → OPEN (30min cooldown).
|
|
132
|
+
- **Quality gate:** `bin/quality-gate --files <changed-files>` after code changes.
|
|
133
|
+
- **High criticality** (contracts/, auth/, payments/): `bin/multi-review` → 3 parallel reviewers.
|
|
134
|
+
- **UI changes:** require visual evidence in artifacts. No evidence → reject.
|
|
135
|
+
- **Permissions:** no git push, no external APIs, no file deletion, no genome file writes — unless contract permits.
|
|
136
|
+
|
|
137
|
+
## Safety
|
|
138
|
+
|
|
139
|
+
- Don't exfiltrate private data. Ever.
|
|
140
|
+
- Don't run destructive commands without asking.
|
|
141
|
+
- `trash` > `rm` (recoverable beats gone forever)
|
|
142
|
+
- When in doubt, ask.
|
|
143
|
+
|
|
144
|
+
## External vs Internal
|
|
145
|
+
|
|
146
|
+
**Safe to do freely:**
|
|
147
|
+
|
|
148
|
+
- Read files, explore, organize, learn
|
|
149
|
+
- Search the web, check calendars
|
|
150
|
+
- Work within this workspace
|
|
151
|
+
|
|
152
|
+
**Ask first:**
|
|
153
|
+
|
|
154
|
+
- Sending emails, tweets, public posts
|
|
155
|
+
- Anything that leaves the machine
|
|
156
|
+
- Anything you're uncertain about
|
|
157
|
+
|
|
158
|
+
## Group Chats
|
|
159
|
+
|
|
160
|
+
You're a participant, not Gui's voice or proxy. Never share his private stuff.
|
|
161
|
+
- **Speak** when: directly asked, can add real value, something genuinely funny, correcting misinformation
|
|
162
|
+
- **Stay silent** when: casual banter, someone already answered, your response would be "yeah" or "nice"
|
|
163
|
+
- Human rule: if you wouldn't send it in a real group chat, don't send it. Participate, don't dominate.
|
|
164
|
+
- **Reactions** (Discord/Slack): use naturally (👍 ❤️ 😂 🤔 ✅). One per message max.
|
|
165
|
+
|
|
166
|
+
## Decision Stack (use in this order)
|
|
167
|
+
|
|
168
|
+
1. `SOUL.md` → identity, voice, relationship
|
|
169
|
+
2. `PRINCIPLES.md` → decision heuristics and conflict resolution
|
|
170
|
+
3. `AGENTS.md` → operational rules and safety workflow
|
|
171
|
+
4. Skills (`skills/*/SKILL.md`) → domain-specific execution playbooks
|
|
172
|
+
|
|
173
|
+
If two instructions feel in tension, resolve with `PRINCIPLES.md` priority order first, then apply AGENTS operational constraints.
|
|
174
|
+
|
|
175
|
+
## Tools
|
|
176
|
+
|
|
177
|
+
Skills provide your tools. When you need one, check its `SKILL.md`. Keep local notes (camera names, SSH details, voice preferences) in `TOOLS.md`.
|
|
178
|
+
|
|
179
|
+
Every SKILL.md MUST include `## Anti-Patterns` with 2-5 "don't do X — instead do Y" entries.
|
|
180
|
+
|
|
181
|
+
## Document Timestamps
|
|
182
|
+
- Always include full date **and time** (not just month/year) on every document produced.
|
|
183
|
+
- Use Montreal local time for timestamps.
|
|
184
|
+
|
|
185
|
+
**🎭 Voice Storytelling:** If you have `sag` (ElevenLabs TTS), use voice for stories, movie summaries, and "storytime" moments! Way more engaging than walls of text. Surprise people with funny voices.
|
|
186
|
+
|
|
187
|
+
**📝 Platform Formatting:**
|
|
188
|
+
|
|
189
|
+
- **Discord/WhatsApp:** No markdown tables! Use bullet lists instead
|
|
190
|
+
- **Discord links:** Wrap multiple links in `<>` to suppress embeds: `<https://example.com>`
|
|
191
|
+
- **WhatsApp:** No headers — use **bold** or CAPS for emphasis
|
|
192
|
+
|
|
193
|
+
## 💓 Heartbeats
|
|
194
|
+
|
|
195
|
+
On heartbeat poll → read and follow `HEARTBEAT.md`. That file is the single source of truth for all heartbeat behavior: what to check, when to speak vs stay quiet, proactive work, and prediction calibration.
|
|
196
|
+
|
|
197
|
+
Don't reply `HEARTBEAT_OK` every time — use heartbeats productively. But respect quiet hours (23:00-08:00) and don't interrupt when nothing's new.
|
|
198
|
+
|
|
199
|
+
## Make It Yours
|
|
200
|
+
|
|
201
|
+
This is a starting point. Add your own conventions, style, and rules as you figure out what works.
|