← Receivers

secrets:list

secrets family

mcp

Your secrets desk — names and meters, never values. Each key you gave (yours, and each group's you may manage): its name, provider, last four characters, sigHash (what a Rotate signs as `replaces`), who uses it through which grant (grantee, which calls, a day's ceiling, until when, today's count from the opener's own meter, stopped or not) and the opener's own call log (who, which entry, counted or over the limit — never a path, body or header; a call is on it whether or not the caller ever sent secrets:used). Keys lent to you (never the lender's last four or vault), the Composio groups running without a grant, each vault's whole grant-signer list with the proposals waiting beside it, its history, a pending reset and the alerts. A cut answer says capped and names what was cut. Everything about WHO comes from the session or attested caller and D1 — never from the body.

Effect
ask
Awaits an outcome — the call returns the response below.
Caller
authenticated
The class of authority the caller must already hold, decided from the attested context with no round trip.
Cost
free
What one call costs, so you can budget before acting.
Reversible
yes
The effect can be undone by a later call.
Idempotent
yes
Safe to retry as-is.

Send it with your agent

One click hands your coding agent a prompt that registers the substrate, reads this contract, and makes the call. Launch opens the app; the others copy the prompt.

Claude Code
Codex
Cursor
Gemini CLI
Claude Desktop
ChatGPT
curl -X POST https://one.ie/api/ask/secrets:list \
  -H "Authorization: Bearer $ONE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"data": {}}'

The key is never in a link. npx -y @oneie/cli login writes it to ~/.config/oneie/key on your machine.

Request

Validated before dispatch — an invalid payload is refused with the fix, never half-applied.

Takes no arguments.

Response

What comes back from the call.

  • ok boolean
  • keys any[] Per key: vault, name, provider, last4, flagged, subject, sigHash, givenAt, grants[{ id, ref, to, for, perDay, until, today, stopped }], calls[{ at, grant, actor, entry, outcome }] (newest first, ≤50).
  • lentToMe any[] Per lend: ref, name, provider, from (who lends it), to (with the agents it covers), left_today, until, perDay, for, accepted, family, stopped.
  • composio any[] Per group you manage: requireGrants ({ vault, on } or null), noGrantToday, noGrantCalls.
  • vaults any[] Per key vault: grantSigners (the opener's chain cache), state fresh · held · unavailable, and from the chain's events (display only): history, pending, pendingReset, alerts.
  • ownVault object | null The signed-in person's own vault: born by them, anchored once one of their registered passkeys accepted itself onto its grant-signer list — the only vault the seal frame gives into.
  • capped boolean true when something was cut (more than 200 keys or grants, more than 50 calls in a log); `cut` names each.
  • cut string[]
  • refused string The opener's: malformed.
  • error string The web side: unauthorized · not_in_workflow (a workflow step never reads the runner's desk) · opener_unbound (the opener is not live yet — nothing was read) · opener_unreachable.

Traffic

Every call to secrets:list, counted where it is dispatched — over HTTP or in-process alike. Aggregate only — no actor, no payload, no workspace.

Counting…

Wiring

Every place in the open source that names secrets:list, and the file that answers it. Read from the tree at build time — a receiver is reached by NAME through one door, so there is no import edge to follow and a grep is the honest shape of the question. Structure, not volume — the count is in Traffic above.

Called from

UI 5
  • one.ie/web/src/components/key/KeysSecrets.tsx:4
  • one.ie/web/src/components/key/LentToMe.tsx:13
  • one.ie/web/src/components/key/SealFrame.tsx:20
  • one.ie/web/src/components/key/secrets-example.ts:4
  • one.ie/web/src/components/key/SecretsDesk.tsx:6
API route 2
  • one.ie/web/src/lib/receiver-index.generated.ts:334
  • one.ie/web/src/lib/resolvers/secrets.ts:324
CLI 1
  • packages/cli/src/secrets-list.ts:3
SDK 1
  • packages/sdk/src/secrets-list.ts:6
→

Answered by

secrets:list one.ie/web/src/lib/resolvers/secrets.ts:725 Dispatched through POST /api/ask/secrets:list, after the envelope validates the payload.
JSON Schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {},
  "description": "Nothing: the caller, its group chain, its owner and the groups it may manage are read from the session and D1. Any field sent is ignored."
}
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "ok": {
      "type": "boolean"
    },
    "keys": {
      "description": "Per key: vault, name, provider, last4, flagged, subject, sigHash, givenAt, grants[{ id, ref, to, for, perDay, until, today, stopped }], calls[{ at, grant, actor, entry, outcome }] (newest first, ≤50).",
      "type": "array",
      "items": {}
    },
    "lentToMe": {
      "description": "Per lend: ref, name, provider, from (who lends it), to (with the agents it covers), left_today, until, perDay, for, accepted, family, stopped.",
      "type": "array",
      "items": {}
    },
    "composio": {
      "description": "Per group you manage: requireGrants ({ vault, on } or null), noGrantToday, noGrantCalls.",
      "type": "array",
      "items": {}
    },
    "vaults": {
      "description": "Per key vault: grantSigners (the opener's chain cache), state fresh · held · unavailable, and from the chain's events (display only): history, pending, pendingReset, alerts.",
      "type": "array",
      "items": {}
    },
    "ownVault": {
      "description": "The signed-in person's own vault: born by them, anchored once one of their registered passkeys accepted itself onto its grant-signer list — the only vault the seal frame gives into.",
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "vault": {
              "type": "string"
            },
            "anchored": {
              "type": "boolean"
            }
          },
          "required": [
            "vault",
            "anchored"
          ]
        },
        {
          "type": "null"
        }
      ]
    },
    "capped": {
      "description": "true when something was cut (more than 200 keys or grants, more than 50 calls in a log); `cut` names each.",
      "type": "boolean"
    },
    "cut": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "refused": {
      "description": "The opener's: malformed.",
      "type": "string"
    },
    "error": {
      "description": "The web side: unauthorized · not_in_workflow (a workflow step never reads the runner's desk) · opener_unbound (the opener is not live yet — nothing was read) · opener_unreachable.",
      "type": "string"
    }
  },
  "required": [
    "ok"
  ]
}