pastilhas 6ce319f15c AGENTS.md, so both harnesses find the same guidance
opencode discovers AGENTS.md and nothing else; claude code discovers CLAUDE.md.
this repo had neither, so an agent sent to change something here arrived with no
guidance at all under either.

it deliberately does NOT repeat README.md. that file says what the plugin is,
for someone deciding whether to install it. this one answers the other question:
i have to change something in here, what will i break.

the facts in it are read from the repository rather than recalled — the panel
keys from web/panels.ts, the tables from db/schema.ts, the permission keys, the
host binaries and the route claims from manifest.ts. presence is the declaration
everywhere in this system, so the file says what the platform will actually
conclude from these files existing.

CLAUDE.md beside it is a pointer, not a copy: two copies drift and the stale one
is the one somebody reads.
2026-08-27 07:24:06 +00:00

Wallet

A self-custodial bitcoin wallet inside Officer, with the keys held on your server rather than on a phone or in a browser.

What you get

  • On-chain balance, receive addresses and transaction history
  • Send, with fee control, coin selection and UTXO freezing
  • Labels for addresses and transactions
  • Multiple wallets, one active
  • Chain data from Esplora or your own NBXplorer

How the keys are held

Read docs/wallet-key-custody.md in the platform for the full design. The short version:

  • Your seed is encrypted under a key derived from your own passphrase (scrypt, N=2¹⁷), then encrypted again at rest. The server never stores the passphrase.
  • The wallet is usable while locked — balances, history and fresh receive addresses all work without it. Unlocking is required only to sign.
  • An unlock lasts 15 minutes by default and does not extend on use. A restart relocks everything.
  • There is no "forgot passphrase". There is no recovery. Your seed backup is the recovery.

Multi-user

Each account gets its own wallet, sealed under its own passphrase. Granting the bitcoin-wallet permission to a role gives those people a wallet of their own — it does not give them yours, and it does not give you theirs. Not through the app, and not with root either: their seed is sealed under a passphrase you do not have.

One caveat, stated plainly: balances and history are stored unencrypted so a locked wallet still shows them. Anyone with the database — or a backup of it — can see any user's balances. They can never move anything.

Permissions

One permission, bitcoin-wallet. Grantable per role like any other app permission.

Requirements

None to start. Esplora is used by default; point it at your own NBXplorer if you run one.

S
Description
No description provided
Readme
2 MiB
Languages
TypeScript 100%