KelvinClaw is a Secure, Stable, and Modular Runtime for Agentic Workflows. It focuses on predictable runtime behavior, policy-driven extension loading, and a maintainable SDK surface for plugin developers.
SDK name: Kelvin Core.
What this project includes:
- control plane (
kelvinroot + brain): policy, orchestration, lifecycle - data plane (
kelvin-memory-controller): RPC memory operations with security checks - SDK (
Kelvin Core): stable interfaces for plugins, tools, and runtime integration - plugin system: signed package install/verification and policy-based capability enforcement
For end users, plugins are installed as packages and executed by Kelvin. They do not need to compile the Rust workspace.
Choose the onboarding path for your experience level:
Canonical quick start commands:
scripts/quickstart.sh --mode local
scripts/quickstart.sh --mode dockerVerify a specific path:
scripts/verify-onboarding.sh --track beginner
scripts/verify-onboarding.sh --track rust
scripts/verify-onboarding.sh --track wasm
scripts/verify-onboarding.sh --track dailyapps/kelvin-host: thin trusted host executableapps/kelvin-gateway: secure WebSocket control-plane gatewaycrates/*: core contracts, runtime, SDK, memory API/client/controller, and execution engine- first-party plugin distribution repo:
TheKelvinProject/kelvinclaw-plugins examples/: sample source crates for developers
See:
- OVERVIEW.md
- docs/architecture.md
- docs/gateway-protocol.md
- docs/GETTING_STARTED.md
- docs/kelvin-gap-analysis.md
- docs/KELVIN_CORE_SDK.md
- docs/SDK_TEST_MATRIX.md
- docs/SDK_OWASP_TOP10_AI_2025.md
- docs/SDK_NIST_AI_RMF_1_0.md
- docs/PLUGIN_INSTALL_FLOW.md
- docs/ROOT_VS_SDK.md
- docs/CORE_ADMISSION_POLICY.md
- docs/SDK_PRINCIPLES.md
- docs/trusted-executive-wasm.md
- docs/RUST_DEVELOPER_QUICKSTART.md
- docs/memory-control-data-plane.md
- docs/memory-rpc-contract.md
- docs/memory-module-sdk.md
- docs/memory-controller-deployment-profiles.md
- docs/model-plugin-abi.md
- docs/channel-plugin-abi.md
- docs/openai-plugin-install-and-run.md
- docs/runtime-container-first-run.md
- docs/plugin-index-schema.md
- docs/toolpack-sdk-plugins.md
- docs/plugin-author-kit.md
- docs/plugin-quality-tiers.md
- docs/plugin-trust-operations.md
- docs/agents-tradeoffs.md
- docs/compatibility-contracts.md
Workspace crates:
crates/kelvin-core: contracts and shared typescrates/kelvin-memory-api: protobuf and gRPC service contractscrates/kelvin-memory-client: root-side RPC adapter implementingMemorySearchManagercrates/kelvin-memory-controller: memory data plane gRPC server + WASM execution policycrates/kelvin-memory-module-sdk: memory module ABI helpers and WIT contractcrates/kelvin-memory: in-process memory backends used by local/test compositionscrates/kelvin-brain: agent loop orchestrationcrates/kelvin-wasm: trusted native executive for untrusted WASM skills
Apps:
apps/kelvin-host: thin host executable for Kelvin SDKapps/kelvin-gateway: WebSocket gateway over SDK runtime
Main traits:
BrainMemorySearchManagerModelProviderSessionStoreTool/ToolRegistryEventSinkPluginFactory/PluginRegistry(Kelvin Core SDK)CoreRuntime/RunRegistry(core lifecycle state machine)
Everything in the runtime is composed with trait objects so concrete implementations can be swapped.
The runtime integrates through the Kelvin Core SDK path:
WasmSkillPlugin(plugin manifest + tool factory)InMemoryPluginRegistry(policy-gated registration)SdkToolRegistry(validated tool projection for runtime wiring)SdkModelProviderRegistry(validated model-provider projection)kelvin_cli(CLI plugin executed before each run)kelvin.openai(first-party OpenAI model plugin, optional)- Kelvin Core tool-pack plugins (
fs_safe_read,fs_safe_write,web_fetch_safe,schedule_cron,session_tools)
Kelvin now supports the split model:
- trusted native Rust host (
kelvin-wasm) with system keys - untrusted WASM skills loaded at runtime
- explicit host ABIs (
claw::*for tools,kelvin_model_host_v1for model providers) - sandbox policy gates that deny disallowed capabilities at module instantiation
Key types in kelvin-wasm:
WasmSkillHostSandboxPolicyClawCallSandboxPreset
Run a .wasm skill with the native executive:
cargo run -p kelvin-wasm --bin kelvin-wasm-runner -- --wasm path/to/skill.wasm --policy-preset locked_downModel-provider ABI reference:
kelvin-memory::MemoryFactory supports:
MarkdownInMemoryVectorInMemoryWithMarkdownFallback
The fallback manager mimics KelvinClaw's primary->fallback behavior.
scripts/install-kelvin-cli-plugin.sh
KELVIN_PLUGIN_HOME=.kelvin/plugins \
KELVIN_TRUST_POLICY_PATH=.kelvin/trusted_publishers.json \
CARGO_TARGET_DIR=target/try-kelvin-cli cargo run -p kelvin-host -- --prompt "hello" --workspace /path/to/workspace --memory fallbackOpenAI provider path:
scripts/install-kelvin-openai-plugin.sh
OPENAI_API_KEY=<your_key> \
KELVIN_PLUGIN_HOME=.kelvin/plugins \
KELVIN_TRUST_POLICY_PATH=.kelvin/trusted_publishers.json \
CARGO_TARGET_DIR=target/try-kelvin-cli cargo run -p kelvin-host -- --prompt "hello" --model-provider kelvin.openai --workspace /path/to/workspace --memory fallbackThe CLI executable is only a thin launcher. Runtime behavior is composed in kelvin-sdk, and
the CLI path executes through an installed plugin (kelvin_cli) loaded through the
same secure installed-plugin path as third-party plugins.
Quick run:
scripts/try-kelvin.sh "hello"Interactive mode:
cargo run -p kelvin-host -- --interactive --workspace /path/to/workspace --state-dir /path/to/workspace/.kelvin/stateRun the gateway with connect-token auth:
KELVIN_GATEWAY_TOKEN=change-me \
CARGO_TARGET_DIR=target/try-kelvin-gateway cargo run -p kelvin-gateway -- \
--bind 127.0.0.1:18789 \
--workspace /path/to/workspaceMethods available over the socket:
connecthealthagent/run.submitagent.wait/run.waitagent.state/run.stateagent.outcome/run.outcomechannel.telegram.ingestchannel.telegram.pair.approvechannel.telegram.statuschannel.slack.ingestchannel.slack.statuschannel.discord.ingestchannel.discord.statuschannel.route.inspect
Operational scripts:
scripts/kelvin-gateway-daemon.sh start|stop|status|logs|healthscripts/kelvin-local-profile.sh start|stop|status|doctorscripts/quickstart.sh --mode local|dockerscripts/kelvin-doctor.shscripts/kelvin-webchat.sh [port]
kelvin-doctor and gateway --doctor output machine-readable checks with remediation hints.
For end users, run the minimal runtime container and complete first-time setup interactively:
scripts/run-runtime-container.shThis opens a setup wizard in-container, installs required plugins from the remote plugin index,
and prepares a persistent runtime home under .kelvin/.
After setup:
kelvin-host --prompt "What is KelvinClaw?" --timeout-ms 3000Reference docs:
Tool-trigger pattern for the default model provider:
[[tool:time]]
[[tool:hello_tool {"foo":"bar"}]]
Remote testing is optional. Public clones can run local Docker tests without any private host setup.
Privacy-conscious remote setup:
cp .env.example .env
$EDITOR .env
scripts/remote-test.sh --dockerAdditional variants:
REMOTE_TEST_HOST=your-user@your-host scripts/remote-test.sh
REMOTE_TEST_REMOTE_DIR=~/work/kelvinclaw scripts/remote-test.sh --native
scripts/remote-test.sh --docker
scripts/remote-test.sh --host your-user@your-host --cargo-args '-- --nocapture'Notes:
.envand.env.localare gitignored; keep personal hosts/IPs there only.scripts/remote-test.shreadsREMOTE_TEST_HOST,REMOTE_TEST_REMOTE_DIR, andREMOTE_TEST_DOCKER_IMAGEfrom.env/.env.local..envfiles are parsed as key/value data and are not executed as shell code.
Install Kelvin's first-party CLI plugin package:
scripts/install-kelvin-cli-plugin.shInstall optional browser automation plugin profile:
scripts/install-kelvin-browser-plugin.shDefault index:
https://raw.githubusercontent.com/TheKelvinProject/kelvinclaw-plugins/main/index.json
Install a prebuilt plugin package:
scripts/plugin-install.sh --package ./dist/acme.echo-1.0.0.tar.gzList installed plugins:
scripts/plugin-list.sh
scripts/plugin-list.sh --jsonUninstall plugin:
scripts/plugin-uninstall.sh --id acme.echo --version 1.0.0
scripts/plugin-uninstall.sh --id acme.echo --purgeRun installer tests:
scripts/test-plugin-install.sh
scripts/test-cli-plugin-integration.shPlugin discovery:
scripts/plugin-discovery.sh
scripts/plugin-discovery.sh --plugin kelvin.clikelvin-brain can load installed SDK plugin packages and project them into runtime tool/model providers with policy enforcement:
- signed manifest verification (
plugin.sig, Ed25519 trusted publishers) - manifest integrity validation (
entrypoint_sha256) - capability scopes (
fs_read_paths,network_allow_hosts) - operational controls (timeout, retries, rate limit, circuit breaker)
- runtime kind checks (
wasm_tool_v1,wasm_model_v1) - model-plugin import allowlist checks (
kelvin_model_host_v1imports only)
Source: crates/kelvin-brain/src/installed_plugins.rs
Default boot helpers:
load_installed_plugins_default(core_version, security_policy)load_installed_tool_plugins_default(core_version, security_policy)default_plugin_home()default_trust_policy_path()
Default paths:
- plugin home:
~/.kelvinclaw/plugins(orKELVIN_PLUGIN_HOME) - trust policy:
~/.kelvinclaw/trusted_publishers.json(orKELVIN_TRUST_POLICY_PATH)
Sign a package manifest and generate plugin.sig:
scripts/plugin-sign.sh \
--manifest ~/.kelvinclaw/plugins/acme.echo/1.0.0/plugin.json \
--private-key ~/.kelvinclaw/keys/acme-ed25519-private.pem \
--publisher-id acme \
--trust-policy-out ./trusted_publishers.acme.jsonTrust policy operations:
scripts/plugin-trust.sh show
scripts/plugin-trust.sh rotate-key --publisher acme --public-key <base64>
scripts/plugin-trust.sh revoke --publisher acme
scripts/plugin-trust.sh pin --plugin acme.echo --publisher acmePlugin author workflow:
export PATH="$PWD/scripts:$PATH"
kelvin plugin new --id acme.echo --name "Acme Echo" --runtime wasm_tool_v1
kelvin plugin test --manifest ./plugin-acme.echo/plugin.json
kelvin plugin pack --manifest ./plugin-acme.echo/plugin.json
kelvin plugin verify --package ./plugin-acme.echo/dist/acme.echo-0.1.0.tar.gzTrust policy template:
trusted_publishers.example.json
Host boot behavior:
apps/kelvin-hostcallskelvin_sdk::run_with_sdk(...)only.kelvin-sdkrequires installedkelvin_cliand auto-loads installed SDK plugins withload_installed_plugins_default(...).
cargo test --workspaceSDK certification lane:
scripts/test-sdk.shDocker:
scripts/test-docker.shClean rebuild from zero (recommended before final pushes):
scripts/test-docker.sh --finalBuild the sample Rust WASM skill:
cargo build --target wasm32-unknown-unknown --manifest-path examples/echo-wasm-skill/Cargo.tomlRun the sample skill:
cargo run -p kelvin-wasm --bin kelvin-wasm-runner -- --wasm examples/echo-wasm-skill/target/wasm32-unknown-unknown/debug/echo_wasm_skill.wasm