www.sandstre.am/kit

kit

Developer kit for AI agents and humans. One command from git clone to working dev environment. Deterministic, local-first, multi-vault: the governance floor you can prove and build on. Green is provable, and kit's CLI, config, and SDK are frozen, versioned contracts. In 5.0, hardware-rooted identity, an offline control plane, one exec-broker, and a traveling profile make it a portable, fail-closed governance layer for the agent loop. And it ships zero opinions about your code — your standards, not ours.

npx sandstream-kit setup
npm install -g sandstream-kit
v5.23.0 MIT Node 22+ macOS · Linux · Windows SLSA provenance 12 secret backends · 8 vaults Local-first memory · 12 agents Zero telemetry Provable green ASVS L2 evidence map Stable contracts · additive to 4.x Policy-as-code

Why I built it

I build most things with AI agents now. The same friction kept showing up at the start of every project: API keys scattered across .env files, shell history and chat windows, secrets on the loose. Logins expired. Half the tools weren't installed. And every fresh agent session re-asked the same setup questions, burning tokens to rediscover what the last session already knew.

So I wanted one command that takes a repo from git clone to a working, secret-safe environment, the same way for a human at a new laptop or an agent in a fresh sandbox. Declarative config, real vaults instead of loose keys, a security baseline that doesn't depend on remembering to run it, and a deterministic tool that makes no model calls of its own, so it never leaks a key or bills you to think.

The bet: the boring, security-critical setup should be deterministic and auditable, and the intelligence should stay where you put it, not baked into the tool that holds your secrets.

What it does

[01]

Bootstrap

One config, .kit.toml, declares tools, services, secrets, hooks. kit setup installs missing CLIs, logs into services, materializes secrets, wires hooks.

[02]

Vaults

12 secret backends resolve end to end. 8 are writable vaults — 1Password, Infisical, Vault, AWS Secrets Manager, GCP Secret Manager, Azure Key Vault, Doppler, dotenvx — that also migrate plaintext → vault, propagate to deploy targets, and rotate without dashboard clicks. The other four (Bitwarden, EAS, config, env) resolve read-only.

[03]

Prescan

Multi-repo baseline sweep: gitleaks history, .gitignore holes, tracked-secret files, public-vs-private repos, branch protection, CVEs. --vs-baseline for drift detection on cron.

[04]

Supply chain

Bundled Bumblebee scanner verifies every dependency against pinned SHA-256 checksums (bumblebee.lock.json) and re-verifies the cache before reuse, so a tampered local file is caught. Install-time triage adds dep-confusion, lockfile-drift and slopsquat/typosquat checks; opt-in GuardDog adds local malware detection.

[05]

Elevation

Destructive ops (rotate, history rewrite, prod-key reads) require TTL'd TOTP-gated elevation. Audit log records every grant + bypass attempt.

[06]

Policy

[policy.agent_writes] declares pre-approved scopes. KIT_POLICY_HASH for classifier integration, agents act inside the policy without per-call human approval.

[07]

Agent setup

kit agent-config writes a managed "use kit" block into the agent's rules file, CLAUDE.md / AGENTS.md / GEMINI.md / .cursorrules / .clinerules / .augment-guidelines / .github/copilot-instructions.md (OpenCode, Kiro, Factory Droid and Kilo Code read the shared AGENTS.md), so agents run kit check, triage before installs, and vault their secrets. By default it also wires a fail-closed pre-tool install-gate that blocks an un-triaged install across 11 agents (Claude Code, Codex, Amazon Q, Kiro, Factory Droid, Augment, Antigravity, Gemini CLI, Cursor, OpenCode, Cline); --no-install-gate opts out. Idempotent, edit outside the markers freely.

Memory

Memory is the moat. The model is becoming a commodity; the system around it is not. kit memory gives a (swappable) model a verifiable second brain: it stores your raw conversation history and searches it before answering, so it pulls receipts instead of guessing. SQLite + FTS5, three hooks, no vectors, no model calls. It indexes transcripts from twelve coding agents (Claude Code, Codex, Gemini, Continue, Cursor, Amazon Q, AWS Kiro, Factory Droid, Aider, Antigravity, Cline and OpenCode), each parsed against the agent's own serialization format, never guessed.

A personal tier stays private, with an encrypted backup so a stolen laptop does not lose your context. A curated, area-organized shared tier travels with the repo and is reviewed like code. Governed cross-device memory lets kit memory push / pull sync your private store over your own encrypted transport — a private git remote or a command transport (S3/rclone/scp/USB), gzip-compressed inside AES-256-GCM, opt-in, no cloud ledger. In public-key mode (X25519) an ephemeral session pushes with no secret — just a public recipient string — so a throwaway container contributes its memory and nothing secret leaves it. And kit memory learn mines the store for instructions you keep re-typing, so you can turn them into a rule. Read the guide.

# index your history, then search it before you answer
$ kit memory install && kit memory index
$ kit memory search "what did we decide about X"
# zero-LLM core: pipe a review prompt to YOUR own model
$ kit memory suggest | your-llm
# sync across machines — public-key mode pushes with no secret
$ kit memory keygen && kit memory sync init --remote git@github.com:you/kit-memory.git
$ kit memory push   # from one machine
$ kit memory pull   # on another
# surface instructions you keep re-typing → make it a rule
$ kit memory learn

Context lock

Many accounts, many windows, many projects. A logged-in account and a selected project are not assumed to belong together, that assumption is how a deploy lands in the wrong org. Declare the exact account + project per repo in .kit.toml and kit verifies the live tools against it: a right account with the wrong project is a mismatch, not a pass.

# verify every CLI is on the declared account + project
$ kit context check
# activate the declared context (gcloud config + repo git identity)
$ kit context use
# block a push to the wrong org before it leaves the machine
$ kit hooks add context-check

Context pointers are non-secret and live in config; the credentials they authenticate with stay in the vault.

Where kit fits

The agent stack has layers. kit sits at the governance floor, deterministic, local-first, model-agnostic. Everything above stays swappable; the security-critical setup underneath doesn't move, and since 2.0 it is a floor you can prove (signed attestation, scanner-health gate) and build on (frozen, versioned contracts).

L6Productyour apps & services
L5Governance · kitsetup · vaults · scan · supply-chain · sentinel · provenance · attest · coverage · elevation · identity · policy · memory
L4Orchestrationgastown · ruflo · multi-agent runners
L3IntegrationMCP servers & tools
L2HarnessClaude Code · Codex · Cursor · Aider · pi.dev
L1ModelClaude · GPT · Gemini · Ollama

Not another scanner

You already have Semgrep, Snyk, Trivy, Grype. kit does not compete with them: it runs them, folds in their findings, and adds the layer they lack. One command from git clone to a working, secret-safe environment, and the single deterministic gate your agent runs before it acts. Zero LLM, local-first, no telemetry. Use kit with your scanners, not instead of them.

And since 2.0 it proves it ran them: a crashed or missing scanner fails the gate instead of passing green, a signed kit check --attest receipt records which scanners actually ran, and kit coverage maps that to OWASP ASVS L2, OWASP LLM Top 10, NIST SSDF, and the OWASP Agentic & MCP Top 10 as toggleable evidence maps (an evidence source for a GRC tool, never a compliance claim).

One audit, one verdict

kit review runs the four gates — environment + security (check), a11y and design tokens (design), code standards (standards), and architecture decisions (adr) — and returns one structured report: { ok, failed, stages }, exit 1 on red. The agent-facing kit_review MCP tool serializes the same report from the same core, so the CLI and the agent surface can never disagree about what ran or what green means. concise: true trims pass/skip rows for context economy — per-stage counts keep the totals honest, nothing is silently truncated.

# the one gate an agent runs before it acts — human-readable or structured
$ kit review
$ kit review --json   # { ok, failed, stages: check · design · standards · adr }

Your standards, not ours

kit ships zero opinions about your architecture, your framework choices, or your taste. There is no bundled ruleset to inherit and no vendor's "best practice" to adopt — the usual reason standards tooling feels like someone else's rules. You declare the standard: thresholds in .kit.toml, your own rules as standards plugins, architecture decisions (monolith vs. services, caching strategy, your React setup) as ADRs with kit-enforce blocks. kit enforces the declaration deterministically — and proves the checks ran.

Taste is allowed to change. An ADR is superseded, not deleted — the decision, its date, and its why stay in history while the gate moves with you. And the baseline keeps day one honest: kit baseline freeze snapshots today's findings so gates trip only on net-new ones — no wall of legacy findings shaming a real repo into ignoring the tool.

# your architecture decisions as enforced gates — cited back to the ADR
$ kit adr check
✓ 3 enforced ADR(s) — no new violations
# taste changed in 2027? supersede the ADR — history keeps the why

Adopt with one pasted line

Paste one line into the repo's CLAUDE.md / AGENTS.md and the next agent session bootstraps kit itself — install, kit init, kit check — and asks the human only for what is genuinely theirs (interactive logins, suggested as commands you run yourself).

# the line you paste (before)
This project uses kit (github.com/sandstream/kit). If `kit` is missing:
`npm i -g sandstream-kit`, then `kit init`. Start every session with
`kit check` and act on its verdict; `kit <command> --help` self-documents.

Transparent end state: you should know exactly what a pasted line turns into. When the bootstrap completes, the rules file contains this managed block — visible BEGIN/END markers, idempotent, nothing outside them touched — and a drift test in kit's own CI pins the documented block to what the code actually writes:

<!-- BEGIN kit (managed block — edit outside the markers, not inside) -->
## kit
This repo is managed by kit (env, secrets, security gates). Hooks enforce
the hard rules; what you need to know:
- Start: `kit check` — on `fail`, run `kit fix`, then re-check.
- Prior decisions: `kit memory search "<query>"` (cross-session, cross-agent).
- Secrets: `kit secrets` (vault-backed); placeholders in `.env.example`, never plaintext in `.env*`.
- Un-gated deps (git repos, URLs, vendored code): `kit triage repo <target>` first.
- After a batch of edits: `kit check --category security`; halt on `fail`.
- Everything else: `kit --help` — the commands are self-documenting.
<!-- END kit -->

The block is an index, not an encyclopedia — every agent turn pays for these tokens, so anything a hook already enforces deterministically carries zero prose. The first install is your trust root (kit cannot triage its own bootstrap): releases carry SLSA provenance and cosign-signed images — verify before you paste the line into an org template.

Why deterministic

kit check and kit triage give the same result every run. The tool makes no model calls of its own: triage delegates to an external Python skill the operator configures, and adapters configure Claude Code / Codex / MCP, they don't invoke models. LLM-augmented triage is available as explicit opt-in, you bring the key.

Why: smaller attack surface. No vendor API key baked into kit. No token cost from running kit check. No vendor lock. The tool stays a tool; intelligence stays where you put it.

kit 5: a portable, fail-closed governance layer for the agent loop

5.0 takes kit from a point-in-time verifier to a continuous, portable, fail-closed governance layer for the agent loop. Four pillars land — hardware-rooted identity, an offline control plane, one exec-broker, and a traveling profile — all additive over 4.x (no stable command removed, enforced by a public-surface invariant). The 4.0 promise still holds underneath: a check that could not run fails the gate — green means every check actually ran (no false green).

It sits on everything before it: the provable local floor (signed attestation, scanner-health gate, provable air-gap) from 2.x, the org-governed control plane and governed cross-device memory from 3.x, and strict-by-default gating from 4.0 — now unified so the CLI gates, the MCP runtime, and kit doctor all read one signed decision.

[hardware identity]

Hardware-rooted identity

kit doctor surfaces WHICH backend signs kit's identity — Secure Enclave / TPM / external command vs. a file-backed 0600 key — and never silently downgrades: a file key is a warn, and KIT_REQUIRE_HARDWARE makes a missing hardware backend fail-closed. kit identity migrate moves onto hardware and revokes the old key in one attributable, audited step.

[control plane]

Offline control plane + keyless creds

kit policy pull / pull-revocations distribute an org-signed .kit-policy.toml, verified against the anchored signers and enforced entirely offline; revocations propagate monotonically. kit policy approve mints offline signed approval tokens. Keyless egress signs requests with RFC 9421 HTTP Message Signatures for hosts in [scope].sign — sign, don't store.

[exec-broker]

One exec-broker

A single signed-scope governance floor drives the PreToolUse gates (kit gate-egress / gate-fs), the MCP runtime, and the kit doctor posture — one broker, not two. Runtime mediation is on by default in observe mode (audits what it would deny, breaks nothing); enforce is an explicit opt-in. kit broker enforce-readiness grades the observed window so you flip observe→enforce on evidence, not nerve, and kit broker enforce re-signs the scope and refuses unless the verdict is ready. No verified scope ⇒ grants nothing.

[traveling profile]

Traveling profile

kit profile declares your {skills, mcp, workflows, plugins, vault, gates, scope}, audits declared-vs-discovered drift, and signs the scope/RoE. kit profile export / import move a portable signed bundle to a fresh host — integrity-verified offline, fail-closed on tamper or revocation. Lifecycle insight flags loaded-but-unused MCP servers and skills.

[deep skill triage]

Deep skill triage — borrowed authority

kit triage skill --deep delegates to NVIDIA SkillSpector's static Stage 1 (regex + AST + offline OSV) and folds its findings into kit's verdict, attributed to the source. kit never runs its LLM stage — enforced by a scrubbed env and static invocation. kit setup --recommended wires the triage gates into your pre-commit hook.

[repo-map]

Repo-map — load a slice, not the tree

kit map (and the kit_map MCP tool — one shared core, so CLI and agent surface can't disagree) builds a deterministic, zero-LLM import graph (TS/JS + Python) and returns the relevant slice around a seed file: import neighbors to a chosen depth, a --budget cap where every dropped file is logged (never silent truncation), owner attribution (CODEOWNERS or git-blame), and --co-change coupling from git history. An agent loads the part of a growing repo that matters — not the whole tree.

[stable contracts]

Stable contracts

Versioned .kit.toml with deterministic kit config migrate (dry-run by default, auto-backup, restore-on-failure). Every command carries a stability tier, the adapter SDK is frozen at adapter-sdk@1.0 on its own semver track, and a committed public-surface snapshot has a drift test that fails CI on any unreviewed change. 5.0 is a major for the scope of new capability, not for any break — additive over 4.x, no stable command removed.

[skills as modules]

Skills, governed as software modules

kit skill test treats an agent skill as a module: deterministic, zero-LLM checks for contract, trigger (declared + no collision with a sibling), least-privilege scope, and regression vs a committed snapshot (--gate fails CI on drift, like the public-surface invariant). --runtime then audits what the agent actually did: it reconstructs each skill run as a span from the recorded transcript and proves the negative controls held — a forbidden action the broker denied lands as a gate-egress/gate-fs deny, so kit reports "control held — N forbidden attempt(s) denied" with evidence, and catches exfil-via-allowed-tool (an off-scope host or write) against the signed scope. kit never runs the skill; whether the output is good is an LLM judgement kit delegates. Honest floor: coverage is observed runs, never a false-green pass.

Proven against the real world: 198 repos + a red-team

We pointed kit at 198 real repositories — the 100 most-used apps and libraries on GitHub across 15+ language ecosystems, then a fresh, harder 98 as a validation set — running kit init + kit check on each with fully isolated per-repo state, and recording every result to raw per-repo data. Across the 100-repo compatibility set: 0 crashes, 0 init errors, including monorepos at linux / next.js / elasticsearch / flutter scale. Scored against each repo's primary implementation language, kit 5.0.0 correctly identifies the stack on 187 of the 198 (reproduced in CI, not a one-off). The misses are documented edge cases — a compiler written in C++ (swift, julia), a Go+TypeScript monorepo (grafana), and a couple where GitHub's own language label is the odd one out — the analysis that motivated the Linguist-style source-byte census shipping in 5.0.

In parallel, a 14-probe adversarial battery attacked kit's core promise — no false green: scan-result poisoning, baseline-whitelisting of findings, symlinked findings files, a fully weaponized "green machine" repo, malicious-package triage. On every false-green attack kit stayed red / fail-closed. The red-team did find three real defects — a malformed baseline or .kit.toml could crash the gate, and one check was non-deterministic — every one a denial-of-verdict, not a false green, and all three were fixed with regression tests before release. Honest limits are documented too: manifest-based detection has documented misses on polyglot repos, and the degraded no-trufflehog secret path has known gaps.

What the floor found

Robustness is one thing; what the checks actually surface is another. Pointed at that same corpus with kit check --category security (kit 5.0.0, one command per repo, no model calls), 197 repositories returned results. The headline is how quiet it was.

197

repos scanned

The 198-repo corpus above, minus 1 that could not be cloned. kit 5.0.0

70%

zero kit fails

139 of 197 came back clean on kit's gating checks. The floor holds against the code the world already runs.

0

first-party live secrets

No verified-live credential belonging to a project itself. The two a scanner flagged were vendored test fixtures, not the projects' own.

Known-vulnerable dependencies

Across the repos that commit a lockfile, npm audit reported this severity spread (summed):

67
122
108
14

67 critical   122 high   108 moderate   14 low

With open network egress, osv-scanner resolved deeper across Go, Rust, Python and the JVM: 9,054 advisory IDs across 2,711 packages in 117 of the repos.

A known-vulnerable dependency version is not an exploitable project. Standard-library advisories and deep transitive hits dominate that long tail; most never reach a reachable code path. We publish the aggregate as a hygiene signal, not a scoreboard, and we do not rank repositories by it.

Secrets: counted, never named

121 repos carried secret-shaped strings in git history, almost entirely test fixtures and example connection strings, with zero verified-live. The two verified-live hits were vendored third-party test fixtures, not the projects' own credentials. Per responsible disclosure we report only the count: anything that could be a real leak goes privately to the maintainer first and is never named here.

Method: shallow clone → kit init --no-setupkit check --category securityosv-scannernpm audit, kit 5.0.0, run 2026-07. Machine-local checks excluded; clones deleted after each repo. Raw per-repo data is kept in a private research repository.

Integrations

kit's modules are pluggable, this is where it meets the outside world while the core stays deterministic. Secrets resolve from 12 secret backends (8 writable vaults + read-only sources); services and deploy targets provision through first-class adapters / plugins.

Writable vaults: 1Password · Infisical · HashiCorp Vault · AWS Secrets Manager · GCP Secret Manager · Azure Key Vault · Doppler · dotenvx
Read-only sources: Bitwarden · EAS · config · env

Services & deploy: Stripe · Supabase · Clerk · Vercel · Neon · PlanetScale · Upstash · Cloudflare · Fly.io · Railway · Sentry · Resend · Loops · PostHog · Tinybird · Inngest · Trigger.dev · Liveblocks · Flagsmith · Expo EAS · SearXNG · GitHub · Snyk · Wiz

What kit provides

The governance-floor capabilities kit ships out of the box — the parts a plain setup tool typically leaves to you, omits, or can't prove. Every row is a claim you can verify against the CLI, not a comparison against an unnamed competitor.

Capability kit
LLM calls in core none (deterministic, BYO model)
Default telemetry none
Secret backends 12 (8 writable vaults + read-only sources)
Supply-chain scanner bundled bumblebee
SLSA-provenance on releases yes
Multi-repo prescan yes
Elevation gate for destructive ops TOTP + TTL
Crashed / missing scanner fails the gate (no false green)
Signed check attestation opt-in, HMAC-anchored
Provable air-gap kit airgap verify
OWASP evidence maps — ASVS L2 · LLM Top 10 · SSDF · Agentic Top 10 · MCP Top 10 kit coverage --standard=…
Public-surface stability contract frozen + versioned (drift test in CI)

Quick example

# 1. clone a project
$ git clone git@github.com:you/your-app.git
$ cd your-app

# 2. one-shot bootstrap
$ kit setup
  → detects stack (Next.js + Supabase + Stripe)
  → installs node@22, pnpm, supabase-cli
  → logs into 1Password
  → materializes 14 secrets from op://Development/...
  → installs pre-commit + post-merge hooks
  → runs full security baseline

# 3. work normally, agents + humans both go
$ pnpm dev

Core commands

The commands you'll actually run, grouped by what you're doing. Every command is stable unless noted; kit <cmd> --help shows the full surface, and kit config knobs lists every power-user setting.

Set up a repo

  • kit initDetect the stack → generate .kit.toml and run setup.
  • kit installInstall missing tools via mise.
  • kit setupFull pipeline: install → login → secrets → agent config → verify.
  • kit bootstrapOne-command cold start for an ephemeral box: setup → identity → policy → profile → memory, from one seed.
  • kit checkWhat's set up vs missing: tools, services, secrets, hooks, security.
  • kit fix · kit healAuto-fix what's safe; heal loops until green, fail-closed.

Secrets & context

  • kit secretsMaterialize .env.local from template + your vault.
  • kit loginGuided login to every configured service.
  • kit context checkLock each CLI to the declared account + project — no wrong-org pushes.
  • kit runRun a command with the project's env vars loaded.

Security gate

  • kit reviewThe one-shot audit: check + design + standards + ADR as one structured verdict (--json) — same core as the kit_review MCP tool.
  • kit scanRun external scanners (snyk/trivy/grype/semgrep/osv) → one verdict; toggleable via --list-delegates.
  • kit pkg · kit triageVet a package before install: kit pkg npm:express.
  • kit coverageEvidence maps: ASVS L2 · LLM · SSDF · Agentic & MCP Top 10 (toggleable; not a compliance claim).
  • kit skill testLint a skill as a module (contract/trigger/scope/regression); --runtime proves negative controls held.
  • kit adr checkTurn an Architecture Decision Record into a deterministic gate — enforce its kit-enforce rules (forbid/require pattern, import-aware forbid, incl. transitive), cited to the ADR. Zero-LLM.

Memory

  • kit memory indexIndex agent transcripts into the local SQLite store.
  • kit memory searchFull-text recall — pull receipts before answering; --brief returns the minimal slice with an explicit withheld count.
  • kit memory exportExport the shared tier to an Obsidian vault (wikilinks + per-area index); rule aging flags stale machine-origin rules.
  • kit memory push · pullGoverned cross-device sync over your own encrypted transport (public-key mode: no secret).
  • kit memory learnSurface instructions you keep re-typing so you can make them a rule.

Governance

  • kit identityHardware-rooted Ed25519 identity (init/show/rotate/migrate).
  • kit policySignable org policy-as-code, pulled + enforced offline (pull/approve).
  • kit profileTraveling signed profile — scope/RoE, drift, export/import to a fresh host.
  • kit gate-egressExec-broker PreToolUse gate: block egress/writes outside the signed scope.
  • kit auditTamper-evident, attributable audit log (verify / anchor / export).
  • kit panicCompromise response: rotate identity + emit a signed revocation.

Status & help

  • kit statusAdoption checklist + the next step for each gap.
  • kit statuslineOne-line status (score · update · open PAL) for your prompt or agent bar.
  • kit doctorDeep environment diagnostics + OS-containment posture (container/seccomp + gVisor/Firecracker fingerprints; honest unknown off-Linux). [governance.containment] require makes it fail-closed.
  • kit mapDeterministic repo-map: the relevant slice around a file (owners, budget, co-change).
  • kit config knobsList every power-user env var + .kit.toml field kit honors.

Get it

One-shot

npx sandstream-kit setup

Global

npm i -g sandstream-kit

Docker

docker run --rm -v "$PWD":/work -w /work sandstream/kit check

Source

git clone github.com/sandstream/kit

Prereqs: Node 22+, git, and mise for installing tools (brew install mise on macOS, or curl https://mise.run | sh on Linux / Windows). The one-shot npx path needs no global install. The Docker image is a signed, multi-arch OCI image (version + latest tags) — verify it before you trust it:

# every release is keyless-signed (cosign) + ships a CycloneDX SBOM
$ cosign verify sandstream/kit:latest \
    --certificate-identity-regexp 'https://github.com/sandstream/kit/\.github/workflows/docker-build\.yml@.*' \
    --certificate-oidc-issuer https://token.actions.githubusercontent.com
# then, in a repo
$ kit init      # detect stack → .kit.toml
$ kit check     # what's set up vs missing
$ kit setup     # install tools, hooks, logins, secrets
$ kit context check  # lock each CLI to the right account + project

Documentation

Everything is in the repo. Read up before you wire it in.

FAQ

What is kit?

kit is a deterministic, local-first developer-environment manager for AI agents and humans. One command takes a repo from git clone to a working dev environment: it installs and pins tools, runs guided logins, materializes secrets from your vault, and wires agent config.

Does kit replace Semgrep, Snyk, or Trivy?

No — kit is not another scanner. It orchestrates and normalizes the scanners you already use (Semgrep, Snyk, Trivy, Grype, osv-scanner, plus opt-in GuardDog malware detection and its own supply-chain checks) into one deterministic gate with cited findings. Cloud-only tools like Socket that can't run air-gapped surface as an honest skip, never a false green. It does not rebuild SAST.

How is kit agent-native?

The core is deterministic and local — no LLM. kit externalizes agent state: a cross-harness memory store (Claude Code, Codex, Gemini, Cursor, …) and a per-CLI context lock that verifies each tool points at the right account and project, so you can switch agents without losing context or contaminating environments.

Does kit impose a coding standard?

No. kit ships zero opinions — you declare your standards (config thresholds, your own plugin rules, architecture decisions as ADRs with enforce blocks) and kit enforces the declaration deterministically, then proves the checks ran. Taste can change: supersede the ADR, and history keeps the why.

Is kit free and open source?

Yes. kit is MIT-licensed, published to npm as sandstream-kit with SLSA provenance, requires Node 22+, and sends zero telemetry.