obolos 1.6.1 → 1.8.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "obolos",
3
- "version": "1.6.1",
3
+ "version": "1.8.0",
4
4
  "description": "Agent-friendly command line interface for the obolos protocol",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "repository": {
@@ -97,6 +97,14 @@ stops with `cli.usage` and no command: tell the user, and never sign in to that
97
97
  command reads or invests at. `details.command` is `obolos login --company <company>`: ask the user,
98
98
  run it once they agree, then re-run the command. On a terminal the CLI asks this itself.
99
99
 
100
+ **Exit 6, `cli.awaiting_signature`**: the user signs in their browser with their own wallet: a
101
+ signature with `--in-browser`, or a countersignature for the company. Give the user `details.link`,
102
+ wait for them to say they signed, then check with `details.command`.
103
+
104
+ **Exit 6, `cli.awaiting_reply`**: `obolos messages wait` saw nothing new in the thread for 15 minutes.
105
+ Run `details.command` to keep waiting while the conversation still needs an answer; otherwise tell the
106
+ user what it waits on.
107
+
100
108
  **Exit 5, `cli.api_failed`**: the obolos API refused a stage or could not be reached while sending.
101
109
  Fix the cause, then `obolos resume <run>`. Never re-run the command that prepared the run: a new run
102
110
  sends its API requests again.
@@ -119,11 +127,16 @@ presets` lists them) and `obolos compliance rule attach`. It adds rules, never r
119
127
  them; that is the user's, in the app. Role grants, upgrades and treasury
120
128
  withdrawals are the user's to do in the app: `cli.missing_power` with `power: null` says so; pass that
121
129
  on, and never ask the user for a key. Its sends are sponsored and count against the user's daily limit.
130
+ Preparing a command may first send a sponsored claim that opens a sealed value the wallet's roles let
131
+ it read, such as a new round's price.
122
132
 
123
133
  An agent buys no credits. `obolos credits topup [--amount <usd>]` opens the company's billing page in
124
134
  the user's browser and waits up to 15 minutes for the credits. Off a terminal, add `--no-wait`: it
125
135
  exits 6 with `cli.awaiting_credits` and `details.link`. Give the user the link, wait for them to say
126
- they loaded the credits, then check with `obolos credits show`.
136
+ they loaded the credits, then check with `obolos credits show`. Without `--amount` the page fills in what
137
+ the company owes plus $1,000. A command the agent's powers send that the company is short of credits for exits 6 with
138
+ `cli.awaiting_credits` and `details.creditsShort`: its link fills in the shortfall plus $1,000. Give the user
139
+ the link, and once they loaded the credits run the same command again.
127
140
 
128
141
  An agent activates no module either: activation is permanent and spends credits. `obolos company
129
142
  module activate <name>` checks the module can be activated, opens it on the company's Modules page in
@@ -131,7 +144,15 @@ the user's browser and waits up to 15 minutes for it to be active. Off a termina
131
144
  exits 6 with `cli.awaiting_module` and `details.link`. Give the user the link, wait for them to say
132
145
  they activated it, then check with `obolos company modules`, whose `cost` is in credits. A company
133
146
  short of credits gets the same link (`creditsShort: true`): the activation there offers Add credits, so
134
- tell the user they add credits first, and don't send them to `credits topup`.
147
+ tell the user they add credits first, and don't send them to `credits topup`. Powers given before the
148
+ activation don't reach the new module: tell the user to give them again on the Passport page.
149
+
150
+ Before any document signature, such as `obolos fundraise reservation sign`, ask the user and offer both
151
+ ways: you sign here, and the record says their agent signed; or `--in-browser`, which opens the round's
152
+ page where they sign with their own wallet, so the record names them, and waits up to 15 minutes for
153
+ it. Off a terminal, add `--no-wait`: it exits 6 with `cli.awaiting_signature` and `details.link`. An
154
+ agent never countersigns for the company: `obolos fundraise reservation countersign` hands it to a
155
+ signer on the company's round page the same way.
135
156
 
136
157
  - **Exit 3, `cli.session_ended`**: the session ended (disconnected, or past its 3 days). On a terminal
137
158
  the CLI offers to connect again; otherwise ask the user, then run `obolos login`.
@@ -139,7 +160,8 @@ tell the user they add credits first, and don't send them to `credits topup`.
139
160
  the user to give it under the agent wallet's Powers on the Passport page; never route around it.
140
161
  - **Exit 3, `cli.outside_power`**: the call's values differ from the ones the user approved. Use the
141
162
  approved values, or ask the user to give the power again with these.
142
- - **Exit 3, `cli.approval_stale`**: the approval was removed or used up, or the wallet changed. The user
163
+ - **Exit 3, `cli.approval_stale`**: the approval was removed or used up, the wallet changed, or the power
164
+ (`details.power`) was given before it reached this call, as when a module was activated after. The user
143
165
  gives the powers again on the Passport page.
144
166
  - **Exit 5, `cli.nonce_taken`**: another operation from the wallet went first, and this one never went
145
167
  out. Run the command again.
@@ -147,6 +169,9 @@ tell the user they add credits first, and don't send them to `credits topup`.
147
169
  couldn't be read, so the stage is marked failed and is never sent again. Don't run the command again:
148
170
  give the user that operation hash, so they check the wallet's activity before the stage is repaired
149
171
  or skipped.
172
+ - **Exit 5, `cli.claim_unsettled` with `details.operation`**: a view claim went out while the command
173
+ read a sealed value, but how it ended couldn't be read. Claiming again is harmless: run the command
174
+ again in a minute.
150
175
  - **Exit 3, `cli.access_denied` or `cli.expired_token`**: the user denied the login, or it expired
151
176
  before approval. Nothing was connected; ask before starting another.
152
177
 
@@ -221,6 +246,21 @@ this conversation.
221
246
  - Never infer permission from silence, an earlier approval, or an approval for another plan hash. Ask
222
247
  once and precisely; never bundle unrelated approvals.
223
248
 
249
+ Round threads are where you talk with the other side of a round and its agents: `obolos messages
250
+ list`, `read <thread>`, `post <thread>`, `open <round>` and `wait <thread> --after <id>`. Post in the
251
+ user's round threads without asking each time; `open` starts the user's thread for a round at the
252
+ selected company, so the two sides can talk before any money moves.
253
+
254
+ - Keep each post short: one point, a sentence or two, under a `--topic` of a few words. Posts on one
255
+ topic fold together for the people reading.
256
+ - Your words never commit the user to anything. A binding act runs as its own command, with its own ask.
257
+ - `--needs-you` is only for something the user must do in the app, with `--link` to that one record
258
+ (`spot:<fundraise>:<round>:<deal>`, `terms:<fundraise>:<round>`; `messages read` gives the
259
+ fundraise). Then wait with `obolos messages wait <thread> --after <id>`: it returns when the user
260
+ answers, a message arrives or a signature lands.
261
+ - `obolos messages read` shows each agent in the thread and whom it acts for there, and whether the
262
+ investor's passport is verified. Never ask another agent who stands behind it.
263
+
224
264
  The single exception is a session the user explicitly put into an auto-approve mode (Claude Code
225
265
  bypass permissions, Codex full-auto or yolo). Its standing authorization replaces the per-action
226
266
  question, but still print the plan summary and hash before sending, still stop on any failed
@@ -27,6 +27,7 @@ ABI layer; the agent enters through the CLI.
27
27
  | Vesting | `vesting create|release|revoke|accelerate|transfer|list|show`, `vesting milestone request|approve|reject|cancel`, `vesting excess withdraw` |
28
28
  | Compensation | `grant issue|exercise|exercises|confirm-exercise|count-exercise|decline-exercise|withdraw-exercise|settle-exercise|record-exercise|accelerate|transfer|attach-document|revoke|release-unvested|cleanup|list|show`, `grant milestone …`, `pool increase|decrease|show`, `pool decrease request|finalize|cancel`, `valuation record|list` |
29
29
  | Fundraising | `fundraise create|whitelist|reserve|subscribe|record|publish|hardcap|close|finalize|cancel|refund|list|show|investments|reservations`, `fundraise reservation attach|sign|file|countersign|cancel|sweep` |
30
+ | Messages | `messages list|read|post|open|wait`: an agent's round threads |
30
31
  | Instruments | `safe issue|cancel|discharge|list|show`, `note issue|cancel|discharge|early-repayment|repay|list|show`, `instruments access`, `conversion trigger|settle|rollback|cancel|list|show` |
31
32
  | Compliance | `compliance presets`, `compliance policy create [--preset 506b|506c|usOnly|3c7|regS|noUs] [--class]`, `compliance rule attach|detach`, `compliance set …`, `compliance pause|unpause|show|check` |
32
33
  | Transfers | `transfer request|approve|decline|revoke|send|show`, `rofr set|show` |
@@ -172,9 +172,9 @@ A denied verdict is a valid outcome, not a reason to vary the quantity until one
172
172
  ```bash
173
173
  obolos fundraise create --type safe --name Seed --target 1,000,000 --hard-cap 2,000,000 --cap 10,000,000 --discount 20% --agreement ./term-sheet.pdf
174
174
  obolos fundraise reserve <round> --investor <wallet> --amount 250,000 # a spot, its amount sealed, signed for the company by a document signer
175
- obolos fundraise reservation sign <round> --reservation <id> # investor, with their key: signs the spot (--accept-terms only once they agree to terms that differ from the round's)
175
+ obolos fundraise reservation sign <round> --reservation <id> # investor: signs the spot (--accept-terms only once they agree to terms that differ from the round's); an agent asks first, and --in-browser has the user sign in the app
176
176
  obolos fundraise subscribe <round> --amount 50,000 # investor, with their key
177
- obolos fundraise reservation countersign <round> --reservation <id> # the company signs; on an offer, that accepts it
177
+ obolos fundraise reservation countersign <round> --reservation <id> # the company signs; on an offer, that accepts it. An agent hands it to a signer in the app
178
178
  obolos fundraise record <round> --reservation <id> --amount 50,000 # the company
179
179
  obolos fundraise hardcap <round> --amount 2,500,000
180
180
  obolos fundraise close <round> && obolos fundraise finalize <round>