@intent-systems/nexus 2026.1.5-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/CHANGELOG.md +222 -0
- package/LICENSE +21 -0
- package/README-header.png +0 -0
- package/README.md +462 -0
- package/dist/agents/agent-paths.js +16 -0
- package/dist/agents/agent-scope.js +44 -0
- package/dist/agents/auth-profiles.js +626 -0
- package/dist/agents/bash-process-registry.js +126 -0
- package/dist/agents/bash-tools.js +838 -0
- package/dist/agents/chutes-oauth.js +47 -0
- package/dist/agents/clawdbot-tools.js +62 -0
- package/dist/agents/context.js +34 -0
- package/dist/agents/defaults.js +6 -0
- package/dist/agents/memory-search.js +80 -0
- package/dist/agents/model-auth.js +115 -0
- package/dist/agents/model-catalog.js +55 -0
- package/dist/agents/model-fallback.js +210 -0
- package/dist/agents/model-scan.js +263 -0
- package/dist/agents/model-selection.js +152 -0
- package/dist/agents/models-config.js +171 -0
- package/dist/agents/nexus-tools.js +46 -0
- package/dist/agents/pi-embedded-block-chunker.js +188 -0
- package/dist/agents/pi-embedded-helpers.js +139 -0
- package/dist/agents/pi-embedded-runner.js +932 -0
- package/dist/agents/pi-embedded-subscribe.js +541 -0
- package/dist/agents/pi-embedded-utils.js +20 -0
- package/dist/agents/pi-embedded.js +1 -0
- package/dist/agents/pi-extensions/compaction-safeguard.js +140 -0
- package/dist/agents/pi-tool-definition-adapter.js +17 -0
- package/dist/agents/pi-tools.js +510 -0
- package/dist/agents/pi-tools.schema.js +358 -0
- package/dist/agents/sandbox-paths.js +68 -0
- package/dist/agents/sandbox.js +667 -0
- package/dist/agents/shell-utils.js +53 -0
- package/dist/agents/skill-runner.js +224 -0
- package/dist/agents/skill-state.js +164 -0
- package/dist/agents/skill-tools.js +191 -0
- package/dist/agents/skill-usage.js +43 -0
- package/dist/agents/skills-install.js +244 -0
- package/dist/agents/skills-status.js +157 -0
- package/dist/agents/skills.js +472 -0
- package/dist/agents/subagent-registry.js +321 -0
- package/dist/agents/subagent-registry.store.js +47 -0
- package/dist/agents/system-prompt.js +179 -0
- package/dist/agents/timeout.js +26 -0
- package/dist/agents/tool-display.js +155 -0
- package/dist/agents/tool-display.json +236 -0
- package/dist/agents/tool-images.js +138 -0
- package/dist/agents/tool-policy.js +87 -0
- package/dist/agents/tools/agent-step.js +41 -0
- package/dist/agents/tools/browser-tool.js +295 -0
- package/dist/agents/tools/canvas-tool.js +193 -0
- package/dist/agents/tools/common.js +88 -0
- package/dist/agents/tools/cron-tool.js +141 -0
- package/dist/agents/tools/discord-actions-guild.js +186 -0
- package/dist/agents/tools/discord-actions-messaging.js +313 -0
- package/dist/agents/tools/discord-actions-moderation.js +70 -0
- package/dist/agents/tools/discord-actions.js +56 -0
- package/dist/agents/tools/discord-schema.js +199 -0
- package/dist/agents/tools/discord-tool.js +16 -0
- package/dist/agents/tools/gateway-tool.js +46 -0
- package/dist/agents/tools/gateway.js +28 -0
- package/dist/agents/tools/image-tool.js +140 -0
- package/dist/agents/tools/memory-tool.js +92 -0
- package/dist/agents/tools/nodes-tool.js +413 -0
- package/dist/agents/tools/nodes-utils.js +92 -0
- package/dist/agents/tools/sessions-announce-target.js +35 -0
- package/dist/agents/tools/sessions-helpers.js +88 -0
- package/dist/agents/tools/sessions-history-tool.js +137 -0
- package/dist/agents/tools/sessions-list-tool.js +196 -0
- package/dist/agents/tools/sessions-send-helpers.js +103 -0
- package/dist/agents/tools/sessions-send-tool.js +371 -0
- package/dist/agents/tools/sessions-spawn-tool.js +319 -0
- package/dist/agents/tools/slack-actions.js +129 -0
- package/dist/agents/tools/slack-schema.js +59 -0
- package/dist/agents/tools/slack-tool.js +16 -0
- package/dist/agents/tools/telegram-actions.js +159 -0
- package/dist/agents/tools/telegram-schema.js +28 -0
- package/dist/agents/tools/telegram-tool.js +16 -0
- package/dist/agents/tools/whatsapp-login-tool.js +63 -0
- package/dist/agents/usage.js +58 -0
- package/dist/agents/workspace.js +264 -0
- package/dist/auto-reply/chunk.js +177 -0
- package/dist/auto-reply/command-auth.js +44 -0
- package/dist/auto-reply/command-detection.js +22 -0
- package/dist/auto-reply/envelope.js +30 -0
- package/dist/auto-reply/group-activation.js +20 -0
- package/dist/auto-reply/heartbeat.js +58 -0
- package/dist/auto-reply/model.js +22 -0
- package/dist/auto-reply/reply/abort.js +14 -0
- package/dist/auto-reply/reply/agent-runner.js +426 -0
- package/dist/auto-reply/reply/bash-command.js +314 -0
- package/dist/auto-reply/reply/block-streaming.js +34 -0
- package/dist/auto-reply/reply/body.js +29 -0
- package/dist/auto-reply/reply/commands.js +332 -0
- package/dist/auto-reply/reply/directive-handling.js +626 -0
- package/dist/auto-reply/reply/directives.js +59 -0
- package/dist/auto-reply/reply/dispatch-from-config.js +23 -0
- package/dist/auto-reply/reply/followup-runner.js +181 -0
- package/dist/auto-reply/reply/groups.js +152 -0
- package/dist/auto-reply/reply/mentions.js +64 -0
- package/dist/auto-reply/reply/model-selection.js +209 -0
- package/dist/auto-reply/reply/queue.js +399 -0
- package/dist/auto-reply/reply/reply-dispatcher.js +68 -0
- package/dist/auto-reply/reply/reply-tags.js +26 -0
- package/dist/auto-reply/reply/session-updates.js +103 -0
- package/dist/auto-reply/reply/session.js +169 -0
- package/dist/auto-reply/reply/typing.js +125 -0
- package/dist/auto-reply/reply.js +655 -0
- package/dist/auto-reply/send-policy.js +28 -0
- package/dist/auto-reply/status.js +197 -0
- package/dist/auto-reply/templating.js +9 -0
- package/dist/auto-reply/thinking.js +49 -0
- package/dist/auto-reply/tokens.js +2 -0
- package/dist/auto-reply/tool-meta.js +74 -0
- package/dist/auto-reply/transcription.js +57 -0
- package/dist/auto-reply/types.js +1 -0
- package/dist/browser/bridge-server.js +37 -0
- package/dist/browser/cdp.js +382 -0
- package/dist/browser/chrome.js +432 -0
- package/dist/browser/client-actions-core.js +67 -0
- package/dist/browser/client-actions-observe.js +24 -0
- package/dist/browser/client-actions-types.js +1 -0
- package/dist/browser/client-actions.js +3 -0
- package/dist/browser/client-fetch.js +43 -0
- package/dist/browser/client.js +105 -0
- package/dist/browser/config.js +155 -0
- package/dist/browser/constants.js +5 -0
- package/dist/browser/profiles-service.js +124 -0
- package/dist/browser/profiles.js +96 -0
- package/dist/browser/pw-ai.js +2 -0
- package/dist/browser/pw-session.js +144 -0
- package/dist/browser/pw-tools-core.js +363 -0
- package/dist/browser/routes/agent.js +535 -0
- package/dist/browser/routes/basic.js +155 -0
- package/dist/browser/routes/index.js +8 -0
- package/dist/browser/routes/tabs.js +105 -0
- package/dist/browser/routes/utils.js +62 -0
- package/dist/browser/screenshot.js +40 -0
- package/dist/browser/server-context.js +377 -0
- package/dist/browser/server.js +81 -0
- package/dist/browser/target-id.js +18 -0
- package/dist/browser/trash.js +21 -0
- package/dist/canvas-host/a2ui/a2ui.bundle.js +17768 -0
- package/dist/canvas-host/a2ui/index.html +246 -0
- package/dist/canvas-host/a2ui.js +187 -0
- package/dist/canvas-host/server.js +382 -0
- package/dist/channel-web.js +8 -0
- package/dist/cli/browser-cli-actions-input.js +459 -0
- package/dist/cli/browser-cli-actions-observe.js +56 -0
- package/dist/cli/browser-cli-examples.js +31 -0
- package/dist/cli/browser-cli-inspect.js +97 -0
- package/dist/cli/browser-cli-manage.js +286 -0
- package/dist/cli/browser-cli-shared.js +1 -0
- package/dist/cli/browser-cli.js +26 -0
- package/dist/cli/canvas-cli.js +416 -0
- package/dist/cli/cloud-cli.js +336 -0
- package/dist/cli/credential-cli.js +227 -0
- package/dist/cli/cron-cli.js +454 -0
- package/dist/cli/deps.js +17 -0
- package/dist/cli/dns-cli.js +180 -0
- package/dist/cli/gateway-cli.js +665 -0
- package/dist/cli/gateway-rpc.js +20 -0
- package/dist/cli/hooks-cli.js +135 -0
- package/dist/cli/memory-cli.js +101 -0
- package/dist/cli/models-cli.js +248 -0
- package/dist/cli/nodes-camera.js +57 -0
- package/dist/cli/nodes-canvas.js +26 -0
- package/dist/cli/nodes-cli.js +946 -0
- package/dist/cli/nodes-screen.js +37 -0
- package/dist/cli/pairing-cli.js +100 -0
- package/dist/cli/parse-duration.js +20 -0
- package/dist/cli/plugins-cli.js +158 -0
- package/dist/cli/ports.js +97 -0
- package/dist/cli/profile.js +81 -0
- package/dist/cli/program.js +162 -0
- package/dist/cli/prompt.js +19 -0
- package/dist/cli/run-main.js +48 -0
- package/dist/cli/skills-cli.js +132 -0
- package/dist/cli/skills-hub-cli.js +1093 -0
- package/dist/cli/telegram-cli.js +56 -0
- package/dist/cli/tool-connector-cli.js +118 -0
- package/dist/cli/tui-cli.js +35 -0
- package/dist/cli/upstream-sync-cli.js +2833 -0
- package/dist/cli/usage-cli.js +24 -0
- package/dist/cli/wait.js +8 -0
- package/dist/commands/agent-via-gateway.js +115 -0
- package/dist/commands/agent.js +665 -0
- package/dist/commands/antigravity-oauth.js +327 -0
- package/dist/commands/auth-choice-options.js +80 -0
- package/dist/commands/auth-choice.js +134 -0
- package/dist/commands/auth-token.js +31 -0
- package/dist/commands/bootstrap-preset.js +214 -0
- package/dist/commands/capabilities.js +36 -0
- package/dist/commands/chutes-oauth.js +144 -0
- package/dist/commands/claude-md.js +137 -0
- package/dist/commands/config-view.js +11 -0
- package/dist/commands/configure.js +648 -0
- package/dist/commands/credential.js +236 -0
- package/dist/commands/cursor-rules.js +230 -0
- package/dist/commands/doctor-state-migrations.js +358 -0
- package/dist/commands/doctor-ui.js +113 -0
- package/dist/commands/doctor.js +673 -0
- package/dist/commands/health.js +112 -0
- package/dist/commands/identity.js +54 -0
- package/dist/commands/init.js +167 -0
- package/dist/commands/models/aliases.js +85 -0
- package/dist/commands/models/fallbacks.js +123 -0
- package/dist/commands/models/image-fallbacks.js +123 -0
- package/dist/commands/models/list.js +347 -0
- package/dist/commands/models/scan.js +271 -0
- package/dist/commands/models/set-image.js +27 -0
- package/dist/commands/models/set.js +27 -0
- package/dist/commands/models/shared.js +73 -0
- package/dist/commands/models.js +7 -0
- package/dist/commands/onboard-auth.js +101 -0
- package/dist/commands/onboard-channels.js +814 -0
- package/dist/commands/onboard-eve-identity.js +98 -0
- package/dist/commands/onboard-github.js +153 -0
- package/dist/commands/onboard-helpers.js +303 -0
- package/dist/commands/onboard-interactive.js +17 -0
- package/dist/commands/onboard-non-interactive.js +228 -0
- package/dist/commands/onboard-providers.js +829 -0
- package/dist/commands/onboard-quickstart.js +185 -0
- package/dist/commands/onboard-remote.js +120 -0
- package/dist/commands/onboard-skills.js +148 -0
- package/dist/commands/onboard-types.js +1 -0
- package/dist/commands/onboard.js +19 -0
- package/dist/commands/openai-codex-model-default.js +38 -0
- package/dist/commands/poll.js +64 -0
- package/dist/commands/quest.js +27 -0
- package/dist/commands/reset.js +61 -0
- package/dist/commands/send.js +124 -0
- package/dist/commands/sessions-ingest.js +359 -0
- package/dist/commands/sessions.js +212 -0
- package/dist/commands/setup.js +59 -0
- package/dist/commands/signal-install.js +135 -0
- package/dist/commands/skills-manifest.js +235 -0
- package/dist/commands/status.js +139 -0
- package/dist/commands/suggestions.js +54 -0
- package/dist/commands/systemd-linger.js +71 -0
- package/dist/commands/update.js +16 -0
- package/dist/commands/usage-upload.js +27 -0
- package/dist/config/config.js +6 -0
- package/dist/config/defaults.js +140 -0
- package/dist/config/group-policy.js +49 -0
- package/dist/config/includes.js +183 -0
- package/dist/config/io.js +188 -0
- package/dist/config/legacy-migrate.js +13 -0
- package/dist/config/legacy.js +425 -0
- package/dist/config/paths.js +82 -0
- package/dist/config/port-defaults.js +32 -0
- package/dist/config/schema.js +173 -0
- package/dist/config/sessions.js +611 -0
- package/dist/config/talk.js +31 -0
- package/dist/config/types.js +1 -0
- package/dist/config/validation.js +29 -0
- package/dist/config/zod-schema.js +1110 -0
- package/dist/control-ui/assets/index-D8Q5AI4D.js +2393 -0
- package/dist/control-ui/assets/index-D8Q5AI4D.js.map +1 -0
- package/dist/control-ui/assets/index-g06q5Xc3.css +1 -0
- package/dist/control-ui/favicon.ico +0 -0
- package/dist/control-ui/index.html +16 -0
- package/dist/cron/isolated-agent.js +529 -0
- package/dist/cron/normalize.js +73 -0
- package/dist/cron/parse.js +24 -0
- package/dist/cron/run-log.js +72 -0
- package/dist/cron/schedule.js +24 -0
- package/dist/cron/service.js +471 -0
- package/dist/cron/store.js +43 -0
- package/dist/cron/types.js +1 -0
- package/dist/daemon/constants.js +10 -0
- package/dist/daemon/launchd.js +295 -0
- package/dist/daemon/legacy.js +63 -0
- package/dist/daemon/program-args.js +141 -0
- package/dist/daemon/schtasks.js +269 -0
- package/dist/daemon/service.js +69 -0
- package/dist/daemon/systemd.js +332 -0
- package/dist/discord/index.js +2 -0
- package/dist/discord/monitor.js +1089 -0
- package/dist/discord/probe.js +54 -0
- package/dist/discord/send.js +652 -0
- package/dist/discord/token.js +8 -0
- package/dist/entry.js +16 -0
- package/dist/gateway/auth.js +121 -0
- package/dist/gateway/call.js +103 -0
- package/dist/gateway/chat-attachments.js +41 -0
- package/dist/gateway/client.js +180 -0
- package/dist/gateway/config-reload.js +274 -0
- package/dist/gateway/control-ui.js +184 -0
- package/dist/gateway/hooks-mapping.js +282 -0
- package/dist/gateway/hooks.js +168 -0
- package/dist/gateway/net.js +29 -0
- package/dist/gateway/protocol/index.js +62 -0
- package/dist/gateway/protocol/schema.js +577 -0
- package/dist/gateway/server-bridge-subscriptions.js +93 -0
- package/dist/gateway/server-bridge.js +1066 -0
- package/dist/gateway/server-browser.js +11 -0
- package/dist/gateway/server-channels.js +680 -0
- package/dist/gateway/server-chat.js +159 -0
- package/dist/gateway/server-constants.js +8 -0
- package/dist/gateway/server-discovery.js +62 -0
- package/dist/gateway/server-http.js +165 -0
- package/dist/gateway/server-methods/agent-job.js +114 -0
- package/dist/gateway/server-methods/agent.js +254 -0
- package/dist/gateway/server-methods/channels.js +239 -0
- package/dist/gateway/server-methods/chat.js +207 -0
- package/dist/gateway/server-methods/config.js +50 -0
- package/dist/gateway/server-methods/connect.js +6 -0
- package/dist/gateway/server-methods/cron.js +89 -0
- package/dist/gateway/server-methods/health.js +28 -0
- package/dist/gateway/server-methods/models.js +16 -0
- package/dist/gateway/server-methods/nodes.js +294 -0
- package/dist/gateway/server-methods/providers.js +257 -0
- package/dist/gateway/server-methods/send.js +254 -0
- package/dist/gateway/server-methods/sessions.js +382 -0
- package/dist/gateway/server-methods/skills.js +83 -0
- package/dist/gateway/server-methods/system.js +118 -0
- package/dist/gateway/server-methods/talk.js +22 -0
- package/dist/gateway/server-methods/types.js +1 -0
- package/dist/gateway/server-methods/voicewake.js +30 -0
- package/dist/gateway/server-methods/web.js +81 -0
- package/dist/gateway/server-methods/wizard.js +100 -0
- package/dist/gateway/server-methods.js +53 -0
- package/dist/gateway/server-providers.js +687 -0
- package/dist/gateway/server-shared.js +1 -0
- package/dist/gateway/server-utils.js +35 -0
- package/dist/gateway/server.js +1478 -0
- package/dist/gateway/session-utils.js +355 -0
- package/dist/gateway/ws-log.js +343 -0
- package/dist/gateway/ws-logging.js +8 -0
- package/dist/globals.js +41 -0
- package/dist/hooks/gmail-ops.js +236 -0
- package/dist/hooks/gmail-setup-utils.js +278 -0
- package/dist/hooks/gmail-watcher.js +190 -0
- package/dist/hooks/gmail.js +177 -0
- package/dist/imessage/client.js +165 -0
- package/dist/imessage/index.js +3 -0
- package/dist/imessage/monitor.js +365 -0
- package/dist/imessage/probe.js +26 -0
- package/dist/imessage/send.js +83 -0
- package/dist/imessage/targets.js +176 -0
- package/dist/index.js +55 -0
- package/dist/infra/agent-events.js +46 -0
- package/dist/infra/binaries.js +9 -0
- package/dist/infra/bonjour-discovery.js +163 -0
- package/dist/infra/bonjour.js +200 -0
- package/dist/infra/bridge/server.js +564 -0
- package/dist/infra/canvas-host-url.js +54 -0
- package/dist/infra/channel-summary.js +78 -0
- package/dist/infra/control-ui-assets.js +112 -0
- package/dist/infra/dotenv.js +15 -0
- package/dist/infra/env.js +8 -0
- package/dist/infra/errors.js +28 -0
- package/dist/infra/event-log.js +251 -0
- package/dist/infra/gateway-lock.js +8 -0
- package/dist/infra/git-commit.js +91 -0
- package/dist/infra/heartbeat-events.js +21 -0
- package/dist/infra/heartbeat-runner.js +458 -0
- package/dist/infra/heartbeat-wake.js +61 -0
- package/dist/infra/is-main.js +37 -0
- package/dist/infra/json-file.js +21 -0
- package/dist/infra/machine-name.js +40 -0
- package/dist/infra/nexus-root.js +56 -0
- package/dist/infra/node-pairing.js +212 -0
- package/dist/infra/path-env.js +93 -0
- package/dist/infra/ports.js +87 -0
- package/dist/infra/provider-summary.js +80 -0
- package/dist/infra/provider-usage.auth.js +189 -0
- package/dist/infra/provider-usage.fetch.claude.js +129 -0
- package/dist/infra/provider-usage.fetch.codex.js +62 -0
- package/dist/infra/provider-usage.fetch.copilot.js +42 -0
- package/dist/infra/provider-usage.fetch.gemini.js +57 -0
- package/dist/infra/provider-usage.fetch.js +6 -0
- package/dist/infra/provider-usage.fetch.minimax.js +214 -0
- package/dist/infra/provider-usage.fetch.shared.js +11 -0
- package/dist/infra/provider-usage.fetch.zai.js +62 -0
- package/dist/infra/provider-usage.format.js +77 -0
- package/dist/infra/provider-usage.js +145 -0
- package/dist/infra/provider-usage.load.js +54 -0
- package/dist/infra/provider-usage.shared.js +19 -0
- package/dist/infra/provider-usage.types.js +1 -0
- package/dist/infra/restart.js +29 -0
- package/dist/infra/retry.js +16 -0
- package/dist/infra/runtime-guard.js +59 -0
- package/dist/infra/shell-env.js +88 -0
- package/dist/infra/system-events.js +71 -0
- package/dist/infra/system-presence.js +217 -0
- package/dist/infra/tailnet.js +46 -0
- package/dist/infra/tailscale.js +149 -0
- package/dist/infra/unhandled-rejections.js +19 -0
- package/dist/infra/usage-suggestions.js +241 -0
- package/dist/infra/usage-upload.js +290 -0
- package/dist/infra/voicewake.js +78 -0
- package/dist/infra/widearea-dns.js +123 -0
- package/dist/infra/ws.js +13 -0
- package/dist/logger.js +52 -0
- package/dist/logging.js +506 -0
- package/dist/macos/gateway-daemon.js +145 -0
- package/dist/macos/relay.js +49 -0
- package/dist/media/constants.js +33 -0
- package/dist/media/host.js +42 -0
- package/dist/media/image-ops.js +119 -0
- package/dist/media/mime.js +123 -0
- package/dist/media/parse.js +83 -0
- package/dist/media/server.js +64 -0
- package/dist/media/store.js +139 -0
- package/dist/polls.js +43 -0
- package/dist/process/command-queue.js +97 -0
- package/dist/process/exec.js +75 -0
- package/dist/provider-web.js +8 -0
- package/dist/providers/github-copilot-auth.js +123 -0
- package/dist/providers/github-copilot-models.js +35 -0
- package/dist/providers/github-copilot-token.js +11 -0
- package/dist/providers/location.js +48 -0
- package/dist/providers/web/index.js +2 -0
- package/dist/runtime.js +8 -0
- package/dist/sessions/level-overrides.js +9 -0
- package/dist/sessions/send-policy.js +68 -0
- package/dist/signal/client.js +134 -0
- package/dist/signal/daemon.js +69 -0
- package/dist/signal/index.js +3 -0
- package/dist/signal/monitor.js +411 -0
- package/dist/signal/probe.js +46 -0
- package/dist/signal/send.js +91 -0
- package/dist/slack/actions.js +97 -0
- package/dist/slack/index.js +5 -0
- package/dist/slack/monitor.js +1270 -0
- package/dist/slack/probe.js +47 -0
- package/dist/slack/send.js +131 -0
- package/dist/slack/token.js +10 -0
- package/dist/telegram/allowed-updates.js +8 -0
- package/dist/telegram/bot.js +724 -0
- package/dist/telegram/download.js +34 -0
- package/dist/telegram/index.js +4 -0
- package/dist/telegram/monitor.js +47 -0
- package/dist/telegram/pairing-store.js +77 -0
- package/dist/telegram/probe.js +63 -0
- package/dist/telegram/proxy.js +9 -0
- package/dist/telegram/reaction-level.js +45 -0
- package/dist/telegram/send.js +151 -0
- package/dist/telegram/sent-message-cache.js +65 -0
- package/dist/telegram/token.js +30 -0
- package/dist/telegram/update-offset-store.js +61 -0
- package/dist/telegram/webhook-set.js +12 -0
- package/dist/telegram/webhook.js +56 -0
- package/dist/tui/commands.js +87 -0
- package/dist/tui/components/assistant-message.js +16 -0
- package/dist/tui/components/chat-log.js +92 -0
- package/dist/tui/components/custom-editor.js +55 -0
- package/dist/tui/components/selectors.js +8 -0
- package/dist/tui/components/tool-execution.js +111 -0
- package/dist/tui/components/user-message.js +17 -0
- package/dist/tui/gateway-chat.js +140 -0
- package/dist/tui/theme/theme.js +80 -0
- package/dist/tui/tui.js +708 -0
- package/dist/utils.js +153 -0
- package/dist/version.js +18 -0
- package/dist/web/accounts.js +86 -0
- package/dist/web/active-listener.js +25 -0
- package/dist/web/auto-reply.js +1256 -0
- package/dist/web/inbound.js +649 -0
- package/dist/web/login-qr.js +230 -0
- package/dist/web/login.js +71 -0
- package/dist/web/media.js +175 -0
- package/dist/web/outbound.js +102 -0
- package/dist/web/qr-image.js +97 -0
- package/dist/web/reconnect.js +60 -0
- package/dist/web/session.js +370 -0
- package/dist/wizard/clack-prompter.js +56 -0
- package/dist/wizard/onboarding.js +620 -0
- package/dist/wizard/prompts.js +6 -0
- package/dist/wizard/session.js +203 -0
- package/docs/AGENTS.default.md +116 -0
- package/docs/CAPABILITIES.md +444 -0
- package/docs/CNAME +1 -0
- package/docs/NEXUS_CORE_REWRITE_SPEC.md +226 -0
- package/docs/RELEASING.md +69 -0
- package/docs/_config.yml +53 -0
- package/docs/_layouts/default.html +145 -0
- package/docs/agent-assisted-install.md +95 -0
- package/docs/agent-loop.md +61 -0
- package/docs/agent-send.md +21 -0
- package/docs/agent.md +108 -0
- package/docs/android.md +133 -0
- package/docs/architecture.md +114 -0
- package/docs/assets/markdown.css +133 -0
- package/docs/assets/pixel-lobster.svg +60 -0
- package/docs/assets/terminal.css +470 -0
- package/docs/assets/theme.js +55 -0
- package/docs/audio.md +48 -0
- package/docs/automation/nexus-sync.md +371 -0
- package/docs/background-process.md +74 -0
- package/docs/bash.md +32 -0
- package/docs/bedrock.md +71 -0
- package/docs/bonjour.md +159 -0
- package/docs/browser-linux-troubleshooting.md +114 -0
- package/docs/browser.md +293 -0
- package/docs/bun.md +56 -0
- package/docs/camera.md +152 -0
- package/docs/clawd.md +212 -0
- package/docs/concepts/usage-tracking.md +29 -0
- package/docs/configuration.md +1666 -0
- package/docs/control-ui.md +83 -0
- package/docs/cron.md +385 -0
- package/docs/dashboard.md +17 -0
- package/docs/device-models.md +46 -0
- package/docs/discord.md +308 -0
- package/docs/discovery.md +112 -0
- package/docs/docker.md +258 -0
- package/docs/docs.json +105 -0
- package/docs/doctor.md +68 -0
- package/docs/elevated.md +31 -0
- package/docs/faq.md +736 -0
- package/docs/feature-inventory/overview.md +141 -0
- package/docs/feature-inventory/rollout-checklist.md +53 -0
- package/docs/feature-inventory/test-matrix.md +87 -0
- package/docs/feature-inventory.md +9 -0
- package/docs/gateway/configuration-examples.md +221 -0
- package/docs/gateway/configuration.md +172 -0
- package/docs/gateway/cron.md +61 -0
- package/docs/gateway/heartbeat.md +207 -0
- package/docs/gateway/pairing.md +109 -0
- package/docs/gateway-lock.md +28 -0
- package/docs/gateway.md +227 -0
- package/docs/gmail-pubsub.md +191 -0
- package/docs/grammy.md +27 -0
- package/docs/group-messages.md +73 -0
- package/docs/groups.md +130 -0
- package/docs/health.md +28 -0
- package/docs/heartbeat.md +73 -0
- package/docs/home-userspace.md +277 -0
- package/docs/hubs.md +148 -0
- package/docs/images.md +51 -0
- package/docs/imessage.md +94 -0
- package/docs/index.md +196 -0
- package/docs/ios.md +372 -0
- package/docs/linux.md +11 -0
- package/docs/location-command.md +95 -0
- package/docs/location.md +46 -0
- package/docs/logging.md +110 -0
- package/docs/lore.md +131 -0
- package/docs/mac/bun.md +133 -0
- package/docs/mac/canvas.md +161 -0
- package/docs/mac/child-process.md +72 -0
- package/docs/mac/dev-setup.md +81 -0
- package/docs/mac/health.md +28 -0
- package/docs/mac/icon.md +26 -0
- package/docs/mac/logging.md +51 -0
- package/docs/mac/menu-bar.md +69 -0
- package/docs/mac/peekaboo.md +170 -0
- package/docs/mac/permissions.md +40 -0
- package/docs/mac/release.md +76 -0
- package/docs/mac/remote.md +57 -0
- package/docs/mac/signing.md +41 -0
- package/docs/mac/skills.md +27 -0
- package/docs/mac/voice-overlay.md +52 -0
- package/docs/mac/voicewake.md +56 -0
- package/docs/mac/webchat.md +27 -0
- package/docs/mac/xpc.md +40 -0
- package/docs/macos.md +104 -0
- package/docs/model-failover.md +75 -0
- package/docs/models.md +91 -0
- package/docs/multi-agent.md +74 -0
- package/docs/nix.md +95 -0
- package/docs/nodes.md +157 -0
- package/docs/onboarding-config-protocol.md +34 -0
- package/docs/onboarding.md +189 -0
- package/docs/pairing.md +85 -0
- package/docs/plans/cron-add-hardening.md +72 -0
- package/docs/plans/group-policy-hardening.md +121 -0
- package/docs/poll.md +52 -0
- package/docs/prereqs.md +67 -0
- package/docs/presence.md +133 -0
- package/docs/proposals/model-config.md +147 -0
- package/docs/provider-routing.md +25 -0
- package/docs/queue.md +78 -0
- package/docs/reference/templates/AGENTS.md +164 -0
- package/docs/remote-gateway-readme.md +153 -0
- package/docs/remote.md +61 -0
- package/docs/research/memory.md +227 -0
- package/docs/rpc.md +35 -0
- package/docs/security.md +200 -0
- package/docs/session-ingestion.md +119 -0
- package/docs/session-tool.md +154 -0
- package/docs/session.md +85 -0
- package/docs/sessions.md +8 -0
- package/docs/setup.md +131 -0
- package/docs/showcase.md +37 -0
- package/docs/signal.md +122 -0
- package/docs/skills-config.md +58 -0
- package/docs/skills.md +153 -0
- package/docs/slack.md +221 -0
- package/docs/subagents.md +72 -0
- package/docs/tailscale.md +71 -0
- package/docs/talk.md +79 -0
- package/docs/telegram.md +96 -0
- package/docs/templates/AGENTS.md +286 -0
- package/docs/templates/BOOTSTRAP.md +35 -0
- package/docs/templates/IDENTITY.md +17 -0
- package/docs/templates/PROFILE.md +14 -0
- package/docs/templates/SOUL.md +41 -0
- package/docs/templates/TOOLS.md +41 -0
- package/docs/templates/USER.md +8 -0
- package/docs/test.md +43 -0
- package/docs/testing-onboarding-quickstart.md +76 -0
- package/docs/testing-philosophy.md +211 -0
- package/docs/thinking.md +46 -0
- package/docs/timezone.md +40 -0
- package/docs/tools.md +346 -0
- package/docs/troubleshooting.md +257 -0
- package/docs/tui.md +71 -0
- package/docs/typebox.md +42 -0
- package/docs/updating.md +138 -0
- package/docs/usage-cloud-aggregation-spec.md +133 -0
- package/docs/usage-suggestions-pipeline.md +126 -0
- package/docs/voicewake.md +61 -0
- package/docs/web.md +115 -0
- package/docs/webchat.md +34 -0
- package/docs/webhook.md +132 -0
- package/docs/whatsapp-clawd.jpg +0 -0
- package/docs/whatsapp.md +170 -0
- package/docs/windows.md +11 -0
- package/docs/wizard.md +167 -0
- package/package.json +209 -0
- package/skills/1password/SKILL.md +54 -0
- package/skills/1password/docs/setup.md +85 -0
- package/skills/1password/docs/troubleshooting.md +63 -0
- package/skills/1password/references/cli-examples.md +29 -0
- package/skills/1password/references/get-started.md +17 -0
- package/skills/agent-browser/SKILL.md +450 -0
- package/skills/agent-browser/docs/browser-use-eval.md +95 -0
- package/skills/agent-browser/docs/first-tests.md +261 -0
- package/skills/agent-browser/docs/wordle-nyt-eval.js +32 -0
- package/skills/aix/SKILL.md +93 -0
- package/skills/aix/docs/embeddings.md +40 -0
- package/skills/aix/docs/setup.md +58 -0
- package/skills/aix/docs/troubleshooting.md +41 -0
- package/skills/aix/references/sql.md +48 -0
- package/skills/apple-notes/SKILL.md +50 -0
- package/skills/apple-reminders/SKILL.md +67 -0
- package/skills/bear-notes/SKILL.md +79 -0
- package/skills/bird/SKILL.md +32 -0
- package/skills/bird/docs/auth.md +31 -0
- package/skills/bird/docs/troubleshooting.md +31 -0
- package/skills/blogwatcher/SKILL.md +46 -0
- package/skills/blucli/SKILL.md +27 -0
- package/skills/brave-search/SKILL.md +36 -0
- package/skills/brave-search/docs/setup.md +40 -0
- package/skills/brave-search/docs/troubleshooting.md +37 -0
- package/skills/brave-search/docs/usage.md +28 -0
- package/skills/brave-search/scripts/content.mjs +53 -0
- package/skills/brave-search/scripts/search.mjs +79 -0
- package/skills/browser-use-agent-sdk/SKILL.md +90 -0
- package/skills/camsnap/SKILL.md +25 -0
- package/skills/clawdhub/SKILL.md +53 -0
- package/skills/coding-agent/SKILL.md +274 -0
- package/skills/comms/SKILL.md +249 -0
- package/skills/comms/docs/adapters.md +54 -0
- package/skills/comms/docs/setup.md +56 -0
- package/skills/comms/docs/troubleshooting.md +44 -0
- package/skills/comms/references/schema.md +49 -0
- package/skills/computer-use/SKILL.md +204 -0
- package/skills/computer-use/docs/open-interpreter.md +26 -0
- package/skills/computer-use/docs/peekaboo.md +26 -0
- package/skills/computer-use/docs/setup.md +47 -0
- package/skills/computer-use/docs/troubleshooting.md +33 -0
- package/skills/discord/SKILL.md +370 -0
- package/skills/eightctl/SKILL.md +29 -0
- package/skills/eve/SKILL.md +215 -0
- package/skills/eve/docs/dual-account.md +84 -0
- package/skills/eve/docs/intelligence.md +58 -0
- package/skills/eve/docs/setup.md +60 -0
- package/skills/eve/docs/troubleshooting.md +54 -0
- package/skills/eve/scripts/setup-dual-account.sh +125 -0
- package/skills/filesystem/SKILL.md +217 -0
- package/skills/food-order/SKILL.md +41 -0
- package/skills/gemini/SKILL.md +23 -0
- package/skills/gh/SKILL.md +22 -0
- package/skills/gh/docs/usage.md +41 -0
- package/skills/gifgrep/SKILL.md +47 -0
- package/skills/github/SKILL.md +26 -0
- package/skills/github/docs/setup.md +21 -0
- package/skills/github/docs/troubleshooting.md +24 -0
- package/skills/gog/SKILL.md +104 -0
- package/skills/gog/docs/portability.md +94 -0
- package/skills/gog/docs/setup.md +76 -0
- package/skills/gog/docs/troubleshooting.md +94 -0
- package/skills/gog/scripts/cdp/README.md +90 -0
- package/skills/gog/scripts/cdp/add_test_users.py +69 -0
- package/skills/gog/scripts/cdp/auth_add_accounts.py +209 -0
- package/skills/gog/scripts/cdp/auth_add_accounts_manual.py +206 -0
- package/skills/gog/scripts/cdp/create_oauth_client.py +165 -0
- package/skills/gog/scripts/cdp/launch_cdp_chrome.sh +58 -0
- package/skills/google-oauth/SKILL.md +94 -0
- package/skills/goplaces/SKILL.md +30 -0
- package/skills/imsg/SKILL.md +25 -0
- package/skills/json-render/SKILL.md +154 -0
- package/skills/json-render/assets/components/README.md +21 -0
- package/skills/json-render/assets/components/catalog.ts +78 -0
- package/skills/json-render/assets/components/registry.tsx +172 -0
- package/skills/json-render/assets/demo/App.css +397 -0
- package/skills/json-render/assets/demo/App.tsx +897 -0
- package/skills/json-render/assets/demo/README.md +22 -0
- package/skills/json-render/assets/demo/catalog.ts +78 -0
- package/skills/json-render/assets/demo/data/nexus-core.json +31 -0
- package/skills/json-render/assets/demo/index.css +27 -0
- package/skills/json-render/assets/demo/registry.tsx +150 -0
- package/skills/json-render/docs/nexus-state-demo.md +84 -0
- package/skills/json-render/docs/shadcn-preset.md +33 -0
- package/skills/json-render/scripts/create-vite-demo.sh +45 -0
- package/skills/json-render/scripts/llm-server/README.md +33 -0
- package/skills/json-render/scripts/llm-server/catalog.ts +78 -0
- package/skills/json-render/scripts/llm-server/package-lock.json +702 -0
- package/skills/json-render/scripts/llm-server/package.json +18 -0
- package/skills/json-render/scripts/llm-server/server.ts +285 -0
- package/skills/local-places/SERVER_README.md +101 -0
- package/skills/local-places/SKILL.md +91 -0
- package/skills/local-places/pyproject.toml +27 -0
- package/skills/local-places/src/local_places/__init__.py +2 -0
- package/skills/local-places/src/local_places/__pycache__/__init__.cpython-314.pyc +0 -0
- package/skills/local-places/src/local_places/__pycache__/google_places.cpython-314.pyc +0 -0
- package/skills/local-places/src/local_places/__pycache__/main.cpython-314.pyc +0 -0
- package/skills/local-places/src/local_places/__pycache__/schemas.cpython-314.pyc +0 -0
- package/skills/local-places/src/local_places/google_places.py +314 -0
- package/skills/local-places/src/local_places/main.py +65 -0
- package/skills/local-places/src/local_places/schemas.py +107 -0
- package/skills/mcporter/SKILL.md +38 -0
- package/skills/model-usage/SKILL.md +45 -0
- package/skills/model-usage/references/codexbar-cli.md +28 -0
- package/skills/model-usage/scripts/model_usage.py +310 -0
- package/skills/nano-banana-pro/SKILL.md +30 -0
- package/skills/nano-banana-pro/scripts/generate_image.py +169 -0
- package/skills/nano-pdf/SKILL.md +20 -0
- package/skills/nexus-cloud/SKILL.md +53 -0
- package/skills/nexus-cloud/docs/security.md +24 -0
- package/skills/nexus-cloud/docs/setup.md +51 -0
- package/skills/nexus-cloud/docs/troubleshooting.md +28 -0
- package/skills/notion/SKILL.md +156 -0
- package/skills/obsidian/SKILL.md +55 -0
- package/skills/onboarding/SKILL.md +515 -0
- package/skills/onboarding/docs/CAPABILITIES.md +444 -0
- package/skills/onboarding/docs/CAPABILITY_TAXONOMY.md +608 -0
- package/skills/onboarding/docs/CLI_GRAMMAR.md +797 -0
- package/skills/onboarding/docs/CLI_GRAMMAR_CREDENTIALS.md +632 -0
- package/skills/onboarding/docs/CLI_GRAMMAR_ONBOARDING.md +815 -0
- package/skills/onboarding/docs/CLI_GRAMMAR_SKILLS.md +449 -0
- package/skills/onboarding/docs/DOCUMENTATION_OVERVIEW.md +290 -0
- package/skills/onboarding/docs/ENTITY_MODEL.md +582 -0
- package/skills/onboarding/docs/GOAL_STATE_ARCHITECTURE.md +395 -0
- package/skills/onboarding/docs/NEXUS_SYSTEM_OVERVIEW.md +476 -0
- package/skills/onboarding/docs/SKILLS_HUB_SPEC.md +477 -0
- package/skills/onboarding/docs/SKILLS_SPECIFICATION.md +947 -0
- package/skills/onboarding/docs/SKILL_GATEWAY_DESIGN.md +702 -0
- package/skills/onboarding/docs/SKILL_GATEWAY_PRD.md +278 -0
- package/skills/onboarding/docs/SKILL_INVENTORY.md +266 -0
- package/skills/onboarding/docs/STATE_ARCHITECTURE.md +547 -0
- package/skills/onboarding/docs/TROUBLESHOOTING.md +363 -0
- package/skills/onboarding/docs/USER_JOURNEY.md +797 -0
- package/skills/onboarding/docs/WOW_MOMENTS.md +232 -0
- package/skills/onboarding/docs/agent-apple-id.md +289 -0
- package/skills/onboarding/docs/skill-deep-dives/1password.md +367 -0
- package/skills/onboarding/docs/skill-deep-dives/TEMPLATE.md +197 -0
- package/skills/onboarding/docs/skill-deep-dives/aix.md +498 -0
- package/skills/onboarding/docs/skill-deep-dives/bird.md +357 -0
- package/skills/onboarding/docs/skill-deep-dives/brave-search.md +601 -0
- package/skills/onboarding/docs/skill-deep-dives/comms.md +607 -0
- package/skills/onboarding/docs/skill-deep-dives/computer-use.md +599 -0
- package/skills/onboarding/docs/skill-deep-dives/cron-and-heartbeat.md +576 -0
- package/skills/onboarding/docs/skill-deep-dives/eve.md +711 -0
- package/skills/onboarding/docs/skill-deep-dives/github.md +333 -0
- package/skills/onboarding/docs/skill-deep-dives/gog.md +640 -0
- package/skills/onboarding/docs/skill-deep-dives/homebrew-prereqs.md +785 -0
- package/skills/onboarding/docs/skill-deep-dives/nexus-cloud.md +689 -0
- package/skills/onboarding/docs/skill-deep-dives/qmd.md +742 -0
- package/skills/onboarding/docs/skill-deep-dives/telegram.md +379 -0
- package/skills/onboarding/docs/skill-deep-dives/wacli.md +399 -0
- package/skills/onboarding/docs/skill-deep-dives/weather.md +513 -0
- package/skills/onboarding/scripts/ralph/prd.json +215 -0
- package/skills/onboarding/scripts/ralph/progress.txt +99 -0
- package/skills/onboarding/scripts/ralph/prompt.md +87 -0
- package/skills/onboarding/scripts/ralph/ralph.log +84 -0
- package/skills/onboarding/scripts/ralph/ralph.sh +45 -0
- package/skills/onboarding/scripts/setup-cursor-skills.sh +40 -0
- package/skills/openai-image-gen/SKILL.md +31 -0
- package/skills/openai-image-gen/scripts/gen.py +173 -0
- package/skills/openai-whisper/SKILL.md +19 -0
- package/skills/openai-whisper-api/SKILL.md +43 -0
- package/skills/openai-whisper-api/scripts/transcribe.sh +85 -0
- package/skills/openhue/SKILL.md +30 -0
- package/skills/oracle/SKILL.md +105 -0
- package/skills/ordercli/SKILL.md +47 -0
- package/skills/peekaboo/SKILL.md +153 -0
- package/skills/qmd/SKILL.md +32 -0
- package/skills/qmd/docs/mcp.md +30 -0
- package/skills/qmd/docs/ollama.md +42 -0
- package/skills/qmd/docs/setup.md +44 -0
- package/skills/sag/SKILL.md +62 -0
- package/skills/skill-cli-template/SKILL.md +109 -0
- package/skills/skill-creator/scripts/__pycache__/quick_validate.cpython-311.pyc +0 -0
- package/skills/slack/SKILL.md +144 -0
- package/skills/songsee/SKILL.md +29 -0
- package/skills/sonoscli/SKILL.md +26 -0
- package/skills/spotify-player/SKILL.md +34 -0
- package/skills/summarize/SKILL.md +49 -0
- package/skills/telegram/SKILL.md +20 -0
- package/skills/telegram/docs/pairing.md +30 -0
- package/skills/telegram/docs/setup.md +41 -0
- package/skills/telegram/docs/webhook.md +17 -0
- package/skills/things-mac/SKILL.md +61 -0
- package/skills/tmux/SKILL.md +121 -0
- package/skills/tmux/scripts/find-sessions.sh +112 -0
- package/skills/tmux/scripts/wait-for-text.sh +83 -0
- package/skills/trello/SKILL.md +84 -0
- package/skills/upstream-sync/SKILL.md +151 -0
- package/skills/upstream-sync/scripts/auto-port.sh +227 -0
- package/skills/upstream-sync/scripts/check-all.sh +88 -0
- package/skills/upstream-sync/scripts/check-nexus.sh +146 -0
- package/skills/upstream-sync/scripts/check-pi-ai.sh +129 -0
- package/skills/video-frames/SKILL.md +29 -0
- package/skills/video-frames/scripts/frame.sh +81 -0
- package/skills/wacli/SKILL.md +48 -0
- package/skills/wacli/docs/auth.md +21 -0
- package/skills/wacli/docs/backup.md +9 -0
- package/skills/wacli/docs/troubleshooting.md +21 -0
- package/skills/weather/SKILL.md +53 -0
- package/skills/weather/docs/usage.md +40 -0
|
@@ -0,0 +1,947 @@
|
|
|
1
|
+
# Skills Specification
|
|
2
|
+
|
|
3
|
+
Complete specification for the Nexus skill system: structure, types, state, usage tracking, and discovery.
|
|
4
|
+
|
|
5
|
+
## Related Work / Inspiration
|
|
6
|
+
|
|
7
|
+
This specification draws from several sources:
|
|
8
|
+
|
|
9
|
+
- **Dex (Chetan Conikee)** — Skill crystallization, adapter pattern, fingerprinting, adaptive forgetting, workspace recording as training data
|
|
10
|
+
- **Taxonomy Discussion (Opus)** — Clean separation of Connector → Tool → Skill layers, abstract interfaces, "skills are stateless prompts"
|
|
11
|
+
- **Claude Skills / ClawdHub** — SKILL.md format, skill sharing hub, tool mappings
|
|
12
|
+
- **MCP (Anthropic)** — Protocol patterns, tool definitions, server manifests
|
|
13
|
+
|
|
14
|
+
Key insights incorporated:
|
|
15
|
+
1. Skills should be **stateless prompts** — tools own state, not skills
|
|
16
|
+
2. **Crystallization** is a powerful optimization for repeated workflows
|
|
17
|
+
3. **Abstract interfaces** enable portability (email_sender vs gog)
|
|
18
|
+
4. **Fingerprinting** enables security and drift detection
|
|
19
|
+
5. **Workspace as training data** — usage logs are valuable
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 1. What is a Skill?
|
|
24
|
+
|
|
25
|
+
A **skill** is a packaged capability that an agent can use. It consists of:
|
|
26
|
+
|
|
27
|
+
1. **SKILL.md** — The prompt/instructions + metadata (required)
|
|
28
|
+
2. **Supporting files** — Scripts, docs, references (optional)
|
|
29
|
+
3. **Runtime state** — Tracked in `~/nexus/state/nexus/skills/{skill}/` (managed by nexus)
|
|
30
|
+
|
|
31
|
+
Skills are the atomic units of agent capability. They can be:
|
|
32
|
+
- **Pure prompts** — Just instructions the agent follows
|
|
33
|
+
- **Tool-backed** — Require a binary installed on the system
|
|
34
|
+
- **Script-backed** — Run via interpreter (node, python)
|
|
35
|
+
- **Connector-backed** — Require external credentials/API keys
|
|
36
|
+
|
|
37
|
+
### 1.1 Conceptual Layering
|
|
38
|
+
|
|
39
|
+
To understand skills properly, we need to distinguish three layers:
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
43
|
+
│ SKILL (Prompt Layer) │
|
|
44
|
+
│ • Stateless instructions (.md file) │
|
|
45
|
+
│ • References tools and connectors │
|
|
46
|
+
│ • Distributable as .md + manifest │
|
|
47
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
48
|
+
↓ uses
|
|
49
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
50
|
+
│ TOOL (Capability Layer) │
|
|
51
|
+
│ • Binary/CLI that performs work │
|
|
52
|
+
│ • Stateful — owns caches, databases, files │
|
|
53
|
+
│ • May depend on connectors │
|
|
54
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
55
|
+
↓ authenticates via
|
|
56
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
57
|
+
│ CONNECTOR (Auth Layer) │
|
|
58
|
+
│ • Auth + API endpoint access │
|
|
59
|
+
│ • Stateless — just credentials │
|
|
60
|
+
│ • Maps to ~/nexus/state/credentials/ │
|
|
61
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
**Key insight:** Skills are prompts (stateless). Tools have state. Connectors are just auth.
|
|
65
|
+
|
|
66
|
+
This means:
|
|
67
|
+
- **Skills don't have state** — They're just instructions
|
|
68
|
+
- **Runtime state** (`state.json`, `usage.log`) tracks skill *execution*, not skill *data*
|
|
69
|
+
- **Tool state** lives in the tool's own location (e.g., `~/.config/gog/`)
|
|
70
|
+
- **Connector state** lives in `~/nexus/state/credentials/`
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## 2. SKILL.md Structure
|
|
75
|
+
|
|
76
|
+
### 2.1 Frontmatter (YAML)
|
|
77
|
+
|
|
78
|
+
```yaml
|
|
79
|
+
---
|
|
80
|
+
name: skill-name
|
|
81
|
+
description: One-line description of what the skill does
|
|
82
|
+
homepage: https://example.com/docs
|
|
83
|
+
metadata: {"nexus":{...}}
|
|
84
|
+
---
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
| Field | Required | Description |
|
|
88
|
+
|-------|----------|-------------|
|
|
89
|
+
| `name` | Yes | Unique identifier (lowercase, kebab-case) |
|
|
90
|
+
| `description` | Yes | Brief description for agent context |
|
|
91
|
+
| `homepage` | No | Link to documentation/source |
|
|
92
|
+
| `metadata` | No | JSON object with nexus-specific config |
|
|
93
|
+
|
|
94
|
+
### 2.2 Nexus Metadata Object
|
|
95
|
+
|
|
96
|
+
The `metadata` field contains a JSON object with a `nexus` key:
|
|
97
|
+
|
|
98
|
+
```json
|
|
99
|
+
{
|
|
100
|
+
"nexus": {
|
|
101
|
+
"emoji": "📧",
|
|
102
|
+
"os": ["darwin", "linux"],
|
|
103
|
+
"requires": {
|
|
104
|
+
"bins": ["gog"],
|
|
105
|
+
"anyBins": ["interpreter", "peekaboo"],
|
|
106
|
+
"env": ["BRAVE_API_KEY"],
|
|
107
|
+
"config": ["browser.enabled"]
|
|
108
|
+
},
|
|
109
|
+
"install": [
|
|
110
|
+
{
|
|
111
|
+
"id": "brew",
|
|
112
|
+
"kind": "brew",
|
|
113
|
+
"formula": "steipete/tap/gogcli",
|
|
114
|
+
"bins": ["gog"],
|
|
115
|
+
"label": "Install gog (brew)"
|
|
116
|
+
}
|
|
117
|
+
],
|
|
118
|
+
"primaryEnv": "BRAVE_API_KEY",
|
|
119
|
+
"skillKey": "brave",
|
|
120
|
+
"bundled": true,
|
|
121
|
+
"priority": "high",
|
|
122
|
+
"always": true
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
| Field | Type | Description |
|
|
128
|
+
|-------|------|-------------|
|
|
129
|
+
| `emoji` | string | Visual identifier for the skill |
|
|
130
|
+
| `os` | string[] | Platform restrictions: `["darwin", "linux", "win32"]` |
|
|
131
|
+
| `requires.bins` | string[] | ALL of these binaries must exist in PATH |
|
|
132
|
+
| `requires.anyBins` | string[] | ANY ONE of these binaries must exist |
|
|
133
|
+
| `requires.env` | string[] | Required environment variables |
|
|
134
|
+
| `requires.config` | string[] | Required nexus config paths (e.g., `browser.enabled`) |
|
|
135
|
+
| `install` | InstallSpec[] | How to install required tools |
|
|
136
|
+
| `primaryEnv` | string | Main env var for API key (used with `apiKey` in config) |
|
|
137
|
+
| `skillKey` | string | Override key for skill-specific config lookup |
|
|
138
|
+
| `bundled` | boolean | True if this ships with nexus-core |
|
|
139
|
+
| `priority` | string | `"high"` for skills that should load early |
|
|
140
|
+
| `always` | boolean | True to always include, ignoring requirements |
|
|
141
|
+
|
|
142
|
+
### 2.3 Install Specification
|
|
143
|
+
|
|
144
|
+
```typescript
|
|
145
|
+
type InstallSpec = {
|
|
146
|
+
id: string; // Unique identifier for this install option
|
|
147
|
+
kind: "brew" | "node" | "go" | "uv" | "shell";
|
|
148
|
+
formula?: string; // For brew
|
|
149
|
+
package?: string; // For npm/go/uv
|
|
150
|
+
module?: string; // For uv pip
|
|
151
|
+
script?: string; // For shell
|
|
152
|
+
bins?: string[]; // Binaries this install provides
|
|
153
|
+
label?: string; // Human-readable label
|
|
154
|
+
};
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### 2.4 Body (Markdown)
|
|
158
|
+
|
|
159
|
+
After the frontmatter, the rest of the file is the skill's prompt/instructions:
|
|
160
|
+
|
|
161
|
+
```markdown
|
|
162
|
+
# Skill Name
|
|
163
|
+
|
|
164
|
+
Brief description and context.
|
|
165
|
+
|
|
166
|
+
## Commands
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
tool-name subcommand --flag value
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
## Workflow
|
|
173
|
+
|
|
174
|
+
1. Step one
|
|
175
|
+
2. Step two
|
|
176
|
+
|
|
177
|
+
## Examples
|
|
178
|
+
|
|
179
|
+
...
|
|
180
|
+
|
|
181
|
+
## Guardrails
|
|
182
|
+
|
|
183
|
+
- Safety rule 1
|
|
184
|
+
- Safety rule 2
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
The body should include:
|
|
188
|
+
- **Commands/Usage** — How to invoke the skill's tools
|
|
189
|
+
- **Workflow** — Recommended order of operations
|
|
190
|
+
- **Examples** — Real command examples
|
|
191
|
+
- **Guardrails** — Safety rules and limitations
|
|
192
|
+
- **References** — Links to supporting docs in the skill folder
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## 3. Skill Types
|
|
197
|
+
|
|
198
|
+
Skills are classified into three types based on execution method:
|
|
199
|
+
|
|
200
|
+
### 3.1 Pure Prompt Skills
|
|
201
|
+
|
|
202
|
+
**No external tool required.** The skill is purely instructional.
|
|
203
|
+
|
|
204
|
+
```typescript
|
|
205
|
+
const PROMPT_ONLY_SKILLS = new Set([
|
|
206
|
+
"filesystem", // Shell commands for file organization
|
|
207
|
+
"computer-use", // Instructions for using automation tools
|
|
208
|
+
"weather", // Use web search/APIs
|
|
209
|
+
"github", // Use gh CLI (usually pre-installed)
|
|
210
|
+
"discord", // MCP or API usage patterns
|
|
211
|
+
"apple-notes", // AppleScript/osascript patterns
|
|
212
|
+
"apple-reminders", // AppleScript/osascript patterns
|
|
213
|
+
"onboarding", // Nexus internal
|
|
214
|
+
]);
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
**Characteristics:**
|
|
218
|
+
- Always "configured" (no verification needed)
|
|
219
|
+
- Prompt is returned directly via `nexus skill run <name>`
|
|
220
|
+
- Zero dependencies
|
|
221
|
+
|
|
222
|
+
### 3.2 Tool-Backed Skills
|
|
223
|
+
|
|
224
|
+
**Require a binary installed on the system.**
|
|
225
|
+
|
|
226
|
+
```typescript
|
|
227
|
+
const KNOWN_SKILL_TOOLS: Record<string, ToolSkillConfig> = {
|
|
228
|
+
gog: {
|
|
229
|
+
tool: "gog",
|
|
230
|
+
verify: "gog gmail labels list --account default",
|
|
231
|
+
requiresAuth: true,
|
|
232
|
+
},
|
|
233
|
+
eve: {
|
|
234
|
+
tool: "eve",
|
|
235
|
+
verify: "eve messages --limit 1",
|
|
236
|
+
requiresAuth: true,
|
|
237
|
+
},
|
|
238
|
+
"1password": {
|
|
239
|
+
tool: "op",
|
|
240
|
+
verify: "op whoami",
|
|
241
|
+
requiresAuth: true,
|
|
242
|
+
},
|
|
243
|
+
tmux: {
|
|
244
|
+
tool: "tmux",
|
|
245
|
+
verify: "tmux -V",
|
|
246
|
+
},
|
|
247
|
+
// ... etc
|
|
248
|
+
};
|
|
249
|
+
|
|
250
|
+
type ToolSkillConfig = {
|
|
251
|
+
tool: string; // Binary name
|
|
252
|
+
verify: string; // Command to verify it works
|
|
253
|
+
requiresAuth?: boolean; // Needs OAuth/login
|
|
254
|
+
configEnv?: string[]; // Env vars that indicate config
|
|
255
|
+
};
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
**Characteristics:**
|
|
259
|
+
- `nexus skill run <name> -- args` passes args to the tool
|
|
260
|
+
- Verification runs the verify command
|
|
261
|
+
- Gateway captures stdout/stderr/exit code
|
|
262
|
+
|
|
263
|
+
### 3.3 Script-Backed Skills
|
|
264
|
+
|
|
265
|
+
**Run via an interpreter (node, python, etc).**
|
|
266
|
+
|
|
267
|
+
```typescript
|
|
268
|
+
const SCRIPT_SKILLS: Record<string, ScriptSkillConfig> = {
|
|
269
|
+
"brave-search": {
|
|
270
|
+
runner: "node",
|
|
271
|
+
script: "scripts/search.mjs",
|
|
272
|
+
requiredEnv: ["BRAVE_API_KEY"],
|
|
273
|
+
},
|
|
274
|
+
"openai-image-gen": {
|
|
275
|
+
runner: "python",
|
|
276
|
+
script: "scripts/gen.py",
|
|
277
|
+
requiredEnv: ["OPENAI_API_KEY"],
|
|
278
|
+
},
|
|
279
|
+
};
|
|
280
|
+
|
|
281
|
+
type ScriptSkillConfig = {
|
|
282
|
+
runner: string; // Interpreter binary
|
|
283
|
+
script: string; // Relative path from skill dir
|
|
284
|
+
requiredEnv?: string[];// Required env vars
|
|
285
|
+
};
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
**Characteristics:**
|
|
289
|
+
- `nexus skill run <name> -- args` runs `runner script args`
|
|
290
|
+
- Working directory is the skill folder
|
|
291
|
+
- Requires both interpreter and env vars
|
|
292
|
+
|
|
293
|
+
### 3.4 Connector Classification
|
|
294
|
+
|
|
295
|
+
**Orthogonal to type:** Any skill can also be a "connector" if it requires external credentials:
|
|
296
|
+
|
|
297
|
+
| Classification | Needs | Examples |
|
|
298
|
+
|---------------|-------|----------|
|
|
299
|
+
| **Pure Prompt** | Nothing | filesystem, weather |
|
|
300
|
+
| **Tool** | Binary only | tmux, ffmpeg |
|
|
301
|
+
| **Tool + Connector** | Binary + OAuth/API | gog, eve, 1password |
|
|
302
|
+
| **Script + Connector** | Interpreter + API key | brave-search, openai-image-gen |
|
|
303
|
+
|
|
304
|
+
Connectors are important for the capability taxonomy because they represent the "locked" capabilities that require user action to enable.
|
|
305
|
+
|
|
306
|
+
---
|
|
307
|
+
|
|
308
|
+
## 4. Per-Skill State
|
|
309
|
+
|
|
310
|
+
### 4.1 Storage Location
|
|
311
|
+
|
|
312
|
+
**Decision: Per-skill folders (not single file)**
|
|
313
|
+
|
|
314
|
+
```
|
|
315
|
+
~/nexus/state/
|
|
316
|
+
└── nexus/
|
|
317
|
+
└── skills/
|
|
318
|
+
├── manifest.json # Discovery manifest
|
|
319
|
+
├── gog/
|
|
320
|
+
│ ├── state.json
|
|
321
|
+
│ └── usage.log
|
|
322
|
+
├── eve/
|
|
323
|
+
│ ├── state.json
|
|
324
|
+
│ └── usage.log
|
|
325
|
+
└── filesystem/
|
|
326
|
+
├── state.json
|
|
327
|
+
└── usage.log
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
**Why per-skill folders?**
|
|
331
|
+
- **Isolation**: Skill state is self-contained
|
|
332
|
+
- **Git-friendliness**: Can track individual skills
|
|
333
|
+
- **Partial reads**: Don't load entire state file for one skill
|
|
334
|
+
- **Future extensibility**: Can add more per-skill files (custom config, etc)
|
|
335
|
+
|
|
336
|
+
### 4.2 State Schema (`state.json`)
|
|
337
|
+
|
|
338
|
+
```typescript
|
|
339
|
+
type SkillState = {
|
|
340
|
+
version: 1;
|
|
341
|
+
|
|
342
|
+
// Execution metadata (from KNOWN_SKILL_TOOLS or detected)
|
|
343
|
+
tool?: string; // CLI binary name
|
|
344
|
+
verify?: string; // Verification command
|
|
345
|
+
type?: "tool" | "script" | "prompt";
|
|
346
|
+
|
|
347
|
+
// Runtime state (updated by gateway)
|
|
348
|
+
configured: boolean; // Has verification passed?
|
|
349
|
+
configuredAt?: string; // ISO timestamp of first success
|
|
350
|
+
lastVerified?: string; // ISO timestamp of last verify attempt
|
|
351
|
+
lastUsed?: string; // ISO timestamp of last execution
|
|
352
|
+
lastError?: string; // Last error message (truncated)
|
|
353
|
+
|
|
354
|
+
// Computed stats (from usage log)
|
|
355
|
+
totalInvocations?: number;
|
|
356
|
+
successRate?: number; // 0-1
|
|
357
|
+
avgDurationMs?: number;
|
|
358
|
+
};
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
**Example:**
|
|
362
|
+
```json
|
|
363
|
+
{
|
|
364
|
+
"version": 1,
|
|
365
|
+
"tool": "gog",
|
|
366
|
+
"verify": "gog gmail labels list --account default",
|
|
367
|
+
"type": "tool",
|
|
368
|
+
"configured": true,
|
|
369
|
+
"configuredAt": "2026-01-10T15:30:00Z",
|
|
370
|
+
"lastVerified": "2026-01-14T08:00:00Z",
|
|
371
|
+
"lastUsed": "2026-01-14T12:05:00Z",
|
|
372
|
+
"lastError": null,
|
|
373
|
+
"totalInvocations": 47,
|
|
374
|
+
"successRate": 0.957,
|
|
375
|
+
"avgDurationMs": 1234
|
|
376
|
+
}
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
### 4.3 Usage Log (`usage.log`)
|
|
380
|
+
|
|
381
|
+
**Format:** JSON Lines (append-only)
|
|
382
|
+
|
|
383
|
+
```typescript
|
|
384
|
+
type UsageLogEntry = {
|
|
385
|
+
ts: string; // ISO timestamp
|
|
386
|
+
type: "tool" | "script" | "prompt";
|
|
387
|
+
args?: string[]; // Command arguments (for tools/scripts)
|
|
388
|
+
exit?: number; // Exit code
|
|
389
|
+
ms: number; // Duration in milliseconds
|
|
390
|
+
error?: string; // Error message (truncated to 200 chars)
|
|
391
|
+
tool?: string; // Tool binary that was invoked
|
|
392
|
+
};
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
**Example:**
|
|
396
|
+
```json
|
|
397
|
+
{"ts":"2026-01-14T12:05:00Z","type":"tool","args":["gmail","messages","list","--limit","5"],"exit":0,"ms":1234,"tool":"gog"}
|
|
398
|
+
{"ts":"2026-01-14T12:10:00Z","type":"tool","args":["calendar","events"],"exit":1,"ms":500,"error":"rate limit exceeded","tool":"gog"}
|
|
399
|
+
{"ts":"2026-01-14T12:15:00Z","type":"prompt","ms":5}
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
**Log Rotation:**
|
|
403
|
+
- Keep last 5,000 entries OR 2MB, whichever is smaller
|
|
404
|
+
- Prune on write if size exceeds threshold
|
|
405
|
+
- Keep most recent entries
|
|
406
|
+
|
|
407
|
+
---
|
|
408
|
+
|
|
409
|
+
## 5. Skill Discovery & Indexing
|
|
410
|
+
|
|
411
|
+
### 5.1 Discovery Sources
|
|
412
|
+
|
|
413
|
+
Skills are loaded from multiple sources with precedence:
|
|
414
|
+
|
|
415
|
+
```
|
|
416
|
+
Source Priority (lowest to highest):
|
|
417
|
+
1. extra dirs - config.skills.load.extraDirs
|
|
418
|
+
2. bundled - nexus-core/skills/
|
|
419
|
+
3. managed - ~/.nexus/skills/ or MANAGED_SKILLS_DIR
|
|
420
|
+
4. workspace - ~/nexus/skills/
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
Higher precedence sources override lower ones (by skill name).
|
|
424
|
+
|
|
425
|
+
### 5.2 Manifest (`manifest.json`)
|
|
426
|
+
|
|
427
|
+
The manifest is a cache of discovered skills for fast lookup:
|
|
428
|
+
|
|
429
|
+
```typescript
|
|
430
|
+
type SkillsManifest = {
|
|
431
|
+
version: 1;
|
|
432
|
+
generatedAt: string; // ISO timestamp
|
|
433
|
+
skills: Record<string, ManifestEntry>;
|
|
434
|
+
};
|
|
435
|
+
|
|
436
|
+
type ManifestEntry = {
|
|
437
|
+
name: string;
|
|
438
|
+
description: string;
|
|
439
|
+
source: "nexus-bundled" | "nexus-managed" | "nexus-workspace" | "nexus-extra";
|
|
440
|
+
filePath: string; // Absolute path to SKILL.md
|
|
441
|
+
|
|
442
|
+
// From nexus metadata
|
|
443
|
+
emoji?: string;
|
|
444
|
+
os?: string[];
|
|
445
|
+
requires?: {
|
|
446
|
+
bins?: string[];
|
|
447
|
+
anyBins?: string[];
|
|
448
|
+
env?: string[];
|
|
449
|
+
config?: string[];
|
|
450
|
+
};
|
|
451
|
+
type?: "tool" | "script" | "prompt";
|
|
452
|
+
tool?: string; // For tool-backed skills
|
|
453
|
+
|
|
454
|
+
// Install info
|
|
455
|
+
hasInstall?: boolean;
|
|
456
|
+
};
|
|
457
|
+
```
|
|
458
|
+
|
|
459
|
+
**Regeneration:**
|
|
460
|
+
- On `nexus skills refresh`
|
|
461
|
+
- On first run after nexus update
|
|
462
|
+
- When skill folder mtime changes
|
|
463
|
+
|
|
464
|
+
### 5.3 Filtering
|
|
465
|
+
|
|
466
|
+
At runtime, skills are filtered before presentation:
|
|
467
|
+
|
|
468
|
+
```typescript
|
|
469
|
+
function shouldIncludeSkill(skill: ManifestEntry, config: NexusConfig): boolean {
|
|
470
|
+
// 1. Check explicit disable in config
|
|
471
|
+
if (config.skills.entries[skill.name]?.enabled === false) return false;
|
|
472
|
+
|
|
473
|
+
// 2. Check OS compatibility
|
|
474
|
+
if (skill.os?.length && !skill.os.includes(process.platform)) return false;
|
|
475
|
+
|
|
476
|
+
// 3. Check bundled allowlist
|
|
477
|
+
if (skill.source === "nexus-bundled" && config.skills.allowBundled) {
|
|
478
|
+
if (!config.skills.allowBundled.includes(skill.name)) return false;
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
// 4. Skip binary/env checks for "always" skills
|
|
482
|
+
if (skill.always) return true;
|
|
483
|
+
|
|
484
|
+
// 5. Check required bins
|
|
485
|
+
if (skill.requires?.bins?.some(bin => !hasBinary(bin))) return false;
|
|
486
|
+
|
|
487
|
+
// 6. Check anyBins (at least one)
|
|
488
|
+
if (skill.requires?.anyBins?.length) {
|
|
489
|
+
if (!skill.requires.anyBins.some(bin => hasBinary(bin))) return false;
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
// 7. Check required env vars
|
|
493
|
+
for (const env of skill.requires?.env ?? []) {
|
|
494
|
+
if (!process.env[env] && !config.skills.entries[skill.name]?.apiKey) {
|
|
495
|
+
return false;
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
// 8. Check required config paths
|
|
500
|
+
for (const path of skill.requires?.config ?? []) {
|
|
501
|
+
if (!isConfigPathTruthy(config, path)) return false;
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
return true;
|
|
505
|
+
}
|
|
506
|
+
```
|
|
507
|
+
|
|
508
|
+
### 5.4 Listing Categories
|
|
509
|
+
|
|
510
|
+
When presenting skills, they should be grouped:
|
|
511
|
+
|
|
512
|
+
```
|
|
513
|
+
✅ READY (configured, working)
|
|
514
|
+
- Skills where state.configured === true
|
|
515
|
+
|
|
516
|
+
⚠️ NEEDS SETUP (requires configuration)
|
|
517
|
+
- Tool exists but verification failed
|
|
518
|
+
- Missing env vars / API keys
|
|
519
|
+
- OAuth not completed
|
|
520
|
+
|
|
521
|
+
⏳ NOT INSTALLED (binary missing)
|
|
522
|
+
- Required binary not in PATH
|
|
523
|
+
- Has install instructions
|
|
524
|
+
|
|
525
|
+
💤 DISABLED (explicitly disabled)
|
|
526
|
+
- config.skills.entries[name].enabled === false
|
|
527
|
+
```
|
|
528
|
+
|
|
529
|
+
---
|
|
530
|
+
|
|
531
|
+
## 6. CLI Integration
|
|
532
|
+
|
|
533
|
+
### 6.1 Commands
|
|
534
|
+
|
|
535
|
+
```bash
|
|
536
|
+
# Discovery
|
|
537
|
+
nexus skills list [--ready|--locked|--all] [--json]
|
|
538
|
+
nexus skills refresh
|
|
539
|
+
|
|
540
|
+
# Per-skill
|
|
541
|
+
nexus skill show <name> # Details + prompt
|
|
542
|
+
nexus skill verify <name> [--force] # Check configuration
|
|
543
|
+
nexus skill run <name> [-- args] # Execute via gateway
|
|
544
|
+
nexus skill stats [name] # Usage statistics
|
|
545
|
+
```
|
|
546
|
+
|
|
547
|
+
### 6.2 `nexus skill run` Flow
|
|
548
|
+
|
|
549
|
+
```
|
|
550
|
+
1. Load skill from manifest
|
|
551
|
+
→ Not found? Error with suggestions
|
|
552
|
+
|
|
553
|
+
2. Determine type (tool/script/prompt)
|
|
554
|
+
→ prompt? Return prompt content, log, exit
|
|
555
|
+
|
|
556
|
+
3. Check binary exists (for tool/script)
|
|
557
|
+
→ Missing? Show install instructions, exit 1
|
|
558
|
+
|
|
559
|
+
4. Check configured (first-run verification)
|
|
560
|
+
→ Not configured? Run verify command
|
|
561
|
+
→ Verify fails? Show setup instructions, exit 1
|
|
562
|
+
→ Verify succeeds? Update state, continue
|
|
563
|
+
|
|
564
|
+
5. Execute tool/script with args
|
|
565
|
+
→ Capture stdout/stderr/exit code
|
|
566
|
+
→ Track duration
|
|
567
|
+
|
|
568
|
+
6. Log invocation to usage.log
|
|
569
|
+
|
|
570
|
+
7. Update state.json
|
|
571
|
+
→ lastUsed, totalInvocations, successRate
|
|
572
|
+
|
|
573
|
+
8. Return output
|
|
574
|
+
→ Print stdout/stderr
|
|
575
|
+
→ Exit with tool's exit code
|
|
576
|
+
```
|
|
577
|
+
|
|
578
|
+
---
|
|
579
|
+
|
|
580
|
+
## 7. Implementation Notes
|
|
581
|
+
|
|
582
|
+
### 7.1 Current vs Planned State Location
|
|
583
|
+
|
|
584
|
+
**Current implementation:**
|
|
585
|
+
- `~/nexus/state/skill-state.json` — single file with all skills
|
|
586
|
+
- `~/nexus/state/skill-usage.log` — single log file
|
|
587
|
+
|
|
588
|
+
**Planned (per STATE_ARCHITECTURE.md):**
|
|
589
|
+
- `~/nexus/state/nexus/skills/{skill}/state.json`
|
|
590
|
+
- `~/nexus/state/nexus/skills/{skill}/usage.log`
|
|
591
|
+
|
|
592
|
+
**Migration needed:** The existing `skill-state.ts` and `skill-usage.ts` need updating to use per-skill folders.
|
|
593
|
+
|
|
594
|
+
### 7.2 Static Mappings Location
|
|
595
|
+
|
|
596
|
+
Currently in `skill-tools.ts`:
|
|
597
|
+
- `KNOWN_SKILL_TOOLS` — hardcoded tool configs
|
|
598
|
+
- `SCRIPT_SKILLS` — hardcoded script configs
|
|
599
|
+
- `PROMPT_ONLY_SKILLS` — hardcoded set
|
|
600
|
+
|
|
601
|
+
**Future improvement:** Move these into SKILL.md frontmatter or per-skill config, so skills are fully self-describing. For now, the static mappings work and can be extended.
|
|
602
|
+
|
|
603
|
+
### 7.3 Adding a New Skill
|
|
604
|
+
|
|
605
|
+
1. Create `skills/{name}/SKILL.md` with frontmatter
|
|
606
|
+
2. Add to `KNOWN_SKILL_TOOLS`, `SCRIPT_SKILLS`, or `PROMPT_ONLY_SKILLS` in `skill-tools.ts`
|
|
607
|
+
3. Run `nexus skills refresh` to update manifest
|
|
608
|
+
4. Run `nexus skill verify {name}` to test
|
|
609
|
+
|
|
610
|
+
---
|
|
611
|
+
|
|
612
|
+
## 8. Complete SKILL.md Examples
|
|
613
|
+
|
|
614
|
+
### 8.1 Tool-Backed (gog)
|
|
615
|
+
|
|
616
|
+
```yaml
|
|
617
|
+
---
|
|
618
|
+
name: gog
|
|
619
|
+
description: Google Workspace CLI for Gmail, Calendar, Drive, Contacts, Sheets, People, and Tasks.
|
|
620
|
+
homepage: https://gogcli.sh
|
|
621
|
+
metadata: {"nexus":{"emoji":"📧","requires":{"bins":["gog"]},"install":[{"id":"brew","kind":"brew","formula":"steipete/tap/gogcli","bins":["gog"],"label":"Install gog (brew)"}]}}
|
|
622
|
+
---
|
|
623
|
+
|
|
624
|
+
# gog
|
|
625
|
+
|
|
626
|
+
Google Workspace CLI. Requires OAuth setup (see `docs/setup.md`).
|
|
627
|
+
|
|
628
|
+
## Quick Start
|
|
629
|
+
|
|
630
|
+
```bash
|
|
631
|
+
gog gmail search "is:unread" --max 10
|
|
632
|
+
gog calendar events --json
|
|
633
|
+
```
|
|
634
|
+
|
|
635
|
+
...
|
|
636
|
+
```
|
|
637
|
+
|
|
638
|
+
### 8.2 Script-Backed (brave-search)
|
|
639
|
+
|
|
640
|
+
```yaml
|
|
641
|
+
---
|
|
642
|
+
name: brave-search
|
|
643
|
+
description: Web search and content extraction via Brave Search API.
|
|
644
|
+
homepage: https://brave.com/search/api
|
|
645
|
+
metadata: {"nexus":{"emoji":"🦁","requires":{"bins":["node"],"env":["BRAVE_API_KEY"]},"primaryEnv":"BRAVE_API_KEY"}}
|
|
646
|
+
---
|
|
647
|
+
|
|
648
|
+
# Brave Search
|
|
649
|
+
|
|
650
|
+
```bash
|
|
651
|
+
node {baseDir}/scripts/search.mjs "query" --content
|
|
652
|
+
```
|
|
653
|
+
|
|
654
|
+
...
|
|
655
|
+
```
|
|
656
|
+
|
|
657
|
+
### 8.3 Pure Prompt (filesystem)
|
|
658
|
+
|
|
659
|
+
```yaml
|
|
660
|
+
---
|
|
661
|
+
name: filesystem
|
|
662
|
+
description: Scan, analyze, and organize your filesystem.
|
|
663
|
+
metadata: {"nexus":{"emoji":"📁","bundled":true,"priority":"high","os":["darwin","linux"]}}
|
|
664
|
+
---
|
|
665
|
+
|
|
666
|
+
# Filesystem Organization Skill
|
|
667
|
+
|
|
668
|
+
Analyze and organize the user's home directory with safety-first principles.
|
|
669
|
+
|
|
670
|
+
## Safety Rules
|
|
671
|
+
|
|
672
|
+
1. **Never delete without explicit approval**
|
|
673
|
+
2. **Dry run by default**
|
|
674
|
+
...
|
|
675
|
+
```
|
|
676
|
+
|
|
677
|
+
---
|
|
678
|
+
|
|
679
|
+
## 9. Advanced Concepts (Future)
|
|
680
|
+
|
|
681
|
+
### 9.1 Abstract vs Concrete Dependencies
|
|
682
|
+
|
|
683
|
+
Skills can declare abstract dependencies for portability:
|
|
684
|
+
|
|
685
|
+
```yaml
|
|
686
|
+
# Concrete (current approach)
|
|
687
|
+
requires:
|
|
688
|
+
tools: [gog]
|
|
689
|
+
connectors: [google]
|
|
690
|
+
|
|
691
|
+
# Abstract (future approach)
|
|
692
|
+
requires:
|
|
693
|
+
capabilities:
|
|
694
|
+
- email_sender # gog, outlook, sendgrid could satisfy
|
|
695
|
+
- calendar_read # gog, apple-calendar could satisfy
|
|
696
|
+
```
|
|
697
|
+
|
|
698
|
+
Connectors and tools would implement interfaces:
|
|
699
|
+
|
|
700
|
+
```yaml
|
|
701
|
+
# In gog's SKILL.md
|
|
702
|
+
implements:
|
|
703
|
+
- email_sender
|
|
704
|
+
- email_reader
|
|
705
|
+
- calendar_read
|
|
706
|
+
- calendar_write
|
|
707
|
+
- drive_access
|
|
708
|
+
```
|
|
709
|
+
|
|
710
|
+
**Benefit:** User can swap implementations. "I need email" doesn't mean "I need Google."
|
|
711
|
+
|
|
712
|
+
**Status:** Deferred. For now, use concrete dependencies.
|
|
713
|
+
|
|
714
|
+
### 9.2 Skill Crystallization (Dex Pattern)
|
|
715
|
+
|
|
716
|
+
For repeated tasks, skills can be **crystallized** into deterministic scripts:
|
|
717
|
+
|
|
718
|
+
```
|
|
719
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
720
|
+
│ EXPLORATION (uses LLM) │
|
|
721
|
+
│ Agent figures out how to accomplish task │
|
|
722
|
+
│ Records every command, request, response │
|
|
723
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
724
|
+
↓
|
|
725
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
726
|
+
│ CRYSTALLIZATION │
|
|
727
|
+
│ Extract successful path as shell script │
|
|
728
|
+
│ Templatize personal info as variables │
|
|
729
|
+
│ Build dependency graph │
|
|
730
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
731
|
+
↓
|
|
732
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
733
|
+
│ EXPLOITATION (no LLM needed) │
|
|
734
|
+
│ Run crystallized script directly │
|
|
735
|
+
│ Massive cost savings for repeated tasks │
|
|
736
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
737
|
+
```
|
|
738
|
+
|
|
739
|
+
**State extension for crystallized skills:**
|
|
740
|
+
|
|
741
|
+
```typescript
|
|
742
|
+
type SkillState = {
|
|
743
|
+
// ... existing fields ...
|
|
744
|
+
|
|
745
|
+
// Crystallization (future)
|
|
746
|
+
crystallized?: {
|
|
747
|
+
scriptPath: string; // Path to shell script
|
|
748
|
+
crystallizedAt: string; // When crystallized
|
|
749
|
+
variables: string[]; // Required variables
|
|
750
|
+
fingerprint: string; // Hash of tool outputs for validation
|
|
751
|
+
degraded?: boolean; // True if errors detected
|
|
752
|
+
};
|
|
753
|
+
};
|
|
754
|
+
```
|
|
755
|
+
|
|
756
|
+
**Adaptive forgetting:** If a crystallized skill starts failing (fingerprint mismatch, error spike), mark it as `degraded` and fall back to LLM exploration.
|
|
757
|
+
|
|
758
|
+
**Status:** Deferred. Focus on core skill system first.
|
|
759
|
+
|
|
760
|
+
### 9.3 Fingerprinting / Verification
|
|
761
|
+
|
|
762
|
+
Each tool's verify command produces output. Hash this for fingerprinting:
|
|
763
|
+
|
|
764
|
+
```typescript
|
|
765
|
+
type SkillState = {
|
|
766
|
+
// ... existing fields ...
|
|
767
|
+
|
|
768
|
+
// Fingerprinting (future)
|
|
769
|
+
fingerprint?: {
|
|
770
|
+
verifyOutputHash: string; // SHA256 of verify command output
|
|
771
|
+
capturedAt: string; // When fingerprint taken
|
|
772
|
+
};
|
|
773
|
+
};
|
|
774
|
+
```
|
|
775
|
+
|
|
776
|
+
**Uses:**
|
|
777
|
+
- Detect when underlying API changes (new version, deprecated fields)
|
|
778
|
+
- Security: detect if MCP server has been swapped/compromised
|
|
779
|
+
- Trigger re-verification when fingerprint mismatches
|
|
780
|
+
|
|
781
|
+
**Status:** Deferred. Consider for security-sensitive deployments.
|
|
782
|
+
|
|
783
|
+
### 9.4 Variable Templatization
|
|
784
|
+
|
|
785
|
+
For shareable skills, personal info should be parameterized:
|
|
786
|
+
|
|
787
|
+
```bash
|
|
788
|
+
# Hard-coded (not shareable)
|
|
789
|
+
gog gmail search "from:mom@gmail.com"
|
|
790
|
+
|
|
791
|
+
# Templatized (shareable)
|
|
792
|
+
gog gmail search "from:${CONTACT_MOM_EMAIL}"
|
|
793
|
+
```
|
|
794
|
+
|
|
795
|
+
Skills would declare required variables:
|
|
796
|
+
|
|
797
|
+
```yaml
|
|
798
|
+
metadata:
|
|
799
|
+
nexus:
|
|
800
|
+
variables:
|
|
801
|
+
- name: CONTACT_MOM_EMAIL
|
|
802
|
+
description: "Email address of your mom"
|
|
803
|
+
type: string
|
|
804
|
+
```
|
|
805
|
+
|
|
806
|
+
**Status:** Deferred. For now, skills are templates that agents fill in contextually.
|
|
807
|
+
|
|
808
|
+
### 9.5 Observability / Analytics Extension
|
|
809
|
+
|
|
810
|
+
Extended usage log for training data:
|
|
811
|
+
|
|
812
|
+
```typescript
|
|
813
|
+
type UsageLogEntry = {
|
|
814
|
+
// ... existing fields ...
|
|
815
|
+
|
|
816
|
+
// Extended (future)
|
|
817
|
+
model?: string; // Which model was used
|
|
818
|
+
modelVersion?: string; // Model version
|
|
819
|
+
promptTokens?: number; // Input tokens
|
|
820
|
+
completionTokens?: number; // Output tokens
|
|
821
|
+
temperature?: number; // Model temperature
|
|
822
|
+
|
|
823
|
+
// For crystallization
|
|
824
|
+
sessionId?: string; // Group related calls
|
|
825
|
+
parentCall?: number; // For dependency tracking
|
|
826
|
+
};
|
|
827
|
+
```
|
|
828
|
+
|
|
829
|
+
**Uses:**
|
|
830
|
+
- "Which model does best for Gmail operations?"
|
|
831
|
+
- Training data for fine-tuning
|
|
832
|
+
- Cost attribution per skill
|
|
833
|
+
|
|
834
|
+
**Status:** Deferred. Consider for enterprise analytics.
|
|
835
|
+
|
|
836
|
+
---
|
|
837
|
+
|
|
838
|
+
## 10. Open Questions Resolved
|
|
839
|
+
|
|
840
|
+
| Question | Decision |
|
|
841
|
+
|----------|----------|
|
|
842
|
+
| Single file vs per-skill folders? | **Per-skill folders** — better isolation, git-friendly |
|
|
843
|
+
| Where does tool/verify config live? | **skill-tools.ts** for now, migrate to SKILL.md later |
|
|
844
|
+
| How to handle unknown skills? | Return prompt content with warning, log as unknown |
|
|
845
|
+
| Should we track args in logs? | **Yes** — full args, user controls their own logs |
|
|
846
|
+
| Log rotation? | 5,000 entries or 2MB, prune oldest |
|
|
847
|
+
| Skills vs Tools vs Connectors? | **Three layers** — skills are prompts, tools have state, connectors are auth |
|
|
848
|
+
| Abstract dependencies? | **Deferred** — use concrete for now, add interfaces later |
|
|
849
|
+
| Skill crystallization? | **Deferred** — interesting optimization for repeated tasks |
|
|
850
|
+
|
|
851
|
+
### 9.6 Resources / Context Bundles
|
|
852
|
+
|
|
853
|
+
Skills can include supporting resources:
|
|
854
|
+
|
|
855
|
+
```
|
|
856
|
+
skills/gog/
|
|
857
|
+
├── SKILL.md # Main prompt
|
|
858
|
+
├── docs/
|
|
859
|
+
│ ├── setup.md # Setup guide
|
|
860
|
+
│ └── portability.md # Moving to new machine
|
|
861
|
+
├── references/
|
|
862
|
+
│ ├── oauth-flow.md # OAuth documentation
|
|
863
|
+
│ └── api-limits.md # Rate limits info
|
|
864
|
+
└── examples/
|
|
865
|
+
├── search-queries.md # Example queries
|
|
866
|
+
└── calendar-sync.md # Calendar sync patterns
|
|
867
|
+
```
|
|
868
|
+
|
|
869
|
+
Resources are bundled with skills when distributed. The SKILL.md can reference them:
|
|
870
|
+
|
|
871
|
+
```markdown
|
|
872
|
+
## Setup
|
|
873
|
+
See `docs/setup.md` for initial configuration.
|
|
874
|
+
|
|
875
|
+
## References
|
|
876
|
+
- OAuth flow: `references/oauth-flow.md`
|
|
877
|
+
- API limits: `references/api-limits.md`
|
|
878
|
+
```
|
|
879
|
+
|
|
880
|
+
**Status:** Already supported. Skills can include any supporting files.
|
|
881
|
+
|
|
882
|
+
---
|
|
883
|
+
|
|
884
|
+
## 11. Summary
|
|
885
|
+
|
|
886
|
+
### File Locations
|
|
887
|
+
|
|
888
|
+
| Component | Location |
|
|
889
|
+
|-----------|----------|
|
|
890
|
+
| Skill definition | `~/nexus/skills/{name}/SKILL.md` |
|
|
891
|
+
| Skill resources | `~/nexus/skills/{name}/docs/`, `references/`, etc. |
|
|
892
|
+
| Skill state | `~/nexus/state/nexus/skills/{name}/state.json` |
|
|
893
|
+
| Skill usage log | `~/nexus/state/nexus/skills/{name}/usage.log` |
|
|
894
|
+
| Skills manifest | `~/nexus/state/nexus/skills/manifest.json` |
|
|
895
|
+
| Static tool mappings | `nexus-core/src/agents/skill-tools.ts` |
|
|
896
|
+
| Core loader | `nexus-core/src/agents/skills.ts` |
|
|
897
|
+
| State management | `nexus-core/src/agents/skill-state.ts` |
|
|
898
|
+
| Usage tracking | `nexus-core/src/agents/skill-usage.ts` |
|
|
899
|
+
| Gateway runner | `nexus-core/src/agents/skill-runner.ts` |
|
|
900
|
+
|
|
901
|
+
### Conceptual Model
|
|
902
|
+
|
|
903
|
+
```
|
|
904
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
905
|
+
│ SKILL ECOSYSTEM │
|
|
906
|
+
├─────────────────────────────────────────────────────────────────┤
|
|
907
|
+
│ │
|
|
908
|
+
│ SKILL (.md) TOOL (binary) CONNECTOR (auth) │
|
|
909
|
+
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
|
|
910
|
+
│ │ Prompt │ ──→ │ gog, eve, │ ──→ │ Google OAuth│ │
|
|
911
|
+
│ │ Stateless │ │ tmux, etc. │ │ Credentials │ │
|
|
912
|
+
│ │ Distributable│ │ Stateful │ │ Stateless │ │
|
|
913
|
+
│ └─────────────┘ └─────────────┘ └─────────────┘ │
|
|
914
|
+
│ │
|
|
915
|
+
│ Types: Types: Lives in: │
|
|
916
|
+
│ • Pure prompt • CLI binary credentials/ │
|
|
917
|
+
│ • Tool-backed • Script │
|
|
918
|
+
│ • Script-backed • Native tool │
|
|
919
|
+
│ • Connector-backed │
|
|
920
|
+
│ │
|
|
921
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
922
|
+
```
|
|
923
|
+
|
|
924
|
+
### Key Decisions
|
|
925
|
+
|
|
926
|
+
| Decision | Rationale |
|
|
927
|
+
|----------|-----------|
|
|
928
|
+
| **Per-skill state folders** | Isolation, git-friendly, extensible |
|
|
929
|
+
| **Three conceptual layers** | Skills (prompts), Tools (binaries), Connectors (auth) |
|
|
930
|
+
| **Skills are stateless** | Runtime state tracks execution, not skill data |
|
|
931
|
+
| **Static mappings** in code | Simple now, migrate to SKILL.md frontmatter later |
|
|
932
|
+
| **Gateway pattern** | All execution via `nexus skill run` for observability |
|
|
933
|
+
| **Automatic logging** | No agent reporting required, capture everything |
|
|
934
|
+
| **Deferred: abstract deps** | Use concrete dependencies now, add interfaces later |
|
|
935
|
+
| **Deferred: crystallization** | Interesting optimization for repeated workflows |
|
|
936
|
+
|
|
937
|
+
### Future Directions
|
|
938
|
+
|
|
939
|
+
1. **Abstract interfaces** — Skills declare "need email" not "need gog"
|
|
940
|
+
2. **Skill crystallization** — Compile successful workflows to scripts
|
|
941
|
+
3. **Fingerprinting** — Detect API changes and compromised tools
|
|
942
|
+
4. **Variable templatization** — Shareable skills with parameterized personal info
|
|
943
|
+
5. **Extended analytics** — Model performance tracking, training data export
|
|
944
|
+
|
|
945
|
+
---
|
|
946
|
+
|
|
947
|
+
*This document is the authoritative specification for the Nexus skill system.*
|