secret-sharing — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited secret-sharing (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Share passwords, API keys, tokens, certificates, and other sensitive data via self-destructing, one-time URLs. All encryption happens client-side — the server stores only ciphertext.
This skill requires a running zKettle MCP server. If zKettle is not installed or configured, see the zKettle README for installation and MCP setup instructions. zKettle also offers a CLI, HTTP API, and Web UI — refer to the README if the MCP tools are insufficient for a particular workflow.
#key) — never sent to the servercreate_secretEncrypt and store a secret, returning an expiring URL.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
content | string | no | — | Plaintext to encrypt (max 500KB). Visible in conversation context — use file instead for maximum security. |
file | string | no | — | Read secret from this file path instead of content. Keeps plaintext out of conversation. |
views | integer | no | 1 | Max views before auto-delete (1–100) |
minutes | integer | no | 1440 | Minutes until expiry (1–43200) |
Provide exactly one of content or file. Returns url (with decryption key in fragment) and delete_token.
read_secretDecrypt a secret from a zKettle URL. Consumes one view.
| Parameter | Type | Required | Description |
|---|---|---|---|
url | string | yes | Full zKettle URL including the #key fragment |
file | string | no | Write decrypted secret to this file path (0600 permissions) instead of returning it |
clipboard | boolean | no | Copy to system clipboard instead of returning. Mutually exclusive with file. |
Returns decrypted plaintext by default, or a confirmation message when file or clipboard is used.
revoke_secretPermanently delete a secret before it expires.
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | yes | Secret ID |
delete_token | string | yes | Token returned by create_secret |
list_secretsList all active secrets (metadata only — no content or keys). Returns IDs, creation time, expiry, and remaining views.
generate_secretGenerate a cryptographically random secret. Optionally encrypt and store it in one step.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
length | integer | no | 32 | Length in characters (1–4096) |
charset | string | no | "alphanumeric" | Character set: alphanumeric, symbols, hex, base64url |
create | boolean | no | false | If true, encrypt and store the generated secret |
views | integer | no | 1 | When create=true, max views (1–100) |
minutes | integer | no | 1440 | When create=true, minutes until expiry (1–43200) |
Returns raw generated text, or url + delete_token when create=true.
views is omitted (single-use)minutes is omittedPlaintext secrets can appear in conversation context (tool inputs/outputs). Use these patterns to minimize exposure.
create_secret(file="/path/to/secret.txt") — reads from file, plaintext never in tool call. Ask the user before deleting the source file afterward.generate_secret(create=true) — generates + encrypts in one step, plaintext never in responsecreate_secret(content="...") which puts the raw value in conversation contextread_secret(url="...", file="/tmp/secret.txt") — writes to file, returns confirmation onlyread_secret(url="...", clipboard=true) — copies to user's clipboard, returns confirmation onlyread_secret(url="...") returns plaintext directly into conversation — warn the user before using this formfile do NOT self-destruct. After the secret has been used, ask the user for permission to delete the file, then remove it. Do not leave secret files on disk.1. create_secret(file="/path/to/credential.txt", views=1, minutes=60)
— or create_secret(content="the-password", views=1, minutes=60) if plaintext exposure is acceptable
2. Share the returned URL with the recipientThe secret vanishes after one view or 60 minutes, whichever comes first.
1. generate_secret(create=true, length=48, charset="alphanumeric", views=2, minutes=240)
2. Share the URL with the team member who needs it
3. revoke_secret(id="old-secret-id", delete_token="old-token") to kill the old one1. create_secret(content="temp-token", views=1, minutes=30)
2. Send the one-time link — expires after a single view or 30 minutes1. list_secrets() — review what's still live
2. revoke_secret() on any that are no longer needed1. Receive a zKettle URL from a human or another agent
2. read_secret(url="https://example.com/s/abc123#key", file="/tmp/secret.txt")
— or read_secret(url="...", clipboard=true) to copy to clipboard
— or read_secret(url="...") to return plaintext directly (enters conversation context)
3. Use the decrypted contentzKettle is well-suited for secure coordination between agents — subagents, teammates, or any multi-agent workflow where credentials need to move between contexts without leaking into conversation logs.
The creating agent writes the secret to zKettle, passes only the URL to the receiving agent. The receiving agent reads it to a file, uses it, then cleans up.
Agent A (creator):
1. create_secret(content="deploy-token-xyz", views=1, minutes=30)
2. Send the URL to Agent B via message
Agent B (consumer):
1. read_secret(url="...", file="/tmp/deploy-token.txt")
2. Use the file contents for the task
3. Delete /tmp/deploy-token.txt when doneThe plaintext never enters either agent's conversation context — Agent A sees only the URL and delete token, Agent B sees only a confirmation message.
When the secret doesn't need to be a specific value (e.g., a new API key, a temporary password):
Agent A:
1. generate_secret(create=true, length=48, views=2, minutes=60)
2. Send the URL to Agent B and keep the delete_token
3. After Agent B confirms usage, revoke_secret() to clean upviews to the exact number of agents that need to read the secret — no moreminutes) appropriate to the workflow durationdelete_token and revoke after the workflow completesfile on the read side so plaintext stays out of all conversation contexts#key portion contains the decryption key. Some tools strip URL fragments — always ensure the full URL (including #key) is passed to read_secret.read_secret permanently destroys it. Warn the user before reading single-view secrets.create_secret(content="...") puts the plaintext in the conversation context. Use generate_secret(create=true) when the user doesn't need a specific value.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.