Agent skill

Stash Zerokms

by cipherstash in cipherstash/stack

The ZeroKMS key model — keysets, clients, client keys, and the grant/revoke lifecycle.

MITAuto-check passedBackend & APIs

Install Stash Zerokms

skills CLI
$ npx skills add cipherstash/stack --skill stash-zerokms -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install cipherstash/stack stash-zerokms --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/cipherstash/stack.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/stash-zerokms .claude/skills/stash-zerokms && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
stash-zerokms
GitHub stars
157
Token cost
~4.4k tokens
SKILL.md length
2,379 words
Files
1
Skills in repo
14
Repo updated
First seen
Licence
MIT

At a glance

The ZeroKMS key model — keysets, clients, client keys, and the grant/revoke lifecycle.

  • Works in 2 steps: "Same credentials everywhere" is… → One silent failure mode exists, and it…
  • Query fails with a ZeroKMS error
  • SKILL.md covers Authentication and regions…, The model in one paragraph, The key hierarchy and Keysets, plus 5 more sections
  • Needs CS_CLIENT_KEY

What it does

Stash Zerokms is an agent skill from cipherstash/stack. The ZeroKMS key model — keysets, clients, client keys, and the grant/revoke lifecycle. Covers the four-level key hierarchy, why every encrypt/decrypt/query is scoped to a keyset, the exact failure surface when a client lacks keyset access (unreachable keysets fail loudly; the one silent case is a reader granted the writer's keyset but bound to a different one — decrypt works, encrypted search returns zero rows), the workspace default keyset, multi-tenant isolation via config.keyset, and the ZeroKMS API for…

Its SKILL.md is about 4.4k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Backend & APIs, covering Multi-tenancy. It works with PostgreSQL, Prisma and Supabase. The repository describes itself as: Searchable, application-level encryption for building privacy-first apps. The licence is MIT.

When your agent uses it

  • Query fails with a ZeroKMS error
  • Planning multi-tenant key isolation
  • Deciding which credentials a backfill job
  • Edge function should use

Example prompts

  • “s guidance touches”
  • “keysets”
  • “who can decrypt what”
  • “/stash-zerokms”

Requirements

  • A credential in CS_CLIENT_KEY

Workflow steps

2 steps, taken from the first numbered list in SKILL.md.

  1. "Same credentials everywhere" is stronger than what's required. Two
  2. One silent failure mode exists, and it is exactly the asymmetry above.

What it can do on your machine

Read from SKILL.md and the folder at commit 3eb459b. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are typescript).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • dashboard.cipherstash.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • CS_CLIENT_KEY

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Stash Zerokms loads about 4.4k tokens when it runs. Until then it costs about 238 tokens; SKILL.md has 2,379 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~238
When it runs · the whole SKILL.md, loaded when a task matches
~4.4k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from cipherstash/stack at commit 3eb459b, republished under its MIT licence (© cipherstash). 2,379 words, ~4,374 tokens.

Download SKILL.mdSave it as .claude/skills/stash-zerokms/SKILL.md (or your agent's skills folder).
name
stash-zerokms
description
The ZeroKMS key model — keysets, clients, client keys, and the grant/revoke lifecycle. Covers the four-level key hierarchy, why every encrypt/decrypt/query is scoped to a keyset, the exact failure surface when a client lacks keyset access (unreachable keysets fail loudly; the one silent case is a reader granted the writer's keyset but bound to a different one — decrypt works, encrypted search returns zero rows), the workspace default keyset, multi-tenant isolation via `config.keyset`, and the ZeroKMS API for creating, granting, and revoking keyset access. Use when a decrypt or query fails with a ZeroKMS error, when planning multi-tenant key isolation, when deciding which credentials a backfill job or edge function should use, when rotating or revoking a compromised credential, or whenever another skill's guidance touches "credentials", "keysets", or "who can decrypt what" — this skill is the canonical source for that model.

ZeroKMS: keysets, clients, and key management

ZeroKMS is the key service behind every CipherStash Stack operation. This skill is the canonical description of its access model. Other skills (stash-edge, stash-deployment, stash-cli, stash-postgres, stash-supabase) touch credentials and keysets in passing; where their wording and this skill disagree, this skill wins.

Authentication and regions (see stash-auth)

ZeroKMS accepts exactly one credential: a CipherStash service token — a short-lived signed JWT minted by CTS, the CipherStash token service. Access keys and IdP JWTs are never sent to ZeroKMS directly; they are exchanged at CTS for a service token first. The auth strategies do this for you — stash-auth is the canonical skill for that whole surface (strategies, CS_* variables, token contents, failure codes).

ZeroKMS runs in a number of regions (the current list: stash auth regions, or the table in stash-auth). Your workspace's region is part of its CRN (crn:<region>.<provider>:<workspace-id>), and CTS resolves the matching ZeroKMS endpoint and stamps it into the service token — the client discovers where ZeroKMS is from the token itself. You never configure a ZeroKMS URL, which is also why the CS_*_HOST override variables are debug-only and must not appear in CI or examples.

The model in one paragraph

Every value is encrypted under a keyset. A client (an application credential with its own client key) is bound to one keyset — the one named in its config (config.keyset) or, when omitted, its default keyset, the one it was created against — and can additionally be granted access to others. The routing is asymmetric, and everything below follows from it:

  • Encrypt and query always use the client's bound keyset. Search terms are produced with a per-keyset index key the client loads from ZeroKMS at initialization. A client whose bound keyset is unreachable (no grant, revoked, disabled) fails loudly right there — construction, encrypt, and query alike.
  • Decrypt follows each payload's own keyset, whichever client wrote it, and succeeds for any keyset the decrypting client is granted. A payload under a keyset the client has no grant for fails loudly at the ZeroKMS round trip (404).

Two corollaries that follow directly, and that agents get wrong most often:

  1. "Same credentials everywhere" is stronger than what's required. Two different clients — each with its own client key — interoperate completely, search included, as long as both are bound to the same keyset. A backfill job and the deployed app may use different access keys; what must match is the keyset the operations run under, not the credential strings. Be precise about how that keyset is chosen: when an operation names one (config.keyset), it's that keyset; when it doesn't, ZeroKMS uses that client's default keyset — the keyset the client was bound to when it was created. So two clients that both omit config.keyset only interoperate if their default keysets are the same keyset.
  2. One silent failure mode exists, and it is exactly the asymmetry above. A reader that is granted the writer's keyset but bound to a different one decrypts the writer's rows fine — while its query terms derive under its own bound keyset and match nothing: zero rows, no error. So "decrypt works but search returns zero rows" has three suspects, in order: the reader's bound keyset vs the writer's (this skill), the extractor index (stash-indexing), the operand cast / predicate form (stash-postgres). What can not cause it is the credential string — every client bound to the same keyset derives the same index key. The same-keyset rule therefore binds writers and query readers; decrypt-only readers need just a grant.

The key hierarchy

Four levels, each narrowing scope; no single component holds enough material to derive a data key alone.

LevelKeyHeld byPurpose
1Root keyHSM / hardware root of trustProtects all downstream key material. Never exported.
2Authority key (per keyset)ZeroKMSDerives key seeds for a keyset. Materialized per client grant, so every granted client resolves the same keyspace.
3Client key (per client / device)Application runtime onlyNever transmitted to ZeroKMS. Multiple clients can share a keyset, each with its own key.
4Data key (per value)Derived in-process, ephemeralDerived from client key + key seed during encrypt/decrypt. Never stored or transmitted.

ZeroKMS uses proxy symmetric re-encryption: it sends key seeds, never usable keys, and the client combines a seed with its own client key to derive each per-value data key. Because the data key requires both halves:

  • ZeroKMS never possesses a usable data key (zero-knowledge).
  • Revoking one client blocks all of its future key operations, instantly and without re-encryption. ZeroKMS stops issuing seeds to that client; its client key cannot derive data keys from seeds issued to other clients. No effect on other clients. Like any key service, revocation is not retroactive — plaintext or per-value data keys the client already held in memory are beyond recall — but because keys are per value, the blast radius is exactly the values that client already accessed, never the keyspace.

Keysets

A keyset is the isolation unit: data encrypted under one keyset can never be decrypted or queried with another keyset's keys. Every operation runs under the data's own keyset, and only clients granted that keyset can perform it. Keysets belong to a workspace.

  • Naming: 1–64 characters, ASCII letters/digits plus _, -, /. The name default is reserved (case-insensitively) for the workspace default keyset. Descriptions are 1–256 characters.
  • The workspace default keyset: every workspace has exactly one, named default, created automatically the first time it's needed. It cannot be renamed or disabled. A client created without naming a keyset is bound to it.
  • Every client also has its own default keyset: the keyset it was bound to at creation (default unless another was named). An operation that doesn't specify a keyset resolves to the client's default keyset — not automatically the workspace's. The two coincide when the client was created without naming a keyset — as with the profile credentials in a dev environment — which is why single-tenant apps that never mention keysets still work. But a client created against tenant-a defaults to tenant-a, and a client with no default at all (possible via the API) gets 404 — "Client (…) has no default keyset" on any keyset-less operation.
  • Disabled keysets: a keyset (other than the default) can be disabled as a reversible kill-switch. While disabled, every operation under it fails for every client with 403 — "Keyset disabled: request could not be processed because the keyset has been disabled". Re-enabling restores access; no data is touched.

Clients and grants

A client is a credential identity in ZeroKMS: it has an id, a client key (generated at creation, returned once, held only by the application), and a set of keyset grants.

  • Creating a client binds it to one keyset immediately (the default keyset unless another is named at creation).
  • Grant adds access to a further keyset. Revoke removes one grant. Deleting a client removes the client and all of its grants.
  • Grants are per (client, keyset) pair. There is no wildcard and no transitive access.

The device client is a special case worth knowing about: after stash auth login, the CLI generates a device identity (a device identifier and name, stored in the profile), provisions a client in ZeroKMS named after the device — bound to the workspace default keyset, at most one device client per device per workspace — and persists the resulting key to ~/.cipherstash/secretkey.json. That key is a standard client key; only its encapsulation differs (a JSON profile file holding the client id and key material, rather than the hex CS_CLIENT_KEY form a deployed app uses). It is what makes local dev work with no environment variables: everything this skill says about clients — the default keyset, grants, revocation — applies to the device client like any other. The profile files are read only by the CLI and the auth strategies; agents never read them directly (see stash-auth).

Manage all of this in the dashboard (the _ resolves to your selected workspace). The underlying ZeroKMS API, for automation:

Endpoint (POST)EffectRequired scope
/create-keysetCreate a keyset (optionally with a client in one call)keyset:create (+ client:create if bundling a client)
/list-keysetsList the workspace's keysetskeyset:list
/modify-keyset, /enable-keyset, /disable-keysetRename/describe, re-enable, kill-switchkeyset:modify / keyset:enable / keyset:disable
/create-clientCreate a client bound to a keyset (default if unnamed)client:create (+ keyset:grant when naming a keyset)
/list-clientsList clients and their keyset grants (filterable by keyset)client:list
/grant-keysetGrant an existing client access to a keyset (by name or UUID)keyset:grant
/revoke-keysetRemove one client's access to one keysetkeyset:revoke
/delete-clientDelete a client and all its grantsclient:delete

/list-clients is the check an agent can run to answer "does this client have a grant for that keyset?" — it returns each client with the keyset ids it can reach.

Scope strings in existing tokens may use the legacy dataset: prefix (dataset:create, dataset:grant, …) — it is the same permission family as keyset:; ZeroKMS accepts both spellings. Scopes are assigned by CTS when the service token is minted, based on the credential's role — see stash-auth.

Show full SKILL.md (896 more words)Show less

Keysets in the Stack

typescript
const client = await Encryption({
  schemas: [users],
  config: {
    keyset: { name: "tenant-a" }, // or { id: "<uuid>" }
  },
})
  • Omit config.keyset → the client's default keyset (the keyset the ZeroKMS client behind your CS_CLIENT_* credentials was created against — the workspace default keyset if using the profile credentials in a dev environment).
  • Encrypt and query always use the bound keyset. A client is bound to one keyset for its lifetime, and there is no per-operation keyset option in @cipherstash/stack — the underlying Rust SDK accepts a per-call keyset on decrypt, but the FFI does not expose it. Multi-tenant applications create one Encryption() client per tenant.
  • Decrypt is per-payload automatically. Every encrypted payload embeds the id of the keyset it was encrypted under, and decryption routes key retrieval to that keyset — so one client can decrypt rows from several keysets, provided it holds a grant for each. No option needed; without the grant the decrypt fails as usual. (This is why cross-tenant reads can be centralized in one suitably-granted client while writes and queries still require the per-tenant client.)
  • Keysets are orthogonal to authStrategy and lock context: a keyset isolates a whole keyspace (coarse, fixed per client); lock context binds retrieval of an individual value's data key to a claim from the caller's service token (fine-grained, per operation — see stash-auth). They compose.
  • stash login binds your device to the workspace's default keyset, which is why CLI operations (stash encrypt backfill, dev-time tooling) work without any keyset configuration.

Two gates, two very different failures

Keyset access and lock context are independent gates, and their failures look different. Do not diagnose one as the other.

Gate 1 — keyset access (client-level, wholesale). Checked first, on every request. No grant for the requested keyset means ZeroKMS cannot even locate key material for the client:

CauseZeroKMS responseWhat the application sees
Client has no grant for the keyset (or keyset name/id doesn't exist in this workspace)404 — "Not Found: no record found with id=…"Encryption() init fails (the per-keyset index key cannot be loaded); if a payload names an unreachable keyset, encrypt/decrypt return { failure } (EncryptionError / DecryptionError)
Keyset disabled403 — "Keyset disabled: …"Same surface — init or operation failure, for every client of that keyset
Token missing scopes403 — "Not permitted"Operation failure; fix the credential's scopes, not the grants

Gate 2 — lock context / decryption policy (value-level, per identity). Only reached when gate 1 passes. A value encrypted under a lock context has its data key bound to a claim from the encrypting caller's service token; a caller whose token doesn't carry the same claim is refused that value's data key (403, surfaced as a { failure } on decrypt). Encrypting and other values are unaffected, and every denial is recorded in the access log. See stash-auth for the lock-context model and usage.

The practical tell: gate-1 failures are total (the client can do nothing under that keyset — encrypt, decrypt, and query all fail), gate-2 failures are selective (specific values, specific callers).

Diagnostic runbook

Encrypted operations failing with a ZeroKMS error? Check in this order — each step's failure explains everything after it:

  1. Credentials present and pointing at the right workspace? The four CS_CLIENT_* / CS_WORKSPACE_CRN variables (see stash-edge for the list). A keyset name resolves within a workspace — the same name in another workspace is a different keyset.
  2. Does the keyset exist there? Dashboard, or /list-keysets. Typos in config.keyset.name surface as the 404 above, not as a helpful "no such keyset".
  3. Does this client have a grant? /list-clients filtered by the keyset, or the dashboard's keyset page. If no keyset is being specified, check which keyset each client defaults to — a writer and a reader that both omit config.keyset can still be on different keysets if their clients were created against different ones.
  4. Is the keyset disabled? The 403 message says so explicitly.
  5. Only decrypt of specific values failing, for specific callers? That's lock context (gate 2), not keyset access — check that the decrypt call carries the same lock context the value was encrypted with.
  6. Decrypt fine but queries return zero rows? First check the reader's bound keyset against the writer's — a reader granted the writer's keyset but bound to a different one decrypts fine while its query terms derive under its own keyspace (the silent case from "The model in one paragraph"). Bound keysets match? Then it's not a key problem: stash-indexing (is the extractor index there and used?) and stash-postgres (is the operand cast/predicate form right?).

Operational rules of thumb

  • Environments should not share keysets. Give production its own keyset (or workspace); a dev credential then can't decrypt production rows even if it leaks. stash-deployment covers where each environment's credentials come from.
  • Backfills and one-off jobs: the job's client must reach the same keyset the deployed application uses. Same explicit config.keyset is the safe form; if both sides omit it, each resolves to its own client's default keyset, so verify the two clients were created against the same keyset — same workspace is necessary but not sufficient. The credential string itself may differ.
  • Suspected credential compromise: revoke the client (or delete it). Revocation is immediate — ZeroKMS stops issuing seeds, and the revoked client key is useless against seeds issued to others. No re-encryption is needed and no other client is affected.
  • Retiring a keyset: disable first (reversible, proves nothing still uses it), then deal with the data. There is no cross-keyset decrypt — data moves between keysets only by decrypting under the old and re-encrypting under the new.

© cipherstash, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in skills/stash-zerokms of cipherstash/stack.

Open the folder on GitHubat commit 3eb459b

Compare with similar skills

Stash Zerokms next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Stash Zerokms compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Stash Zerokms this skillcipherstash/stack157—~4.4kAutomated safety check: PassMIT
Add Backendahpxex/open-dashboard146—~3.6kAutomated safety check: PassMIT
Prisma 8 Contract-First ORMprisma/orm48k—~3.8kAutomated safety check: NotesApache-2.0
Database Schema Designerborghei/Claude-Skills881—~1.7kAutomated safety check: PassMIT
Database Schema DesignerOneWave-AI/claude-skills323—~1.6kAutomated safety check: PassMIT
Supabase Development and Debuggingsupabase/agent-skills2.7k3 repos~3.6kAutomated safety check: PassMIT

Similar skills

  • Add Backend

    ahpxex/open-dashboard

    Everything about the data layer — pick one of six ready-to-run backend templates (TanStack Start + Drizzle + better-auth, Hono + Drizzle + better-auth, Hono + Prisma + better-auth, Hono + Drizzle +…

    146 GitHub stars~3.6k tokensUpdated 3 mo ago
    DatabasesAuto-check passed
  • Official

    Routes Prisma 8 tasks such as contracts, migrations, queries and upgrades to the right reference files for projects on the contract-first @prisma/orm packages.

    48k GitHub stars~3.8k tokensUpdated today
    DatabasesAuto-check: notes
  • Database Schema Designer

    borghei/Claude-Skills

    Design relational schemas from requirements with normalization, migrations, ERDs, RLS policies, and indexes for PostgreSQL, MySQL, and SQLite.

    881 GitHub stars~1.7k tokensUpdated today
    DatabasesAuto-check passed
  • Database Schema Designer

    OneWave-AI/claude-skills

    Designs relational and document database schemas from requirements or an existing app - tables and collections, keys, relationships, constraints, indexes driven by real query patterns, ERDs, and…

    323 GitHub stars~1.6k tokensUpdated 6 days ago
    DatabasesAuto-check passed
  • Official

    General Supabase skill for database, auth, Edge Functions, Realtime and storage work, plus client libraries, migrations, security audits, debugging and reading logs.

    2.7k GitHub starsUsed in 3 repos~3.6k tokens
    Backend & APIsAuto-check passed
  • Supabase

    curvenote/curvenote

    A skill your agent uses when doing ANY task involving Supabase.

    169 GitHub starsUsed in 5 repos~2.2k tokens
    Backend & APIsAuto-check passed

More from cipherstash/stack

All 14 skills in this repo
  • Meta Issue Creation

    cipherstash/stack

    How an agent files a GitHub issue on cipherstash repos — required structure (Background / Problem / Proposal), dumbed-down wording rules, and pre-filing checks.

    157 GitHub stars~1k tokensUpdated today
    Auto-check passed
  • Meta PR Creation

    cipherstash/stack

    How an agent authors branches, commits, and pull requests on cipherstash/stack — naming, signed commits, the changeset/skills/meta-file checklist, and PR body structure with dumbed-down wording.

    157 GitHub stars~937 tokensUpdated today
    Auto-check passed
  • Stash Deployment

    cipherstash/stack

    Deploy a CipherStash encryption rollout to a live environment without losing data — the multi-deploy ladder (schema-add + dual-write → backfill → read cutover → stop dual-writes → drop plaintext)…

    157 GitHub stars~6.5k tokensUpdated today
    Auto-check passed
  • Supply-chain security controls for the @cipherstash/stack monorepo.

    157 GitHub stars~5.2k tokensUpdated today
    Auto-check: warnings
  • Stash Drizzle

    cipherstash/stack

    Integrate CipherStash encryption with Drizzle ORM using @cipherstash/stack-drizzle (EQL v3).

    157 GitHub stars~10k tokensUpdated today
    Auto-check: notes
  • Stash Edge

    cipherstash/stack

    Run CipherStash encryption on edge and non-Node runtimes with the @cipherstash/stack/wasm-inline entry — Deno, Supabase Edge Functions, Cloudflare Workers, and Bun.

    157 GitHub stars~6.4k tokensUpdated today
    Auto-check: notes

Categories

Questions about Stash Zerokms

What does Stash Zerokms do?

The ZeroKMS key model — keysets, clients, client keys, and the grant/revoke lifecycle. Stash Zerokms is an agent skill from cipherstash/stack. The ZeroKMS key model — keysets, clients, client keys, and the grant/revoke lifecycle.

When should I use Stash Zerokms?

Stash Zerokms fits situations like: query fails with a ZeroKMS error; planning multi-tenant key isolation; deciding which credentials a backfill job; edge function should use.

How do I install Stash Zerokms in Claude Code?

Run `npx skills add cipherstash/stack --skill stash-zerokms -a claude-code`. Or copy the skill folder (skills/stash-zerokms in cipherstash/stack) into .claude/skills/stash-zerokms in your project. Claude Code loads it when a task matches its description.

How do I install Stash Zerokms in Codex?

Run `npx skills add cipherstash/stack --skill stash-zerokms -a codex`. Or copy the skill folder (skills/stash-zerokms in cipherstash/stack) into .agents/skills/stash-zerokms in your project. Codex loads it when a task matches its description.

Can I use Stash Zerokms in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add cipherstash/stack --skill stash-zerokms -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/stash-zerokms, .gemini/skills/stash-zerokms, .github/skills/stash-zerokms and .opencode/skills/stash-zerokms in your project.

What does Stash Zerokms need to run?

Going by SKILL.md and its folder, Stash Zerokms needs credentials named CS_CLIENT_KEY. Our summary lists: A credential in CS_CLIENT_KEY.

Does Stash Zerokms access the network?

SKILL.md names 1 domain. As links in the text: dashboard.cipherstash.com. This is read from the text; nothing was executed.

Is Stash Zerokms safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Stash Zerokms use?

Stash Zerokms is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Stash Zerokms use?

About 4.4k tokens (SKILL.md is roughly 17k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Stash Zerokms?

Skills that share tags, products or a category with Stash Zerokms: Add Backend (ahpxex/open-dashboard, 146 stars), Prisma 8 Contract-First ORM (prisma/orm, 48k stars), Database Schema Designer (borghei/Claude-Skills, 881 stars) and Database Schema Designer (OneWave-AI/claude-skills, 323 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Stash Zerokms?

cipherstash (a GitHub organization) maintains it in cipherstash/stack, which has 157 GitHub stars. The repository holds 14 skills in this directory. The repository was last updated on October 8, 2026.

Source: cipherstash/stack on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.