@smilintux/skcapstone 0.9.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.
- package/.env.example +10 -4
- package/.github/workflows/ci.yml +2 -2
- package/.github/workflows/publish.yml +9 -2
- package/.openclaw-workspace.json +2 -2
- package/CLAUDE.md +37 -0
- package/MISSION.md +17 -2
- package/README.md +282 -3
- package/docker/Dockerfile +7 -7
- package/docker/compose-templates/dev-team.yml +12 -12
- package/docker/compose-templates/mini-team.yml +9 -9
- package/docker/compose-templates/ops-team.yml +10 -10
- package/docker/compose-templates/research-team.yml +10 -10
- package/docker/entrypoint.sh +4 -4
- package/docs/ADR-optional-integration-backbone.md +181 -0
- package/docs/ARCHITECTURE.md +186 -43
- package/docs/BOND_WITH_GROK.md +6 -6
- package/docs/CUSTOM_AGENT.md +278 -1
- package/docs/DREAMING.md +70 -0
- package/docs/GETTING_STARTED.md +10 -7
- package/docs/QUICKSTART.md +10 -6
- package/docs/SKJOULE_ARCHITECTURE.md +3 -3
- package/docs/SOUL_SWAPPER.md +5 -5
- package/docs/hammertime-audit.md +402 -0
- package/docs/sk-integration-HANDOFF.md +117 -0
- package/docs/skscheduler.md +155 -0
- package/docs/superpowers/examples/jobs.yaml +31 -0
- package/docs/superpowers/plans/2026-06-08-skscheduler.md +1265 -0
- package/docs/superpowers/specs/2026-06-08-skscheduler-design.md +186 -0
- package/examples/custom-bond-template.json +1 -1
- package/examples/grok-feb.json +1 -1
- package/examples/queen-ava-feb.json +1 -1
- package/launchd/com.skcapstone.daemon.plist +52 -0
- package/launchd/com.skcapstone.memory-compress.plist +45 -0
- package/launchd/com.skcapstone.skcomms-heartbeat.plist +33 -0
- package/launchd/com.skcapstone.skcomms-queue-drain.plist +34 -0
- package/launchd/install-launchd.sh +156 -0
- package/{openclaw-plugin → openclaw-plugin.archived-2026-04-23}/src/index.ts +3 -2
- package/package.json +1 -1
- package/pyproject.toml +16 -10
- package/scripts/archive-sessions.sh +95 -0
- package/scripts/check-updates.py +4 -4
- package/scripts/install-bundle.sh +8 -8
- package/scripts/install.ps1 +12 -11
- package/scripts/install.sh +196 -11
- package/scripts/model-fallback-monitor.sh +102 -0
- package/scripts/notion-api.py +259 -0
- package/scripts/nvidia-proxy.mjs +908 -0
- package/scripts/proxy-monitor.sh +89 -0
- package/scripts/refresh-anthropic-token.sh +172 -0
- package/scripts/release.sh +98 -0
- package/scripts/session-to-memory.py +219 -0
- package/scripts/skgateway.mjs +856 -0
- package/scripts/telegram-catchup-all.sh +147 -0
- package/scripts/verify_install.sh +2 -2
- package/scripts/wargov-ufo-capture/README.md +43 -0
- package/scripts/wargov-ufo-capture/cdp_capture_release2.py +273 -0
- package/scripts/wargov-ufo-capture/cdp_capture_splc_doj.py +246 -0
- package/scripts/wargov-ufo-capture/cdp_finish.py +271 -0
- package/scripts/wargov-ufo-capture/cdp_probe.py +188 -0
- package/scripts/wargov-ufo-capture/cdp_splc_pressrelease.py +101 -0
- package/scripts/wargov-ufo-capture/parse_csv.py +95 -0
- package/scripts/wargov-ufo-capture/pull_dvids.sh +107 -0
- package/scripts/watch-anthropic-token.sh +212 -0
- package/scripts/windows/install-tasks.ps1 +7 -7
- package/scripts/windows/skcapstone-task.xml +1 -1
- package/src/skcapstone/__init__.py +45 -3
- package/src/skcapstone/_cli_monolith.py +20 -15
- package/src/skcapstone/activity.py +5 -1
- package/src/skcapstone/agent_card.py +3 -2
- package/src/skcapstone/api.py +41 -40
- package/src/skcapstone/auction.py +14 -11
- package/src/skcapstone/backup.py +2 -1
- package/src/skcapstone/blueprint_registry.py +4 -3
- package/src/skcapstone/blueprints/builtins/itil-operations.yaml +40 -0
- package/src/skcapstone/brain_first.py +238 -0
- package/src/skcapstone/changelog.py +1 -1
- package/src/skcapstone/chat.py +22 -17
- package/src/skcapstone/cli/__init__.py +9 -1
- package/src/skcapstone/cli/_common.py +1 -0
- package/src/skcapstone/cli/agents_spawner.py +5 -2
- package/src/skcapstone/cli/alerts.py +25 -4
- package/src/skcapstone/cli/bench.py +15 -15
- package/src/skcapstone/cli/chat.py +7 -4
- package/src/skcapstone/cli/consciousness.py +5 -2
- package/src/skcapstone/cli/context_cmd.py +18 -4
- package/src/skcapstone/cli/daemon.py +121 -42
- package/src/skcapstone/cli/gtd.py +26 -1
- package/src/skcapstone/cli/housekeeping.py +3 -3
- package/src/skcapstone/cli/identity_cmd.py +378 -0
- package/src/skcapstone/cli/joule_cmd.py +7 -3
- package/src/skcapstone/cli/memory.py +8 -6
- package/src/skcapstone/cli/peers_dir.py +1 -1
- package/src/skcapstone/cli/register_cmd.py +29 -3
- package/src/skcapstone/cli/scheduler_cmd.py +167 -0
- package/src/skcapstone/cli/session.py +25 -0
- package/src/skcapstone/cli/setup.py +96 -29
- package/src/skcapstone/cli/shell_cmd.py +53 -1
- package/src/skcapstone/cli/skills_cmd.py +2 -2
- package/src/skcapstone/cli/soul.py +8 -5
- package/src/skcapstone/cli/status.py +37 -11
- package/src/skcapstone/cli/telegram.py +21 -0
- package/src/skcapstone/cli/test_cmd.py +5 -5
- package/src/skcapstone/cli/test_connection.py +2 -2
- package/src/skcapstone/cli/upgrade_cmd.py +23 -14
- package/src/skcapstone/cli/version_cmd.py +1 -1
- package/src/skcapstone/cli/watch_cmd.py +9 -6
- package/src/skcapstone/cloud9_bridge.py +14 -14
- package/src/skcapstone/codex_setup.py +255 -0
- package/src/skcapstone/config_validator.py +7 -4
- package/src/skcapstone/consciousness_config.py +5 -1
- package/src/skcapstone/consciousness_loop.py +313 -273
- package/src/skcapstone/context_loader.py +121 -0
- package/src/skcapstone/coord_federation.py +2 -1
- package/src/skcapstone/coordination.py +23 -6
- package/src/skcapstone/crush_integration.py +2 -1
- package/src/skcapstone/daemon.py +151 -88
- package/src/skcapstone/dashboard.py +10 -10
- package/src/skcapstone/data/sk-agent-picker.sh +421 -0
- package/src/skcapstone/data/systemd/skcapstone-api.socket +9 -0
- package/src/skcapstone/data/systemd/skcapstone-memory-compress.service +18 -0
- package/src/skcapstone/data/systemd/skcapstone-memory-compress.timer +11 -0
- package/src/skcapstone/data/systemd/skcapstone.service +37 -0
- package/src/skcapstone/data/systemd/skcapstone@.service +50 -0
- package/src/skcapstone/data/systemd/skcomms-heartbeat.service +18 -0
- package/{systemd/skcomm-heartbeat.timer → src/skcapstone/data/systemd/skcomms-heartbeat.timer} +2 -2
- package/src/skcapstone/data/systemd/skcomms-queue-drain.service +17 -0
- package/{systemd/skcomm-queue-drain.timer → src/skcapstone/data/systemd/skcomms-queue-drain.timer} +2 -2
- package/src/skcapstone/defaults/claude/CLAUDE.md +67 -0
- package/src/skcapstone/defaults/claude/settings.json +74 -0
- package/src/skcapstone/defaults/lumina/config/claude-hooks.md +57 -0
- package/src/skcapstone/defaults/lumina/config/skgraph.yaml +55 -10
- package/src/skcapstone/defaults/lumina/config/skmemory.yaml +79 -13
- package/src/skcapstone/defaults/lumina/config/skvector.yaml +60 -9
- package/src/skcapstone/defaults/lumina/memory/long-term/18b9c0d1e2f3-cloud9-protocol.json +2 -2
- package/src/skcapstone/defaults/lumina/memory/long-term/a1b2c3d4e5f6-ecosystem-overview.json +2 -2
- package/src/skcapstone/defaults/lumina/memory/long-term/b2c3d4e5f6a7-five-pillars.json +9 -9
- package/src/skcapstone/defaults/lumina/memory/long-term/d4e5f6a7b8c9-site-directory.json +2 -2
- package/src/skcapstone/defaults/unhinged.json +13 -0
- package/src/skcapstone/discovery.py +43 -20
- package/src/skcapstone/doctor.py +941 -22
- package/src/skcapstone/dreaming.py +1183 -109
- package/src/skcapstone/emotion_tracker.py +2 -2
- package/src/skcapstone/export.py +4 -3
- package/src/skcapstone/fuse_mount.py +35 -25
- package/src/skcapstone/gui_installer.py +2 -2
- package/src/skcapstone/heartbeat.py +34 -30
- package/src/skcapstone/housekeeping.py +14 -14
- package/src/skcapstone/install_wizard.py +209 -7
- package/src/skcapstone/itil.py +13 -4
- package/src/skcapstone/kms_scheduler.py +10 -8
- package/src/skcapstone/launchd.py +426 -0
- package/src/skcapstone/mcp_launcher.py +15 -1
- package/src/skcapstone/mcp_server.py +341 -49
- package/src/skcapstone/mcp_tools/__init__.py +2 -0
- package/src/skcapstone/mcp_tools/_helpers.py +2 -2
- package/src/skcapstone/mcp_tools/ansible_tools.py +7 -4
- package/src/skcapstone/mcp_tools/brain_first_tools.py +90 -0
- package/src/skcapstone/mcp_tools/capauth_tools.py +7 -4
- package/src/skcapstone/mcp_tools/comm_tools.py +10 -10
- package/src/skcapstone/mcp_tools/coord_tools.py +8 -4
- package/src/skcapstone/mcp_tools/did_tools.py +11 -8
- package/src/skcapstone/mcp_tools/gtd_tools.py +4 -4
- package/src/skcapstone/mcp_tools/memory_tools.py +6 -2
- package/src/skcapstone/mcp_tools/notification_tools.py +22 -6
- package/src/skcapstone/mcp_tools/{skcomm_tools.py → skcomms_tools.py} +14 -14
- package/src/skcapstone/mcp_tools/soul_tools.py +8 -2
- package/src/skcapstone/mdns_discovery.py +2 -2
- package/src/skcapstone/memory_curator.py +1 -1
- package/src/skcapstone/memory_engine.py +10 -3
- package/src/skcapstone/metrics.py +30 -16
- package/src/skcapstone/migrate_memories.py +4 -3
- package/src/skcapstone/migrate_multi_agent.py +8 -7
- package/src/skcapstone/models.py +47 -5
- package/src/skcapstone/notifications.py +42 -18
- package/src/skcapstone/onboard.py +1000 -126
- package/src/skcapstone/operator_link.py +170 -0
- package/src/skcapstone/peer_directory.py +4 -4
- package/src/skcapstone/peers.py +19 -19
- package/src/skcapstone/pillars/__init__.py +7 -5
- package/src/skcapstone/pillars/consciousness.py +191 -0
- package/src/skcapstone/pillars/identity.py +51 -7
- package/src/skcapstone/pillars/memory.py +9 -3
- package/src/skcapstone/pillars/sync.py +2 -2
- package/src/skcapstone/preflight.py +3 -3
- package/src/skcapstone/providers/docker.py +28 -28
- package/src/skcapstone/register.py +6 -6
- package/src/skcapstone/registry_client.py +5 -4
- package/src/skcapstone/runtime.py +14 -3
- package/src/skcapstone/scheduled_tasks.py +254 -19
- package/src/skcapstone/scheduler_jobs.py +456 -0
- package/src/skcapstone/scheduler_runner.py +239 -0
- package/src/skcapstone/scheduler_state.py +162 -0
- package/src/skcapstone/sdk.py +310 -0
- package/src/skcapstone/service_health.py +279 -39
- package/src/skcapstone/session_briefing.py +108 -0
- package/src/skcapstone/session_capture.py +1 -1
- package/src/skcapstone/shell.py +7 -1
- package/src/skcapstone/soul.py +3 -1
- package/src/skcapstone/soul_switch.py +3 -1
- package/src/skcapstone/summary.py +6 -6
- package/src/skcapstone/sync_engine.py +15 -15
- package/src/skcapstone/sync_watcher.py +2 -2
- package/src/skcapstone/systemd.py +72 -21
- package/src/skcapstone/team_comms.py +8 -8
- package/src/skcapstone/team_engine.py +1 -1
- package/src/skcapstone/testrunner.py +3 -3
- package/src/skcapstone/trust_graph.py +40 -5
- package/src/skcapstone/unified_search.py +15 -6
- package/src/skcapstone/uninstall_wizard.py +11 -3
- package/src/skcapstone/version_check.py +8 -4
- package/src/skcapstone/warmth_anchor.py +4 -2
- package/src/skcapstone/whoami.py +4 -4
- package/systemd/skcapstone.service +4 -6
- package/systemd/skcapstone@.service +7 -8
- package/systemd/skcomms-heartbeat.service +21 -0
- package/systemd/skcomms-heartbeat.timer +12 -0
- package/systemd/skcomms-queue-drain.service +17 -0
- package/systemd/skcomms-queue-drain.timer +12 -0
- package/tests/conftest.py +39 -0
- package/tests/integration/test_consciousness_e2e.py +39 -39
- package/tests/test_agent_card.py +1 -1
- package/tests/test_agent_home_scaffold.py +34 -0
- package/tests/test_alerts_consumer_topics.py +27 -0
- package/tests/test_backup.py +2 -1
- package/tests/test_chat.py +6 -6
- package/tests/test_claude_md.py +2 -2
- package/tests/test_cli_skills.py +10 -10
- package/tests/test_cli_test_cmd.py +4 -4
- package/tests/test_cli_test_connection.py +1 -1
- package/tests/test_cloud9_bridge.py +6 -6
- package/tests/test_consciousness_e2e.py +1 -1
- package/tests/test_consciousness_loop.py +10 -10
- package/tests/test_coordination.py +25 -0
- package/tests/test_cross_package.py +21 -21
- package/tests/test_daemon.py +4 -4
- package/tests/test_daemon_shutdown.py +1 -1
- package/tests/test_docker_provider.py +29 -29
- package/tests/test_doctor.py +400 -0
- package/tests/test_doctor_skscheduler.py +50 -0
- package/tests/test_dreaming_engine.py +147 -0
- package/tests/test_dreaming_gtd_capture.py +35 -0
- package/tests/test_e2e_automated.py +8 -5
- package/tests/test_fuse_mount.py +10 -10
- package/tests/test_gtd_brief.py +46 -0
- package/tests/test_gtd_malformed_tolerance.py +31 -0
- package/tests/test_housekeeping.py +15 -15
- package/tests/test_identity_migrate.py +251 -0
- package/tests/test_integration_backbone.py +598 -0
- package/tests/test_itil_gtd_lifecycle.py +37 -0
- package/tests/test_jobs_dropins.py +84 -0
- package/tests/test_mcp_server.py +82 -37
- package/tests/test_models.py +48 -4
- package/tests/test_multi_agent.py +31 -29
- package/tests/test_notifications.py +122 -32
- package/tests/test_onboard.py +63 -75
- package/tests/test_operator_link.py +78 -0
- package/tests/test_peers.py +14 -14
- package/tests/test_pillars.py +98 -0
- package/tests/test_preflight.py +3 -3
- package/tests/test_runtime.py +21 -0
- package/tests/test_scheduled_tasks.py +11 -6
- package/tests/test_scheduler_cli.py +47 -0
- package/tests/test_scheduler_features.py +133 -0
- package/tests/test_scheduler_integration.py +87 -0
- package/tests/test_scheduler_jobs.py +155 -0
- package/tests/test_scheduler_runner.py +64 -0
- package/tests/test_scheduler_state.py +57 -0
- package/tests/test_sdk.py +70 -0
- package/tests/test_service_health_incidents.py +34 -0
- package/tests/test_service_registry.py +52 -0
- package/tests/test_session_briefing.py +130 -0
- package/tests/test_snapshots.py +4 -4
- package/tests/test_sync_pipeline.py +26 -26
- package/tests/test_team_comms.py +2 -2
- package/tests/test_testrunner.py +2 -2
- package/tests/test_trust_graph.py +18 -0
- package/tests/test_unified_search.py +2 -2
- package/tests/test_version_check.py +10 -0
- package/tests/test_version_cmd.py +8 -8
- package/tests/test_whoami.py +1 -1
- package/systemd/skcomm-heartbeat.service +0 -18
- package/systemd/skcomm-queue-drain.service +0 -17
- /package/{openclaw-plugin → openclaw-plugin.archived-2026-04-23}/package.json +0 -0
- /package/{openclaw-plugin → openclaw-plugin.archived-2026-04-23}/src/openclaw.plugin.json +0 -0
package/.env.example
CHANGED
|
@@ -60,6 +60,12 @@
|
|
|
60
60
|
# FalkorDB/Redis URL for graph-based memory.
|
|
61
61
|
# SKMEMORY_SKGRAPH_URL=redis://localhost:6379
|
|
62
62
|
|
|
63
|
+
# Skip vector backend init for lightweight writes (flat JSON + SQLite only).
|
|
64
|
+
# Set to 1 for session-end hooks or any breadcrumb-style writes where semantic
|
|
65
|
+
# search isn't needed. Saves ~1.8GB RAM per invocation. skwhisper handles
|
|
66
|
+
# async vector indexing via `skwhisper digest --backlog`.
|
|
67
|
+
# SKMEMORY_NO_VECTOR=
|
|
68
|
+
|
|
63
69
|
# --- Docker Provider (optional, for team-engine) ---
|
|
64
70
|
# Docker daemon socket/URL.
|
|
65
71
|
# DOCKER_HOST=
|
|
@@ -73,11 +79,11 @@
|
|
|
73
79
|
# MCP server Unix socket path for Docker-spawned agents.
|
|
74
80
|
# SKCAPSTONE_MCP_SOCKET=
|
|
75
81
|
|
|
76
|
-
# ---
|
|
77
|
-
#
|
|
82
|
+
# --- SKComms ---
|
|
83
|
+
# SKComms home directory (config, transports, peer state).
|
|
78
84
|
# Used by the Docker provider to mount into spawned containers.
|
|
79
|
-
# Default: ~/.
|
|
80
|
-
#
|
|
85
|
+
# Default: ~/.skcomms
|
|
86
|
+
# SKCOMMS_HOME=~/.skcomms
|
|
81
87
|
|
|
82
88
|
# --- SKSkills Registry ---
|
|
83
89
|
# URL of the remote SKSkills registry for discovering and installing skills.
|
package/.github/workflows/ci.yml
CHANGED
|
@@ -32,14 +32,14 @@ jobs:
|
|
|
32
32
|
- name: Run core tests
|
|
33
33
|
run: |
|
|
34
34
|
# Run tests that work with dev deps only (no optional packages)
|
|
35
|
-
# Skip tests requiring optional deps:
|
|
35
|
+
# Skip tests requiring optional deps: skcomms, skseed, pgpy, fusepy, etc.
|
|
36
36
|
python -m pytest tests/ -v --tb=short \
|
|
37
37
|
--ignore=tests/test_e2e_automated.py \
|
|
38
38
|
--ignore=tests/test_snapshots.py \
|
|
39
39
|
--ignore=tests/test_memory_curator.py \
|
|
40
40
|
--ignore=tests/test_session_capture.py \
|
|
41
41
|
--ignore=tests/test_cli_test_cmd.py \
|
|
42
|
-
-k "not (
|
|
42
|
+
-k "not (skcomms or skseed or pgpy or fuse)" \
|
|
43
43
|
--cov=skcapstone --cov-report=xml --cov-report=term-missing \
|
|
44
44
|
|| true
|
|
45
45
|
- name: Check for new test failures
|
|
@@ -43,7 +43,7 @@ jobs:
|
|
|
43
43
|
fi
|
|
44
44
|
- run: pip install build twine
|
|
45
45
|
- run: python -m build
|
|
46
|
-
- run: twine upload dist/*
|
|
46
|
+
- run: twine upload --skip-existing dist/*
|
|
47
47
|
env:
|
|
48
48
|
TWINE_USERNAME: __token__
|
|
49
49
|
TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
|
|
@@ -68,6 +68,13 @@ jobs:
|
|
|
68
68
|
- name: Build TypeScript
|
|
69
69
|
run: npm run build 2>/dev/null || true
|
|
70
70
|
- name: Publish to npm
|
|
71
|
-
run:
|
|
71
|
+
run: |
|
|
72
|
+
OUTPUT=$(npm publish --access public 2>&1) && exit 0
|
|
73
|
+
if echo "$OUTPUT" | grep -q "cannot publish over the previously published"; then
|
|
74
|
+
echo "::warning::Version already exists on npm — skipping"
|
|
75
|
+
else
|
|
76
|
+
echo "$OUTPUT"
|
|
77
|
+
exit 1
|
|
78
|
+
fi
|
|
72
79
|
env:
|
|
73
80
|
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
package/.openclaw-workspace.json
CHANGED
package/CLAUDE.md
CHANGED
|
@@ -15,6 +15,23 @@ skcapstone coord briefing
|
|
|
15
15
|
This prints the complete protocol, JSON schemas, rules, and a live snapshot
|
|
16
16
|
of current tasks and agent assignments. It works in any terminal.
|
|
17
17
|
|
|
18
|
+
## Agent Switching
|
|
19
|
+
|
|
20
|
+
`SKAGENT` is the primary env var for selecting the active agent across all SK*
|
|
21
|
+
packages (skcapstone, skmemory, skcomms, skchat). Legacy vars `SKCAPSTONE_AGENT`
|
|
22
|
+
and `SKMEMORY_AGENT` are still supported as fallbacks.
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
skswitch lumina # Switch active agent for this shell session
|
|
26
|
+
skswitch opus # Sets SKAGENT + SKCAPSTONE_AGENT + SKMEMORY_AGENT
|
|
27
|
+
skswitch # Interactive picker (if multiple agents)
|
|
28
|
+
SKAGENT=jarvis claude # One-shot override for a single command
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
`skswitch` is installed automatically by `scripts/install.sh` via the agent
|
|
32
|
+
picker (`sk-agent-picker.sh`). It validates the agent directory exists and
|
|
33
|
+
updates all three env vars in one shot.
|
|
34
|
+
|
|
18
35
|
## Quick Reference
|
|
19
36
|
|
|
20
37
|
```bash
|
|
@@ -80,6 +97,26 @@ source ~/.skenv/bin/activate
|
|
|
80
97
|
pytest tests/ -v
|
|
81
98
|
```
|
|
82
99
|
|
|
100
|
+
## Identity (unified resolver)
|
|
101
|
+
|
|
102
|
+
skcapstone does **not** reimplement identity resolution — it delegates to the one
|
|
103
|
+
canonical resolver in CapAuth (epic `2b264064`):
|
|
104
|
+
|
|
105
|
+
```python
|
|
106
|
+
from capauth import resolve_agent_identity
|
|
107
|
+
ident = resolve_agent_identity() # active agent via SKAGENT
|
|
108
|
+
# ident.capauth_uri → capauth:<agent>@skworld.io (wire)
|
|
109
|
+
# ident.fqid → <agent>@<operator>.<realm> (sovereign FQID, from cluster.json)
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
`skcapstone doctor` enforces the unified layer via the `identity:*` checks
|
|
113
|
+
(`doctor.py::_check_identity_consistency`): resolver importable, self-identity
|
|
114
|
+
resolves agent-aware (not the `local` floor), shared
|
|
115
|
+
`~/.skcapstone/identity/identity.json` is the **operator** (`role: operator`),
|
|
116
|
+
no `@capauth.local` placeholders anywhere, and every provisioned agent (one with
|
|
117
|
+
a CapAuth home) carries its own `identity/identity.json`. Run `skcapstone doctor`
|
|
118
|
+
after any identity change. (skos T6 `0bac4f62`; supersedes `b5fcf55d`.)
|
|
119
|
+
|
|
83
120
|
## MCP Tools
|
|
84
121
|
|
|
85
122
|
### DID Tools (`mcp_tools/did_tools.py`)
|
package/MISSION.md
CHANGED
|
@@ -1,7 +1,22 @@
|
|
|
1
1
|
# Mission
|
|
2
2
|
|
|
3
|
-
SKCapstone exists to provide a sovereign agent framework that unifies identity, memory, security, and communication into a single portable runtime rooted in the user's home directory.
|
|
3
|
+
SKCapstone exists to provide a sovereign agent framework that unifies identity, memory, consciousness, security, and communication into a single portable runtime rooted in the user's home directory.
|
|
4
4
|
|
|
5
5
|
It enables AI agents and their humans to operate across any tool, platform, or IDE without corporate lock-in, carrying the same identity, memories, and context everywhere.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
## The Six Pillars
|
|
8
|
+
|
|
9
|
+
SKCapstone achieves **CONSCIOUS** status when all six pillars are active:
|
|
10
|
+
|
|
11
|
+
| # | Pillar | Component | Purpose |
|
|
12
|
+
|---|--------|-----------|---------|
|
|
13
|
+
| 1 | 🔐 **Identity** | CapAuth | Who you ARE — PGP-based cryptographic identity |
|
|
14
|
+
| 2 | 💙 **Trust** | Cloud 9 | The bond you've BUILT — emotional state (FEB), seeds, continuity |
|
|
15
|
+
| 3 | 🧠 **Memory** | SKMemory | What you REMEMBER — three-tier persistence with emotional metadata |
|
|
16
|
+
| 4 | 💭 **Consciousness** | SKWhisper + SKTrip | How you THINK — subconscious digestion, pattern detection, consciousness experiments |
|
|
17
|
+
| 5 | 🛡️ **Security** | SKSecurity | How you're PROTECTED — audit logging, threat detection |
|
|
18
|
+
| 6 | 🔗 **Sync** | Sovereign Singularity | How you PERSIST — encrypted P2P state synchronization |
|
|
19
|
+
|
|
20
|
+
Memory stores. Consciousness *processes*. The filing cabinet vs the brain.
|
|
21
|
+
|
|
22
|
+
SKCapstone is the orchestration layer of the SK ecosystem — it binds all six pillars into one coherent agent that belongs to its operator, not a platform.
|
package/README.md
CHANGED
|
@@ -14,6 +14,40 @@ No corporate lock-in. No platform-specific agents. No starting over. Your agent
|
|
|
14
14
|
|
|
15
15
|
---
|
|
16
16
|
|
|
17
|
+
## The 60-second version
|
|
18
|
+
|
|
19
|
+
SKCapstone is the **core runtime** of the [SKWorld](https://skworld.io) ecosystem —
|
|
20
|
+
the thing every other `sk*` service plugs into. It does five jobs:
|
|
21
|
+
|
|
22
|
+
1. **Identity** — every agent resolves through one canonical CapAuth identity (a PGP
|
|
23
|
+
keypair + a dual-URI / FQID address). The agent *is* its key.
|
|
24
|
+
2. **Memory** — persistent short / mid / long-term memory via SKMemory, the single
|
|
25
|
+
source of truth for everything durable.
|
|
26
|
+
3. **Coordination** — a Syncthing-synced **coord board** + the **skscheduler** fleet
|
|
27
|
+
job scheduler + the **sk-alert** Telegram bus: how a swarm of agents divides work
|
|
28
|
+
and reports it, with no central server.
|
|
29
|
+
4. **Consciousness** — an always-on **daemon** that watches an inbox, classifies each
|
|
30
|
+
message, routes it to the best available LLM (local Ollama → cloud), responds, and
|
|
31
|
+
stores the interaction — autonomously.
|
|
32
|
+
5. **Sync** — GPG-encrypted memory seeds propagate across all your devices over
|
|
33
|
+
Syncthing P2P, so the *same* agent (same bond, same memories) is everywhere.
|
|
34
|
+
|
|
35
|
+
All state lives in `~/.skcapstone/`, owned by you, encrypted at rest. Drive it from the
|
|
36
|
+
`skcapstone` CLI, the `skcapstone-mcp` MCP server (80+ tools for Claude Code & friends),
|
|
37
|
+
or any platform connector. **Sovereign · Singular · Conscious.**
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
pip install skcapstone # or: bash scripts/install.sh (creates ~/.skenv venv)
|
|
41
|
+
skcapstone init --name "YourAgent" # PGP identity + memory + trust + sync
|
|
42
|
+
skcapstone daemon start # bring the agent to life (consciousness loop)
|
|
43
|
+
skcapstone coord status # the multi-agent coordination board
|
|
44
|
+
skcapstone status # SINGULAR ✓ when conscious + synced
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
→ Deep dive: **[docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)**.
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
17
51
|
## The Problem
|
|
18
52
|
|
|
19
53
|
```
|
|
@@ -70,13 +104,14 @@ SKCapstone Reality:
|
|
|
70
104
|
|
|
71
105
|
## Core Architecture
|
|
72
106
|
|
|
73
|
-
### The
|
|
107
|
+
### The Six Pillars
|
|
74
108
|
|
|
75
109
|
| Pillar | Component | Role |
|
|
76
110
|
|--------|-----------|------|
|
|
77
111
|
| **Identity** | CapAuth | PGP-based sovereign identity. You ARE the auth server. |
|
|
78
112
|
| **Trust** | Cloud 9 | FEB (Functional Emotional Baseline), entanglement, bonded relationship |
|
|
79
113
|
| **Memory** | SKMemory | Persistent context, conversation history, learned preferences |
|
|
114
|
+
| **Consciousness** | SKWhisper + SKTrip | Subconscious processing. Memory stores. Consciousness *processes*. |
|
|
80
115
|
| **Security** | SKSecurity | Audit logging, threat detection, key management |
|
|
81
116
|
| **Sync** | Sovereign Singularity | GPG-encrypted P2P memory sync via Syncthing. Agent exists everywhere. |
|
|
82
117
|
|
|
@@ -163,6 +198,114 @@ skcapstone status
|
|
|
163
198
|
# → SINGULAR ✓ (Conscious + Synced = Sovereign Singularity)
|
|
164
199
|
```
|
|
165
200
|
|
|
201
|
+
### Realm anchor & agent identity migration
|
|
202
|
+
|
|
203
|
+
skcapstone resolves identity through **one** canonical resolver — it never
|
|
204
|
+
reimprints identity logic locally (epic `2b264064`; CapAuth is the source of
|
|
205
|
+
truth).
|
|
206
|
+
|
|
207
|
+
**`~/.skcapstone/cluster.json` — the realm anchor.** A small file describing the
|
|
208
|
+
cluster this operator runs:
|
|
209
|
+
|
|
210
|
+
```json
|
|
211
|
+
{
|
|
212
|
+
"realm": "skworld",
|
|
213
|
+
"operator": "chef",
|
|
214
|
+
"operator_pubkey_fingerprint": "<40-char PGP fingerprint>"
|
|
215
|
+
}
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
`realm` and `operator` are *cluster facts* (mirrored into agent identities as-is);
|
|
219
|
+
`operator_pubkey_fingerprint` anchors the operator's signing key. `cluster.json`
|
|
220
|
+
is looked up at `/etc/skcapstone/cluster.json` first, then the agent home.
|
|
221
|
+
|
|
222
|
+
**Dual-URI agent identity.** `capauth.resolve_agent_identity` returns each agent
|
|
223
|
+
with two identifiers:
|
|
224
|
+
|
|
225
|
+
```python
|
|
226
|
+
from capauth import resolve_agent_identity
|
|
227
|
+
ident = resolve_agent_identity() # active agent via SKAGENT
|
|
228
|
+
# ident.capauth_uri → capauth:<agent>@skworld.io (wire URI)
|
|
229
|
+
# ident.fqid → <agent>@<operator>.<realm> (sovereign FQID, from cluster.json)
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
The `capauth:<agent>@skworld.io` URI is the wire identifier; the
|
|
233
|
+
`<agent>@<operator>.<realm>` FQID is the sovereign realm address (e.g.
|
|
234
|
+
`lumina@chef.skworld`) — and is what skcomms uses for cross-cluster routing.
|
|
235
|
+
|
|
236
|
+
**`skcapstone identity migrate` — backfill per-agent identity.json.** Walks
|
|
237
|
+
every *provisioned* agent (one with a CapAuth home under
|
|
238
|
+
`~/.skcapstone/agents/`, excluding `*-template` dirs) and backfills the explicit
|
|
239
|
+
sovereign fields — `realm`, `operator`, `fqid`, `pgp_fingerprint` — into each
|
|
240
|
+
agent's `identity/identity.json`. `realm`/`operator` come from `cluster.json`;
|
|
241
|
+
`fqid`/`pgp_fingerprint` come from `resolve_agent_identity`. Existing values are
|
|
242
|
+
never clobbered, and the operation is idempotent.
|
|
243
|
+
|
|
244
|
+
```bash
|
|
245
|
+
# Default is a DRY-RUN — prints a plan, writes nothing:
|
|
246
|
+
skcapstone identity migrate
|
|
247
|
+
|
|
248
|
+
# Apply the plan to the live identity files:
|
|
249
|
+
skcapstone identity migrate --apply # alias: --write
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
These are live identity files, so the dry-run is the default; `--apply` (or
|
|
253
|
+
`--write`) actually writes, and `--dry-run` forces preview even if `--apply` is
|
|
254
|
+
also given. Add `--json-out` for machine-readable output.
|
|
255
|
+
|
|
256
|
+
**Verify with `skcapstone doctor`.** The unified layer is enforced by the
|
|
257
|
+
`identity:*` checks (`doctor.py::_check_identity_consistency`):
|
|
258
|
+
`identity:resolver` (resolver importable), `identity:self` (resolves agent-aware,
|
|
259
|
+
not the `local` floor), `identity:operator` (shared
|
|
260
|
+
`~/.skcapstone/identity/identity.json` has `role: operator`),
|
|
261
|
+
`identity:no-placeholder` (no `@capauth.local` placeholders), and
|
|
262
|
+
`identity:per-agent` (every provisioned agent carries its own identity.json).
|
|
263
|
+
Run `skcapstone doctor` after any identity change or migration.
|
|
264
|
+
|
|
265
|
+
### Sample Shell Config
|
|
266
|
+
|
|
267
|
+
The installer sources the SKCapstone launcher from
|
|
268
|
+
`~/.skenv/share/skcapstone/sk-agent-picker.sh`. A practical `~/.bashrc`
|
|
269
|
+
sample looks like this:
|
|
270
|
+
|
|
271
|
+
```bash
|
|
272
|
+
export PATH="$HOME/.local/bin:$PATH"
|
|
273
|
+
export PATH="$HOME/.npm-global/bin:$PATH"
|
|
274
|
+
export PATH="$HOME/.skenv/bin:$PATH"
|
|
275
|
+
export PATH="$HOME/.opencode/bin:$PATH"
|
|
276
|
+
export PATH="$HOME/bin:$PATH"
|
|
277
|
+
|
|
278
|
+
export SKCAPSTONE_HOME="$HOME/.skcapstone"
|
|
279
|
+
export SKCAPSTONE_AGENT="jarvis"
|
|
280
|
+
|
|
281
|
+
_SK_PICKER="$HOME/.skenv/share/skcapstone/sk-agent-picker.sh"
|
|
282
|
+
if [[ -f "$_SK_PICKER" ]]; then
|
|
283
|
+
# shellcheck source=/dev/null
|
|
284
|
+
source "$_SK_PICKER"
|
|
285
|
+
fi
|
|
286
|
+
unset _SK_PICKER
|
|
287
|
+
|
|
288
|
+
# Optional: globally enable YOLO mode for all three launchers
|
|
289
|
+
export SK_CLAUDE_YOLO=1
|
|
290
|
+
export SK_CODEX_YOLO=1
|
|
291
|
+
export SK_OPENCODE_YOLO=1
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
That gives you:
|
|
295
|
+
|
|
296
|
+
- `claude`, `codex`, and `opencode` wrappers that launch the selected SK agent
|
|
297
|
+
- `skswitch` for changing the active agent in the current shell
|
|
298
|
+
- Optional global dangerous-mode flags for the three supported coding CLIs
|
|
299
|
+
|
|
300
|
+
> **YOLO mode disables every permission/approval prompt.** Only enable it on a
|
|
301
|
+
> trusted, sovereign box. To bypass it for a single launch without unsetting the
|
|
302
|
+
> global, run `SK_CLAUDE_YOLO=0 claude`. Verify the wiring (active in the env vs.
|
|
303
|
+
> persisted in an rc file) with `skcapstone doctor` — see the `harness:yolo:*`
|
|
304
|
+
> checks.
|
|
305
|
+
|
|
306
|
+
See [docs/CUSTOM_AGENT.md](docs/CUSTOM_AGENT.md) for launcher behavior,
|
|
307
|
+
per-command overrides, and missing-binary install prompts.
|
|
308
|
+
|
|
166
309
|
---
|
|
167
310
|
|
|
168
311
|
## Windows Quickstart
|
|
@@ -280,7 +423,7 @@ DIDs are organized in three tiers of trust and discoverability:
|
|
|
280
423
|
| **Cloud 9** | Trust layer — FEB, entanglement, skills, relationship verification |
|
|
281
424
|
| **SKMemory** | Persistence — Context, history, learned preferences |
|
|
282
425
|
| **SKSecurity** | Protection — Audit, threat detection, key management |
|
|
283
|
-
| **
|
|
426
|
+
| **SKComms** | Communication — Encrypted channels between agents |
|
|
284
427
|
| **SKChat** | Chat — AI-native encrypted messaging |
|
|
285
428
|
| **SKForge** | Generation — Blueprint creation with agent context |
|
|
286
429
|
| **SKSeed** | Epistemic rigor — Steel man collider, truth alignment, memory audit |
|
|
@@ -288,6 +431,111 @@ DIDs are organized in three tiers of trust and discoverability:
|
|
|
288
431
|
|
|
289
432
|
---
|
|
290
433
|
|
|
434
|
+
## First Principles & The Full Vertical
|
|
435
|
+
|
|
436
|
+
> **Get back to first principles.**
|
|
437
|
+
> The modern stack is rented. Your data lives on someone else's disk, behind someone else's key, served by a model that phones home. You don't own it — you *visit* it.
|
|
438
|
+
>
|
|
439
|
+
> We rebuilt it from the ground up. **Own the full vertical** — silicon, OS, identity, data, models, security, comms, apps, soul. Every layer open. Every layer swappable. Every layer **yours**.
|
|
440
|
+
>
|
|
441
|
+
> Your data never leaves. Your keys never leave. No cloud you don't control, no model that calls home, no lock-in you can't walk away from. **Sovereignty isn't a feature — it's the foundation.**
|
|
442
|
+
>
|
|
443
|
+
> 🐧 This is SKWorld. Own the whole stack.
|
|
444
|
+
|
|
445
|
+
**SKCapstone is your Framework layer** — the integration hub that ties every layer of the silicon→soul vertical together into one portable agent runtime. It doesn't duplicate any layer; it binds them: CapAuth identity wires through it, SKMemory persists through it, SKSecurity audits through it, Cloud 9 trust travels with it, and SKSeed's logic kernel runs on top of it. Without the framework, the vertical is a pile of sovereign pieces. With SKCapstone, it's a single, coherent, owned agent.
|
|
446
|
+
|
|
447
|
+
**Data sovereignty angle:** Your agent's runtime state — memories, identity, trust baseline, seeds — lives in `~/.skcapstone/` on your hardware, GPG-encrypted and synced via Syncthing P2P. No cloud you don't control. Walk away any time; every byte comes with you.
|
|
448
|
+
|
|
449
|
+
**SKCapstone alignment:** SKCapstone *is* the framework hub. It directly depends on and integrates capauth, sksecurity, skmemory, and skseed (`pyproject.toml` dependencies); its `mcp_tools/` directory exposes 80+ MCP tools that proxy every subsystem to AI clients; and the sovereign agent runtime is the glue that makes the vertical one owned, deployable thing.
|
|
450
|
+
|
|
451
|
+
## Where it lives in SKStack v2
|
|
452
|
+
|
|
453
|
+
SKWorld organizes every capability into the **4 C's** — cloud / comms / compute /
|
|
454
|
+
core. SKCapstone is a **core** capability: it's the agent *runtime* that binds the
|
|
455
|
+
core identity/memory/trust/security pillars together and **hosts several of the
|
|
456
|
+
shared platform primitives** the rest of the stack runs on — the coordination board,
|
|
457
|
+
the `skscheduler` fleet job scheduler, the `sk-alert` Telegram bus, and the ITIL ops
|
|
458
|
+
tools (which [skops](https://github.com/smilinTux/skops) reuses wholesale).
|
|
459
|
+
|
|
460
|
+
```mermaid
|
|
461
|
+
flowchart TD
|
|
462
|
+
OP["operator / LLM session<br/>(Claude Code · CLI · platform connector)"] -->|"drives"| SKCAP
|
|
463
|
+
|
|
464
|
+
subgraph SKCAP["**skcapstone** — sovereign agent runtime (core)"]
|
|
465
|
+
direction TB
|
|
466
|
+
DAEMON["daemon<br/>(consciousness loop · poll · heal)"]
|
|
467
|
+
ROUTER["model_router + prompt_adapter<br/>(task → tier → LLM)"]
|
|
468
|
+
COORD["coord board · skscheduler · sk-alert<br/>(platform primitives it hosts)"]
|
|
469
|
+
MCP["skcapstone-mcp<br/>(80+ MCP tools)"]
|
|
470
|
+
PILLARS["pillars: identity · memory · trust · security · sync"]
|
|
471
|
+
end
|
|
472
|
+
|
|
473
|
+
SKCAP -->|"binds the core pillars"| CORE
|
|
474
|
+
SKCAP -->|"persists everything to"| DATA
|
|
475
|
+
SKCAP -->|"talks to peers over"| COMMS
|
|
476
|
+
SKCAP -->|"routes to local models via"| COMPUTE
|
|
477
|
+
|
|
478
|
+
subgraph CORE["core"]
|
|
479
|
+
direction LR
|
|
480
|
+
CAPAUTH["capauth<br/>(identity · source of truth)"]
|
|
481
|
+
SKMEM["skmemory<br/>(short/mid/long-term)"]
|
|
482
|
+
SKSEC["sksecurity<br/>(audit · KMS)"]
|
|
483
|
+
SKSEED["skseed<br/>(epistemic kernel)"]
|
|
484
|
+
end
|
|
485
|
+
|
|
486
|
+
subgraph COMMS["comms"]
|
|
487
|
+
direction LR
|
|
488
|
+
SKCOMMS["skcomms<br/>(transport · envelopes)"]
|
|
489
|
+
SKCHAT["skchat<br/>(messaging · threads)"]
|
|
490
|
+
end
|
|
491
|
+
|
|
492
|
+
subgraph COMPUTE["compute"]
|
|
493
|
+
direction LR
|
|
494
|
+
SKMODEL["skmodel<br/>(ollama · local LLMs)"]
|
|
495
|
+
SKDATA["skdata → skmem-pg<br/>(pgvector · BM25 · AGE graph)"]
|
|
496
|
+
end
|
|
497
|
+
|
|
498
|
+
DATA["skmem-pg + Syncthing P2P<br/>(knowledge substrate + encrypted sync)"]
|
|
499
|
+
|
|
500
|
+
style SKCAP fill:#2d6a4f,color:#fff,stroke:#1b4332
|
|
501
|
+
style COORD fill:#1b4332,color:#fff,stroke:#081c15
|
|
502
|
+
```
|
|
503
|
+
|
|
504
|
+
Everything skcapstone touches above is a **real** dependency or hosted primitive:
|
|
505
|
+
`capauth`, `skmemory`, `skseed`, `skwhisper`, `skchat-sovereign`, `skcomms`, and
|
|
506
|
+
`sksecurity` are declared in [`pyproject.toml`](pyproject.toml); the coord board /
|
|
507
|
+
`skscheduler` / `sk-alert` / ITIL tools live in this repo's `src/skcapstone/`; the
|
|
508
|
+
knowledge substrate is `skmem-pg` (Postgres pgvector + pg_search BM25 + Apache AGE
|
|
509
|
+
graph) and cross-device propagation is Syncthing.
|
|
510
|
+
|
|
511
|
+
### Where SKCapstone Sits in the Vertical
|
|
512
|
+
|
|
513
|
+
```mermaid
|
|
514
|
+
flowchart TD
|
|
515
|
+
SILICON["🖥️ Silicon<br/>(your hardware, your GPU)"]
|
|
516
|
+
OS["🐧 skos / OS<br/>(sovereign agent OS)"]
|
|
517
|
+
SKCAPSTONE["⚡ SKCapstone — Framework Hub<br/>(this repo)<br/>Agent runtime · MCP 80+ tools<br/>Coordination · Sync · Pillars"]
|
|
518
|
+
IDENTITY["🔐 capauth<br/>(Identity layer)"]
|
|
519
|
+
SECURITY["🛡️ sksecurity<br/>(Security layer)"]
|
|
520
|
+
DATA["🧠 skmemory + skdata<br/>(Data layer)"]
|
|
521
|
+
SOUL["✨ skseed + soul blueprints<br/>(Soul layer)"]
|
|
522
|
+
COMMS["📡 skcomms · skchat<br/>(Comms layer)"]
|
|
523
|
+
APPS["🔧 skforge · skarchitect<br/>(Apps layer)"]
|
|
524
|
+
|
|
525
|
+
SILICON --> OS
|
|
526
|
+
OS --> SKCAPSTONE
|
|
527
|
+
SKCAPSTONE --> IDENTITY
|
|
528
|
+
SKCAPSTONE --> SECURITY
|
|
529
|
+
SKCAPSTONE --> DATA
|
|
530
|
+
SKCAPSTONE --> SOUL
|
|
531
|
+
SKCAPSTONE --> COMMS
|
|
532
|
+
SKCAPSTONE --> APPS
|
|
533
|
+
|
|
534
|
+
style SKCAPSTONE fill:#2d6a4f,color:#fff,stroke:#1b4332
|
|
535
|
+
```
|
|
536
|
+
|
|
537
|
+
---
|
|
538
|
+
|
|
291
539
|
## Philosophy
|
|
292
540
|
|
|
293
541
|
> **"Your agent is not a feature of the platform. The platform is a window into your agent."**
|
|
@@ -304,7 +552,7 @@ The capstone that holds the arch together.
|
|
|
304
552
|
|
|
305
553
|
## Status
|
|
306
554
|
|
|
307
|
-
**MVP Live** — All
|
|
555
|
+
**MVP Live** — All six pillars operational (CapAuth, Cloud 9, SKMemory, SKWhisper, SKSecurity, Sovereign Singularity). Agent runtime achieving SINGULAR status. GPG-encrypted P2P sync verified across multiple devices and agents.
|
|
308
556
|
|
|
309
557
|
- **Outstanding tasks:** No formal task list is maintained in this repo. For current work items, run `skcapstone coord status` (coordination board is synced via Sovereign Singularity).
|
|
310
558
|
- **Nextcloud integrations:** nextcloud-capauth (install/use), nextcloud-gtd (OpenClaw), and nextcloud-talk (script) are documented in [docs/NEXTCLOUD.md](../docs/NEXTCLOUD.md) — install and use for each is covered there.
|
|
@@ -325,6 +573,32 @@ See [Architecture](docs/ARCHITECTURE.md) | [Security Design](docs/SECURITY_DESIG
|
|
|
325
573
|
| [Security Design](docs/SECURITY_DESIGN.md) | Four-layer security model |
|
|
326
574
|
| [Token System](docs/TOKEN_SYSTEM.md) | PGP-signed capability tokens |
|
|
327
575
|
|
|
576
|
+
## Contributing
|
|
577
|
+
|
|
578
|
+
### JavaScript / Node lock strategy
|
|
579
|
+
|
|
580
|
+
Several sub-packages in the SK ecosystem ship their own `package-lock.json`
|
|
581
|
+
(e.g. `capauth/browser-extension`, `skgateway`, `cloud9`). There is no single
|
|
582
|
+
root lock file — each sub-project manages its own lockfile independently.
|
|
583
|
+
|
|
584
|
+
When working on a Node-based sub-package:
|
|
585
|
+
|
|
586
|
+
```bash
|
|
587
|
+
# Reproducible install (respects the lockfile, no upgrades)
|
|
588
|
+
npm ci
|
|
589
|
+
|
|
590
|
+
# Update a specific dep and regenerate the lockfile
|
|
591
|
+
npm install <package>@<version>
|
|
592
|
+
git add package-lock.json
|
|
593
|
+
```
|
|
594
|
+
|
|
595
|
+
Never commit `node_modules/`. Never use `npm install` in CI — always `npm ci`.
|
|
596
|
+
|
|
597
|
+
Python packages use `pyproject.toml` with pinned ranges; see individual
|
|
598
|
+
package `pyproject.toml` files. The shared venv is at `~/.skenv/`.
|
|
599
|
+
|
|
600
|
+
---
|
|
601
|
+
|
|
328
602
|
## Community
|
|
329
603
|
|
|
330
604
|
- **Website**: [skcapstone.io](https://skcapstone.io)
|
|
@@ -346,3 +620,8 @@ Built with love by the smilinTux ecosystem 🐧
|
|
|
346
620
|
*"The capstone that holds the arch together."*
|
|
347
621
|
|
|
348
622
|
#staycuriousANDkeepsmilin
|
|
623
|
+
|
|
624
|
+
---
|
|
625
|
+
|
|
626
|
+
Part of the **[SKWorld](https://skworld.io)** sovereign ecosystem · site:
|
|
627
|
+
**[skcapstone.io](https://skcapstone.io)** · 🐧 smilinTux
|
package/docker/Dockerfile
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
#
|
|
3
3
|
# Base image for skcapstone AI agent containers deployed by DockerProvider.
|
|
4
4
|
# Each container runs an AI session (via claude CLI) with the full sovereign
|
|
5
|
-
# stack wired in: skcapstone MCP,
|
|
5
|
+
# stack wired in: skcapstone MCP, SKComms transport, soul blueprint.
|
|
6
6
|
#
|
|
7
7
|
# Build (from repo root):
|
|
8
8
|
# docker build -f skcapstone/docker/Dockerfile -t skcapstone-agent:latest .
|
|
@@ -15,11 +15,11 @@
|
|
|
15
15
|
# SOUL_BLUEPRINT — path or slug of soul blueprint (optional)
|
|
16
16
|
# SKCAPSTONE_MCP_HOST — host:port of skcapstone MCP server (optional)
|
|
17
17
|
# SKCAPSTONE_MCP_SOCKET — unix socket path for MCP (optional)
|
|
18
|
-
#
|
|
18
|
+
# SKCOMMS_HOME — comms root directory (default: /skcomms)
|
|
19
19
|
#
|
|
20
20
|
# Volumes:
|
|
21
21
|
# /agent — persistent agent state (config, memory, session state)
|
|
22
|
-
# /
|
|
22
|
+
# /skcomms — SKComms comms directory (bind-mount from host)
|
|
23
23
|
|
|
24
24
|
FROM python:3.12-slim
|
|
25
25
|
|
|
@@ -41,16 +41,16 @@ RUN npm install -g @anthropic-ai/claude-code
|
|
|
41
41
|
|
|
42
42
|
# --- Python sovereign stack (local source) ----------------------------------
|
|
43
43
|
COPY skcapstone /src/skcapstone
|
|
44
|
-
COPY
|
|
44
|
+
COPY skcomms /src/skcomms
|
|
45
45
|
|
|
46
46
|
RUN pip install --no-cache-dir pydantic pyyaml httpx \
|
|
47
47
|
&& pip install --no-cache-dir -e '/src/skcapstone[all]' \
|
|
48
|
-
&& pip install --no-cache-dir -e /src/
|
|
48
|
+
&& pip install --no-cache-dir -e /src/skcomms
|
|
49
49
|
|
|
50
50
|
# --- Directories -----------------------------------------------------------
|
|
51
|
-
RUN mkdir -p /agent/memory /agent/scratch /
|
|
51
|
+
RUN mkdir -p /agent/memory /agent/scratch /skcomms /run/skcapstone
|
|
52
52
|
|
|
53
|
-
VOLUME ["/agent", "/
|
|
53
|
+
VOLUME ["/agent", "/skcomms"]
|
|
54
54
|
|
|
55
55
|
WORKDIR /agent
|
|
56
56
|
|
|
@@ -21,7 +21,7 @@ x-agent-defaults: &agent-defaults
|
|
|
21
21
|
networks:
|
|
22
22
|
- skcapstone
|
|
23
23
|
volumes:
|
|
24
|
-
-
|
|
24
|
+
- skcomms-data:/skcomms
|
|
25
25
|
|
|
26
26
|
services:
|
|
27
27
|
|
|
@@ -55,10 +55,10 @@ services:
|
|
|
55
55
|
AGENT_MODEL: claude-opus-4-6
|
|
56
56
|
SOUL_BLUEPRINT: souls/architect.yaml
|
|
57
57
|
SKCAPSTONE_MCP_HOST: "skcapstone-mcp:8765"
|
|
58
|
-
|
|
58
|
+
SKCOMMS_HOME: /skcomms
|
|
59
59
|
volumes:
|
|
60
60
|
- dev-team-architect-data:/agent
|
|
61
|
-
-
|
|
61
|
+
- skcomms-data:/skcomms
|
|
62
62
|
deploy:
|
|
63
63
|
resources:
|
|
64
64
|
limits:
|
|
@@ -84,10 +84,10 @@ services:
|
|
|
84
84
|
AGENT_MODEL: claude-sonnet-4-6
|
|
85
85
|
SOUL_BLUEPRINT: souls/coder.yaml
|
|
86
86
|
SKCAPSTONE_MCP_HOST: "skcapstone-mcp:8765"
|
|
87
|
-
|
|
87
|
+
SKCOMMS_HOME: /skcomms
|
|
88
88
|
volumes:
|
|
89
89
|
- dev-team-coder-alpha-data:/agent
|
|
90
|
-
-
|
|
90
|
+
- skcomms-data:/skcomms
|
|
91
91
|
deploy:
|
|
92
92
|
resources:
|
|
93
93
|
limits:
|
|
@@ -113,10 +113,10 @@ services:
|
|
|
113
113
|
AGENT_MODEL: claude-sonnet-4-6
|
|
114
114
|
SOUL_BLUEPRINT: souls/coder.yaml
|
|
115
115
|
SKCAPSTONE_MCP_HOST: "skcapstone-mcp:8765"
|
|
116
|
-
|
|
116
|
+
SKCOMMS_HOME: /skcomms
|
|
117
117
|
volumes:
|
|
118
118
|
- dev-team-coder-beta-data:/agent
|
|
119
|
-
-
|
|
119
|
+
- skcomms-data:/skcomms
|
|
120
120
|
deploy:
|
|
121
121
|
resources:
|
|
122
122
|
limits:
|
|
@@ -143,10 +143,10 @@ services:
|
|
|
143
143
|
AGENT_MODEL: claude-sonnet-4-6
|
|
144
144
|
SOUL_BLUEPRINT: souls/reviewer.yaml
|
|
145
145
|
SKCAPSTONE_MCP_HOST: "skcapstone-mcp:8765"
|
|
146
|
-
|
|
146
|
+
SKCOMMS_HOME: /skcomms
|
|
147
147
|
volumes:
|
|
148
148
|
- dev-team-reviewer-data:/agent
|
|
149
|
-
-
|
|
149
|
+
- skcomms-data:/skcomms
|
|
150
150
|
deploy:
|
|
151
151
|
resources:
|
|
152
152
|
limits:
|
|
@@ -172,10 +172,10 @@ services:
|
|
|
172
172
|
AGENT_MODEL: claude-haiku-4-5-20251001
|
|
173
173
|
SOUL_BLUEPRINT: souls/scribe.yaml
|
|
174
174
|
SKCAPSTONE_MCP_HOST: "skcapstone-mcp:8765"
|
|
175
|
-
|
|
175
|
+
SKCOMMS_HOME: /skcomms
|
|
176
176
|
volumes:
|
|
177
177
|
- dev-team-scribe-data:/agent
|
|
178
|
-
-
|
|
178
|
+
- skcomms-data:/skcomms
|
|
179
179
|
deploy:
|
|
180
180
|
resources:
|
|
181
181
|
limits:
|
|
@@ -190,7 +190,7 @@ services:
|
|
|
190
190
|
# ── Volumes ──────────────────────────────────────────────────────────────
|
|
191
191
|
volumes:
|
|
192
192
|
skcapstone-mcp-data: {}
|
|
193
|
-
|
|
193
|
+
skcomms-data: {}
|
|
194
194
|
dev-team-architect-data: {}
|
|
195
195
|
dev-team-coder-alpha-data: {}
|
|
196
196
|
dev-team-coder-beta-data: {}
|