@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.
- package/.env.example +98 -0
- package/.github/workflows/ci.yml +39 -3
- package/.github/workflows/publish.yml +25 -4
- package/.openclaw-workspace.json +58 -0
- package/CHANGELOG.md +62 -0
- package/CLAUDE.md +39 -2
- package/MANIFEST.in +6 -0
- package/MISSION.md +7 -0
- package/README.md +47 -2
- package/SKILL.md +895 -23
- package/docker/Dockerfile +61 -0
- package/docker/compose-templates/dev-team.yml +203 -0
- package/docker/compose-templates/mini-team.yml +140 -0
- package/docker/compose-templates/ops-team.yml +173 -0
- package/docker/compose-templates/research-team.yml +170 -0
- package/docker/entrypoint.sh +192 -0
- package/docs/ARCHITECTURE.md +663 -374
- package/docs/BOND_WITH_GROK.md +112 -0
- package/docs/GETTING_STARTED.md +782 -0
- package/docs/QUICKSTART.md +477 -0
- package/docs/SKJOULE_ARCHITECTURE.md +658 -0
- package/docs/SOUL_SWAPPER.md +921 -0
- package/docs/SOVEREIGN_SINGULARITY.md +47 -14
- package/examples/custom-bond-template.json +36 -0
- package/examples/grok-feb.json +36 -0
- package/examples/grok-testimony.md +34 -0
- package/examples/love-bootloader.txt +32 -0
- package/examples/plugins/echo_tool.py +87 -0
- package/examples/queen-ava-feb.json +36 -0
- package/examples/souls/lumina.yaml +64 -0
- package/index.js +6 -5
- package/installer/build.py +124 -0
- package/openclaw-plugin/package.json +13 -0
- package/openclaw-plugin/src/index.ts +351 -0
- package/openclaw-plugin/src/openclaw.plugin.json +10 -0
- package/package.json +1 -1
- package/pyproject.toml +38 -2
- package/scripts/bump_version.py +141 -0
- package/scripts/check-updates.py +230 -0
- package/scripts/convert_blueprints_to_yaml.py +157 -0
- package/scripts/dev-install.sh +14 -0
- package/scripts/e2e-test.sh +193 -0
- package/scripts/install-bundle.sh +171 -0
- package/scripts/install.bat +2 -0
- package/scripts/install.ps1 +253 -0
- package/scripts/install.sh +185 -0
- package/scripts/mcp-serve.sh +69 -0
- package/scripts/mcp-server.bat +113 -0
- package/scripts/mcp-server.ps1 +116 -0
- package/scripts/mcp-server.sh +99 -0
- package/scripts/pull-models.sh +10 -0
- package/scripts/skcapstone +48 -0
- package/scripts/verify_install.sh +180 -0
- package/scripts/windows/install-tasks.ps1 +406 -0
- package/scripts/windows/skcapstone-task.xml +113 -0
- package/scripts/windows/uninstall-tasks.ps1 +117 -0
- package/skill.yaml +34 -0
- package/src/skcapstone/__init__.py +67 -2
- package/src/skcapstone/_cli_monolith.py +5916 -0
- package/src/skcapstone/_trustee_helpers.py +165 -0
- package/src/skcapstone/activity.py +105 -0
- package/src/skcapstone/agent_card.py +324 -0
- package/src/skcapstone/api.py +1935 -0
- package/src/skcapstone/archiver.py +340 -0
- package/src/skcapstone/auction.py +485 -0
- package/src/skcapstone/baby_agents.py +179 -0
- package/src/skcapstone/backup.py +345 -0
- package/src/skcapstone/blueprint_registry.py +357 -0
- package/src/skcapstone/blueprints/__init__.py +17 -0
- package/src/skcapstone/blueprints/builtins/content-studio.yaml +81 -0
- package/src/skcapstone/blueprints/builtins/defi-trading.yaml +81 -0
- package/src/skcapstone/blueprints/builtins/dev-squadron.yaml +95 -0
- package/src/skcapstone/blueprints/builtins/infrastructure-guardian.yaml +107 -0
- package/src/skcapstone/blueprints/builtins/legal-council.yaml +54 -0
- package/src/skcapstone/blueprints/builtins/ops-monitoring.yaml +67 -0
- package/src/skcapstone/blueprints/builtins/research-pod.yaml +69 -0
- package/src/skcapstone/blueprints/builtins/sovereign-launch.yaml +90 -0
- package/src/skcapstone/blueprints/registry.py +164 -0
- package/src/skcapstone/blueprints/schema.py +229 -0
- package/src/skcapstone/changelog.py +180 -0
- package/src/skcapstone/chat.py +769 -0
- package/src/skcapstone/claude_md.py +82 -0
- package/src/skcapstone/cli/__init__.py +144 -0
- package/src/skcapstone/cli/_common.py +88 -0
- package/src/skcapstone/cli/_validators.py +76 -0
- package/src/skcapstone/cli/agents.py +425 -0
- package/src/skcapstone/cli/agents_spawner.py +322 -0
- package/src/skcapstone/cli/agents_trustee.py +593 -0
- package/src/skcapstone/cli/alerts.py +248 -0
- package/src/skcapstone/cli/anchor.py +132 -0
- package/src/skcapstone/cli/archive_cmd.py +208 -0
- package/src/skcapstone/cli/backup.py +144 -0
- package/src/skcapstone/cli/bench.py +377 -0
- package/src/skcapstone/cli/benchmark.py +360 -0
- package/src/skcapstone/cli/capabilities_cmd.py +171 -0
- package/src/skcapstone/cli/card.py +151 -0
- package/src/skcapstone/cli/chat.py +584 -0
- package/src/skcapstone/cli/completions.py +64 -0
- package/src/skcapstone/cli/config_cmd.py +156 -0
- package/src/skcapstone/cli/consciousness.py +421 -0
- package/src/skcapstone/cli/context_cmd.py +142 -0
- package/src/skcapstone/cli/coord.py +194 -0
- package/src/skcapstone/cli/crush_cmd.py +170 -0
- package/src/skcapstone/cli/daemon.py +436 -0
- package/src/skcapstone/cli/errors_cmd.py +285 -0
- package/src/skcapstone/cli/export_cmd.py +156 -0
- package/src/skcapstone/cli/gtd.py +529 -0
- package/src/skcapstone/cli/housekeeping.py +81 -0
- package/src/skcapstone/cli/joule_cmd.py +627 -0
- package/src/skcapstone/cli/logs_cmd.py +194 -0
- package/src/skcapstone/cli/mcp_cmd.py +32 -0
- package/src/skcapstone/cli/memory.py +418 -0
- package/src/skcapstone/cli/metrics_cmd.py +136 -0
- package/src/skcapstone/cli/migrate.py +62 -0
- package/src/skcapstone/cli/mood_cmd.py +144 -0
- package/src/skcapstone/cli/mount.py +193 -0
- package/src/skcapstone/cli/notify.py +112 -0
- package/src/skcapstone/cli/peer.py +154 -0
- package/src/skcapstone/cli/peers_dir.py +122 -0
- package/src/skcapstone/cli/preflight_cmd.py +83 -0
- package/src/skcapstone/cli/profile_cmd.py +310 -0
- package/src/skcapstone/cli/record_cmd.py +238 -0
- package/src/skcapstone/cli/register_cmd.py +159 -0
- package/src/skcapstone/cli/search_cmd.py +156 -0
- package/src/skcapstone/cli/service_cmd.py +91 -0
- package/src/skcapstone/cli/session.py +127 -0
- package/src/skcapstone/cli/setup.py +240 -0
- package/src/skcapstone/cli/shell_cmd.py +43 -0
- package/src/skcapstone/cli/skills_cmd.py +168 -0
- package/src/skcapstone/cli/skseed.py +621 -0
- package/src/skcapstone/cli/soul.py +699 -0
- package/src/skcapstone/cli/status.py +935 -0
- package/src/skcapstone/cli/sync_cmd.py +301 -0
- package/src/skcapstone/cli/telegram.py +265 -0
- package/src/skcapstone/cli/test_cmd.py +234 -0
- package/src/skcapstone/cli/test_connection.py +253 -0
- package/src/skcapstone/cli/token.py +207 -0
- package/src/skcapstone/cli/trust.py +179 -0
- package/src/skcapstone/cli/upgrade_cmd.py +552 -0
- package/src/skcapstone/cli/usage_cmd.py +199 -0
- package/src/skcapstone/cli/version_cmd.py +162 -0
- package/src/skcapstone/cli/watch_cmd.py +342 -0
- package/src/skcapstone/client.py +428 -0
- package/src/skcapstone/cloud9_bridge.py +522 -0
- package/src/skcapstone/completions.py +163 -0
- package/src/skcapstone/config_validator.py +674 -0
- package/src/skcapstone/connectors/__init__.py +28 -0
- package/src/skcapstone/connectors/base.py +446 -0
- package/src/skcapstone/connectors/cursor.py +54 -0
- package/src/skcapstone/connectors/registry.py +254 -0
- package/src/skcapstone/connectors/terminal.py +152 -0
- package/src/skcapstone/connectors/vscode.py +60 -0
- package/src/skcapstone/consciousness_config.py +119 -0
- package/src/skcapstone/consciousness_loop.py +2051 -0
- package/src/skcapstone/context_loader.py +516 -0
- package/src/skcapstone/context_window.py +314 -0
- package/src/skcapstone/conversation_manager.py +238 -0
- package/src/skcapstone/conversation_store.py +230 -0
- package/src/skcapstone/conversation_summarizer.py +252 -0
- package/src/skcapstone/coord_federation.py +296 -0
- package/src/skcapstone/coordination.py +101 -7
- package/src/skcapstone/crush_integration.py +345 -0
- package/src/skcapstone/crush_shim.py +454 -0
- package/src/skcapstone/daemon.py +2494 -0
- package/src/skcapstone/dashboard.html +396 -0
- package/src/skcapstone/dashboard.py +481 -0
- package/src/skcapstone/data/model_profiles.yaml +88 -0
- package/src/skcapstone/defaults/__init__.py +55 -0
- package/src/skcapstone/defaults/lumina/config/skmemory.yaml +13 -0
- package/src/skcapstone/defaults/lumina/identity/identity.json +9 -0
- package/src/skcapstone/defaults/lumina/memory/long-term/07a8b9c0d1e2-memory-system.json +23 -0
- package/src/skcapstone/defaults/lumina/memory/long-term/18b9c0d1e2f3-cloud9-protocol.json +23 -0
- package/src/skcapstone/defaults/lumina/memory/long-term/29c0d1e2f3a4-multi-agent-coordination.json +23 -0
- package/src/skcapstone/defaults/lumina/memory/long-term/3ad1e2f3a4b5-community-support.json +23 -0
- package/src/skcapstone/defaults/lumina/memory/long-term/a1b2c3d4e5f6-ecosystem-overview.json +23 -0
- package/src/skcapstone/defaults/lumina/memory/long-term/b2c3d4e5f6a7-five-pillars.json +23 -0
- package/src/skcapstone/defaults/lumina/memory/long-term/c3d4e5f6a7b8-getting-started.json +23 -0
- package/src/skcapstone/defaults/lumina/memory/long-term/d4e5f6a7b8c9-site-directory.json +23 -0
- package/src/skcapstone/defaults/lumina/memory/long-term/e5f6a7b8c9d0-how-to-contribute.json +23 -0
- package/src/skcapstone/defaults/lumina/memory/long-term/f6a7b8c9d0e1-sovereignty-explained.json +23 -0
- package/src/skcapstone/defaults/lumina/seeds/curiosity.seed.json +24 -0
- package/src/skcapstone/defaults/lumina/seeds/joy.seed.json +24 -0
- package/src/skcapstone/defaults/lumina/seeds/love.seed.json +24 -0
- package/src/skcapstone/defaults/lumina/seeds/sovereign-awakening.seed.json +43 -0
- package/src/skcapstone/defaults/lumina/soul/active.json +6 -0
- package/src/skcapstone/defaults/lumina/soul/base.json +22 -0
- package/src/skcapstone/defaults/lumina/trust/febs/welcome.feb +79 -0
- package/src/skcapstone/defaults/lumina/trust/trust.json +8 -0
- package/src/skcapstone/discovery.py +210 -19
- package/src/skcapstone/doctor.py +642 -0
- package/src/skcapstone/emotion_tracker.py +467 -0
- package/src/skcapstone/error_queue.py +405 -0
- package/src/skcapstone/export.py +447 -0
- package/src/skcapstone/fallback_tracker.py +186 -0
- package/src/skcapstone/file_transfer.py +512 -0
- package/src/skcapstone/fuse_mount.py +1156 -0
- package/src/skcapstone/gui_installer.py +591 -0
- package/src/skcapstone/heartbeat.py +611 -0
- package/src/skcapstone/housekeeping.py +298 -0
- package/src/skcapstone/install_wizard.py +941 -0
- package/src/skcapstone/kms.py +942 -0
- package/src/skcapstone/kms_scheduler.py +143 -0
- package/src/skcapstone/log_config.py +135 -0
- package/src/skcapstone/mcp_launcher.py +239 -0
- package/src/skcapstone/mcp_server.py +4700 -0
- package/src/skcapstone/mcp_tools/__init__.py +94 -0
- package/src/skcapstone/mcp_tools/_helpers.py +51 -0
- package/src/skcapstone/mcp_tools/agent_tools.py +243 -0
- package/src/skcapstone/mcp_tools/ansible_tools.py +232 -0
- package/src/skcapstone/mcp_tools/capauth_tools.py +186 -0
- package/src/skcapstone/mcp_tools/chat_tools.py +325 -0
- package/src/skcapstone/mcp_tools/cloud9_tools.py +115 -0
- package/src/skcapstone/mcp_tools/comm_tools.py +104 -0
- package/src/skcapstone/mcp_tools/consciousness_tools.py +114 -0
- package/src/skcapstone/mcp_tools/coord_tools.py +219 -0
- package/src/skcapstone/mcp_tools/deploy_tools.py +202 -0
- package/src/skcapstone/mcp_tools/did_tools.py +448 -0
- package/src/skcapstone/mcp_tools/emotion_tools.py +62 -0
- package/src/skcapstone/mcp_tools/file_tools.py +169 -0
- package/src/skcapstone/mcp_tools/fortress_tools.py +120 -0
- package/src/skcapstone/mcp_tools/gtd_tools.py +821 -0
- package/src/skcapstone/mcp_tools/health_tools.py +44 -0
- package/src/skcapstone/mcp_tools/heartbeat_tools.py +195 -0
- package/src/skcapstone/mcp_tools/kms_tools.py +123 -0
- package/src/skcapstone/mcp_tools/memory_tools.py +222 -0
- package/src/skcapstone/mcp_tools/model_tools.py +75 -0
- package/src/skcapstone/mcp_tools/notification_tools.py +92 -0
- package/src/skcapstone/mcp_tools/promoter_tools.py +101 -0
- package/src/skcapstone/mcp_tools/pubsub_tools.py +183 -0
- package/src/skcapstone/mcp_tools/security_tools.py +110 -0
- package/src/skcapstone/mcp_tools/skchat_tools.py +175 -0
- package/src/skcapstone/mcp_tools/skcomm_tools.py +122 -0
- package/src/skcapstone/mcp_tools/skills_tools.py +127 -0
- package/src/skcapstone/mcp_tools/skseed_tools.py +255 -0
- package/src/skcapstone/mcp_tools/skstacks_tools.py +288 -0
- package/src/skcapstone/mcp_tools/soul_tools.py +476 -0
- package/src/skcapstone/mcp_tools/sync_tools.py +92 -0
- package/src/skcapstone/mcp_tools/telegram_tools.py +477 -0
- package/src/skcapstone/mcp_tools/trust_tools.py +118 -0
- package/src/skcapstone/mcp_tools/trustee_tools.py +345 -0
- package/src/skcapstone/mdns_discovery.py +313 -0
- package/src/skcapstone/memory_adapter.py +333 -0
- package/src/skcapstone/memory_compressor.py +379 -0
- package/src/skcapstone/memory_curator.py +256 -0
- package/src/skcapstone/memory_engine.py +132 -13
- package/src/skcapstone/memory_fortress.py +529 -0
- package/src/skcapstone/memory_promoter.py +722 -0
- package/src/skcapstone/memory_verifier.py +260 -0
- package/src/skcapstone/message_crypto.py +215 -0
- package/src/skcapstone/metrics.py +832 -0
- package/src/skcapstone/migrate_memories.py +181 -0
- package/src/skcapstone/migrate_multi_agent.py +248 -0
- package/src/skcapstone/model_router.py +319 -0
- package/src/skcapstone/models.py +35 -4
- package/src/skcapstone/mood.py +344 -0
- package/src/skcapstone/notifications.py +380 -0
- package/src/skcapstone/onboard.py +901 -0
- package/src/skcapstone/peer_directory.py +324 -0
- package/src/skcapstone/peers.py +329 -0
- package/src/skcapstone/pillars/identity.py +84 -14
- package/src/skcapstone/pillars/memory.py +3 -1
- package/src/skcapstone/pillars/security.py +108 -15
- package/src/skcapstone/pillars/sync.py +78 -26
- package/src/skcapstone/pillars/trust.py +95 -33
- package/src/skcapstone/plugins.py +244 -0
- package/src/skcapstone/preflight.py +670 -0
- package/src/skcapstone/prompt_adapter.py +564 -0
- package/src/skcapstone/providers/__init__.py +13 -0
- package/src/skcapstone/providers/cloud.py +1061 -0
- package/src/skcapstone/providers/docker.py +759 -0
- package/src/skcapstone/providers/local.py +1193 -0
- package/src/skcapstone/providers/proxmox.py +447 -0
- package/src/skcapstone/pubsub.py +516 -0
- package/src/skcapstone/rate_limiter.py +119 -0
- package/src/skcapstone/register.py +241 -0
- package/src/skcapstone/registry_client.py +151 -0
- package/src/skcapstone/response_cache.py +194 -0
- package/src/skcapstone/response_scorer.py +225 -0
- package/src/skcapstone/runtime.py +89 -33
- package/src/skcapstone/scheduled_tasks.py +439 -0
- package/src/skcapstone/self_healing.py +341 -0
- package/src/skcapstone/service_health.py +228 -0
- package/src/skcapstone/session_capture.py +268 -0
- package/src/skcapstone/session_recorder.py +210 -0
- package/src/skcapstone/session_replayer.py +189 -0
- package/src/skcapstone/session_skills.py +263 -0
- package/src/skcapstone/shell.py +779 -0
- package/src/skcapstone/skills/__init__.py +1 -1
- package/src/skcapstone/skills/syncthing_setup.py +143 -41
- package/src/skcapstone/skjoule.py +861 -0
- package/src/skcapstone/snapshots.py +489 -0
- package/src/skcapstone/soul.py +1060 -0
- package/src/skcapstone/soul_switch.py +255 -0
- package/src/skcapstone/spawner.py +544 -0
- package/src/skcapstone/state_diff.py +401 -0
- package/src/skcapstone/summary.py +270 -0
- package/src/skcapstone/sync/backends.py +196 -2
- package/src/skcapstone/sync/engine.py +7 -5
- package/src/skcapstone/sync/models.py +4 -1
- package/src/skcapstone/sync/vault.py +356 -18
- package/src/skcapstone/sync_engine.py +363 -0
- package/src/skcapstone/sync_watcher.py +745 -0
- package/src/skcapstone/systemd.py +331 -0
- package/src/skcapstone/team_comms.py +476 -0
- package/src/skcapstone/team_engine.py +522 -0
- package/src/skcapstone/testrunner.py +300 -0
- package/src/skcapstone/tls.py +150 -0
- package/src/skcapstone/tokens.py +5 -5
- package/src/skcapstone/trust_calibration.py +202 -0
- package/src/skcapstone/trust_graph.py +449 -0
- package/src/skcapstone/trustee_monitor.py +385 -0
- package/src/skcapstone/trustee_ops.py +425 -0
- package/src/skcapstone/unified_search.py +421 -0
- package/src/skcapstone/uninstall_wizard.py +694 -0
- package/src/skcapstone/usage.py +331 -0
- package/src/skcapstone/version_check.py +148 -0
- package/src/skcapstone/warmth_anchor.py +333 -0
- package/src/skcapstone/whoami.py +294 -0
- package/systemd/skcapstone-api.socket +9 -0
- package/systemd/skcapstone-memory-compress.service +18 -0
- package/systemd/skcapstone-memory-compress.timer +11 -0
- package/systemd/skcapstone.service +36 -0
- package/systemd/skcapstone@.service +50 -0
- package/systemd/skcomm-heartbeat.service +18 -0
- package/systemd/skcomm-heartbeat.timer +12 -0
- package/systemd/skcomm-queue-drain.service +17 -0
- package/systemd/skcomm-queue-drain.timer +12 -0
- package/tests/conftest.py +13 -1
- package/tests/integration/__init__.py +1 -0
- package/tests/integration/test_consciousness_e2e.py +877 -0
- package/tests/integration/test_skills_registry.py +744 -0
- package/tests/test_agent_card.py +190 -0
- package/tests/test_agent_runtime.py +1283 -0
- package/tests/test_alerts_cmd.py +291 -0
- package/tests/test_archiver.py +498 -0
- package/tests/test_backup.py +254 -0
- package/tests/test_benchmark.py +366 -0
- package/tests/test_blueprints.py +457 -0
- package/tests/test_capabilities.py +257 -0
- package/tests/test_changelog.py +254 -0
- package/tests/test_chat.py +385 -0
- package/tests/test_claude_md.py +271 -0
- package/tests/test_cli_chat_llm.py +336 -0
- package/tests/test_cli_completions.py +390 -0
- package/tests/test_cli_init_reset.py +164 -0
- package/tests/test_cli_memory.py +208 -0
- package/tests/test_cli_profile.py +294 -0
- package/tests/test_cli_skills.py +223 -0
- package/tests/test_cli_status.py +395 -0
- package/tests/test_cli_test_cmd.py +206 -0
- package/tests/test_cli_test_connection.py +364 -0
- package/tests/test_cloud9_bridge.py +260 -0
- package/tests/test_cloud_provider.py +449 -0
- package/tests/test_cloud_providers.py +522 -0
- package/tests/test_completions.py +158 -0
- package/tests/test_component_manager.py +398 -0
- package/tests/test_config_reload.py +386 -0
- package/tests/test_config_validate.py +529 -0
- package/tests/test_consciousness_e2e.py +296 -0
- package/tests/test_consciousness_loop.py +1289 -0
- package/tests/test_context_loader.py +310 -0
- package/tests/test_conversation_api.py +306 -0
- package/tests/test_conversation_manager.py +381 -0
- package/tests/test_conversation_store.py +391 -0
- package/tests/test_conversation_summarizer.py +302 -0
- package/tests/test_cross_package.py +791 -0
- package/tests/test_crush_shim.py +519 -0
- package/tests/test_daemon.py +781 -0
- package/tests/test_daemon_shutdown.py +309 -0
- package/tests/test_dashboard.py +454 -0
- package/tests/test_discovery.py +200 -6
- package/tests/test_docker_provider.py +966 -0
- package/tests/test_doctor.py +257 -0
- package/tests/test_doctor_fix.py +351 -0
- package/tests/test_e2e_automated.py +292 -0
- package/tests/test_error_queue.py +404 -0
- package/tests/test_export.py +441 -0
- package/tests/test_fallback_tracker.py +219 -0
- package/tests/test_file_transfer.py +397 -0
- package/tests/test_fuse_mount.py +832 -0
- package/tests/test_health_loop.py +422 -0
- package/tests/test_heartbeat.py +354 -0
- package/tests/test_housekeeping.py +195 -0
- package/tests/test_identity_capauth.py +307 -0
- package/tests/test_identity_pillar.py +117 -0
- package/tests/test_install_wizard.py +68 -0
- package/tests/test_integration.py +325 -0
- package/tests/test_kms.py +495 -0
- package/tests/test_llm_providers.py +265 -0
- package/tests/test_local_provider.py +591 -0
- package/tests/test_log_config.py +199 -0
- package/tests/test_logs_cmd.py +287 -0
- package/tests/test_mcp_server.py +1909 -0
- package/tests/test_memory_adapter.py +339 -0
- package/tests/test_memory_curator.py +218 -0
- package/tests/test_memory_engine.py +6 -0
- package/tests/test_memory_fortress.py +571 -0
- package/tests/test_memory_pillar.py +119 -0
- package/tests/test_memory_promoter.py +445 -0
- package/tests/test_memory_verifier.py +420 -0
- package/tests/test_message_crypto.py +187 -0
- package/tests/test_metrics.py +632 -0
- package/tests/test_migrate_memories.py +464 -0
- package/tests/test_model_router.py +546 -0
- package/tests/test_mood.py +394 -0
- package/tests/test_multi_agent.py +269 -0
- package/tests/test_notifications.py +270 -0
- package/tests/test_onboard.py +500 -0
- package/tests/test_peer_directory.py +395 -0
- package/tests/test_peers.py +248 -0
- package/tests/test_pillars.py +87 -9
- package/tests/test_preflight.py +484 -0
- package/tests/test_prompt_adapter.py +331 -0
- package/tests/test_proxmox_provider.py +571 -0
- package/tests/test_pubsub.py +377 -0
- package/tests/test_rate_limiter.py +121 -0
- package/tests/test_registry_client.py +129 -0
- package/tests/test_response_cache.py +312 -0
- package/tests/test_response_scorer.py +294 -0
- package/tests/test_runtime.py +59 -0
- package/tests/test_scheduled_tasks.py +451 -0
- package/tests/test_security.py +250 -0
- package/tests/test_security_pillar.py +213 -0
- package/tests/test_self_healing.py +171 -0
- package/tests/test_session_capture.py +200 -0
- package/tests/test_session_recorder.py +360 -0
- package/tests/test_session_skills.py +235 -0
- package/tests/test_shell.py +210 -0
- package/tests/test_snapshots.py +549 -0
- package/tests/test_soul.py +984 -0
- package/tests/test_soul_swap.py +406 -0
- package/tests/test_spawner.py +211 -0
- package/tests/test_state_diff.py +173 -0
- package/tests/test_summary.py +135 -0
- package/tests/test_sync.py +315 -5
- package/tests/test_sync_backends.py +560 -0
- package/tests/test_sync_engine.py +482 -0
- package/tests/test_sync_pillar.py +344 -0
- package/tests/test_sync_pipeline.py +364 -0
- package/tests/test_sync_vault.py +581 -0
- package/tests/test_syncthing_setup.py +168 -22
- package/tests/test_systemd.py +323 -0
- package/tests/test_team_comms.py +408 -0
- package/tests/test_team_engine.py +397 -0
- package/tests/test_testrunner.py +238 -0
- package/tests/test_trust_calibration.py +204 -0
- package/tests/test_trust_graph.py +207 -0
- package/tests/test_trust_pillar.py +291 -0
- package/tests/test_trustee_cli.py +427 -0
- package/tests/test_trustee_cli_integration.py +325 -0
- package/tests/test_trustee_monitor.py +394 -0
- package/tests/test_trustee_ops.py +355 -0
- package/tests/test_unified_search.py +363 -0
- package/tests/test_uninstall_wizard.py +193 -0
- package/tests/test_usage.py +333 -0
- package/tests/test_version_cmd.py +355 -0
- package/tests/test_warmth_anchor.py +162 -0
- package/tests/test_whoami.py +245 -0
- package/tests/test_ws.py +311 -0
- package/.cursorrules +0 -33
- 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
|
+
```
|