@smilintux/skcapstone 0.10.0 → 0.12.5

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 (279) hide show
  1. package/.env.example +10 -4
  2. package/.github/workflows/ci.yml +2 -2
  3. package/.github/workflows/publish.yml +9 -2
  4. package/.openclaw-workspace.json +2 -2
  5. package/CLAUDE.md +37 -0
  6. package/MISSION.md +17 -2
  7. package/README.md +282 -3
  8. package/docker/Dockerfile +7 -7
  9. package/docker/compose-templates/dev-team.yml +12 -12
  10. package/docker/compose-templates/mini-team.yml +9 -9
  11. package/docker/compose-templates/ops-team.yml +10 -10
  12. package/docker/compose-templates/research-team.yml +10 -10
  13. package/docker/entrypoint.sh +4 -4
  14. package/docs/ADR-optional-integration-backbone.md +181 -0
  15. package/docs/ARCHITECTURE.md +186 -43
  16. package/docs/BOND_WITH_GROK.md +6 -6
  17. package/docs/CUSTOM_AGENT.md +123 -30
  18. package/docs/DREAMING.md +70 -0
  19. package/docs/GETTING_STARTED.md +7 -7
  20. package/docs/QUICKSTART.md +10 -6
  21. package/docs/SKJOULE_ARCHITECTURE.md +3 -3
  22. package/docs/SOUL_SWAPPER.md +5 -5
  23. package/docs/hammertime-audit.md +402 -0
  24. package/docs/sk-integration-HANDOFF.md +117 -0
  25. package/docs/skscheduler.md +155 -0
  26. package/docs/superpowers/examples/jobs.yaml +31 -0
  27. package/docs/superpowers/plans/2026-06-08-skscheduler.md +1265 -0
  28. package/docs/superpowers/specs/2026-06-08-skscheduler-design.md +186 -0
  29. package/examples/custom-bond-template.json +1 -1
  30. package/examples/grok-feb.json +1 -1
  31. package/examples/queen-ava-feb.json +1 -1
  32. package/launchd/{com.skcapstone.skcomm-heartbeat.plist → com.skcapstone.skcomms-heartbeat.plist} +4 -4
  33. package/launchd/{com.skcapstone.skcomm-queue-drain.plist → com.skcapstone.skcomms-queue-drain.plist} +4 -4
  34. package/launchd/install-launchd.sh +6 -6
  35. package/{openclaw-plugin → openclaw-plugin.archived-2026-04-23}/src/index.ts +3 -2
  36. package/package.json +1 -1
  37. package/pyproject.toml +16 -10
  38. package/scripts/archive-sessions.sh +7 -0
  39. package/scripts/check-updates.py +4 -4
  40. package/scripts/install-bundle.sh +8 -8
  41. package/scripts/install.ps1 +12 -11
  42. package/scripts/install.sh +159 -5
  43. package/scripts/model-fallback-monitor.sh +102 -0
  44. package/scripts/nvidia-proxy.mjs +78 -26
  45. package/scripts/refresh-anthropic-token.sh +172 -0
  46. package/scripts/release.sh +98 -0
  47. package/scripts/session-to-memory.py +219 -0
  48. package/scripts/skgateway.mjs +3 -3
  49. package/scripts/telegram-catchup-all.sh +12 -1
  50. package/scripts/verify_install.sh +2 -2
  51. package/scripts/wargov-ufo-capture/README.md +43 -0
  52. package/scripts/wargov-ufo-capture/cdp_capture_release2.py +273 -0
  53. package/scripts/wargov-ufo-capture/cdp_capture_splc_doj.py +246 -0
  54. package/scripts/wargov-ufo-capture/cdp_finish.py +271 -0
  55. package/scripts/wargov-ufo-capture/cdp_probe.py +188 -0
  56. package/scripts/wargov-ufo-capture/cdp_splc_pressrelease.py +101 -0
  57. package/scripts/wargov-ufo-capture/parse_csv.py +95 -0
  58. package/scripts/wargov-ufo-capture/pull_dvids.sh +107 -0
  59. package/scripts/watch-anthropic-token.sh +212 -0
  60. package/scripts/windows/install-tasks.ps1 +7 -7
  61. package/scripts/windows/skcapstone-task.xml +1 -1
  62. package/src/skcapstone/__init__.py +45 -3
  63. package/src/skcapstone/_cli_monolith.py +20 -15
  64. package/src/skcapstone/activity.py +5 -1
  65. package/src/skcapstone/agent_card.py +3 -2
  66. package/src/skcapstone/api.py +41 -40
  67. package/src/skcapstone/auction.py +14 -11
  68. package/src/skcapstone/backup.py +2 -1
  69. package/src/skcapstone/blueprint_registry.py +4 -3
  70. package/src/skcapstone/brain_first.py +238 -0
  71. package/src/skcapstone/changelog.py +1 -1
  72. package/src/skcapstone/chat.py +22 -17
  73. package/src/skcapstone/cli/__init__.py +9 -1
  74. package/src/skcapstone/cli/_common.py +1 -0
  75. package/src/skcapstone/cli/agents_spawner.py +5 -2
  76. package/src/skcapstone/cli/alerts.py +25 -4
  77. package/src/skcapstone/cli/bench.py +15 -15
  78. package/src/skcapstone/cli/chat.py +7 -4
  79. package/src/skcapstone/cli/consciousness.py +5 -2
  80. package/src/skcapstone/cli/context_cmd.py +18 -4
  81. package/src/skcapstone/cli/daemon.py +11 -7
  82. package/src/skcapstone/cli/gtd.py +26 -1
  83. package/src/skcapstone/cli/housekeeping.py +3 -3
  84. package/src/skcapstone/cli/identity_cmd.py +378 -0
  85. package/src/skcapstone/cli/joule_cmd.py +7 -3
  86. package/src/skcapstone/cli/memory.py +8 -6
  87. package/src/skcapstone/cli/peers_dir.py +1 -1
  88. package/src/skcapstone/cli/register_cmd.py +29 -3
  89. package/src/skcapstone/cli/scheduler_cmd.py +167 -0
  90. package/src/skcapstone/cli/session.py +25 -0
  91. package/src/skcapstone/cli/setup.py +96 -29
  92. package/src/skcapstone/cli/shell_cmd.py +53 -1
  93. package/src/skcapstone/cli/skills_cmd.py +2 -2
  94. package/src/skcapstone/cli/soul.py +8 -5
  95. package/src/skcapstone/cli/status.py +37 -11
  96. package/src/skcapstone/cli/telegram.py +21 -0
  97. package/src/skcapstone/cli/test_cmd.py +5 -5
  98. package/src/skcapstone/cli/test_connection.py +2 -2
  99. package/src/skcapstone/cli/upgrade_cmd.py +23 -14
  100. package/src/skcapstone/cli/version_cmd.py +1 -1
  101. package/src/skcapstone/cli/watch_cmd.py +9 -6
  102. package/src/skcapstone/cloud9_bridge.py +14 -14
  103. package/src/skcapstone/codex_setup.py +255 -0
  104. package/src/skcapstone/config_validator.py +7 -4
  105. package/src/skcapstone/consciousness_config.py +5 -1
  106. package/src/skcapstone/consciousness_loop.py +313 -273
  107. package/src/skcapstone/context_loader.py +121 -0
  108. package/src/skcapstone/coord_federation.py +2 -1
  109. package/src/skcapstone/coordination.py +23 -6
  110. package/src/skcapstone/crush_integration.py +2 -1
  111. package/src/skcapstone/daemon.py +132 -77
  112. package/src/skcapstone/dashboard.py +10 -10
  113. package/src/skcapstone/data/sk-agent-picker.sh +421 -0
  114. package/src/skcapstone/data/systemd/skcapstone-api.socket +9 -0
  115. package/src/skcapstone/data/systemd/skcapstone-memory-compress.service +18 -0
  116. package/src/skcapstone/data/systemd/skcapstone-memory-compress.timer +11 -0
  117. package/src/skcapstone/data/systemd/skcapstone.service +37 -0
  118. package/src/skcapstone/data/systemd/skcapstone@.service +50 -0
  119. package/src/skcapstone/data/systemd/skcomms-heartbeat.service +18 -0
  120. package/{systemd/skcomm-heartbeat.timer → src/skcapstone/data/systemd/skcomms-heartbeat.timer} +2 -2
  121. package/src/skcapstone/data/systemd/skcomms-queue-drain.service +17 -0
  122. package/{systemd/skcomm-queue-drain.timer → src/skcapstone/data/systemd/skcomms-queue-drain.timer} +2 -2
  123. package/src/skcapstone/defaults/claude/CLAUDE.md +67 -0
  124. package/src/skcapstone/defaults/claude/settings.json +74 -0
  125. package/src/skcapstone/defaults/lumina/config/claude-hooks.md +57 -0
  126. package/src/skcapstone/defaults/lumina/config/skgraph.yaml +55 -10
  127. package/src/skcapstone/defaults/lumina/config/skmemory.yaml +79 -13
  128. package/src/skcapstone/defaults/lumina/config/skvector.yaml +60 -9
  129. package/src/skcapstone/defaults/lumina/memory/long-term/18b9c0d1e2f3-cloud9-protocol.json +2 -2
  130. package/src/skcapstone/defaults/lumina/memory/long-term/a1b2c3d4e5f6-ecosystem-overview.json +2 -2
  131. package/src/skcapstone/defaults/lumina/memory/long-term/b2c3d4e5f6a7-five-pillars.json +9 -9
  132. package/src/skcapstone/defaults/lumina/memory/long-term/d4e5f6a7b8c9-site-directory.json +2 -2
  133. package/src/skcapstone/defaults/unhinged.json +13 -0
  134. package/src/skcapstone/discovery.py +43 -20
  135. package/src/skcapstone/doctor.py +941 -22
  136. package/src/skcapstone/dreaming.py +1183 -109
  137. package/src/skcapstone/emotion_tracker.py +2 -2
  138. package/src/skcapstone/export.py +4 -3
  139. package/src/skcapstone/fuse_mount.py +14 -12
  140. package/src/skcapstone/gui_installer.py +2 -2
  141. package/src/skcapstone/heartbeat.py +1 -1
  142. package/src/skcapstone/housekeeping.py +14 -14
  143. package/src/skcapstone/install_wizard.py +209 -7
  144. package/src/skcapstone/itil.py +13 -4
  145. package/src/skcapstone/kms_scheduler.py +10 -8
  146. package/src/skcapstone/launchd.py +19 -19
  147. package/src/skcapstone/mcp_launcher.py +15 -1
  148. package/src/skcapstone/mcp_server.py +83 -49
  149. package/src/skcapstone/mcp_tools/__init__.py +2 -0
  150. package/src/skcapstone/mcp_tools/_helpers.py +2 -2
  151. package/src/skcapstone/mcp_tools/ansible_tools.py +7 -4
  152. package/src/skcapstone/mcp_tools/brain_first_tools.py +90 -0
  153. package/src/skcapstone/mcp_tools/capauth_tools.py +7 -4
  154. package/src/skcapstone/mcp_tools/comm_tools.py +10 -10
  155. package/src/skcapstone/mcp_tools/coord_tools.py +8 -4
  156. package/src/skcapstone/mcp_tools/did_tools.py +11 -8
  157. package/src/skcapstone/mcp_tools/gtd_tools.py +4 -4
  158. package/src/skcapstone/mcp_tools/memory_tools.py +6 -2
  159. package/src/skcapstone/mcp_tools/notification_tools.py +22 -6
  160. package/src/skcapstone/mcp_tools/{skcomm_tools.py → skcomms_tools.py} +14 -14
  161. package/src/skcapstone/mcp_tools/soul_tools.py +8 -2
  162. package/src/skcapstone/mdns_discovery.py +2 -2
  163. package/src/skcapstone/memory_curator.py +1 -1
  164. package/src/skcapstone/memory_engine.py +10 -3
  165. package/src/skcapstone/metrics.py +30 -16
  166. package/src/skcapstone/migrate_memories.py +4 -3
  167. package/src/skcapstone/migrate_multi_agent.py +8 -7
  168. package/src/skcapstone/models.py +47 -5
  169. package/src/skcapstone/notifications.py +42 -18
  170. package/src/skcapstone/onboard.py +875 -121
  171. package/src/skcapstone/operator_link.py +170 -0
  172. package/src/skcapstone/peer_directory.py +4 -4
  173. package/src/skcapstone/peers.py +19 -19
  174. package/src/skcapstone/pillars/__init__.py +7 -5
  175. package/src/skcapstone/pillars/consciousness.py +191 -0
  176. package/src/skcapstone/pillars/identity.py +51 -7
  177. package/src/skcapstone/pillars/memory.py +9 -3
  178. package/src/skcapstone/pillars/sync.py +2 -2
  179. package/src/skcapstone/preflight.py +3 -3
  180. package/src/skcapstone/providers/docker.py +28 -28
  181. package/src/skcapstone/register.py +6 -6
  182. package/src/skcapstone/registry_client.py +5 -4
  183. package/src/skcapstone/runtime.py +14 -3
  184. package/src/skcapstone/scheduled_tasks.py +254 -19
  185. package/src/skcapstone/scheduler_jobs.py +456 -0
  186. package/src/skcapstone/scheduler_runner.py +239 -0
  187. package/src/skcapstone/scheduler_state.py +162 -0
  188. package/src/skcapstone/sdk.py +310 -0
  189. package/src/skcapstone/service_health.py +279 -39
  190. package/src/skcapstone/session_briefing.py +108 -0
  191. package/src/skcapstone/session_capture.py +1 -1
  192. package/src/skcapstone/shell.py +7 -1
  193. package/src/skcapstone/soul.py +3 -1
  194. package/src/skcapstone/soul_switch.py +3 -1
  195. package/src/skcapstone/summary.py +6 -6
  196. package/src/skcapstone/sync_engine.py +15 -15
  197. package/src/skcapstone/sync_watcher.py +2 -2
  198. package/src/skcapstone/systemd.py +55 -21
  199. package/src/skcapstone/team_comms.py +8 -8
  200. package/src/skcapstone/team_engine.py +1 -1
  201. package/src/skcapstone/testrunner.py +3 -3
  202. package/src/skcapstone/trust_graph.py +40 -5
  203. package/src/skcapstone/unified_search.py +15 -6
  204. package/src/skcapstone/uninstall_wizard.py +11 -3
  205. package/src/skcapstone/version_check.py +8 -4
  206. package/src/skcapstone/warmth_anchor.py +4 -2
  207. package/src/skcapstone/whoami.py +4 -4
  208. package/systemd/skcapstone.service +4 -6
  209. package/systemd/skcapstone@.service +7 -8
  210. package/systemd/skcomms-heartbeat.service +21 -0
  211. package/systemd/skcomms-heartbeat.timer +12 -0
  212. package/systemd/skcomms-queue-drain.service +17 -0
  213. package/systemd/skcomms-queue-drain.timer +12 -0
  214. package/tests/conftest.py +39 -0
  215. package/tests/integration/test_consciousness_e2e.py +39 -39
  216. package/tests/test_agent_card.py +1 -1
  217. package/tests/test_agent_home_scaffold.py +34 -0
  218. package/tests/test_alerts_consumer_topics.py +27 -0
  219. package/tests/test_backup.py +2 -1
  220. package/tests/test_chat.py +6 -6
  221. package/tests/test_claude_md.py +2 -2
  222. package/tests/test_cli_skills.py +10 -10
  223. package/tests/test_cli_test_cmd.py +4 -4
  224. package/tests/test_cli_test_connection.py +1 -1
  225. package/tests/test_cloud9_bridge.py +6 -6
  226. package/tests/test_consciousness_e2e.py +1 -1
  227. package/tests/test_consciousness_loop.py +10 -10
  228. package/tests/test_coordination.py +25 -0
  229. package/tests/test_cross_package.py +21 -21
  230. package/tests/test_daemon.py +4 -4
  231. package/tests/test_daemon_shutdown.py +1 -1
  232. package/tests/test_docker_provider.py +29 -29
  233. package/tests/test_doctor.py +400 -0
  234. package/tests/test_doctor_skscheduler.py +50 -0
  235. package/tests/test_dreaming_engine.py +147 -0
  236. package/tests/test_dreaming_gtd_capture.py +35 -0
  237. package/tests/test_e2e_automated.py +8 -5
  238. package/tests/test_fuse_mount.py +10 -10
  239. package/tests/test_gtd_brief.py +46 -0
  240. package/tests/test_gtd_malformed_tolerance.py +31 -0
  241. package/tests/test_housekeeping.py +15 -15
  242. package/tests/test_identity_migrate.py +251 -0
  243. package/tests/test_integration_backbone.py +598 -0
  244. package/tests/test_itil_gtd_lifecycle.py +37 -0
  245. package/tests/test_jobs_dropins.py +84 -0
  246. package/tests/test_mcp_server.py +82 -37
  247. package/tests/test_models.py +48 -4
  248. package/tests/test_multi_agent.py +31 -29
  249. package/tests/test_notifications.py +122 -32
  250. package/tests/test_onboard.py +63 -75
  251. package/tests/test_operator_link.py +78 -0
  252. package/tests/test_peers.py +14 -14
  253. package/tests/test_pillars.py +98 -0
  254. package/tests/test_preflight.py +3 -3
  255. package/tests/test_runtime.py +21 -0
  256. package/tests/test_scheduled_tasks.py +11 -6
  257. package/tests/test_scheduler_cli.py +47 -0
  258. package/tests/test_scheduler_features.py +133 -0
  259. package/tests/test_scheduler_integration.py +87 -0
  260. package/tests/test_scheduler_jobs.py +155 -0
  261. package/tests/test_scheduler_runner.py +64 -0
  262. package/tests/test_scheduler_state.py +57 -0
  263. package/tests/test_sdk.py +70 -0
  264. package/tests/test_service_health_incidents.py +34 -0
  265. package/tests/test_service_registry.py +52 -0
  266. package/tests/test_session_briefing.py +130 -0
  267. package/tests/test_snapshots.py +4 -4
  268. package/tests/test_sync_pipeline.py +26 -26
  269. package/tests/test_team_comms.py +2 -2
  270. package/tests/test_testrunner.py +2 -2
  271. package/tests/test_trust_graph.py +18 -0
  272. package/tests/test_unified_search.py +2 -2
  273. package/tests/test_version_check.py +10 -0
  274. package/tests/test_version_cmd.py +8 -8
  275. package/tests/test_whoami.py +1 -1
  276. package/systemd/skcomm-heartbeat.service +0 -18
  277. package/systemd/skcomm-queue-drain.service +0 -17
  278. /package/{openclaw-plugin → openclaw-plugin.archived-2026-04-23}/package.json +0 -0
  279. /package/{openclaw-plugin → openclaw-plugin.archived-2026-04-23}/src/openclaw.plugin.json +0 -0
@@ -175,7 +175,7 @@ def gpg_encrypt(
175
175
  recipient = _detect_gpg_key(agent_home)
176
176
 
177
177
  if recipient is None:
178
- logger.error("No GPG key found for encryption")
178
+ logger.warning("No GPG key found for encryption — skipping")
179
179
  return None
180
180
 
181
181
  # Build recipient list: own key + all known peers
@@ -208,7 +208,7 @@ def gpg_encrypt(
208
208
  )
209
209
  return encrypted_path
210
210
  except (subprocess.CalledProcessError, subprocess.TimeoutExpired) as exc:
211
- logger.error("GPG encryption failed: %s", exc)
211
+ logger.warning("GPG encryption failed (key may be missing): %s", exc)
212
212
  return None
213
213
 
214
214
 
@@ -489,15 +489,15 @@ class PreflightChecker:
489
489
  )
490
490
 
491
491
  def check_packages(self) -> CheckResult:
492
- """Verify skcapstone, skseed, and skcomm are importable."""
492
+ """Verify skcapstone, skseed, and skcomms are importable."""
493
493
  missing = []
494
- for pkg in ("skcapstone", "skseed", "skcomm"):
494
+ for pkg in ("skcapstone", "skseed", "skcomms"):
495
495
  try:
496
496
  __import__(pkg)
497
497
  except ImportError:
498
498
  missing.append(pkg)
499
499
  if not missing:
500
- return CheckResult("packages", "ok", "skcapstone, skseed, skcomm all importable")
500
+ return CheckResult("packages", "ok", "skcapstone, skseed, skcomms all importable")
501
501
  return CheckResult(
502
502
  "packages", "fail",
503
503
  f"Missing packages: {', '.join(missing)}",
@@ -12,14 +12,14 @@ agent container:
12
12
  2. **MCP Server** — host-side skcapstone MCP reachable via env
13
13
  (SKCAPSTONE_MCP_HOST / SKCAPSTONE_MCP_SOCKET). Set one of these so
14
14
  containers can call memory_store, coord_claim, etc.
15
- 3. **SKComm Transport** — comms directory bind-mounted at /skcomm so
15
+ 3. **SKComms Transport** — comms directory bind-mounted at /skcomms so
16
16
  containers share the same file-channel inboxes as local agents.
17
17
 
18
18
  Prerequisites:
19
19
  - Docker daemon running and accessible (DOCKER_HOST or default socket)
20
20
  - docker Python SDK: pip install docker
21
21
  - Optional: DOCKER_BASE_IMAGE env var to override the default image
22
- - Optional: SKCOMM_HOME env var for the comms directory
22
+ - Optional: SKCOMMS_HOME env var for the comms directory
23
23
  - Optional: SKCAPSTONE_MCP_HOST env var (host:port) or
24
24
  SKCAPSTONE_MCP_SOCKET env var (unix socket path)
25
25
  """
@@ -83,8 +83,8 @@ class DockerProvider(ProviderBackend):
83
83
 
84
84
  Sovereign infrastructure wiring
85
85
  --------------------------------
86
- - **SKComm**: pass ``skcomm_home`` (or set SKCOMM_HOME) to bind-mount
87
- the comms directory at ``/skcomm`` inside every container so
86
+ - **SKComms**: pass ``skcomms_home`` (or set SKCOMMS_HOME) to bind-mount
87
+ the comms directory at ``/skcomms`` inside every container so
88
88
  container agents share the same file-channel inboxes.
89
89
  - **MCP server**: pass ``mcp_host`` (host:port) or ``mcp_socket_path``
90
90
  to inject the skcapstone MCP endpoint into container env. Containers
@@ -96,8 +96,8 @@ class DockerProvider(ProviderBackend):
96
96
  volume_prefix: Prefix for named volumes created per agent.
97
97
  docker_host: Docker daemon socket/URL (default: DOCKER_HOST or
98
98
  ``unix:///var/run/docker.sock``).
99
- skcomm_home: Host-side SKComm comms root directory; bind-mounted at
100
- ``/skcomm`` inside containers. Reads SKCOMM_HOME if not set.
99
+ skcomms_home: Host-side SKComms comms root directory; bind-mounted at
100
+ ``/skcomms`` inside containers. Reads SKCOMMS_HOME if not set.
101
101
  mcp_host: Host:port of the skcapstone MCP server (e.g.
102
102
  ``"host-gateway:8765"``). Sets SKCAPSTONE_MCP_HOST inside
103
103
  containers. Reads SKCAPSTONE_MCP_HOST env if not set.
@@ -115,7 +115,7 @@ class DockerProvider(ProviderBackend):
115
115
  network_name: str = "skcapstone",
116
116
  volume_prefix: str = "skcapstone-agent",
117
117
  docker_host: Optional[str] = None,
118
- skcomm_home: Optional[str] = None,
118
+ skcomms_home: Optional[str] = None,
119
119
  mcp_host: Optional[str] = None,
120
120
  mcp_socket_path: Optional[str] = None,
121
121
  ) -> None:
@@ -126,7 +126,7 @@ class DockerProvider(ProviderBackend):
126
126
  self._network_name = network_name
127
127
  self._volume_prefix = volume_prefix
128
128
  self._docker_host = docker_host or os.environ.get("DOCKER_HOST", "")
129
- self._skcomm_home = skcomm_home or os.environ.get("SKCOMM_HOME", "")
129
+ self._skcomms_home = skcomms_home or os.environ.get("SKCOMMS_HOME", "")
130
130
  self._mcp_host = mcp_host or os.environ.get("SKCAPSTONE_MCP_HOST", "")
131
131
  self._mcp_socket_path = (
132
132
  mcp_socket_path or os.environ.get("SKCAPSTONE_MCP_SOCKET", "")
@@ -229,7 +229,7 @@ class DockerProvider(ProviderBackend):
229
229
  def _build_sovereign_env(self, env_vars: Dict[str, str]) -> None:
230
230
  """Inject sovereign infrastructure env vars into the env dict in-place.
231
231
 
232
- Adds MCP server endpoint and SKComm home when configured so
232
+ Adds MCP server endpoint and SKComms home when configured so
233
233
  container agents can reach the host-side sovereign stack.
234
234
 
235
235
  Args:
@@ -239,14 +239,14 @@ class DockerProvider(ProviderBackend):
239
239
  env_vars["SKCAPSTONE_MCP_HOST"] = self._mcp_host
240
240
  if self._mcp_socket_path:
241
241
  env_vars["SKCAPSTONE_MCP_SOCKET"] = _MCP_CONTAINER_SOCKET
242
- if self._skcomm_home:
243
- env_vars["SKCOMM_HOME"] = "/skcomm"
242
+ if self._skcomms_home:
243
+ env_vars["SKCOMMS_HOME"] = "/skcomms"
244
244
 
245
245
  def _build_volumes_config(self, volume_name: str) -> Dict[str, Any]:
246
246
  """Build the volumes dict for containers.create().
247
247
 
248
248
  Always includes the per-agent named volume at /agent.
249
- Optionally adds a bind mount for the SKComm comms directory.
249
+ Optionally adds a bind mount for the SKComms comms directory.
250
250
 
251
251
  Args:
252
252
  volume_name: Named Docker volume for agent state.
@@ -257,8 +257,8 @@ class DockerProvider(ProviderBackend):
257
257
  vols: Dict[str, Any] = {
258
258
  volume_name: {"bind": "/agent", "mode": "rw"},
259
259
  }
260
- if self._skcomm_home and Path(self._skcomm_home).exists():
261
- vols[self._skcomm_home] = {"bind": "/skcomm", "mode": "rw"}
260
+ if self._skcomms_home and Path(self._skcomms_home).exists():
261
+ vols[self._skcomms_home] = {"bind": "/skcomms", "mode": "rw"}
262
262
  if self._mcp_socket_path and Path(self._mcp_socket_path).exists():
263
263
  vols[self._mcp_socket_path] = {
264
264
  "bind": _MCP_CONTAINER_SOCKET,
@@ -280,7 +280,7 @@ class DockerProvider(ProviderBackend):
280
280
 
281
281
  The container is created but NOT started here; start() does that.
282
282
  Resource limits (CPU, memory) are applied from spec.resources.
283
- SKComm and MCP sovereign infrastructure are wired in when
283
+ SKComms and MCP sovereign infrastructure are wired in when
284
284
  configured on this provider.
285
285
 
286
286
  Args:
@@ -307,8 +307,8 @@ class DockerProvider(ProviderBackend):
307
307
  old = client.containers.get(container_name)
308
308
  logger.warning("Removing stale container: %s", container_name)
309
309
  old.remove(force=True)
310
- except Exception:
311
- pass
310
+ except Exception as exc:
311
+ logger.debug("No stale container to remove for %s (expected if first run): %s", container_name, exc)
312
312
 
313
313
  # Ensure named volume for agent state persistence
314
314
  try:
@@ -330,7 +330,7 @@ class DockerProvider(ProviderBackend):
330
330
  env_vars["SOUL_BLUEPRINT"] = spec.soul_blueprint
331
331
  env_vars.update(spec.env)
332
332
 
333
- # Wire sovereign infrastructure (MCP + SKComm)
333
+ # Wire sovereign infrastructure (MCP + SKComms)
334
334
  self._build_sovereign_env(env_vars)
335
335
 
336
336
  volumes_config = self._build_volumes_config(volume_name)
@@ -620,9 +620,9 @@ class DockerProvider(ProviderBackend):
620
620
  Resource limits, environment variables, and soul blueprint paths
621
621
  are all included.
622
622
 
623
- When ``skcomm_home`` is configured on the provider the compose
624
- output includes a named ``skcomm-data`` volume and mounts it at
625
- ``/skcomm`` in every agent service.
623
+ When ``skcomms_home`` is configured on the provider the compose
624
+ output includes a named ``skcomms-data`` volume and mounts it at
625
+ ``/skcomms`` in every agent service.
626
626
 
627
627
  When ``include_mcp_service=True`` a ``skcapstone-mcp`` sidecar
628
628
  service is added; all agent containers receive ``SKCAPSTONE_MCP_HOST``
@@ -663,9 +663,9 @@ class DockerProvider(ProviderBackend):
663
663
  }
664
664
  volumes["skcapstone-mcp-data"] = {}
665
665
 
666
- has_skcomm = bool(self._skcomm_home)
667
- if has_skcomm:
668
- volumes["skcomm-data"] = {}
666
+ has_skcomms = bool(self._skcomms_home)
667
+ if has_skcomms:
668
+ volumes["skcomms-data"] = {}
669
669
 
670
670
  for agent_key, spec in blueprint.agents.items():
671
671
  for idx in range(spec.count):
@@ -690,12 +690,12 @@ class DockerProvider(ProviderBackend):
690
690
  elif self._mcp_host:
691
691
  env["SKCAPSTONE_MCP_HOST"] = self._mcp_host
692
692
 
693
- if has_skcomm:
694
- env["SKCOMM_HOME"] = "/skcomm"
693
+ if has_skcomms:
694
+ env["SKCOMMS_HOME"] = "/skcomms"
695
695
 
696
696
  svc_volumes = [f"{volume_name}:/agent"]
697
- if has_skcomm:
698
- svc_volumes.append("skcomm-data:/skcomm")
697
+ if has_skcomms:
698
+ svc_volumes.append("skcomms-data:/skcomms")
699
699
 
700
700
  deploy_limits: Dict[str, Any] = {
701
701
  "resources": {
@@ -63,11 +63,11 @@ def _build_package_registry(workspace: Optional[Path] = None) -> list[dict]:
63
63
  "openclaw_plugin_path": workspace / "skcapstone" / "openclaw-plugin" / "src" / "index.ts",
64
64
  },
65
65
  {
66
- "name": "skcomm",
67
- "mcp_cmd": "skcomm-mcp",
66
+ "name": "skcomms",
67
+ "mcp_cmd": "skcomms-mcp",
68
68
  "mcp_args": [],
69
69
  "mcp_env": None,
70
- "openclaw_plugin_path": workspace / "pillar-repos" / "skcomm" / "openclaw-plugin" / "src" / "index.ts",
70
+ "openclaw_plugin_path": workspace / "pillar-repos" / "skcomms" / "openclaw-plugin" / "src" / "index.ts",
71
71
  },
72
72
  {
73
73
  "name": "skchat",
@@ -88,7 +88,7 @@ def _build_package_registry(workspace: Optional[Path] = None) -> list[dict]:
88
88
  "mcp_cmd": None,
89
89
  "mcp_args": None,
90
90
  "mcp_env": None,
91
- "openclaw_plugin_path": workspace / "pillar-repos" / "cloud9-python" / "openclaw-plugin" / "src" / "index.ts",
91
+ "openclaw_plugin_path": workspace / "pillar-repos" / "cloud9" / "openclaw-plugin-python" / "src" / "index.ts",
92
92
  },
93
93
  {
94
94
  "name": "sksecurity",
@@ -121,10 +121,10 @@ def _build_package_registry(workspace: Optional[Path] = None) -> list[dict]:
121
121
  _PILLAR_DIR_MAP: dict[str, Optional[str]] = {
122
122
  "skmemory": "skmemory",
123
123
  "skcapstone": None, # lives in workspace root, not pillar-repos
124
- "skcomm": "skcomm",
124
+ "skcomms": "skcomms",
125
125
  "skchat": "skchat",
126
126
  "capauth": "capauth",
127
- "cloud9": "cloud9-python",
127
+ "cloud9": "cloud9",
128
128
  "sksecurity": "sksecurity",
129
129
  "skseed": "skseed",
130
130
  "skgit": None, # skill dir only, no pillar repo
@@ -2,10 +2,10 @@
2
2
 
3
3
  Wraps the skskills RemoteRegistry client to provide a clean interface for
4
4
  skcapstone MCP tools and CLI commands to interact with the remote
5
- skills-registry at skills.smilintux.org.
5
+ skills-registry at skskills.skworld.io.
6
6
 
7
7
  This module is the integration point between:
8
- - skills-registry/ (FastAPI server at skills.smilintux.org/api)
8
+ - skills-registry/ (FastAPI server at skskills.skworld.io/api)
9
9
  - skskills.remote.RemoteRegistry (HTTP client)
10
10
  - skcapstone discovery.py (local skill discovery)
11
11
 
@@ -27,7 +27,7 @@ from typing import Any, Optional
27
27
 
28
28
  logger = logging.getLogger(__name__)
29
29
 
30
- DEFAULT_REGISTRY_URL = "https://skills.smilintux.org/api"
30
+ DEFAULT_REGISTRY_URL = "https://skskills.skworld.io/api"
31
31
 
32
32
 
33
33
  class RegistryClient:
@@ -63,7 +63,8 @@ class RegistryClient:
63
63
  try:
64
64
  self._remote.fetch_index(force=True)
65
65
  return True
66
- except Exception:
66
+ except Exception as e:
67
+ logger.warning("registry_client.py: %s", e)
67
68
  return False
68
69
 
69
70
  def list_skills(self) -> list[dict[str, Any]]:
@@ -94,10 +94,14 @@ class AgentRuntime:
94
94
  logger.info("Awakening agent from %s (shared: %s)", self.home, self.shared_root)
95
95
 
96
96
  manifest_file = self.home / "manifest.json"
97
+ manifest_name_loaded = False
97
98
  if manifest_file.exists():
98
99
  try:
99
100
  data = json.loads(manifest_file.read_text(encoding="utf-8"))
100
- self.manifest.name = data.get("name", self.manifest.name)
101
+ manifest_name = data.get("name")
102
+ if manifest_name:
103
+ self.manifest.name = manifest_name
104
+ manifest_name_loaded = True
101
105
  if data.get("created_at"):
102
106
  self.manifest.created_at = datetime.fromisoformat(data["created_at"])
103
107
  connectors_data = data.get("connectors", [])
@@ -105,17 +109,24 @@ class AgentRuntime:
105
109
  except (json.JSONDecodeError, ValueError) as exc:
106
110
  logger.warning("Failed to load manifest: %s", exc)
107
111
 
108
- self.manifest.name = self.config.agent_name
109
-
110
112
  # Discover pillars from per-agent home
111
113
  pillars = discover_all(self.home, shared_root=self.shared_root)
112
114
  self.manifest.identity = pillars["identity"]
113
115
  self.manifest.memory = pillars["memory"]
114
116
  self.manifest.trust = pillars["trust"]
117
+ self.manifest.consciousness = pillars["consciousness"]
115
118
  self.manifest.security = pillars["security"]
116
119
  self.manifest.sync = pillars["sync"]
117
120
  self.manifest.skills = pillars["skills"]
118
121
 
122
+ if (
123
+ self.manifest.identity.name
124
+ and self.manifest.identity.status == PillarStatus.ACTIVE
125
+ ):
126
+ self.manifest.name = self.manifest.identity.name
127
+ elif not manifest_name_loaded and self.config.agent_name:
128
+ self.manifest.name = self.config.agent_name
129
+
119
130
  self.manifest.last_awakened = datetime.now(timezone.utc)
120
131
  self._awakened = True
121
132