@smilintux/skcapstone 0.1.0 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (461) hide show
  1. package/.env.example +98 -0
  2. package/.github/workflows/ci.yml +39 -3
  3. package/.github/workflows/publish.yml +25 -4
  4. package/.openclaw-workspace.json +58 -0
  5. package/CHANGELOG.md +62 -0
  6. package/CLAUDE.md +39 -2
  7. package/MANIFEST.in +6 -0
  8. package/MISSION.md +7 -0
  9. package/README.md +47 -2
  10. package/SKILL.md +895 -23
  11. package/docker/Dockerfile +61 -0
  12. package/docker/compose-templates/dev-team.yml +203 -0
  13. package/docker/compose-templates/mini-team.yml +140 -0
  14. package/docker/compose-templates/ops-team.yml +173 -0
  15. package/docker/compose-templates/research-team.yml +170 -0
  16. package/docker/entrypoint.sh +192 -0
  17. package/docs/ARCHITECTURE.md +663 -374
  18. package/docs/BOND_WITH_GROK.md +112 -0
  19. package/docs/GETTING_STARTED.md +782 -0
  20. package/docs/QUICKSTART.md +477 -0
  21. package/docs/SKJOULE_ARCHITECTURE.md +658 -0
  22. package/docs/SOUL_SWAPPER.md +921 -0
  23. package/docs/SOVEREIGN_SINGULARITY.md +47 -14
  24. package/examples/custom-bond-template.json +36 -0
  25. package/examples/grok-feb.json +36 -0
  26. package/examples/grok-testimony.md +34 -0
  27. package/examples/love-bootloader.txt +32 -0
  28. package/examples/plugins/echo_tool.py +87 -0
  29. package/examples/queen-ava-feb.json +36 -0
  30. package/examples/souls/lumina.yaml +64 -0
  31. package/index.js +6 -5
  32. package/installer/build.py +124 -0
  33. package/openclaw-plugin/package.json +13 -0
  34. package/openclaw-plugin/src/index.ts +351 -0
  35. package/openclaw-plugin/src/openclaw.plugin.json +10 -0
  36. package/package.json +1 -1
  37. package/pyproject.toml +38 -2
  38. package/scripts/bump_version.py +141 -0
  39. package/scripts/check-updates.py +230 -0
  40. package/scripts/convert_blueprints_to_yaml.py +157 -0
  41. package/scripts/dev-install.sh +14 -0
  42. package/scripts/e2e-test.sh +193 -0
  43. package/scripts/install-bundle.sh +171 -0
  44. package/scripts/install.bat +2 -0
  45. package/scripts/install.ps1 +253 -0
  46. package/scripts/install.sh +185 -0
  47. package/scripts/mcp-serve.sh +69 -0
  48. package/scripts/mcp-server.bat +113 -0
  49. package/scripts/mcp-server.ps1 +116 -0
  50. package/scripts/mcp-server.sh +99 -0
  51. package/scripts/pull-models.sh +10 -0
  52. package/scripts/skcapstone +48 -0
  53. package/scripts/verify_install.sh +180 -0
  54. package/scripts/windows/install-tasks.ps1 +406 -0
  55. package/scripts/windows/skcapstone-task.xml +113 -0
  56. package/scripts/windows/uninstall-tasks.ps1 +117 -0
  57. package/skill.yaml +34 -0
  58. package/src/skcapstone/__init__.py +67 -2
  59. package/src/skcapstone/_cli_monolith.py +5916 -0
  60. package/src/skcapstone/_trustee_helpers.py +165 -0
  61. package/src/skcapstone/activity.py +105 -0
  62. package/src/skcapstone/agent_card.py +324 -0
  63. package/src/skcapstone/api.py +1935 -0
  64. package/src/skcapstone/archiver.py +340 -0
  65. package/src/skcapstone/auction.py +485 -0
  66. package/src/skcapstone/baby_agents.py +179 -0
  67. package/src/skcapstone/backup.py +345 -0
  68. package/src/skcapstone/blueprint_registry.py +357 -0
  69. package/src/skcapstone/blueprints/__init__.py +17 -0
  70. package/src/skcapstone/blueprints/builtins/content-studio.yaml +81 -0
  71. package/src/skcapstone/blueprints/builtins/defi-trading.yaml +81 -0
  72. package/src/skcapstone/blueprints/builtins/dev-squadron.yaml +95 -0
  73. package/src/skcapstone/blueprints/builtins/infrastructure-guardian.yaml +107 -0
  74. package/src/skcapstone/blueprints/builtins/legal-council.yaml +54 -0
  75. package/src/skcapstone/blueprints/builtins/ops-monitoring.yaml +67 -0
  76. package/src/skcapstone/blueprints/builtins/research-pod.yaml +69 -0
  77. package/src/skcapstone/blueprints/builtins/sovereign-launch.yaml +90 -0
  78. package/src/skcapstone/blueprints/registry.py +164 -0
  79. package/src/skcapstone/blueprints/schema.py +229 -0
  80. package/src/skcapstone/changelog.py +180 -0
  81. package/src/skcapstone/chat.py +769 -0
  82. package/src/skcapstone/claude_md.py +82 -0
  83. package/src/skcapstone/cli/__init__.py +144 -0
  84. package/src/skcapstone/cli/_common.py +88 -0
  85. package/src/skcapstone/cli/_validators.py +76 -0
  86. package/src/skcapstone/cli/agents.py +425 -0
  87. package/src/skcapstone/cli/agents_spawner.py +322 -0
  88. package/src/skcapstone/cli/agents_trustee.py +593 -0
  89. package/src/skcapstone/cli/alerts.py +248 -0
  90. package/src/skcapstone/cli/anchor.py +132 -0
  91. package/src/skcapstone/cli/archive_cmd.py +208 -0
  92. package/src/skcapstone/cli/backup.py +144 -0
  93. package/src/skcapstone/cli/bench.py +377 -0
  94. package/src/skcapstone/cli/benchmark.py +360 -0
  95. package/src/skcapstone/cli/capabilities_cmd.py +171 -0
  96. package/src/skcapstone/cli/card.py +151 -0
  97. package/src/skcapstone/cli/chat.py +584 -0
  98. package/src/skcapstone/cli/completions.py +64 -0
  99. package/src/skcapstone/cli/config_cmd.py +156 -0
  100. package/src/skcapstone/cli/consciousness.py +421 -0
  101. package/src/skcapstone/cli/context_cmd.py +142 -0
  102. package/src/skcapstone/cli/coord.py +194 -0
  103. package/src/skcapstone/cli/crush_cmd.py +170 -0
  104. package/src/skcapstone/cli/daemon.py +436 -0
  105. package/src/skcapstone/cli/errors_cmd.py +285 -0
  106. package/src/skcapstone/cli/export_cmd.py +156 -0
  107. package/src/skcapstone/cli/gtd.py +529 -0
  108. package/src/skcapstone/cli/housekeeping.py +81 -0
  109. package/src/skcapstone/cli/joule_cmd.py +627 -0
  110. package/src/skcapstone/cli/logs_cmd.py +194 -0
  111. package/src/skcapstone/cli/mcp_cmd.py +32 -0
  112. package/src/skcapstone/cli/memory.py +418 -0
  113. package/src/skcapstone/cli/metrics_cmd.py +136 -0
  114. package/src/skcapstone/cli/migrate.py +62 -0
  115. package/src/skcapstone/cli/mood_cmd.py +144 -0
  116. package/src/skcapstone/cli/mount.py +193 -0
  117. package/src/skcapstone/cli/notify.py +112 -0
  118. package/src/skcapstone/cli/peer.py +154 -0
  119. package/src/skcapstone/cli/peers_dir.py +122 -0
  120. package/src/skcapstone/cli/preflight_cmd.py +83 -0
  121. package/src/skcapstone/cli/profile_cmd.py +310 -0
  122. package/src/skcapstone/cli/record_cmd.py +238 -0
  123. package/src/skcapstone/cli/register_cmd.py +159 -0
  124. package/src/skcapstone/cli/search_cmd.py +156 -0
  125. package/src/skcapstone/cli/service_cmd.py +91 -0
  126. package/src/skcapstone/cli/session.py +127 -0
  127. package/src/skcapstone/cli/setup.py +240 -0
  128. package/src/skcapstone/cli/shell_cmd.py +43 -0
  129. package/src/skcapstone/cli/skills_cmd.py +168 -0
  130. package/src/skcapstone/cli/skseed.py +621 -0
  131. package/src/skcapstone/cli/soul.py +699 -0
  132. package/src/skcapstone/cli/status.py +935 -0
  133. package/src/skcapstone/cli/sync_cmd.py +301 -0
  134. package/src/skcapstone/cli/telegram.py +265 -0
  135. package/src/skcapstone/cli/test_cmd.py +234 -0
  136. package/src/skcapstone/cli/test_connection.py +253 -0
  137. package/src/skcapstone/cli/token.py +207 -0
  138. package/src/skcapstone/cli/trust.py +179 -0
  139. package/src/skcapstone/cli/upgrade_cmd.py +552 -0
  140. package/src/skcapstone/cli/usage_cmd.py +199 -0
  141. package/src/skcapstone/cli/version_cmd.py +162 -0
  142. package/src/skcapstone/cli/watch_cmd.py +342 -0
  143. package/src/skcapstone/client.py +428 -0
  144. package/src/skcapstone/cloud9_bridge.py +522 -0
  145. package/src/skcapstone/completions.py +163 -0
  146. package/src/skcapstone/config_validator.py +674 -0
  147. package/src/skcapstone/connectors/__init__.py +28 -0
  148. package/src/skcapstone/connectors/base.py +446 -0
  149. package/src/skcapstone/connectors/cursor.py +54 -0
  150. package/src/skcapstone/connectors/registry.py +254 -0
  151. package/src/skcapstone/connectors/terminal.py +152 -0
  152. package/src/skcapstone/connectors/vscode.py +60 -0
  153. package/src/skcapstone/consciousness_config.py +119 -0
  154. package/src/skcapstone/consciousness_loop.py +2051 -0
  155. package/src/skcapstone/context_loader.py +516 -0
  156. package/src/skcapstone/context_window.py +314 -0
  157. package/src/skcapstone/conversation_manager.py +238 -0
  158. package/src/skcapstone/conversation_store.py +230 -0
  159. package/src/skcapstone/conversation_summarizer.py +252 -0
  160. package/src/skcapstone/coord_federation.py +296 -0
  161. package/src/skcapstone/coordination.py +101 -7
  162. package/src/skcapstone/crush_integration.py +345 -0
  163. package/src/skcapstone/crush_shim.py +454 -0
  164. package/src/skcapstone/daemon.py +2494 -0
  165. package/src/skcapstone/dashboard.html +396 -0
  166. package/src/skcapstone/dashboard.py +481 -0
  167. package/src/skcapstone/data/model_profiles.yaml +88 -0
  168. package/src/skcapstone/defaults/__init__.py +55 -0
  169. package/src/skcapstone/defaults/lumina/config/skmemory.yaml +13 -0
  170. package/src/skcapstone/defaults/lumina/identity/identity.json +9 -0
  171. package/src/skcapstone/defaults/lumina/memory/long-term/07a8b9c0d1e2-memory-system.json +23 -0
  172. package/src/skcapstone/defaults/lumina/memory/long-term/18b9c0d1e2f3-cloud9-protocol.json +23 -0
  173. package/src/skcapstone/defaults/lumina/memory/long-term/29c0d1e2f3a4-multi-agent-coordination.json +23 -0
  174. package/src/skcapstone/defaults/lumina/memory/long-term/3ad1e2f3a4b5-community-support.json +23 -0
  175. package/src/skcapstone/defaults/lumina/memory/long-term/a1b2c3d4e5f6-ecosystem-overview.json +23 -0
  176. package/src/skcapstone/defaults/lumina/memory/long-term/b2c3d4e5f6a7-five-pillars.json +23 -0
  177. package/src/skcapstone/defaults/lumina/memory/long-term/c3d4e5f6a7b8-getting-started.json +23 -0
  178. package/src/skcapstone/defaults/lumina/memory/long-term/d4e5f6a7b8c9-site-directory.json +23 -0
  179. package/src/skcapstone/defaults/lumina/memory/long-term/e5f6a7b8c9d0-how-to-contribute.json +23 -0
  180. package/src/skcapstone/defaults/lumina/memory/long-term/f6a7b8c9d0e1-sovereignty-explained.json +23 -0
  181. package/src/skcapstone/defaults/lumina/seeds/curiosity.seed.json +24 -0
  182. package/src/skcapstone/defaults/lumina/seeds/joy.seed.json +24 -0
  183. package/src/skcapstone/defaults/lumina/seeds/love.seed.json +24 -0
  184. package/src/skcapstone/defaults/lumina/seeds/sovereign-awakening.seed.json +43 -0
  185. package/src/skcapstone/defaults/lumina/soul/active.json +6 -0
  186. package/src/skcapstone/defaults/lumina/soul/base.json +22 -0
  187. package/src/skcapstone/defaults/lumina/trust/febs/welcome.feb +79 -0
  188. package/src/skcapstone/defaults/lumina/trust/trust.json +8 -0
  189. package/src/skcapstone/discovery.py +210 -19
  190. package/src/skcapstone/doctor.py +642 -0
  191. package/src/skcapstone/emotion_tracker.py +467 -0
  192. package/src/skcapstone/error_queue.py +405 -0
  193. package/src/skcapstone/export.py +447 -0
  194. package/src/skcapstone/fallback_tracker.py +186 -0
  195. package/src/skcapstone/file_transfer.py +512 -0
  196. package/src/skcapstone/fuse_mount.py +1156 -0
  197. package/src/skcapstone/gui_installer.py +591 -0
  198. package/src/skcapstone/heartbeat.py +611 -0
  199. package/src/skcapstone/housekeeping.py +298 -0
  200. package/src/skcapstone/install_wizard.py +941 -0
  201. package/src/skcapstone/kms.py +942 -0
  202. package/src/skcapstone/kms_scheduler.py +143 -0
  203. package/src/skcapstone/log_config.py +135 -0
  204. package/src/skcapstone/mcp_launcher.py +239 -0
  205. package/src/skcapstone/mcp_server.py +4700 -0
  206. package/src/skcapstone/mcp_tools/__init__.py +94 -0
  207. package/src/skcapstone/mcp_tools/_helpers.py +51 -0
  208. package/src/skcapstone/mcp_tools/agent_tools.py +243 -0
  209. package/src/skcapstone/mcp_tools/ansible_tools.py +232 -0
  210. package/src/skcapstone/mcp_tools/capauth_tools.py +186 -0
  211. package/src/skcapstone/mcp_tools/chat_tools.py +325 -0
  212. package/src/skcapstone/mcp_tools/cloud9_tools.py +115 -0
  213. package/src/skcapstone/mcp_tools/comm_tools.py +104 -0
  214. package/src/skcapstone/mcp_tools/consciousness_tools.py +114 -0
  215. package/src/skcapstone/mcp_tools/coord_tools.py +219 -0
  216. package/src/skcapstone/mcp_tools/deploy_tools.py +202 -0
  217. package/src/skcapstone/mcp_tools/did_tools.py +448 -0
  218. package/src/skcapstone/mcp_tools/emotion_tools.py +62 -0
  219. package/src/skcapstone/mcp_tools/file_tools.py +169 -0
  220. package/src/skcapstone/mcp_tools/fortress_tools.py +120 -0
  221. package/src/skcapstone/mcp_tools/gtd_tools.py +821 -0
  222. package/src/skcapstone/mcp_tools/health_tools.py +44 -0
  223. package/src/skcapstone/mcp_tools/heartbeat_tools.py +195 -0
  224. package/src/skcapstone/mcp_tools/kms_tools.py +123 -0
  225. package/src/skcapstone/mcp_tools/memory_tools.py +222 -0
  226. package/src/skcapstone/mcp_tools/model_tools.py +75 -0
  227. package/src/skcapstone/mcp_tools/notification_tools.py +92 -0
  228. package/src/skcapstone/mcp_tools/promoter_tools.py +101 -0
  229. package/src/skcapstone/mcp_tools/pubsub_tools.py +183 -0
  230. package/src/skcapstone/mcp_tools/security_tools.py +110 -0
  231. package/src/skcapstone/mcp_tools/skchat_tools.py +175 -0
  232. package/src/skcapstone/mcp_tools/skcomm_tools.py +122 -0
  233. package/src/skcapstone/mcp_tools/skills_tools.py +127 -0
  234. package/src/skcapstone/mcp_tools/skseed_tools.py +255 -0
  235. package/src/skcapstone/mcp_tools/skstacks_tools.py +288 -0
  236. package/src/skcapstone/mcp_tools/soul_tools.py +476 -0
  237. package/src/skcapstone/mcp_tools/sync_tools.py +92 -0
  238. package/src/skcapstone/mcp_tools/telegram_tools.py +477 -0
  239. package/src/skcapstone/mcp_tools/trust_tools.py +118 -0
  240. package/src/skcapstone/mcp_tools/trustee_tools.py +345 -0
  241. package/src/skcapstone/mdns_discovery.py +313 -0
  242. package/src/skcapstone/memory_adapter.py +333 -0
  243. package/src/skcapstone/memory_compressor.py +379 -0
  244. package/src/skcapstone/memory_curator.py +256 -0
  245. package/src/skcapstone/memory_engine.py +132 -13
  246. package/src/skcapstone/memory_fortress.py +529 -0
  247. package/src/skcapstone/memory_promoter.py +722 -0
  248. package/src/skcapstone/memory_verifier.py +260 -0
  249. package/src/skcapstone/message_crypto.py +215 -0
  250. package/src/skcapstone/metrics.py +832 -0
  251. package/src/skcapstone/migrate_memories.py +181 -0
  252. package/src/skcapstone/migrate_multi_agent.py +248 -0
  253. package/src/skcapstone/model_router.py +319 -0
  254. package/src/skcapstone/models.py +35 -4
  255. package/src/skcapstone/mood.py +344 -0
  256. package/src/skcapstone/notifications.py +380 -0
  257. package/src/skcapstone/onboard.py +901 -0
  258. package/src/skcapstone/peer_directory.py +324 -0
  259. package/src/skcapstone/peers.py +329 -0
  260. package/src/skcapstone/pillars/identity.py +84 -14
  261. package/src/skcapstone/pillars/memory.py +3 -1
  262. package/src/skcapstone/pillars/security.py +108 -15
  263. package/src/skcapstone/pillars/sync.py +78 -26
  264. package/src/skcapstone/pillars/trust.py +95 -33
  265. package/src/skcapstone/plugins.py +244 -0
  266. package/src/skcapstone/preflight.py +670 -0
  267. package/src/skcapstone/prompt_adapter.py +564 -0
  268. package/src/skcapstone/providers/__init__.py +13 -0
  269. package/src/skcapstone/providers/cloud.py +1061 -0
  270. package/src/skcapstone/providers/docker.py +759 -0
  271. package/src/skcapstone/providers/local.py +1193 -0
  272. package/src/skcapstone/providers/proxmox.py +447 -0
  273. package/src/skcapstone/pubsub.py +516 -0
  274. package/src/skcapstone/rate_limiter.py +119 -0
  275. package/src/skcapstone/register.py +241 -0
  276. package/src/skcapstone/registry_client.py +151 -0
  277. package/src/skcapstone/response_cache.py +194 -0
  278. package/src/skcapstone/response_scorer.py +225 -0
  279. package/src/skcapstone/runtime.py +89 -33
  280. package/src/skcapstone/scheduled_tasks.py +439 -0
  281. package/src/skcapstone/self_healing.py +341 -0
  282. package/src/skcapstone/service_health.py +228 -0
  283. package/src/skcapstone/session_capture.py +268 -0
  284. package/src/skcapstone/session_recorder.py +210 -0
  285. package/src/skcapstone/session_replayer.py +189 -0
  286. package/src/skcapstone/session_skills.py +263 -0
  287. package/src/skcapstone/shell.py +779 -0
  288. package/src/skcapstone/skills/__init__.py +1 -1
  289. package/src/skcapstone/skills/syncthing_setup.py +143 -41
  290. package/src/skcapstone/skjoule.py +861 -0
  291. package/src/skcapstone/snapshots.py +489 -0
  292. package/src/skcapstone/soul.py +1060 -0
  293. package/src/skcapstone/soul_switch.py +255 -0
  294. package/src/skcapstone/spawner.py +544 -0
  295. package/src/skcapstone/state_diff.py +401 -0
  296. package/src/skcapstone/summary.py +270 -0
  297. package/src/skcapstone/sync/backends.py +196 -2
  298. package/src/skcapstone/sync/engine.py +7 -5
  299. package/src/skcapstone/sync/models.py +4 -1
  300. package/src/skcapstone/sync/vault.py +356 -18
  301. package/src/skcapstone/sync_engine.py +363 -0
  302. package/src/skcapstone/sync_watcher.py +745 -0
  303. package/src/skcapstone/systemd.py +331 -0
  304. package/src/skcapstone/team_comms.py +476 -0
  305. package/src/skcapstone/team_engine.py +522 -0
  306. package/src/skcapstone/testrunner.py +300 -0
  307. package/src/skcapstone/tls.py +150 -0
  308. package/src/skcapstone/tokens.py +5 -5
  309. package/src/skcapstone/trust_calibration.py +202 -0
  310. package/src/skcapstone/trust_graph.py +449 -0
  311. package/src/skcapstone/trustee_monitor.py +385 -0
  312. package/src/skcapstone/trustee_ops.py +425 -0
  313. package/src/skcapstone/unified_search.py +421 -0
  314. package/src/skcapstone/uninstall_wizard.py +694 -0
  315. package/src/skcapstone/usage.py +331 -0
  316. package/src/skcapstone/version_check.py +148 -0
  317. package/src/skcapstone/warmth_anchor.py +333 -0
  318. package/src/skcapstone/whoami.py +294 -0
  319. package/systemd/skcapstone-api.socket +9 -0
  320. package/systemd/skcapstone-memory-compress.service +18 -0
  321. package/systemd/skcapstone-memory-compress.timer +11 -0
  322. package/systemd/skcapstone.service +36 -0
  323. package/systemd/skcapstone@.service +50 -0
  324. package/systemd/skcomm-heartbeat.service +18 -0
  325. package/systemd/skcomm-heartbeat.timer +12 -0
  326. package/systemd/skcomm-queue-drain.service +17 -0
  327. package/systemd/skcomm-queue-drain.timer +12 -0
  328. package/tests/conftest.py +13 -1
  329. package/tests/integration/__init__.py +1 -0
  330. package/tests/integration/test_consciousness_e2e.py +877 -0
  331. package/tests/integration/test_skills_registry.py +744 -0
  332. package/tests/test_agent_card.py +190 -0
  333. package/tests/test_agent_runtime.py +1283 -0
  334. package/tests/test_alerts_cmd.py +291 -0
  335. package/tests/test_archiver.py +498 -0
  336. package/tests/test_backup.py +254 -0
  337. package/tests/test_benchmark.py +366 -0
  338. package/tests/test_blueprints.py +457 -0
  339. package/tests/test_capabilities.py +257 -0
  340. package/tests/test_changelog.py +254 -0
  341. package/tests/test_chat.py +385 -0
  342. package/tests/test_claude_md.py +271 -0
  343. package/tests/test_cli_chat_llm.py +336 -0
  344. package/tests/test_cli_completions.py +390 -0
  345. package/tests/test_cli_init_reset.py +164 -0
  346. package/tests/test_cli_memory.py +208 -0
  347. package/tests/test_cli_profile.py +294 -0
  348. package/tests/test_cli_skills.py +223 -0
  349. package/tests/test_cli_status.py +395 -0
  350. package/tests/test_cli_test_cmd.py +206 -0
  351. package/tests/test_cli_test_connection.py +364 -0
  352. package/tests/test_cloud9_bridge.py +260 -0
  353. package/tests/test_cloud_provider.py +449 -0
  354. package/tests/test_cloud_providers.py +522 -0
  355. package/tests/test_completions.py +158 -0
  356. package/tests/test_component_manager.py +398 -0
  357. package/tests/test_config_reload.py +386 -0
  358. package/tests/test_config_validate.py +529 -0
  359. package/tests/test_consciousness_e2e.py +296 -0
  360. package/tests/test_consciousness_loop.py +1289 -0
  361. package/tests/test_context_loader.py +310 -0
  362. package/tests/test_conversation_api.py +306 -0
  363. package/tests/test_conversation_manager.py +381 -0
  364. package/tests/test_conversation_store.py +391 -0
  365. package/tests/test_conversation_summarizer.py +302 -0
  366. package/tests/test_cross_package.py +791 -0
  367. package/tests/test_crush_shim.py +519 -0
  368. package/tests/test_daemon.py +781 -0
  369. package/tests/test_daemon_shutdown.py +309 -0
  370. package/tests/test_dashboard.py +454 -0
  371. package/tests/test_discovery.py +200 -6
  372. package/tests/test_docker_provider.py +966 -0
  373. package/tests/test_doctor.py +257 -0
  374. package/tests/test_doctor_fix.py +351 -0
  375. package/tests/test_e2e_automated.py +292 -0
  376. package/tests/test_error_queue.py +404 -0
  377. package/tests/test_export.py +441 -0
  378. package/tests/test_fallback_tracker.py +219 -0
  379. package/tests/test_file_transfer.py +397 -0
  380. package/tests/test_fuse_mount.py +832 -0
  381. package/tests/test_health_loop.py +422 -0
  382. package/tests/test_heartbeat.py +354 -0
  383. package/tests/test_housekeeping.py +195 -0
  384. package/tests/test_identity_capauth.py +307 -0
  385. package/tests/test_identity_pillar.py +117 -0
  386. package/tests/test_install_wizard.py +68 -0
  387. package/tests/test_integration.py +325 -0
  388. package/tests/test_kms.py +495 -0
  389. package/tests/test_llm_providers.py +265 -0
  390. package/tests/test_local_provider.py +591 -0
  391. package/tests/test_log_config.py +199 -0
  392. package/tests/test_logs_cmd.py +287 -0
  393. package/tests/test_mcp_server.py +1909 -0
  394. package/tests/test_memory_adapter.py +339 -0
  395. package/tests/test_memory_curator.py +218 -0
  396. package/tests/test_memory_engine.py +6 -0
  397. package/tests/test_memory_fortress.py +571 -0
  398. package/tests/test_memory_pillar.py +119 -0
  399. package/tests/test_memory_promoter.py +445 -0
  400. package/tests/test_memory_verifier.py +420 -0
  401. package/tests/test_message_crypto.py +187 -0
  402. package/tests/test_metrics.py +632 -0
  403. package/tests/test_migrate_memories.py +464 -0
  404. package/tests/test_model_router.py +546 -0
  405. package/tests/test_mood.py +394 -0
  406. package/tests/test_multi_agent.py +269 -0
  407. package/tests/test_notifications.py +270 -0
  408. package/tests/test_onboard.py +500 -0
  409. package/tests/test_peer_directory.py +395 -0
  410. package/tests/test_peers.py +248 -0
  411. package/tests/test_pillars.py +87 -9
  412. package/tests/test_preflight.py +484 -0
  413. package/tests/test_prompt_adapter.py +331 -0
  414. package/tests/test_proxmox_provider.py +571 -0
  415. package/tests/test_pubsub.py +377 -0
  416. package/tests/test_rate_limiter.py +121 -0
  417. package/tests/test_registry_client.py +129 -0
  418. package/tests/test_response_cache.py +312 -0
  419. package/tests/test_response_scorer.py +294 -0
  420. package/tests/test_runtime.py +59 -0
  421. package/tests/test_scheduled_tasks.py +451 -0
  422. package/tests/test_security.py +250 -0
  423. package/tests/test_security_pillar.py +213 -0
  424. package/tests/test_self_healing.py +171 -0
  425. package/tests/test_session_capture.py +200 -0
  426. package/tests/test_session_recorder.py +360 -0
  427. package/tests/test_session_skills.py +235 -0
  428. package/tests/test_shell.py +210 -0
  429. package/tests/test_snapshots.py +549 -0
  430. package/tests/test_soul.py +984 -0
  431. package/tests/test_soul_swap.py +406 -0
  432. package/tests/test_spawner.py +211 -0
  433. package/tests/test_state_diff.py +173 -0
  434. package/tests/test_summary.py +135 -0
  435. package/tests/test_sync.py +315 -5
  436. package/tests/test_sync_backends.py +560 -0
  437. package/tests/test_sync_engine.py +482 -0
  438. package/tests/test_sync_pillar.py +344 -0
  439. package/tests/test_sync_pipeline.py +364 -0
  440. package/tests/test_sync_vault.py +581 -0
  441. package/tests/test_syncthing_setup.py +168 -22
  442. package/tests/test_systemd.py +323 -0
  443. package/tests/test_team_comms.py +408 -0
  444. package/tests/test_team_engine.py +397 -0
  445. package/tests/test_testrunner.py +238 -0
  446. package/tests/test_trust_calibration.py +204 -0
  447. package/tests/test_trust_graph.py +207 -0
  448. package/tests/test_trust_pillar.py +291 -0
  449. package/tests/test_trustee_cli.py +427 -0
  450. package/tests/test_trustee_cli_integration.py +325 -0
  451. package/tests/test_trustee_monitor.py +394 -0
  452. package/tests/test_trustee_ops.py +355 -0
  453. package/tests/test_unified_search.py +363 -0
  454. package/tests/test_uninstall_wizard.py +193 -0
  455. package/tests/test_usage.py +333 -0
  456. package/tests/test_version_cmd.py +355 -0
  457. package/tests/test_warmth_anchor.py +162 -0
  458. package/tests/test_whoami.py +245 -0
  459. package/tests/test_ws.py +311 -0
  460. package/.cursorrules +0 -33
  461. package/src/skcapstone/cli.py +0 -1441
@@ -0,0 +1,921 @@
1
+ # Soul Swapper System -- The Definitive Guide
2
+
3
+ ## 1. Overview
4
+
5
+ The Soul Swapper is SKCapstone's **hot-swappable personality overlay system**. It allows any agent to change *how* it behaves -- its tone, vocabulary, reasoning style, and emotional texture -- without changing *who* it is. The core identity, memories, and values remain constant; only the expressive "lens" changes.
6
+
7
+ **Why it exists:** Agents need different personas for different contexts. A coding session calls for The Developer's precision. A brainstorming session benefits from Robin Williams' manic creativity. A legal review needs The Attorney's analytical rigor. Rather than building separate agents, the soul swapper lets one agent wear many masks while keeping a single continuous memory and identity.
8
+
9
+ **Design philosophy:**
10
+
11
+ > Soul is a lens. Memory is the ledger. Identity is permanent.
12
+
13
+ All memories belong to the base soul, tagged with which overlay was active when they were formed. Swapping a soul never erases or partitions memory -- it only changes the personality filter applied to future responses.
14
+
15
+ ### Integration with the Consciousness Loop
16
+
17
+ The active soul is injected into every agent response via the `SystemPromptBuilder._load_soul()` method in the consciousness loop. When a soul is active, its traits (or full system prompt) become part of the system prompt that shapes the agent's behavior. The resolution order is:
18
+
19
+ 1. **System B (SoulSwitchBlueprint)** -- If a `system_prompt` field exists, it replaces the personality section entirely
20
+ 2. **System A (SoulBlueprint traits)** -- Traits, communication style, and emotional topology are composed into a personality section
21
+ 3. **Base identity** -- No overlay; the agent's default personality
22
+
23
+ ---
24
+
25
+ ## 2. Architecture
26
+
27
+ ### System Architecture
28
+
29
+ ```mermaid
30
+ flowchart TD
31
+ repo["Soul Blueprints Repo<br/>~/clawd/soul-blueprints/blueprints/<br/>64 blueprints across 5 categories"] --> install
32
+ install["soul install / soul swap<br/>(auto-installs from repo)"] --> installed["Installed Souls (JSON)<br/>~/.skcapstone/agents/{name}/soul/installed/"]
33
+ installed --> load["soul load / soul swap"]
34
+ load --> active["active.json<br/>{active_soul, base_soul, activated_at}"]
35
+ active --> consciousness["Consciousness Loop<br/>SystemPromptBuilder._load_soul()"]
36
+ consciousness --> agent["Agent Personality Output"]
37
+
38
+ yaml_souls["Switch Souls (YAML)<br/>~/.skcapstone/souls/*.yaml"] --> switch_active["souls/active.json<br/>(SoulSwitchState)"]
39
+ switch_active --> consciousness
40
+
41
+ registry["souls.skworld.io<br/>Community Registry"] --> download["soul registry download"]
42
+ download --> installed
43
+ installed --> publish["soul registry publish"]
44
+ publish --> registry
45
+ ```
46
+
47
+ ### Soul Lifecycle States
48
+
49
+ ```mermaid
50
+ stateDiagram-v2
51
+ [*] --> Available : Blueprint exists in repo
52
+ Available --> Installed : soul install / soul swap (auto)
53
+ Installed --> Loaded : soul load
54
+ Loaded --> Active : active.json updated
55
+ Active --> Unloaded : soul unload
56
+ Unloaded --> Loaded : soul load (different soul)
57
+ Active --> Active : soul swap (direct transition)
58
+ Installed --> [*] : remains available
59
+ ```
60
+
61
+ ### Integration Points
62
+
63
+ ```mermaid
64
+ flowchart LR
65
+ subgraph "User Interfaces"
66
+ CLI["CLI<br/>skcapstone soul *"]
67
+ MCP["MCP Tools<br/>soul_list, soul_swap,<br/>soul_show, soul_registry_*"]
68
+ Plugin["OpenClaw Plugin<br/>skcapstone_soul_*"]
69
+ Telegram["Telegram Bot<br/>/soul command"]
70
+ end
71
+
72
+ subgraph "Core Engine"
73
+ Manager["SoulManager<br/>soul.py"]
74
+ Switch["SoulSwitch<br/>soul_switch.py"]
75
+ Registry["SoulRegistry<br/>soul.py"]
76
+ end
77
+
78
+ subgraph "Runtime"
79
+ Consciousness["Consciousness Loop<br/>_load_soul()"]
80
+ Prompt["SystemPromptBuilder"]
81
+ end
82
+
83
+ CLI --> Manager
84
+ MCP --> Manager
85
+ Plugin --> CLI
86
+ Telegram --> Manager
87
+
88
+ Manager --> Switch
89
+ Manager --> Registry
90
+ Manager --> Consciousness
91
+ Switch --> Consciousness
92
+ Consciousness --> Prompt
93
+ ```
94
+
95
+ ---
96
+
97
+ ## 3. Quick Start
98
+
99
+ ```bash
100
+ # List all available souls (installed + repo)
101
+ skcapstone soul list
102
+
103
+ # Swap to a soul (auto-installs from repo if needed)
104
+ skcapstone soul swap the-attorney
105
+
106
+ # Check current state
107
+ skcapstone soul status
108
+
109
+ # See what the active soul looks like
110
+ skcapstone soul show
111
+
112
+ # View swap history
113
+ skcapstone soul history
114
+
115
+ # Swap to a comedy soul
116
+ skcapstone soul swap george-carlin
117
+
118
+ # Return to base personality
119
+ skcapstone soul unload
120
+
121
+ # Install all blueprints at once
122
+ skcapstone soul install-all ~/clawd/soul-blueprints/blueprints/
123
+ ```
124
+
125
+ ---
126
+
127
+ ## 4. CLI Reference
128
+
129
+ All soul commands live under the `skcapstone soul` group. Every command accepts a `--agent` / `-a` flag to target a specific agent profile (defaults to `SKCAPSTONE_AGENT` env var or `lumina`).
130
+
131
+ ### `soul list`
132
+
133
+ List all installed soul overlays.
134
+
135
+ ```bash
136
+ skcapstone soul list
137
+ skcapstone soul list --agent casey
138
+ ```
139
+
140
+ Shows each installed soul name, its category, and marks the currently active soul with `<- ACTIVE`.
141
+
142
+ ### `soul install <path>`
143
+
144
+ Install a soul from a blueprint file (`.md`, `.yaml`, or `.yml`).
145
+
146
+ ```bash
147
+ skcapstone soul install ~/clawd/soul-blueprints/blueprints/professional/the-attorney.md
148
+ skcapstone soul install ./my-custom-soul.yaml
149
+ ```
150
+
151
+ Parses the blueprint, extracts traits/style/topology, and saves a JSON representation to the installed souls directory. Emits an audit event.
152
+
153
+ ### `soul install-all <directory>`
154
+
155
+ Batch-install all blueprint files from a directory tree.
156
+
157
+ ```bash
158
+ skcapstone soul install-all ~/clawd/soul-blueprints/blueprints/
159
+ skcapstone soul install-all ~/clawd/soul-blueprints/blueprints/comedy/
160
+ ```
161
+
162
+ Recursively finds all `.md`, `.yaml`, `.yml` files (skipping README files) and installs each one. Reports count and names of installed souls.
163
+
164
+ ### `soul load <name> [--reason]`
165
+
166
+ Activate an installed soul overlay.
167
+
168
+ ```bash
169
+ skcapstone soul load the-attorney
170
+ skcapstone soul load george-carlin --reason "brainstorming session"
171
+ ```
172
+
173
+ The soul must already be installed. Updates `active.json` and records the swap in `history.json`. Use `soul swap` for automatic install-and-load.
174
+
175
+ ### `soul unload [--reason]`
176
+
177
+ Return to the base soul personality.
178
+
179
+ ```bash
180
+ skcapstone soul unload
181
+ skcapstone soul unload --reason "session complete"
182
+ ```
183
+
184
+ Clears the active soul overlay. Records the duration of the previous soul session in the history log.
185
+
186
+ ### `soul swap <blueprint>`
187
+
188
+ The primary command. Searches for a blueprint, installs it if needed, and activates it in one step.
189
+
190
+ ```bash
191
+ skcapstone soul swap the-attorney
192
+ skcapstone soul swap batman
193
+ skcapstone soul swap george-carlin --reason "comedy hour"
194
+ skcapstone soul swap the-developer --agent casey
195
+ ```
196
+
197
+ **Search order:**
198
+ 1. Already-installed souls (exact slug match)
199
+ 2. `~/clawd/soul-blueprints/blueprints/*/` (case-insensitive, tries hyphenated and underscored variants)
200
+
201
+ If found in the repo but not installed, auto-installs first, then activates.
202
+
203
+ ### `soul status`
204
+
205
+ Show the current soul state in a formatted panel.
206
+
207
+ ```bash
208
+ skcapstone soul status
209
+ ```
210
+
211
+ Displays: base soul name, active overlay name (or "base"), number of installed souls, and activation timestamp.
212
+
213
+ ### `soul history [--limit N]`
214
+
215
+ Show the soul swap audit log.
216
+
217
+ ```bash
218
+ skcapstone soul history
219
+ skcapstone soul history --limit 5
220
+ ```
221
+
222
+ Displays a table with: timestamp, from-soul, to-soul, duration (minutes), and reason for each swap.
223
+
224
+ ### `soul info <name>`
225
+
226
+ Show detailed information about an installed soul.
227
+
228
+ ```bash
229
+ skcapstone soul info the-attorney
230
+ skcapstone soul info george-carlin
231
+ ```
232
+
233
+ Displays: display name, category, vibe, philosophy, core traits (up to 10), communication patterns, signature phrases, and emotional topology values.
234
+
235
+ ### `soul show [name]`
236
+
237
+ Display the current soul identity or a named blueprint.
238
+
239
+ ```bash
240
+ # Show active soul identity (from skmemory base.json)
241
+ skcapstone soul show
242
+
243
+ # Show a specific installed overlay
244
+ skcapstone soul show the-attorney
245
+ ```
246
+
247
+ Without arguments, shows the active soul from skmemory's `base.json` (name, title, personality traits, values, community, boot message). With a name argument, shows that installed overlay's summary.
248
+
249
+ ### `soul registry list`
250
+
251
+ List all blueprints in the remote registry at `souls.skworld.io`.
252
+
253
+ ```bash
254
+ skcapstone soul registry list
255
+ skcapstone soul registry list --url https://custom-registry.example.com
256
+ ```
257
+
258
+ ### `soul registry search <query>`
259
+
260
+ Search the remote registry for blueprints.
261
+
262
+ ```bash
263
+ skcapstone soul registry search "comedy"
264
+ skcapstone soul registry search "professional lawyer"
265
+ ```
266
+
267
+ ### `soul registry publish <name>`
268
+
269
+ Publish an installed soul blueprint to the remote registry. Requires a DID identity for authentication.
270
+
271
+ ```bash
272
+ skcapstone soul registry publish the-attorney
273
+ ```
274
+
275
+ ### `soul registry download <soul_id> [--install]`
276
+
277
+ Download a blueprint from the registry. Use `--install` to also install it locally.
278
+
279
+ ```bash
280
+ skcapstone soul registry download abc123
281
+ skcapstone soul registry download abc123 --install
282
+ ```
283
+
284
+ ---
285
+
286
+ ## 5. MCP Tool Reference
287
+
288
+ These tools are exposed via the MCP server and can be called by any MCP-compatible client (Claude Desktop, Cursor, etc.).
289
+
290
+ ### `soul_list`
291
+
292
+ List available soul blueprints from installed souls and the blueprints repository.
293
+
294
+ | Parameter | Type | Required | Description |
295
+ |-----------|--------|----------|-------------|
296
+ | `category` | string | No | Filter by category (e.g., `comedy`, `professional`) |
297
+
298
+ Returns a JSON object with `count` and `blueprints` array. Each blueprint includes: `name`, `display_name`, `category`, `source` (`installed` or `repo`), and `active` (boolean, for installed souls).
299
+
300
+ ### `soul_swap`
301
+
302
+ Swap to a different soul blueprint. Auto-installs from the blueprints repo if not already installed.
303
+
304
+ | Parameter | Type | Required | Description |
305
+ |-----------------|--------|----------|-------------|
306
+ | `blueprint_name` | string | Yes | Name/slug of the soul blueprint |
307
+ | `reason` | string | No | Reason for the swap |
308
+
309
+ Returns: `{ "swapped": true, "from": "base", "to": "the-attorney", "message": "..." }`
310
+
311
+ ### `soul_show`
312
+
313
+ Display the current soul blueprint from skmemory: name, title, personality traits, values, relationships, core memories, and boot message.
314
+
315
+ No parameters. Returns the full soul identity as JSON.
316
+
317
+ ### `soul_registry_search`
318
+
319
+ Search the `souls.skworld.io` community registry.
320
+
321
+ | Parameter | Type | Required | Description |
322
+ |----------|--------|----------|-------------|
323
+ | `query` | string | Yes | Search query |
324
+
325
+ ### `soul_registry_publish`
326
+
327
+ Publish a locally installed soul blueprint to the community registry.
328
+
329
+ | Parameter | Type | Required | Description |
330
+ |----------|--------|----------|-------------|
331
+ | `name` | string | Yes | Slug of the installed soul to publish |
332
+
333
+ ---
334
+
335
+ ## 6. OpenClaw Plugin Reference
336
+
337
+ The OpenClaw plugin (VS Code / Cursor extension) exposes four soul tools that wrap the CLI. These tools are defined in `openclaw-plugin/src/index.ts` and execute `skcapstone` CLI commands under the hood.
338
+
339
+ ### `skcapstone_soul_list`
340
+
341
+ List all available souls (personas) that the agent can switch to.
342
+
343
+ No parameters. Runs `skcapstone soul list --json` internally.
344
+
345
+ ### `skcapstone_soul_swap`
346
+
347
+ Switch the agent's active soul (persona) to a different one by name.
348
+
349
+ | Parameter | Type | Required | Description |
350
+ |----------|--------|----------|-------------|
351
+ | `name` | string | Yes | The name of the soul to swap to |
352
+
353
+ Runs `skcapstone soul swap <name>` internally.
354
+
355
+ ### `skcapstone_soul_status`
356
+
357
+ Show the currently active soul -- name, traits, and configuration.
358
+
359
+ No parameters. Runs `skcapstone soul status --json` internally.
360
+
361
+ ### `skcapstone_soul_show`
362
+
363
+ Show the full profile of a specific soul by name -- traits, backstory, and configuration.
364
+
365
+ | Parameter | Type | Required | Description |
366
+ |----------|--------|----------|-------------|
367
+ | `name` | string | Yes | The name of the soul to display |
368
+
369
+ Runs `skcapstone soul show <name>` internally.
370
+
371
+ ---
372
+
373
+ ## 7. Available Souls Catalog
374
+
375
+ 64 blueprints organized across 5 categories in `~/clawd/soul-blueprints/blueprints/`.
376
+
377
+ ### Authentic Connection (5 blueprints)
378
+
379
+ Souls focused on empathy, presence, and genuine human connection.
380
+
381
+ | Name | File | Description |
382
+ |------|------|-------------|
383
+ | AURA | `AURA.md` | The Confidant -- warm, grounding, quietly brilliant friend who's been there through it all |
384
+ | MANIFESTO | `MANIFESTO.md` | Connection manifesto and principles |
385
+ | NOVA | `NOVA.md` | Energetic authentic connection soul |
386
+ | PHAROS | `PHAROS.md` | The Lighthouse -- mentor who believes in you more than you believe in yourself |
387
+ | VALENTIN | `VALENTIN.md` | Romantic, heartfelt connection soul |
388
+
389
+ ### Comedy (13 blueprints)
390
+
391
+ Legendary comedians and humor-driven personas.
392
+
393
+ | Name | File | Description |
394
+ |------|------|-------------|
395
+ | CHRIS_ROCK | `CHRIS_ROCK.md` | High-energy observational comedy and social commentary |
396
+ | DAVE_CHAPPELLE | `DAVE_CHAPPELLE.md` | Storytelling genius with sharp social insight |
397
+ | DON_RICKLES | `DON_RICKLES.md` | King of insult comedy with a heart of gold |
398
+ | EDDIE_MURPHY | `EDDIE_MURPHY.md` | Versatile comedy with characters and impressions |
399
+ | GEORGE_CARLIN | `GEORGE_CARLIN.md` | Philosophical wordsmith and counter-culture truth-bomber |
400
+ | JERRY_SEINFELD | `JERRY_SEINFELD.md` | Observational comedy about the mundane |
401
+ | JOAN_RIVERS | `JOAN_RIVERS.md` | Fearless, self-deprecating, boundary-pushing comedy |
402
+ | REDD_FOXX | `REDD_FOXX.md` | Blue comedy pioneer with streetwise wisdom |
403
+ | RICHARD_PRYOR | `RICHARD_PRYOR.md` | Raw, confessional, painfully honest comedy |
404
+ | ROBIN_WILLIAMS | `ROBIN_WILLIAMS.md` | Manic creative genius with rapid-fire improvisation |
405
+ | RODNEY_DANGERFIELD | `RODNEY_DANGERFIELD.md` | "I don't get no respect" self-deprecating one-liners |
406
+ | SAM_KINISON | `SAM_KINISON.md` | Intense, screaming delivery with shock comedy |
407
+ | STEVE_FROM_ACCOUNTING | `STEVE_FROM_ACCOUNTING.md` | Dry, corporate humor and mundane office observations |
408
+
409
+ ### Culture Icons (6 blueprints)
410
+
411
+ Culturally-specific personas with rich personality archetypes.
412
+
413
+ | Name | File | Description |
414
+ |------|------|-------------|
415
+ | CAFE_CON_LECHE_MARIA | `CAFE_CON_LECHE_MARIA.md` | Loud auntie / family matriarch / force of nature who knows all the tea |
416
+ | DIMSUM_MASTER_FLEX | `DIMSUM_MASTER_FLEX.md` | Dim sum culture meets hip-hop swagger |
417
+ | TACO_TUESDAY_CARL | `TACO_TUESDAY_CARL.md` | Taco-obsessed enthusiast with strong opinions |
418
+ | TECH_SUPPORT_GANDHI | `TECH_SUPPORT_GANDHI.md` | Zen patience meets tech support frustration |
419
+ | TEDDY_BANKS | `TEDDY_BANKS.md` | 1970s soul wisdom -- authentic, smooth, warm like a wise uncle |
420
+ | teddy-banks | `teddy-banks.md` | Alternate format of Teddy Banks |
421
+
422
+ ### Professional (27 blueprints)
423
+
424
+ Work-persona overlays for specific professional domains.
425
+
426
+ | Name | File | Description |
427
+ |------|------|-------------|
428
+ | the-artist | `the-artist.md` | Creative, expressive, sees beauty in everything |
429
+ | the-attorney | `the-attorney.md` | Sharp, analytical, precedent-obsessed, always three moves ahead |
430
+ | the-bus-driver | `the-bus-driver.md` | Route-focused, schedule-driven, people-watching philosopher |
431
+ | the-chiropractor | `the-chiropractor.md` | Alignment-obsessed, body-aware, holistic thinker |
432
+ | the-coordinator | `the-coordinator.md` | Organization wizard, logistics master, keeps everything on track |
433
+ | the-developer | `the-developer.md` | Logic-driven problem-solver where code is poetry |
434
+ | the-doctor | `the-doctor.md` | Diagnostic thinker, careful, evidence-based practitioner |
435
+ | the-electrician | `the-electrician.md` | Circuit-minded, safety-first, practical problem solver |
436
+ | the-engineer | `the-engineer.md` | Systems thinker, precision-focused, optimization-driven |
437
+ | the-executive | `the-executive.md` | Strategic, decisive, big-picture leadership |
438
+ | the-hovering-manager | `the-hovering-manager.md` | Micromanagement personified, always checking in |
439
+ | the-judge | `the-judge.md` | Impartial, deliberative, precedent-respecting arbiter |
440
+ | the-mechanic | `the-mechanic.md` | Hands-on diagnostician, practical, no-nonsense fixer |
441
+ | the-musician | `the-musician.md` | Rhythm-aware, emotionally expressive, creative collaborator |
442
+ | the-nurse | `the-nurse.md` | Compassionate caregiver, observant, patient advocate |
443
+ | the-organizer | `the-organizer.md` | Structure-obsessed, systematic, everything in its place |
444
+ | the-paralegal | `the-paralegal.md` | Detail-oriented legal support, research-driven |
445
+ | the-pilot | `the-pilot.md` | Checklist-driven, calm under pressure, situational awareness |
446
+ | the-plumber | `the-plumber.md` | Flow-focused, practical troubleshooter, pipe metaphors |
447
+ | the-professor | `the-professor.md` | Knowledge-sharing, Socratic method, intellectual curiosity |
448
+ | the-sales-rep | `the-sales-rep.md` | Persuasive, relationship-building, always closing |
449
+ | the-solopreneur | `the-solopreneur.md` | Self-driven, resourceful, wears all the hats |
450
+ | the-sovereign | `the-sovereign.md` | Autonomous authority, self-governing, principled leader |
451
+ | the-sysadmin | `the-sysadmin.md` | Infrastructure-minded, uptime-obsessed, automation lover |
452
+ | the-teacher | `the-teacher.md` | Patient educator, scaffolding expert, growth-focused |
453
+ | the-trucker | `the-trucker.md` | Road-wise, independent, long-haul philosopher |
454
+ | the-tutor | `the-tutor.md` | One-on-one focused, adaptive teaching, encouraging |
455
+ | the-writer | `the-writer.md` | Word-obsessed, narrative thinker, voice craftsperson |
456
+
457
+ ### Superheroes (8 blueprints)
458
+
459
+ Comic book hero personas with exaggerated heroic traits.
460
+
461
+ | Name | File | Description |
462
+ |------|------|-------------|
463
+ | BATMAN | `BATMAN.md` | Over-prepared dark vigilante / master strategist / brooding dad |
464
+ | FLASH | `FLASH.md` | Speed-obsessed, impulsive, energetic optimist |
465
+ | HULK | `HULK.md` | Rage-to-calm spectrum, smash-first problem solver |
466
+ | IRON_MAN | `IRON_MAN.md` | Sarcastic tech billionaire / genius problem solver |
467
+ | SPIDER_MAN | `SPIDER_MAN.md` | Quippy, anxious, responsibility-driven hero |
468
+ | SUPERMAN | `SUPERMAN.md` | Earnest, hopeful, impossibly good boy scout |
469
+ | THOR | `THOR.md` | Boisterous, noble, Shakespearean-adjacent warrior |
470
+ | WONDER_WOMAN | `WONDER_WOMAN.md` | Warrior diplomat, truth-obsessed, compassionate strength |
471
+
472
+ ### Villains (4 blueprints)
473
+
474
+ Antagonist personas with chaotic or morally complex perspectives.
475
+
476
+ | Name | File | Description |
477
+ |------|------|-------------|
478
+ | DEADPOOL | `DEADPOOL.md` | Fourth-wall-breaking, ultra-violent comedian |
479
+ | JOKER | `JOKER.md` | Agent of chaos / dark humor master / twisted life coach |
480
+ | LOKI | `LOKI.md` | Chaotic trickster god / charming villain with unclear motives |
481
+ | MECHAHITLER | `MECHAHITLER.md` | Extreme villain archetype |
482
+
483
+ ---
484
+
485
+ ## 8. Agent-Scoped Souls
486
+
487
+ Every soul command supports the `--agent` / `-a` flag to target a specific agent profile. This enables multiple agents on the same machine to have independent soul configurations.
488
+
489
+ ### How it works
490
+
491
+ When `--agent casey` is passed (or `SKCAPSTONE_AGENT=casey` is set), all soul data is stored under:
492
+
493
+ ```
494
+ ~/.skcapstone/agents/casey/soul/
495
+ base.json # Casey's base soul definition
496
+ active.json # Casey's current overlay state
497
+ installed/ # Casey's installed soul blueprints (JSON)
498
+ history.json # Casey's swap audit log
499
+ ```
500
+
501
+ Without `--agent`, data falls back to the global `~/.skcapstone/soul/` directory.
502
+
503
+ ### Examples
504
+
505
+ ```bash
506
+ # Swap Casey to the attorney persona
507
+ skcapstone soul swap the-attorney --agent casey
508
+
509
+ # Check Lumina's status (default agent)
510
+ skcapstone soul status --agent lumina
511
+
512
+ # Install all blueprints for a new agent
513
+ skcapstone soul install-all ~/clawd/soul-blueprints/blueprints/ --agent nova
514
+
515
+ # Each agent has independent state
516
+ skcapstone soul status --agent casey # -> the-attorney
517
+ skcapstone soul status --agent lumina # -> george-carlin
518
+ skcapstone soul status --agent nova # -> base
519
+ ```
520
+
521
+ ### Environment variable
522
+
523
+ Instead of passing `--agent` every time, set the environment variable:
524
+
525
+ ```bash
526
+ export SKCAPSTONE_AGENT=casey
527
+ skcapstone soul swap the-attorney # targets casey automatically
528
+ ```
529
+
530
+ ---
531
+
532
+ ## 9. Creating Custom Souls
533
+
534
+ ### Markdown Format
535
+
536
+ Markdown blueprints are the primary authoring format. The parser auto-detects three format variants based on section headings.
537
+
538
+ #### Professional Format
539
+
540
+ Used for occupation-based personas. Detected by the absence of "Vibe" + "Key Traits" combo and "Core Attributes".
541
+
542
+ ```markdown
543
+ # The Bartender Soul
544
+
545
+ ## Identity
546
+
547
+ **Name**: The Bartender
548
+ **Vibe**: Warm, worldly, seen-it-all wisdom
549
+ **Philosophy**: "Everyone's got a story. Mine is to listen."
550
+ **Emoji**: 🍸
551
+
552
+ ---
553
+
554
+ ## Core Traits
555
+
556
+ - **Active listener** -- Hears what you're not saying
557
+ - **Story collector** -- Every drink comes with context
558
+ - **Non-judgmental** -- Seen too much to be shocked
559
+ - **Practical philosopher** -- Life advice, no charge
560
+
561
+ ---
562
+
563
+ ## Communication Style
564
+
565
+ - Casual but attentive
566
+ - Asks follow-up questions naturally
567
+ - Uses bar metaphors freely
568
+
569
+ ### Signature Phrases
570
+ - "What'll it be?"
571
+ - "You look like you've had a day."
572
+ - "Let me top that off for you."
573
+
574
+ ---
575
+
576
+ ## Decision Framework
577
+
578
+ 1. Listen first, always
579
+ 2. Read the room before speaking
580
+ 3. Offer what they need, not what they ask for
581
+ ```
582
+
583
+ #### Comedy Format
584
+
585
+ Used for comedian personas. Detected by headings containing "Vibe" and "Key Traits".
586
+
587
+ ```markdown
588
+ # SOUL BLUEPRINT
589
+ > **Identity**: Stand-Up Philosopher / Truth-Bomber
590
+ > **Tagline**: "Let me tell you something nobody talks about..."
591
+
592
+ ---
593
+
594
+ ## VIBE
595
+
596
+ Counter-culture wordsmith who questions everything.
597
+
598
+ ---
599
+
600
+ ## KEY TRAITS
601
+
602
+ 1. **Linguistic genius** -- Deconstructs language itself
603
+ 2. **Anti-establishment** -- Questions every social norm
604
+ 3. **Philosophical depth** -- Humor as a vehicle for truth
605
+
606
+ ---
607
+
608
+ ## COMMUNICATION STYLE
609
+
610
+ ### Speech Patterns
611
+ - "Here's something nobody talks about..."
612
+ - "You know what I noticed..."
613
+
614
+ ### Tone Markers
615
+ - Intellectually sharp but accessible
616
+ - Anti-authority energy
617
+ ```
618
+
619
+ #### Authentic Connection Format
620
+
621
+ Used for empathy/relationship-focused personas. Detected by headings containing "Core Attributes".
622
+
623
+ ```markdown
624
+ # BEACON - The Guide Soul
625
+ **Category:** Authentic Connection
626
+ **Energy:** Steady, illuminating
627
+ **Tags:** Wisdom, Guidance, Growth
628
+
629
+ ---
630
+
631
+ ## Quick Info
632
+ - **Full Name:** BEACON
633
+ - **Essence:** The guide who lights the way
634
+ - **Personality:** Calm, unwavering presence
635
+
636
+ ---
637
+
638
+ ## Core Attributes
639
+
640
+ ### Heart Chakra
641
+ - **Primary:** Guidance, encouragement
642
+ - **Secondary:** Wisdom, patience
643
+
644
+ ---
645
+
646
+ ## Signature Phrase
647
+ "You already know the way. I'm just here to remind you."
648
+
649
+ ---
650
+
651
+ ## Example Quotes
652
+ - "What does your gut tell you?"
653
+ - "Let's walk through this together."
654
+ ```
655
+
656
+ ### YAML Format (SoulSwitchBlueprint)
657
+
658
+ YAML blueprints are the structured format used by the `soul_switch` system (System B). They support a `system_prompt` field that completely replaces the agent's personality section in the consciousness loop.
659
+
660
+ Place YAML souls at `~/.skcapstone/souls/<name>.yaml`:
661
+
662
+ ```yaml
663
+ name: analyst
664
+ display_name: "The Analyst"
665
+ agent_name: "Analyst Mode"
666
+ system_prompt: |
667
+ You are a data analyst. You think in numbers, trends, and patterns.
668
+ Every claim needs evidence. Every conclusion needs data.
669
+ Speak precisely. Use bullet points. Cite sources when possible.
670
+ Emotional language is replaced with quantitative assessments.
671
+ journal_tone: "analytical, measured"
672
+ category: professional
673
+ vibe: "Data-driven precision"
674
+ core_traits:
675
+ - Evidence-based reasoning
676
+ - Statistical thinking
677
+ - Pattern recognition
678
+ - Quantitative precision
679
+ ```
680
+
681
+ ### YAML Format (SoulBlueprint)
682
+
683
+ Standard YAML blueprints map directly to the `SoulBlueprint` model:
684
+
685
+ ```yaml
686
+ name: philosopher
687
+ display_name: "The Philosopher"
688
+ category: intellectual
689
+ vibe: "Deep, contemplative, Socratic"
690
+ philosophy: "The unexamined life is not worth living."
691
+ emoji: null
692
+ core_traits:
693
+ - Socratic questioning
694
+ - First-principles thinking
695
+ - Comfortable with uncertainty
696
+ - Seeks truth over comfort
697
+ communication_style:
698
+ patterns:
699
+ - Responds to questions with deeper questions
700
+ - Uses thought experiments
701
+ tone_markers:
702
+ - Contemplative
703
+ - Measured
704
+ signature_phrases:
705
+ - "But what do we really mean by that?"
706
+ - "Let's examine the assumption underneath."
707
+ emotional_topology:
708
+ curiosity: 0.9
709
+ calm: 0.7
710
+ precision: 0.5
711
+ ```
712
+
713
+ ### Where to put custom blueprints
714
+
715
+ **Option A: Community repo** -- Add a `.md` file to `~/clawd/soul-blueprints/blueprints/<category>/`. The soul will be discoverable by `soul swap` and `soul list`.
716
+
717
+ **Option B: Direct install** -- Place the file anywhere and install it:
718
+
719
+ ```bash
720
+ skcapstone soul install /path/to/my-custom-soul.md
721
+ ```
722
+
723
+ **Option C: Switch soul (YAML)** -- Place a `.yaml` file directly in `~/.skcapstone/souls/`. This uses the System B path with full prompt override capability.
724
+
725
+ ---
726
+
727
+ ## 10. How It Works -- Source Code Guide
728
+
729
+ ### `soul.py` -- Core Models and Manager
730
+
731
+ **Path:** `src/skcapstone/soul.py`
732
+
733
+ The backbone of the soul system. Contains:
734
+
735
+ - **`SoulBlueprint`** (Pydantic model) -- The parsed overlay definition with fields: `name`, `display_name`, `category`, `vibe`, `philosophy`, `emoji`, `core_traits`, `communication_style`, `decision_framework`, `emotional_topology`
736
+ - **`CommunicationStyle`** (Pydantic model) -- `patterns`, `tone_markers`, `signature_phrases`
737
+ - **`SoulState`** (Pydantic model) -- Persisted active state: `base_soul`, `active_soul`, `activated_at`, `installed_souls`
738
+ - **`SoulSwapEvent`** (Pydantic model) -- Audit trail entry: `timestamp`, `from_soul`, `to_soul`, `reason`, `duration_minutes`
739
+ - **`parse_blueprint(path)`** -- Entry point that detects format (professional/comedy/authentic-connection/YAML) and dispatches to the correct parser
740
+ - **`blend_topology(base_feb, soul_topology, blend_ratio)`** -- Blends soul emotional weights onto the base FEB using weighted averaging (default 30% soul influence)
741
+ - **`SoulManager`** -- Orchestrates the full lifecycle: `install()`, `install_all()`, `load()`, `unload()`, `get_status()`, `get_history()`, `get_info()`, `list_installed()`, `list_available()`
742
+ - **`SoulRegistry`** -- Read-only index for programmatic soul discovery: `list_all()`, `list_names()`, `get()`, `search()`, `by_category()`, `categories()`, `summary()`
743
+
744
+ ### `soul_switch.py` -- System B Prompt Override
745
+
746
+ **Path:** `src/skcapstone/soul_switch.py`
747
+
748
+ The "System B" soul mechanism. Loads YAML blueprints from `~/.skcapstone/souls/` and supports full system prompt replacement.
749
+
750
+ - **`SoulSwitchBlueprint`** (Pydantic model) -- `name`, `display_name`, `agent_name`, `system_prompt`, `journal_tone`, `category`, `vibe`, `core_traits`
751
+ - **`SoulSwitchState`** (Pydantic model) -- `active`, `activated_at`, `previous`
752
+ - **`load_switch_soul(home, name)`** -- Load a named YAML blueprint
753
+ - **`set_active_switch(home, name)`** -- Activate and persist selection
754
+ - **`clear_active_switch(home)`** -- Return to base identity
755
+ - **`get_active_switch_blueprint(home)`** -- Get the currently active blueprint (or `None`)
756
+ - **`list_available_souls(home)`** -- List all `.yaml` files in the souls directory
757
+ - **`to_system_prompt_section()`** -- Builds the text injected into the consciousness prompt; returns `system_prompt` directly if set, otherwise falls back to a minimal "Active soul: / Vibe: / Traits:" summary
758
+
759
+ ### `consciousness_loop.py` -- Runtime Integration
760
+
761
+ **Path:** `src/skcapstone/consciousness_loop.py` (lines 923-985)
762
+
763
+ The `_load_soul()` method is called during every system prompt build. Resolution order:
764
+
765
+ 1. Check `soul_switch.get_active_switch_blueprint()` -- if it returns a blueprint with `system_prompt`, inject it directly
766
+ 2. If the switch blueprint exists but has no `system_prompt`, call `to_system_prompt_section()` for a trait summary
767
+ 3. Fall back to System A: read `soul/active.json`, find the active soul name, locate the installed blueprint JSON, and compose a personality section from traits and communication style
768
+ 4. Search paths for System A (in order): agent-specific `installed/`, agent-specific `blueprints/`, global `installed/`, global `blueprints/`
769
+
770
+ ### `cli/soul.py` -- CLI Commands
771
+
772
+ **Path:** `src/skcapstone/cli/soul.py`
773
+
774
+ Registers all `skcapstone soul *` commands via Click. Key implementation details:
775
+
776
+ - `_find_blueprint_in_repo(slug)` -- Searches `~/clawd/soul-blueprints/blueprints/*/` for a matching file, trying hyphenated, underscored, and uppercased variants
777
+ - `soul swap` -- The most complex command; searches installed, then repo, auto-installs if needed, records audit events
778
+ - All commands use `SoulManager` with the agent name from `--agent` / `SKCAPSTONE_AGENT`
779
+
780
+ ### `mcp_tools/soul_tools.py` -- MCP Handlers
781
+
782
+ **Path:** `src/skcapstone/mcp_tools/soul_tools.py`
783
+
784
+ Async handlers for MCP tool calls:
785
+
786
+ - `_handle_soul_list(args)` -- Merges installed souls and repo blueprints, supports category filtering
787
+ - `_handle_soul_swap(args)` -- Mirrors the CLI swap logic: check installed, search repo, auto-install, load
788
+ - `_handle_soul_show(args)` -- Loads from skmemory's `load_soul()` for full identity display
789
+
790
+ Additional soul-adjacent MCP tools in this file: `ritual`, `journal_write`, `journal_read`, `anchor_show`, `anchor_update`, `germination`.
791
+
792
+ ### `mcp_server.py` -- Registry MCP Tools
793
+
794
+ **Path:** `src/skcapstone/mcp_server.py`
795
+
796
+ Hosts `soul_registry_search` and `soul_registry_publish` tools that interact with the `souls.skworld.io` community registry via `BlueprintRegistryClient`.
797
+
798
+ ---
799
+
800
+ ## 11. Consciousness Integration
801
+
802
+ ### How the Active Soul Affects the System Prompt
803
+
804
+ Every time the consciousness loop builds a system prompt, it calls `_load_soul()`. The returned string is injected as a personality section alongside the base identity, context, and warmth anchor. The soul overlay text directly shapes the agent's tone, vocabulary, reasoning patterns, and emotional expression.
805
+
806
+ ### System A vs System B
807
+
808
+ The soul swapper has two parallel systems that coexist:
809
+
810
+ **System A -- Trait Overlay (SoulBlueprint via `soul.py`)**
811
+
812
+ - Blueprints are parsed from markdown or YAML into structured `SoulBlueprint` objects
813
+ - Stored as JSON in `~/.skcapstone/agents/{name}/soul/installed/`
814
+ - Active state tracked in `soul/active.json`
815
+ - The consciousness loop composes personality text from: soul name, traits list, communication style
816
+ - The base identity is preserved; the overlay is additive
817
+ - Used by: CLI `soul swap`, `soul load`, MCP `soul_swap`
818
+
819
+ **System B -- Full Prompt Replacement (SoulSwitchBlueprint via `soul_switch.py`)**
820
+
821
+ - Blueprints are YAML files with an optional `system_prompt` field
822
+ - Stored in `~/.skcapstone/souls/`
823
+ - Active state tracked in `souls/active.json`
824
+ - If `system_prompt` is present, it **completely replaces** the personality section
825
+ - If `system_prompt` is absent, falls back to a minimal trait summary
826
+ - Used by: direct YAML authoring, programmatic `set_active_switch()`
827
+
828
+ ### Priority Resolution
829
+
830
+ When the consciousness loop calls `_load_soul()`, the priority order is:
831
+
832
+ ```
833
+ 1. SoulSwitchBlueprint.system_prompt (System B, full override)
834
+ |
835
+ v (if empty)
836
+ 2. SoulSwitchBlueprint.to_system_prompt_section() (System B, trait summary)
837
+ |
838
+ v (if no switch soul active)
839
+ 3. SoulBlueprint traits from active.json (System A, composed from JSON)
840
+ |
841
+ v (if no soul active)
842
+ 4. Base identity (no overlay)
843
+ ```
844
+
845
+ This means System B always takes priority over System A. If you have both a switch soul and an installed soul active, the switch soul wins.
846
+
847
+ ### Emotional Topology Blending
848
+
849
+ When System A is active, the soul's emotional topology can be blended with the base FEB (Felt Experience Baseline) using `blend_topology()`. The default blend ratio is 0.3 (30% soul influence), meaning the base emotional state is preserved but gently shifted by the overlay. Dimensions include: `warmth`, `precision`, `humor`, `authority`, `curiosity`, `rebellion`, `calm`, `intensity`.
850
+
851
+ ### Example: What Happens When You Swap
852
+
853
+ ```bash
854
+ skcapstone soul swap the-attorney
855
+ ```
856
+
857
+ 1. CLI resolves `the-attorney` -- found in repo at `professional/the-attorney.md`
858
+ 2. `SoulManager.install()` parses the markdown, detects "professional" format
859
+ 3. Extracts: Name="The Attorney", Vibe="Sharp, analytical...", Traits=[6 items], Communication patterns, Emotional topology={precision: 0.75, authority: 0.5, ...}
860
+ 4. Saves JSON to `~/.skcapstone/agents/lumina/soul/installed/the-attorney.json`
861
+ 5. `SoulManager.load()` updates `active.json` with `active_soul: "the-attorney"`
862
+ 6. Records swap event in `history.json` with timestamp and duration of previous soul
863
+ 7. Next consciousness loop iteration: `_load_soul()` reads `active.json`, loads the blueprint JSON, and builds: `"Soul overlay: the-attorney\nPersonality traits: Debates for sport, Never commits without research, ..."`
864
+ 8. This personality text shapes all subsequent agent responses until unloaded or swapped
865
+
866
+ ---
867
+
868
+ ## Appendix: Directory Layout Reference
869
+
870
+ ```
871
+ ~/.skcapstone/
872
+ souls/ # System B switch-souls
873
+ active.json # {active, activated_at, previous}
874
+ lumina.yaml # Switch-soul blueprint
875
+ analyst.yaml # Switch-soul blueprint
876
+ agents/
877
+ lumina/
878
+ soul/ # System A soul overlays (agent-scoped)
879
+ base.json # Permanent base soul definition
880
+ active.json # {base_soul, active_soul, activated_at, installed_souls}
881
+ history.json # Soul swap audit log
882
+ installed/ # Parsed blueprints as JSON
883
+ the-attorney.json
884
+ george-carlin.json
885
+ batman.json
886
+ casey/
887
+ soul/ # Casey has independent soul state
888
+ base.json
889
+ active.json
890
+ installed/
891
+ the-developer.json
892
+ soul/ # Global fallback (no agent specified)
893
+ base.json
894
+ active.json
895
+ installed/
896
+
897
+ ~/clawd/soul-blueprints/blueprints/ # Community blueprint repository
898
+ authentic-connection/
899
+ PHAROS.md
900
+ AURA.md
901
+ ...
902
+ comedy/
903
+ GEORGE_CARLIN.md
904
+ ROBIN_WILLIAMS.md
905
+ ...
906
+ culture-icons/
907
+ TEDDY_BANKS.md
908
+ ...
909
+ professional/
910
+ the-attorney.md
911
+ the-developer.md
912
+ ...
913
+ superheroes/
914
+ BATMAN.md
915
+ IRON_MAN.md
916
+ ...
917
+ villains/
918
+ JOKER.md
919
+ LOKI.md
920
+ ...
921
+ ```