botanary 0.2.2 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +140 -2
- package/dist/bin/botanary.js +5 -2
- package/dist/bin/botanary.js.map +1 -1
- package/dist/package.json +15 -8
- package/dist/src/app-url.js +19 -2
- package/dist/src/app-url.js.map +1 -1
- package/dist/src/cli.js +17 -0
- package/dist/src/cli.js.map +1 -1
- package/dist/src/commands/account.js +171 -0
- package/dist/src/commands/account.js.map +1 -0
- package/dist/src/commands/agent.js +6 -6
- package/dist/src/commands/agent.js.map +1 -1
- package/dist/src/commands/authority.js +634 -0
- package/dist/src/commands/authority.js.map +1 -0
- package/dist/src/commands/services.js +434 -0
- package/dist/src/commands/services.js.map +1 -0
- package/dist/src/commands/session-writes.js +196 -0
- package/dist/src/commands/session-writes.js.map +1 -0
- package/dist/src/commands/sign.js +306 -0
- package/dist/src/commands/sign.js.map +1 -0
- package/dist/src/commands/tokens.js +36 -0
- package/dist/src/commands/tokens.js.map +1 -0
- package/dist/src/commands/wallet.js +596 -44
- package/dist/src/commands/wallet.js.map +1 -1
- package/dist/src/commands/watch.js +259 -0
- package/dist/src/commands/watch.js.map +1 -0
- package/dist/src/help/examples.js +538 -8
- package/dist/src/help/examples.js.map +1 -1
- package/dist/src/package-version.js +53 -0
- package/dist/src/package-version.js.map +1 -0
- package/dist/src/progress.js +19 -0
- package/dist/src/progress.js.map +1 -1
- package/dist/src/render/balance.js +19 -2
- package/dist/src/render/balance.js.map +1 -1
- package/dist/src/validate.js +55 -9
- package/dist/src/validate.js.map +1 -1
- package/package.json +24 -18
|
@@ -31,6 +31,14 @@ export const COMMAND_HELP = {
|
|
|
31
31
|
examples: ['botanary balance', 'botanary balance --json | jq .balance.totalFiat', 'botanary balance --raw'],
|
|
32
32
|
seeAlso: 'botanary activity, botanary chains - wallet_portfolio (MCP)',
|
|
33
33
|
},
|
|
34
|
+
tokens: {
|
|
35
|
+
body: '`send`\'s discovery command. Every token this account holds on one chain, with the contract address\n' +
|
|
36
|
+
'`--token` actually needs. `send` is address-only on purpose - a symbol is a label a contract picks\n' +
|
|
37
|
+
'for itself, and two tokens on one chain can legally share one - so this is where the address comes\n' +
|
|
38
|
+
'from, rather than a block explorer.',
|
|
39
|
+
examples: ['botanary tokens --chain-id 8453', 'botanary tokens --chain-id 8453 usdc', 'botanary tokens --chain-id 8453 --json'],
|
|
40
|
+
seeAlso: 'botanary send, botanary balance',
|
|
41
|
+
},
|
|
34
42
|
send: {
|
|
35
43
|
body: 'Send tokens from an account you own. Botanary never holds your key: the CLI builds an unsigned\n' +
|
|
36
44
|
'operation, then either a mandate signs it locally or you approve it in your browser.\n' +
|
|
@@ -39,14 +47,96 @@ export const COMMAND_HELP = {
|
|
|
39
47
|
' mandate a live mandate covers this exact amount, token and chain\n' +
|
|
40
48
|
' browser anything else, which opens Botanary for you to approve',
|
|
41
49
|
examples: [
|
|
42
|
-
'botanary send
|
|
43
|
-
'botanary send --amount 25 --token
|
|
44
|
-
'botanary send --amount 25 --token
|
|
45
|
-
'botanary send --amount 25 --token
|
|
50
|
+
'botanary send # guided',
|
|
51
|
+
'botanary send --amount 25 --token 0x833589fCD6eDb6E08f4c7C32D4f71b54bda02913 --recipient 0xAb..3F --chain-id 8453',
|
|
52
|
+
'botanary send --amount 25 --token 0x833589fCD6eDb6E08f4c7C32D4f71b54bda02913 --recipient 0xAb..3F --chain-id 8453 --dry-run',
|
|
53
|
+
'botanary send --amount 25 --token 0x833589fCD6eDb6E08f4c7C32D4f71b54bda02913 --recipient 0xAb..3F --chain-id 8453 --yes --json | jq -r .txHash',
|
|
46
54
|
],
|
|
47
|
-
notes: '
|
|
55
|
+
notes: '--token takes a contract address (0x...) or a CAIP-19 asset ref, never a symbol - a symbol is a\n' +
|
|
56
|
+
'label a contract picks for itself, so two tokens on one chain can share one. `botanary tokens\n' +
|
|
57
|
+
'--chain-id <id>` lists every address this account can send.\n' +
|
|
58
|
+
'Mandates are testnet-only today, so on mainnet every send is browser-signed.\n' +
|
|
48
59
|
'Exit 5 means the op was relayed but no receipt arrived yet - poll `botanary api /userops/<opId> --json` to check its status.',
|
|
49
|
-
seeAlso: 'botanary chains, botanary gas, botanary mandates - wallet_send (MCP)',
|
|
60
|
+
seeAlso: 'botanary tokens, botanary chains, botanary gas, botanary mandates - wallet_send (MCP)',
|
|
61
|
+
},
|
|
62
|
+
swap: {
|
|
63
|
+
body: 'Swap tokens in an account you own. Botanary never holds your key: this parks a typed intent and\n' +
|
|
64
|
+
'waits for you to approve it in your browser, the same one path every mutating command uses.\n' +
|
|
65
|
+
'\n' +
|
|
66
|
+
'--token-in and --token-out both take a contract address or a CAIP-19 asset ref, never a symbol -\n' +
|
|
67
|
+
'the same restriction `send` applies, and for the same reason.',
|
|
68
|
+
examples: [
|
|
69
|
+
'botanary swap --token-in 0x833589fCD6eDb6E08f4c7C32D4f71b54bda02913 --token-out 0x4200000000000000000000000000000000000006 --amount-in 10 --chain-id 8453',
|
|
70
|
+
'botanary swap --token-in 0x833589fCD6eDb6E08f4c7C32D4f71b54bda02913 --token-out 0x4200000000000000000000000000000000000006 --amount-in 10 --chain-id 8453 --max-slippage-bps 100',
|
|
71
|
+
'botanary swap --token-in 0x833589fCD6eDb6E08f4c7C32D4f71b54bda02913 --token-out 0x4200000000000000000000000000000000000006 --amount-in 10 --chain-id 8453 --dry-run',
|
|
72
|
+
],
|
|
73
|
+
notes: '`botanary tokens --chain-id <id>` lists every address this account holds.',
|
|
74
|
+
seeAlso: 'botanary tokens, botanary send, botanary sign - wallet_sign_request (MCP)',
|
|
75
|
+
},
|
|
76
|
+
sign: {
|
|
77
|
+
body: 'The one write path underneath every command that moves funds or grants authority. Every one of\n' +
|
|
78
|
+
'them parks a typed intent here (`POST /sign-requests`) and waits for your browser - this CLI never\n' +
|
|
79
|
+
'holds your key and never signs on your behalf, whatever the command.',
|
|
80
|
+
examples: ['botanary sign list', 'botanary sign show sr_1', 'botanary sign resume hnd_1'],
|
|
81
|
+
seeAlso: 'botanary send - wallet_sign_request (MCP)',
|
|
82
|
+
},
|
|
83
|
+
'sign list': {
|
|
84
|
+
body: 'Sign requests this machine parked and is still waiting on your browser to settle.',
|
|
85
|
+
examples: ['botanary sign list', 'botanary sign list --json'],
|
|
86
|
+
seeAlso: 'botanary sign show, botanary sign resume',
|
|
87
|
+
},
|
|
88
|
+
'sign show': {
|
|
89
|
+
body: 'Read one sign request by id: its status, its sign URL, and once relayed, the operation it\n' +
|
|
90
|
+
'produced. For a multi-op request (account.setup, account.migrate, recovery.recover) also shows\n' +
|
|
91
|
+
'each op\'s own status and which one is next.',
|
|
92
|
+
examples: ['botanary sign show sr_1', 'botanary sign show sr_1 --json'],
|
|
93
|
+
notes: 'There is no `sign reject` - only the browser that signs a request can settle it. `sign show`\n' +
|
|
94
|
+
'prints the sign URL; decline there, or let the request expire on its own.',
|
|
95
|
+
seeAlso: 'botanary sign list, botanary sign resume',
|
|
96
|
+
},
|
|
97
|
+
'sign resume': {
|
|
98
|
+
body: 'Rejoin an interrupted wait on a sign request this machine parked - after a dropped connection, a\n' +
|
|
99
|
+
'Ctrl-C, or a closed terminal. Takes the local handle id `botanary sign list` prints, not the sign\n' +
|
|
100
|
+
'request id.',
|
|
101
|
+
examples: ['botanary sign resume hnd_1'],
|
|
102
|
+
seeAlso: 'botanary sign list',
|
|
103
|
+
},
|
|
104
|
+
solana: {
|
|
105
|
+
body: 'Send, swap and manage Botanary Mandates on Solana. Solana is key-keyed, not chainId-keyed - every\n' +
|
|
106
|
+
'command here takes --key (see `botanary chains`) rather than --chain-id, and amounts for send and\n' +
|
|
107
|
+
'mandate grant are raw base units (lamports or SPL base units), not display units.',
|
|
108
|
+
examples: ['botanary solana send --key solana --to <address> --amount 1000000 --yes'],
|
|
109
|
+
seeAlso: 'botanary send, botanary swap, botanary chains',
|
|
110
|
+
},
|
|
111
|
+
'solana send': {
|
|
112
|
+
body: 'Send tokens on Solana. --amount is a raw base-unit integer string (lamports for SOL), not a display amount.',
|
|
113
|
+
examples: ['botanary solana send --key solana --to <address> --amount 1000000 --yes'],
|
|
114
|
+
seeAlso: 'botanary solana swap',
|
|
115
|
+
},
|
|
116
|
+
'solana swap': {
|
|
117
|
+
body: 'Swap tokens on Solana. --amount-in is HUMAN-SCALE (e.g. 1.5), unlike solana send\'s raw base-unit amount.',
|
|
118
|
+
examples: ['botanary solana swap --key solana --amount-in 1.5 --max-slippage-bps 100 --yes'],
|
|
119
|
+
seeAlso: 'botanary solana send',
|
|
120
|
+
},
|
|
121
|
+
'solana mandate': {
|
|
122
|
+
body: 'Grant, freeze/unfreeze and revoke Botanary Mandates Program delegations on Solana.',
|
|
123
|
+
examples: ['botanary solana mandate grant --key solana --mint <mint> --recipient <address> --per-action-max 1000000 --cap-limit 5000000 --cap-period-seconds 3600 --expiry 2027-01-01T00:00:00Z --yes'],
|
|
124
|
+
seeAlso: 'botanary mandates',
|
|
125
|
+
},
|
|
126
|
+
'solana mandate grant': {
|
|
127
|
+
body: 'Grant a bounded Solana mandate. Unlike the EVM delegation lane, --expiry is mandatory here.',
|
|
128
|
+
examples: ['botanary solana mandate grant --key solana --mint <mint> --recipient <address> --per-action-max 1000000 --cap-limit 5000000 --cap-period-seconds 3600 --expiry 2027-01-01T00:00:00Z --yes'],
|
|
129
|
+
seeAlso: 'botanary solana mandate freeze, botanary solana mandate revoke',
|
|
130
|
+
},
|
|
131
|
+
'solana mandate freeze': {
|
|
132
|
+
body: 'Freeze (or --unfreeze) every Solana mandate for this owner at once - one kill switch across every mint.',
|
|
133
|
+
examples: ['botanary solana mandate freeze --key solana --yes', 'botanary solana mandate freeze --key solana --unfreeze --yes'],
|
|
134
|
+
seeAlso: 'botanary solana mandate grant',
|
|
135
|
+
},
|
|
136
|
+
'solana mandate revoke': {
|
|
137
|
+
body: 'Revoke a Solana mandate.',
|
|
138
|
+
examples: ['botanary solana mandate revoke man_1 --key solana --yes'],
|
|
139
|
+
seeAlso: 'botanary solana mandate grant',
|
|
50
140
|
},
|
|
51
141
|
activity: {
|
|
52
142
|
body: 'Recent sends, swaps and yield transactions for this account, newest first.',
|
|
@@ -60,9 +150,35 @@ export const COMMAND_HELP = {
|
|
|
60
150
|
},
|
|
61
151
|
yield: {
|
|
62
152
|
body: 'Yield pools, a shortlist ranked off your own holdings, and this account\'s farm positions. The\n' +
|
|
63
|
-
'shortlist is ranked server-side and is not scoped by `accounts use`.'
|
|
153
|
+
'shortlist is ranked server-side and is not scoped by `accounts use`. `deposit`, `withdraw` and\n' +
|
|
154
|
+
'`claim` are how you actually enter, exit or collect from one of these pools.',
|
|
64
155
|
examples: ['botanary yield', 'botanary yield --json'],
|
|
65
|
-
seeAlso: 'botanary markets - wallet_yield (MCP)',
|
|
156
|
+
seeAlso: 'botanary markets, botanary yield deposit - wallet_yield (MCP)',
|
|
157
|
+
},
|
|
158
|
+
'yield deposit': {
|
|
159
|
+
body: 'Deposit into a yield pool, for an account you own. Parks a typed intent and waits for you to\n' +
|
|
160
|
+
'approve it in your browser, the same one path every mutating command uses. --amount is in the\n' +
|
|
161
|
+
'pool\'s underlying asset, not shares.',
|
|
162
|
+
examples: [
|
|
163
|
+
'botanary yield deposit --pool-id p_1 --amount 25 --chain-id 84532',
|
|
164
|
+
'botanary yield deposit --pool-id p_1 --amount 25 --chain-id 84532 --dry-run',
|
|
165
|
+
],
|
|
166
|
+
seeAlso: 'botanary yield, botanary yield withdraw - wallet_sign_request (MCP)',
|
|
167
|
+
},
|
|
168
|
+
'yield withdraw': {
|
|
169
|
+
body: 'Withdraw from a yield pool, for an account you own. Parks a typed intent and waits for you to\n' +
|
|
170
|
+
'approve it in your browser. --amount is in the pool\'s underlying asset, not shares.',
|
|
171
|
+
examples: [
|
|
172
|
+
'botanary yield withdraw --pool-id p_1 --amount 25 --chain-id 84532',
|
|
173
|
+
'botanary yield withdraw --pool-id p_1 --amount 25 --chain-id 84532 --dry-run',
|
|
174
|
+
],
|
|
175
|
+
seeAlso: 'botanary yield, botanary yield deposit - wallet_sign_request (MCP)',
|
|
176
|
+
},
|
|
177
|
+
'yield claim': {
|
|
178
|
+
body: 'Claim accrued rewards from a yield pool, for an account you own. No --amount: what is claimable is\n' +
|
|
179
|
+
'decided from a live probe of this account\'s own accrued rewards, not a number you supply.',
|
|
180
|
+
examples: ['botanary yield claim --pool-id p_1 --chain-id 84532', 'botanary yield claim --pool-id p_1 --chain-id 84532 --dry-run'],
|
|
181
|
+
seeAlso: 'botanary yield - wallet_sign_request (MCP)',
|
|
66
182
|
},
|
|
67
183
|
mandates: {
|
|
68
184
|
body: 'What the agent lane may spend unattended: every delegation on this account, its bounds, and how much\n' +
|
|
@@ -71,12 +187,66 @@ export const COMMAND_HELP = {
|
|
|
71
187
|
notes: 'Mandates are testnet-only and pre-mainnet. Nothing here is enforced on mainnet yet.',
|
|
72
188
|
seeAlso: 'botanary agents, botanary agent grant - wallet_mandates (MCP)',
|
|
73
189
|
},
|
|
190
|
+
'mandates propose': {
|
|
191
|
+
body: 'Compile a parsed rule/mandate intent against the capability matrix. Pure compilation - reads nothing\n' +
|
|
192
|
+
'and writes nothing, so no signature is involved. subject: self routes to a rule (AgentGuard);\n' +
|
|
193
|
+
'copilot routes to a mandate (MandateExecutor); omitted lets the backend decide, or offer both.',
|
|
194
|
+
examples: ['botanary mandates propose --primitive per_tx_amount_cap --value 500 --unit USDC --comparator lte --subject copilot'],
|
|
195
|
+
seeAlso: 'botanary mandates, botanary mandates suggest',
|
|
196
|
+
},
|
|
74
197
|
'mandates suggest': {
|
|
75
198
|
body: 'Suggest a bounded mandate for each registered agent that does not have one yet, with a Grant URL for\n' +
|
|
76
199
|
'each. A suggestion only: it never widens an existing grant, and granting happens in Botanary.',
|
|
77
200
|
examples: ['botanary mandates suggest', 'botanary mandates suggest --json'],
|
|
78
201
|
seeAlso: 'botanary mandates, botanary agents - wallet_suggest_mandate (MCP)',
|
|
79
202
|
},
|
|
203
|
+
'mandates grant': {
|
|
204
|
+
body: 'Grant bounded access to a delegatee agent - a Smart Session, the classic delegation lane. The full\n' +
|
|
205
|
+
'shape (name, delegateeAddress, chainId, budgets, and the rest) lives in a JSON file, not flags - see\n' +
|
|
206
|
+
'the README. This writes into the Delegations table `botanary mandates` reads, not the Mandates table.',
|
|
207
|
+
examples: ['botanary mandates grant --grant-file grant.json --yes'],
|
|
208
|
+
seeAlso: 'botanary mandates freeze, botanary mandates revoke, botanary mandates confirm',
|
|
209
|
+
},
|
|
210
|
+
'mandates freeze': {
|
|
211
|
+
body: 'Freeze a delegation (reversible). Id from the Delegations table in `botanary mandates`.',
|
|
212
|
+
examples: ['botanary mandates freeze del_1 --yes'],
|
|
213
|
+
seeAlso: 'botanary mandates unfreeze, botanary mandates grant',
|
|
214
|
+
},
|
|
215
|
+
'mandates unfreeze': {
|
|
216
|
+
body: 'Unfreeze a delegation. Id from the Delegations table in `botanary mandates`.',
|
|
217
|
+
examples: ['botanary mandates unfreeze del_1 --yes'],
|
|
218
|
+
seeAlso: 'botanary mandates freeze',
|
|
219
|
+
},
|
|
220
|
+
'mandates revoke': {
|
|
221
|
+
body: 'Revoke a delegation (permanent). Id from the Delegations table in `botanary mandates` - not the\n' +
|
|
222
|
+
'Mandates table, which `botanary mandates cancel` targets instead.',
|
|
223
|
+
examples: ['botanary mandates revoke del_1 --yes'],
|
|
224
|
+
notes: 'Permanent - use `botanary mandates freeze` instead if you may want it back.',
|
|
225
|
+
seeAlso: 'botanary mandates freeze, botanary mandates cancel',
|
|
226
|
+
},
|
|
227
|
+
'mandates confirm': {
|
|
228
|
+
body: 'Confirm and enable proposed mandates or rules. Candidates are a JSON array, typically saved from\n' +
|
|
229
|
+
'`botanary mandates propose --json`.',
|
|
230
|
+
examples: ['botanary mandates confirm --candidates-file candidates.json --yes'],
|
|
231
|
+
seeAlso: 'botanary mandates propose, botanary mandates pause',
|
|
232
|
+
},
|
|
233
|
+
'mandates pause': {
|
|
234
|
+
body: 'Pause a mandate (reversible). Id from the Mandates (on-chain) table in `botanary mandates`.',
|
|
235
|
+
examples: ['botanary mandates pause man_1 --yes'],
|
|
236
|
+
seeAlso: 'botanary mandates resume, botanary mandates cancel',
|
|
237
|
+
},
|
|
238
|
+
'mandates resume': {
|
|
239
|
+
body: 'Resume a paused mandate. Id from the Mandates (on-chain) table in `botanary mandates`.',
|
|
240
|
+
examples: ['botanary mandates resume man_1 --yes'],
|
|
241
|
+
seeAlso: 'botanary mandates pause',
|
|
242
|
+
},
|
|
243
|
+
'mandates cancel': {
|
|
244
|
+
body: 'Revoke a mandate (permanent). Named cancel here, not revoke, to stay distinct from `botanary mandates\n' +
|
|
245
|
+
'revoke`, which targets a delegation, not a mandate. Id from the Mandates (on-chain) table.',
|
|
246
|
+
examples: ['botanary mandates cancel man_1 --yes'],
|
|
247
|
+
notes: 'Permanent - use `botanary mandates pause` instead if you may want it back.',
|
|
248
|
+
seeAlso: 'botanary mandates pause, botanary mandates revoke',
|
|
249
|
+
},
|
|
80
250
|
agents: {
|
|
81
251
|
body: 'Connected agents on this account, and any approval requests waiting on your verdict.',
|
|
82
252
|
examples: ['botanary agents', 'botanary agents --json'],
|
|
@@ -98,6 +268,366 @@ export const COMMAND_HELP = {
|
|
|
98
268
|
examples: ['botanary accounts use acct_2'],
|
|
99
269
|
seeAlso: 'botanary accounts list - wallet_use_account (MCP)',
|
|
100
270
|
},
|
|
271
|
+
recovery: {
|
|
272
|
+
body: 'Social recovery: the guardian set on this account, and the emergency signer-set replacement.',
|
|
273
|
+
examples: ['botanary recovery status'],
|
|
274
|
+
seeAlso: 'botanary panic, botanary signers',
|
|
275
|
+
},
|
|
276
|
+
'recovery status': {
|
|
277
|
+
body: 'The live guardian set on this account, read on-chain.',
|
|
278
|
+
examples: ['botanary recovery status', 'botanary recovery status --json'],
|
|
279
|
+
seeAlso: 'botanary recovery install',
|
|
280
|
+
},
|
|
281
|
+
'recovery install': {
|
|
282
|
+
body: 'Install social recovery with a guardian set and an M-of-N threshold. At least 2 guardians and a threshold of at least 2 - a single guardian could rotate the account unilaterally.',
|
|
283
|
+
examples: ['botanary recovery install --guardian 0xAb..1F --guardian 0xCd..2A --threshold 2 --yes'],
|
|
284
|
+
seeAlso: 'botanary recovery guardian add, botanary recovery recover',
|
|
285
|
+
},
|
|
286
|
+
'recovery guardian': {
|
|
287
|
+
body: 'Add or remove one recovery guardian.',
|
|
288
|
+
examples: ['botanary recovery guardian add --name "iPhone 15" --kind device --address 0xAb..1F --yes'],
|
|
289
|
+
seeAlso: 'botanary recovery status',
|
|
290
|
+
},
|
|
291
|
+
'recovery guardian add': {
|
|
292
|
+
body: 'Add a recovery guardian.',
|
|
293
|
+
examples: ['botanary recovery guardian add --name "iPhone 15" --kind device --address 0xAb..1F --yes'],
|
|
294
|
+
seeAlso: 'botanary recovery guardian remove',
|
|
295
|
+
},
|
|
296
|
+
'recovery guardian remove': {
|
|
297
|
+
body: 'Remove a recovery guardian.',
|
|
298
|
+
examples: ['botanary recovery guardian remove grd_1 --yes'],
|
|
299
|
+
seeAlso: 'botanary recovery guardian add',
|
|
300
|
+
},
|
|
301
|
+
'recovery recover': {
|
|
302
|
+
body: "Replace this account's whole signer set - the emergency lane, signed by a guardian rather than the\n" +
|
|
303
|
+
'current owner. The complete new signer set, not a single lost/new pair.',
|
|
304
|
+
examples: ['botanary recovery recover --new-signer 0xAb..1F --new-threshold 1 --yes'],
|
|
305
|
+
seeAlso: 'botanary recovery install',
|
|
306
|
+
},
|
|
307
|
+
signers: {
|
|
308
|
+
body: "This account's enrolled signers on the v1 authority core (BotanaryPolicyValidator) - who can approve, not how a person reaches the account.",
|
|
309
|
+
examples: ['botanary signers list'],
|
|
310
|
+
seeAlso: 'botanary devices, botanary recovery',
|
|
311
|
+
},
|
|
312
|
+
'signers list': {
|
|
313
|
+
body: 'Every enrolled signer, by index.',
|
|
314
|
+
examples: ['botanary signers list', 'botanary signers list --json'],
|
|
315
|
+
seeAlso: 'botanary signers add',
|
|
316
|
+
},
|
|
317
|
+
'signers add': {
|
|
318
|
+
body: 'Enrol a new ECDSA signer on this chain.',
|
|
319
|
+
examples: ['botanary signers add --address 0xAb..1F --yes'],
|
|
320
|
+
seeAlso: 'botanary signers remove, botanary signers list',
|
|
321
|
+
},
|
|
322
|
+
'signers remove': {
|
|
323
|
+
body: 'Remove a signer from this chain, by index.',
|
|
324
|
+
examples: ['botanary signers remove --index 1 --yes'],
|
|
325
|
+
seeAlso: 'botanary signers list',
|
|
326
|
+
},
|
|
327
|
+
'signers threshold': {
|
|
328
|
+
body: 'Set the account-wide signer approval threshold.',
|
|
329
|
+
examples: ['botanary signers threshold --threshold 2 --yes'],
|
|
330
|
+
seeAlso: 'botanary signers list',
|
|
331
|
+
},
|
|
332
|
+
'signers trust-anchor': {
|
|
333
|
+
body: "Mirror an issuer's currently-active signing key onto this account. Only google has a live JWKS source today.",
|
|
334
|
+
examples: ['botanary signers trust-anchor --yes'],
|
|
335
|
+
seeAlso: 'botanary signers add',
|
|
336
|
+
},
|
|
337
|
+
'signers guardian': {
|
|
338
|
+
body: "Set BotanaryPolicyValidator's own guardian threshold over enrolled signers. Not `recovery guardian`\n" +
|
|
339
|
+
'above - a different contract behind the same English word.',
|
|
340
|
+
examples: ['botanary signers guardian set --signer-index 0 --signer-index 1 --threshold 2 --yes'],
|
|
341
|
+
seeAlso: 'botanary recovery guardian',
|
|
342
|
+
},
|
|
343
|
+
'signers guardian set': {
|
|
344
|
+
body: 'Set the policy-validator guardian threshold over a subset of enrolled signer indexes. --threshold 0 opts out.',
|
|
345
|
+
examples: ['botanary signers guardian set --signer-index 0 --signer-index 1 --threshold 2 --yes'],
|
|
346
|
+
seeAlso: 'botanary signers list',
|
|
347
|
+
},
|
|
348
|
+
'signers policy': {
|
|
349
|
+
body: 'Write or remove a conditional signing policy at a slot (BotanaryPolicyValidator).',
|
|
350
|
+
examples: ['botanary signers policy set --slot 0 --approvals 1 --delay-seconds 0 --signer-index 0 --yes'],
|
|
351
|
+
seeAlso: 'botanary signers guardian',
|
|
352
|
+
},
|
|
353
|
+
'signers policy set': {
|
|
354
|
+
body: 'Write (or overwrite) the conditional signing policy at a slot.',
|
|
355
|
+
examples: ['botanary signers policy set --slot 0 --approvals 1 --delay-seconds 0 --signer-index 0 --yes'],
|
|
356
|
+
seeAlso: 'botanary signers policy remove',
|
|
357
|
+
},
|
|
358
|
+
'signers policy remove': {
|
|
359
|
+
body: 'Remove the conditional signing policy at a slot.',
|
|
360
|
+
examples: ['botanary signers policy remove --slot 0 --yes'],
|
|
361
|
+
seeAlso: 'botanary signers policy set',
|
|
362
|
+
},
|
|
363
|
+
'signers condition-set': {
|
|
364
|
+
body: 'Add or remove a condition-set member (BotanaryPolicyValidator).',
|
|
365
|
+
examples: ['botanary signers condition-set --set-id 0x..32 --member 0x..32 --yes'],
|
|
366
|
+
seeAlso: 'botanary signers policy set',
|
|
367
|
+
},
|
|
368
|
+
'signers migrate': {
|
|
369
|
+
body: "Upgrade this account's authority core onto BotanaryPolicyValidator - step 1 of 2. Not the same flow\n" +
|
|
370
|
+
'as `account migrate` (address migration, a different contract behind the same English word).',
|
|
371
|
+
examples: ['botanary signers migrate --yes'],
|
|
372
|
+
seeAlso: 'botanary account migrate',
|
|
373
|
+
},
|
|
374
|
+
devices: {
|
|
375
|
+
body: "Co-signer devices on this account's OwnableValidator root, and their M-of-N threshold.",
|
|
376
|
+
examples: ['botanary devices list'],
|
|
377
|
+
seeAlso: 'botanary signers, botanary panic',
|
|
378
|
+
},
|
|
379
|
+
'devices list': {
|
|
380
|
+
body: 'The live device set and its M-of-N threshold.',
|
|
381
|
+
examples: ['botanary devices list', 'botanary devices list --json'],
|
|
382
|
+
seeAlso: 'botanary devices add',
|
|
383
|
+
},
|
|
384
|
+
'devices add': {
|
|
385
|
+
body: 'Add a device as a co-signer.',
|
|
386
|
+
examples: ['botanary devices add --device 0xAb..1F --label "Work laptop" --yes'],
|
|
387
|
+
seeAlso: 'botanary devices remove, botanary devices list',
|
|
388
|
+
},
|
|
389
|
+
'devices remove': {
|
|
390
|
+
body: 'Remove a device from the co-signer set.',
|
|
391
|
+
examples: ['botanary devices remove --device 0xAb..1F --yes'],
|
|
392
|
+
seeAlso: 'botanary devices list',
|
|
393
|
+
},
|
|
394
|
+
'devices threshold': {
|
|
395
|
+
body: 'Set the M-of-N device signing threshold.',
|
|
396
|
+
examples: ['botanary devices threshold --threshold 2 --yes'],
|
|
397
|
+
seeAlso: 'botanary devices list',
|
|
398
|
+
},
|
|
399
|
+
panic: {
|
|
400
|
+
body: 'The panic freeze lane: once installed, any one listed device can freeze the account, gas-abstractedly.',
|
|
401
|
+
examples: ['botanary panic install --yes', 'botanary panic freeze --yes'],
|
|
402
|
+
seeAlso: 'botanary account freeze, botanary devices',
|
|
403
|
+
},
|
|
404
|
+
'panic install': {
|
|
405
|
+
body: 'Install the panic freeze lane - a 1-of-N session over the listed device keys, omit to use the account\'s own signer set.',
|
|
406
|
+
examples: ['botanary panic install --yes'],
|
|
407
|
+
seeAlso: 'botanary panic freeze',
|
|
408
|
+
},
|
|
409
|
+
'panic freeze': {
|
|
410
|
+
body: 'Freeze the account via the panic lane. Any one listed device can sign - this is the kill-switch.',
|
|
411
|
+
examples: ['botanary panic freeze --yes'],
|
|
412
|
+
notes: 'Needs `botanary panic install` first.',
|
|
413
|
+
seeAlso: 'botanary account unfreeze',
|
|
414
|
+
},
|
|
415
|
+
rules: {
|
|
416
|
+
body: "Owner-lane caps and allowlist on this account's AgentGuard hook - the universal floor every mandate can only narrow from.",
|
|
417
|
+
examples: ['botanary rules update --caps-file caps.json --yes'],
|
|
418
|
+
notes: 'Accounts created since 2026-07-30 deploy permanently hookless, so the backend declines to build\n' +
|
|
419
|
+
'an op that cannot bind on those accounts. This still parks and signs; it does not enforce on-chain there.',
|
|
420
|
+
seeAlso: 'botanary account freeze, botanary mandates',
|
|
421
|
+
},
|
|
422
|
+
'rules update': {
|
|
423
|
+
body: 'Update account caps and/or the contract/recipient allowlist. Each half is left unchanged if omitted -\n' +
|
|
424
|
+
'both are complex, arbitrarily-sized shapes, so they come from JSON files rather than flags.',
|
|
425
|
+
examples: ['botanary rules update --caps-file caps.json --allowlist-file allowlist.json --yes'],
|
|
426
|
+
seeAlso: 'botanary rules',
|
|
427
|
+
},
|
|
428
|
+
'agents approve': {
|
|
429
|
+
body: "Approve an agent's request. The owner signs; the agent can never approve its own request.",
|
|
430
|
+
examples: ['botanary agents approve req_1 --yes'],
|
|
431
|
+
seeAlso: 'botanary agents, botanary agents deny',
|
|
432
|
+
},
|
|
433
|
+
'agents deny': {
|
|
434
|
+
body: 'There is no deny action on this surface - reads the request back and explains why. An agent request is either approved or left to expire on its own.',
|
|
435
|
+
examples: ['botanary agents deny req_1'],
|
|
436
|
+
seeAlso: 'botanary agents approve',
|
|
437
|
+
},
|
|
438
|
+
'agents claim': {
|
|
439
|
+
body: 'Claim a pending pairing and bind that agent to this account. No signature - a plain session write.',
|
|
440
|
+
examples: ['botanary agents claim ABC-123-XYZ --name "Claude Code"'],
|
|
441
|
+
seeAlso: 'botanary agent pair, botanary agents revoke',
|
|
442
|
+
},
|
|
443
|
+
'agents revoke': {
|
|
444
|
+
body: 'Disconnect an agent from this account. No signature - a plain session write.',
|
|
445
|
+
examples: ['botanary agents revoke agt_1'],
|
|
446
|
+
seeAlso: 'botanary agents claim, botanary agents',
|
|
447
|
+
},
|
|
448
|
+
notifications: {
|
|
449
|
+
body: 'Alerts - blocked actions, depeg warnings, and the like. No signature - a plain session surface.',
|
|
450
|
+
examples: ['botanary notifications', 'botanary notifications --unread-only'],
|
|
451
|
+
seeAlso: 'botanary watch, botanary notifications read-all',
|
|
452
|
+
},
|
|
453
|
+
'notifications read': {
|
|
454
|
+
body: 'Mark one notification as read.',
|
|
455
|
+
examples: ['botanary notifications read n1'],
|
|
456
|
+
seeAlso: 'botanary notifications, botanary notifications read-all',
|
|
457
|
+
},
|
|
458
|
+
'notifications read-all': {
|
|
459
|
+
body: 'Mark every notification as read.',
|
|
460
|
+
examples: ['botanary notifications read-all'],
|
|
461
|
+
seeAlso: 'botanary notifications',
|
|
462
|
+
},
|
|
463
|
+
paysh: {
|
|
464
|
+
body: 'pay.sh: the x402 spending balance and its guardrails.',
|
|
465
|
+
examples: ['botanary paysh accounts'],
|
|
466
|
+
seeAlso: 'botanary apis, botanary agent pay',
|
|
467
|
+
},
|
|
468
|
+
'paysh accounts': {
|
|
469
|
+
body: "The caller's recorded pay.sh accounts. Read-only - account creation happens entirely client-side via\n" +
|
|
470
|
+
'Privy in the web app, and `POST /pay-sh/accounts` refuses a CLI session outright.',
|
|
471
|
+
examples: ['botanary paysh accounts', 'botanary paysh accounts --json'],
|
|
472
|
+
seeAlso: 'botanary paysh topup',
|
|
473
|
+
},
|
|
474
|
+
'paysh topup': {
|
|
475
|
+
body: 'Top up the pay.sh balance.',
|
|
476
|
+
examples: ['botanary paysh topup --amount-usdc 25 --yes'],
|
|
477
|
+
seeAlso: 'botanary paysh withdraw',
|
|
478
|
+
},
|
|
479
|
+
'paysh withdraw': {
|
|
480
|
+
body: "Withdraw from a pay.sh account's custodial Solana USDC balance.",
|
|
481
|
+
examples: ['botanary paysh withdraw --paysh-account-id psh_1 --amount-usdc 25 --destination <solana address> --yes'],
|
|
482
|
+
seeAlso: 'botanary paysh topup, botanary paysh accounts',
|
|
483
|
+
},
|
|
484
|
+
'paysh allowlist': {
|
|
485
|
+
body: 'The trusted pay.sh domains for one account. Read-only - adding or removing a domain 403s for a CLI\n' +
|
|
486
|
+
'session (CliSessionForbidden), because pay.sh moves value with no owner signature in the loop. Do it\n' +
|
|
487
|
+
'in the web app.',
|
|
488
|
+
examples: ['botanary paysh allowlist psh_1'],
|
|
489
|
+
seeAlso: 'botanary paysh settings',
|
|
490
|
+
},
|
|
491
|
+
'paysh settings': {
|
|
492
|
+
body: "One account's persisted default copilot pay.sh mode. Read-only - changing it 403s for a CLI session,\n" +
|
|
493
|
+
'same reason as `paysh allowlist`.',
|
|
494
|
+
examples: ['botanary paysh settings psh_1'],
|
|
495
|
+
seeAlso: 'botanary paysh allowlist',
|
|
496
|
+
},
|
|
497
|
+
marketplace: {
|
|
498
|
+
body: 'Hire an ACP agent under a bounded mandate, and run its jobs.',
|
|
499
|
+
examples: ['botanary marketplace hire --agent-wallet 0xAb..1F --chain-id 8453 --per-job-budget 10 --delegatee-address 0xCd..2A --yes'],
|
|
500
|
+
seeAlso: 'botanary mandates, botanary markets',
|
|
501
|
+
},
|
|
502
|
+
'marketplace hire': {
|
|
503
|
+
body: 'Hire an ACP agent under a bounded mandate.',
|
|
504
|
+
examples: ['botanary marketplace hire --agent-wallet 0xAb..1F --chain-id 8453 --per-job-budget 10 --delegatee-address 0xCd..2A --yes'],
|
|
505
|
+
seeAlso: 'botanary marketplace deposit, botanary marketplace jobs create',
|
|
506
|
+
},
|
|
507
|
+
'marketplace deposit': {
|
|
508
|
+
body: 'Deposit into a Virtuals-custodied wallet.',
|
|
509
|
+
examples: ['botanary marketplace deposit --chain-id 8453 --amount 50 --token-symbol USDC --token-address 0xAb..1F --yes'],
|
|
510
|
+
seeAlso: 'botanary marketplace hire',
|
|
511
|
+
},
|
|
512
|
+
'marketplace jobs': {
|
|
513
|
+
body: 'ACP jobs run under a marketplace mandate.',
|
|
514
|
+
examples: ['botanary marketplace jobs create --mandate-id 0x..32 --agent-wallet 0xAb..1F --description "Write a report" --chain-id 8453 --yes'],
|
|
515
|
+
seeAlso: 'botanary marketplace hire',
|
|
516
|
+
},
|
|
517
|
+
'marketplace jobs create': {
|
|
518
|
+
body: 'Create an ACP job under a mandate - op 1 of a hire.',
|
|
519
|
+
examples: ['botanary marketplace jobs create --mandate-id 0x..32 --agent-wallet 0xAb..1F --description "Write a report" --chain-id 8453 --yes'],
|
|
520
|
+
seeAlso: 'botanary marketplace jobs fund',
|
|
521
|
+
},
|
|
522
|
+
'marketplace jobs fund': {
|
|
523
|
+
body: 'Fund an ACP job under a mandate - op 2 of a hire, approve and fund batched together.',
|
|
524
|
+
examples: ['botanary marketplace jobs fund --mandate-id 0x..32 --job-id job_1 --per-job-budget 10 --chain-id 8453 --yes'],
|
|
525
|
+
seeAlso: 'botanary marketplace jobs create',
|
|
526
|
+
},
|
|
527
|
+
apis: {
|
|
528
|
+
body: 'The x402 paid-API catalog, and the on-chain spending budget backing it.',
|
|
529
|
+
examples: ['botanary apis providers', 'botanary apis budget --chain-id 8453 --agent-id agt_1'],
|
|
530
|
+
seeAlso: 'botanary agent apis, botanary agent pay',
|
|
531
|
+
},
|
|
532
|
+
'apis budget': {
|
|
533
|
+
body: 'Read the current API budget and its state: remaining count, per-call max, expiry, epoch, token, exposure, spent.',
|
|
534
|
+
examples: ['botanary apis budget 8453 agt_1'],
|
|
535
|
+
seeAlso: 'botanary apis budget commit',
|
|
536
|
+
},
|
|
537
|
+
'apis budget commit': {
|
|
538
|
+
body: 'Commit a three-transaction atomic API spending budget.',
|
|
539
|
+
examples: ['botanary apis budget commit --chain-id 8453 --agent-id agt_1 --max-value 1000000 --count 10 --expires-at 2026-12-31T00:00:00Z --yes'],
|
|
540
|
+
seeAlso: 'botanary apis budget',
|
|
541
|
+
},
|
|
542
|
+
'apis providers': {
|
|
543
|
+
body: 'Ranked, searchable catalog of x402 API providers.',
|
|
544
|
+
examples: ['botanary apis providers', 'botanary apis providers --chain-id 8453 --q weather'],
|
|
545
|
+
seeAlso: 'botanary agent apis',
|
|
546
|
+
},
|
|
547
|
+
onramp: {
|
|
548
|
+
body: 'Start a fiat-to-crypto Buy checkout session. No UserOp, no signature - funds arrive directly from the\n' +
|
|
549
|
+
'provider, the same way an ordinary incoming transfer does.',
|
|
550
|
+
examples: ['botanary onramp --chain-key base', 'botanary onramp --chain-key base --no-open'],
|
|
551
|
+
seeAlso: 'botanary onramp methods, botanary balance',
|
|
552
|
+
},
|
|
553
|
+
'onramp methods': {
|
|
554
|
+
body: 'Chains currently buyable through the wired onramp provider.',
|
|
555
|
+
examples: ['botanary onramp methods'],
|
|
556
|
+
seeAlso: 'botanary onramp',
|
|
557
|
+
},
|
|
558
|
+
agentwallet: {
|
|
559
|
+
body: 'Deposit into a Virtuals agent wallet - a per-agent custodial wallet, distinct from `marketplace deposit`.',
|
|
560
|
+
examples: ['botanary agentwallet deposit --agent-id agt_1 --network base --token-symbol USDC --token-address 0x..14 --amount 25 --yes'],
|
|
561
|
+
seeAlso: 'botanary marketplace deposit',
|
|
562
|
+
},
|
|
563
|
+
'agentwallet deposit': {
|
|
564
|
+
body: 'Deposit into a Virtuals agent wallet. Base-only in v1 - a solana --network is accepted here but declined server-side.',
|
|
565
|
+
examples: ['botanary agentwallet deposit --agent-id agt_1 --network base --token-symbol USDC --token-address 0x..14 --amount 25 --yes'],
|
|
566
|
+
seeAlso: 'botanary agentwallet',
|
|
567
|
+
},
|
|
568
|
+
approvals: {
|
|
569
|
+
body: 'Announce a collected off-chain approval, by its digest.',
|
|
570
|
+
examples: ['botanary approvals announce 0x..32 --yes'],
|
|
571
|
+
seeAlso: 'botanary sign',
|
|
572
|
+
},
|
|
573
|
+
'approvals announce': {
|
|
574
|
+
body: 'Announce a collected approval, by its digest. Takes no body beyond the digest itself.',
|
|
575
|
+
examples: ['botanary approvals announce 0x..32 --yes'],
|
|
576
|
+
seeAlso: 'botanary approvals',
|
|
577
|
+
},
|
|
578
|
+
watch: {
|
|
579
|
+
body: 'Tail live events in the foreground - a terminal has no notification bell, so this is how you learn\n' +
|
|
580
|
+
'an agent filed a request, your balance moved, or a parked sign request settled without polling by\n' +
|
|
581
|
+
'hand. Balance and sign-request status are real pushes (SSE), reconnected with backoff on drop;\n' +
|
|
582
|
+
'agent requests are polled, because the backend has no owner-facing push for those yet. Ctrl-C stops\n' +
|
|
583
|
+
'it cleanly, exit 0.',
|
|
584
|
+
examples: ['botanary watch', 'botanary watch --json | jq .', 'botanary watch --interval-ms 2000'],
|
|
585
|
+
seeAlso: 'botanary sign list, botanary agents, botanary balance',
|
|
586
|
+
},
|
|
587
|
+
account: {
|
|
588
|
+
body: "Owner-signed lifecycle actions on the account itself: deploy a new one, install missing modules,\n" +
|
|
589
|
+
'top up on testnet, freeze/unfreeze the kill-switch, and migrate to today\'s address. Every\n' +
|
|
590
|
+
'subcommand here parks a sign request and waits on your browser, exactly like send and swap.',
|
|
591
|
+
examples: ['botanary account deploy', 'botanary account freeze --yes'],
|
|
592
|
+
seeAlso: 'botanary accounts list, botanary sign list',
|
|
593
|
+
},
|
|
594
|
+
'account deploy': {
|
|
595
|
+
body: 'Mint a new account with its own address - always the next CREATE2 index, never an existing one.',
|
|
596
|
+
examples: ['botanary account deploy', 'botanary account deploy --yes --json'],
|
|
597
|
+
seeAlso: 'botanary accounts list',
|
|
598
|
+
},
|
|
599
|
+
'account setup': {
|
|
600
|
+
body: 'Install every account module this chain is missing, so the account can actually be used there.',
|
|
601
|
+
examples: ['botanary account setup --chain-id 84532 --yes'],
|
|
602
|
+
seeAlso: 'botanary account migrate, botanary diagnose',
|
|
603
|
+
},
|
|
604
|
+
'account fund': {
|
|
605
|
+
body: 'Mint testnet USDC into this account - a faucet top-up, never a real transfer.',
|
|
606
|
+
examples: ['botanary account fund --yes'],
|
|
607
|
+
seeAlso: 'botanary balance',
|
|
608
|
+
},
|
|
609
|
+
'account freeze': {
|
|
610
|
+
body: 'Freeze this account, the kill-switch. No further transfers are authorized until you unfreeze.',
|
|
611
|
+
examples: ['botanary account freeze --yes', 'botanary account freeze --lane panic --yes'],
|
|
612
|
+
notes: 'This is testnet-only enforcement today - see the workspace CLAUDE.md\'s hookless-accounts caveat.',
|
|
613
|
+
seeAlso: 'botanary account unfreeze, botanary panic freeze',
|
|
614
|
+
},
|
|
615
|
+
'account unfreeze': {
|
|
616
|
+
body: 'Unfreeze this account, restoring its ability to authorize transfers.',
|
|
617
|
+
examples: ['botanary account unfreeze --yes'],
|
|
618
|
+
seeAlso: 'botanary account freeze',
|
|
619
|
+
},
|
|
620
|
+
'account rename': {
|
|
621
|
+
body: 'Rename (and/or hide/unhide) an account. Off-chain metadata only - never builds, signs or relays a\n' +
|
|
622
|
+
'UserOp, unlike everything else in the account group. No signature - a plain session write.',
|
|
623
|
+
examples: ['botanary account rename --label "Trading"', 'botanary account rename acct_2 --hide'],
|
|
624
|
+
seeAlso: 'botanary accounts list',
|
|
625
|
+
},
|
|
626
|
+
'account migrate': {
|
|
627
|
+
body: "Migrate this account to today's address. Produces zero, one or two ops depending on its current migration phase and root validator.",
|
|
628
|
+
examples: ['botanary account migrate --chain-id 84532 --yes'],
|
|
629
|
+
seeAlso: 'botanary account setup, botanary sign show',
|
|
630
|
+
},
|
|
101
631
|
chains: {
|
|
102
632
|
body: 'Every chain this backend serves, and what each one can actually do:\n' +
|
|
103
633
|
' watch read-only. No bundler, no authority\n' +
|