obolos 0.0.0-stage → 1.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/CHANGELOG.md +402 -0
- package/LICENSE +134 -0
- package/README.md +171 -2
- package/dist/cli.js +100 -0
- package/package.json +54 -4
- package/skills/obolos/SKILL.md +234 -0
- package/skills/obolos/agents/openai.yaml +4 -0
- package/skills/obolos/references/operations.md +72 -0
- package/skills/obolos/references/safety-and-execution.md +100 -0
- package/skills/obolos/references/sdk-surface.md +109 -0
- package/skills/obolos/references/tooling.md +83 -0
- package/skills/obolos/references/workflows.md +277 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,402 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to the `obolos` CLI are documented here.
|
|
4
|
+
|
|
5
|
+
## [Unreleased]
|
|
6
|
+
|
|
7
|
+
## [1.4.0] - 2026-11-01
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- `obolos login --try` connects to try.obolos.io.
|
|
12
|
+
- `obolos upgrade` updates the CLI and its skill to the latest version.
|
|
13
|
+
|
|
14
|
+
### Changed
|
|
15
|
+
|
|
16
|
+
- Commands work on the network you logged in to, and read it through its public RPC, so neither `--chain` nor an
|
|
17
|
+
RPC URL is needed. Both still override.
|
|
18
|
+
- `obolos whoami` and `obolos doctor` name the site: app.obolos.io or try.obolos.io.
|
|
19
|
+
|
|
20
|
+
## [1.3.0] - 2026-11-01
|
|
21
|
+
|
|
22
|
+
### Changed
|
|
23
|
+
|
|
24
|
+
- Uses @obolos/sdk 1.2.1
|
|
25
|
+
- The obolos skill installs the CLI itself when it isn't there, instead of asking you to.
|
|
26
|
+
|
|
27
|
+
## [1.2.0] - 2026-11-01
|
|
28
|
+
|
|
29
|
+
### Added
|
|
30
|
+
|
|
31
|
+
- `obolos login` connects the terminal as one of your agent wallets: it prints a link and a code to approve in the app.
|
|
32
|
+
`--company <company>` connects it at one company, `--key` signs in with your own key.
|
|
33
|
+
- `obolos agents` lists the agent wallets this terminal is connected as, `obolos agents use <name>` picks one, and
|
|
34
|
+
`obolos agents check <address>` asks whether a verified person stands behind an agent.
|
|
35
|
+
- `obolos company incorporate --form` asks obolos to form the legal entity; `--formation <id>` sets the company up once
|
|
36
|
+
it is formed. `obolos company formation` lists your requests, and `obolos company details` shows or sets the legal
|
|
37
|
+
details.
|
|
38
|
+
- `obolos email verify <address>` and `obolos email confirm <code>` verify the account's email.
|
|
39
|
+
|
|
40
|
+
### Changed
|
|
41
|
+
|
|
42
|
+
- Published on npm as `obolos`; earlier releases were `@equitylayer/cli` on GitHub Packages.
|
|
43
|
+
- Uses @obolos/sdk 1.2.0, bundled into the package and minified. Installing the CLI no longer installs the SDK as a
|
|
44
|
+
separate package.
|
|
45
|
+
- Works on Arbitrum One when no `--chain`, `OBOLOS_CHAIN_ID` or RPC URL names a network, so `obolos login` needs no
|
|
46
|
+
flags.
|
|
47
|
+
- Requires Node 24.
|
|
48
|
+
|
|
49
|
+
## [1.1.1] - 2026-10-22
|
|
50
|
+
|
|
51
|
+
### Changed
|
|
52
|
+
|
|
53
|
+
- Uses @obolos/sdk 1.1.1
|
|
54
|
+
|
|
55
|
+
### Added
|
|
56
|
+
|
|
57
|
+
- `fundraise create --price-salt <hex>` seals a priced round's price under a given salt, for an agreement rendered
|
|
58
|
+
beforehand with its price commitment.
|
|
59
|
+
|
|
60
|
+
### Fixed
|
|
61
|
+
|
|
62
|
+
- Back-to-back sends from one wallet each read a fresh nonce: the RPC provider keeps no request cache.
|
|
63
|
+
|
|
64
|
+
## [1.1.0] - 2026-10-21
|
|
65
|
+
|
|
66
|
+
### Changed
|
|
67
|
+
|
|
68
|
+
- Uses @obolos/sdk 1.1.0
|
|
69
|
+
|
|
70
|
+
## [1.0.0] - 2026-10-20
|
|
71
|
+
|
|
72
|
+
### Changed
|
|
73
|
+
|
|
74
|
+
- Uses @obolos/sdk 1.0.0
|
|
75
|
+
- The CLI pins CoFHE SDK 1.0.1 for encrypted inputs and permit handling.
|
|
76
|
+
- `fundraise reservation countersign` asks each deal's funding check with the company's signature when the actor
|
|
77
|
+
manages the fundraise, and `fundraise record` then records a deal that holds a yes in one transaction. A check holds
|
|
78
|
+
the deal's room until its record or a cancel, so recording another deal in between no longer sends it back for a
|
|
79
|
+
fresh one. On a priced round the share count is sealed with the check and only goes public with the record.
|
|
80
|
+
### Added
|
|
81
|
+
|
|
82
|
+
- `obolos treasury deposit --amount <amount>`: pay into the selected company's vault from your wallet.
|
|
83
|
+
|
|
84
|
+
## [0.9.0] - 2026-10-17
|
|
85
|
+
|
|
86
|
+
### Added
|
|
87
|
+
|
|
88
|
+
- `fundraise publish <round>`: make a finalized SAFE or note round's total public. The company's session decrypts
|
|
89
|
+
the sealed total under its own permit and the announcement carries the network's signed result, which the contract
|
|
90
|
+
relays as the announcement lands. Until then `fundraise show` and `fundraise list` state the figure as confidential
|
|
91
|
+
to anyone but a session that may read it.
|
|
92
|
+
|
|
93
|
+
- `fundraise reserve --source <fund-lead|platform>`: who brought the investor's capital, kept with the spot on chain;
|
|
94
|
+
the fund lead's when omitted. `fundraise reservations` lists each spot's source.
|
|
95
|
+
- `fundraise create --carry <pct> --platform-share <pct>`: a vehicle's carry and the platform's share of it, fixed
|
|
96
|
+
with the round. `spv waterfall --round <id>` and `distribution waterfall --round <id>` take both, and every
|
|
97
|
+
investor's capital and source, from the chain.
|
|
98
|
+
- `fundraise subscribe --source <fund-lead|platform>`: who brought you to the round, kept with your subscription on
|
|
99
|
+
chain; the fund lead's when omitted.
|
|
100
|
+
|
|
101
|
+
### Changed
|
|
102
|
+
|
|
103
|
+
- **A priced round's price is sealed.** `fundraise create --type priced` seals the price; `fundraise show` and
|
|
104
|
+
`fundraise list` state it, every amount and an unpublished total as confidential to a session that cannot read
|
|
105
|
+
them. `fundraise subscribe` on a priced round unlocks the price first when you cannot read it yet, and refuses an
|
|
106
|
+
amount that buys no whole number of shares. `fundraise record` names the shares on a priced round. `fundraise
|
|
107
|
+
finalize` on a priced round asks whether the sealed total qualifies it before its last window. `fundraise publish`
|
|
108
|
+
takes a priced round too, and its total reveals the price. Adding an address to a priced round's whitelist shows
|
|
109
|
+
it the price. `conversion show`, `list`, `trigger` and `settle` print the price only to a session that reads it.
|
|
110
|
+
- **Nothing is paid on the contract.** `fundraise subscribe` makes an offer at the round's terms: it signs the
|
|
111
|
+
agreement and seals the amount, pays nothing, and one offer of yours stands open per round until the company
|
|
112
|
+
countersigns it or you withdraw it with `fundraise reservation cancel`. You pay by bank transfer or by sending the
|
|
113
|
+
payment token to the company's vault once the company has countersigned; the company then runs `fundraise record
|
|
114
|
+
<round> --reservation <id> --amount <usd>`, which on a SAFE or note round asks the network whether the sealed amount
|
|
115
|
+
fits and records with its answer, relayed by the record itself and only when it is yes and still current; a record
|
|
116
|
+
the round refuses publishes nothing. `fundraise reserve` seals a SAFE or
|
|
117
|
+
note spot's amount; `fundraise refund` reverses a cancelled round's payments on the ledger once the money went
|
|
118
|
+
back the way it came. Removed: `fundraise invest`, `fundraise exit`, `fundraise claim-refund`.
|
|
119
|
+
- The Agent Skill is now `obolos` (was `use-obolos`): invoke it as `/obolos` in Claude Code or `$obolos` in Codex,
|
|
120
|
+
and `/obolos:obolos` through the Claude Code plugin. `obolos skills install` writes `skills/obolos`; delete an
|
|
121
|
+
older `skills/use-obolos` copy so agents don't load both.
|
|
122
|
+
|
|
123
|
+
### Security
|
|
124
|
+
|
|
125
|
+
- `docs read` without `--save` writes only a plain file name in the current folder: a document's name no longer picks
|
|
126
|
+
a path or a dot file.
|
|
127
|
+
- `--expect-hash <hash>` on `send`, `resume` and every command with `--send` refuses a plan or stage whose hash
|
|
128
|
+
differs from the one approved (`cli.hash_mismatch`, exit 2). The skill tells agents to pass it with `--yes`. A
|
|
129
|
+
stage built only as the run advances shows no hash until the stage before it lands.
|
|
130
|
+
- `fundraise reservation sign --accept-terms`, `conversion settle --prover-address` and `note repay --prover-address`.
|
|
131
|
+
- `companies` and `whoami` show only direct grants as held; `whoami` lists covered roles under `implied`.
|
|
132
|
+
|
|
133
|
+
## [0.8.0] - 2026-10-12
|
|
134
|
+
|
|
135
|
+
### Added
|
|
136
|
+
|
|
137
|
+
- `company modules`: the modules a company can add after creation, with their state and price.
|
|
138
|
+
`company module activate <fundraise|grants|voting|safe|note>` activates one at its credit price.
|
|
139
|
+
- `company incorporate --modules fundraise,grants,voting --preload <usd>`: activate modules and buy credits right after
|
|
140
|
+
the company is created.
|
|
141
|
+
- `compliance rule attach --kind max-holders-total [--max-holders <n>] [--unrecorded <n>]`: the company holder cap.
|
|
142
|
+
A later class joins the company's one instance.
|
|
143
|
+
- `compliance set unrecorded-holders --count <n>`: holders the company has outside obolos, up to 1,000,000.
|
|
144
|
+
- `compliance set max-holders` now sets whichever cap the entity takes.
|
|
145
|
+
- `sdk prepare compliance.setUnrecordedHolders`.
|
|
146
|
+
- `company incorporate --entity lp`: a Delaware limited partnership.
|
|
147
|
+
- `compliance presets --all`: every preset as defined, ignoring the selected company.
|
|
148
|
+
- `grant confirm-exercise <grantId> [--paid-on <date>] [--document <ref>]`: confirm a holder paid the strike of their
|
|
149
|
+
pending option or warrant exercise, which settles the shares to them; `--paid-on` is when the payment arrived (the
|
|
150
|
+
exercise date, defaulting to now) and `--document` names a payment receipt, if any. It confirms only the request it
|
|
151
|
+
showed, and only until the settlement window after the grant's expiry closes. `grant decline-exercise <grantId>`
|
|
152
|
+
declines an unpaid request while the grant is open; a paid one always settles. `sdk prepare grants.confirmExercise`
|
|
153
|
+
builds the confirmation directly, `sdk prepare grants.setSettlementWindow` sets the window (7 to 365 days, 14 until
|
|
154
|
+
set) and `sdk read grants.settlementWindow` reads it; `pool show` and `grant exercises` show it in days.
|
|
155
|
+
- `grant withdraw-exercise <grantId>`: the holder withdraws their own request before its payment is on record.
|
|
156
|
+
`grant settle-exercise <grantId>`: publish an exercise's vesting check and settle it, your own or, for the company,
|
|
157
|
+
one whose payment is on record; a denial of a paid exercise says to return the payment to the holder.
|
|
158
|
+
`grant exercises [--holder <addr>]`: the exercises in flight, each with the date to confirm it by, the payment
|
|
159
|
+
reference the holder quotes and, with `--reveal`, the amount due.
|
|
160
|
+
- A holder who can't hold the shares when their exercise settles, refused by the class's rules or frozen, has them
|
|
161
|
+
parked to claim later (`shares claim`); the exercise commands say so. `shares claim` says when your wallet is still
|
|
162
|
+
frozen on the class and the company has to lift the freeze first.
|
|
163
|
+
- `grant cleanup` waits out the company's settlement window after an option or warrant expires, and
|
|
164
|
+
`grant record-exercise` refuses a payment dated before the grant's last vesting change.
|
|
165
|
+
- `grant record-exercise <grantId> --shares <qty> --document <ref> [--paid-on <date>]`: for a holder who can't request
|
|
166
|
+
it, record an option or warrant exercise on their signed notice, then settle it to the holder. A notice and payment
|
|
167
|
+
that arrived before expiry stay recordable for the settlement window after it, and vesting counts as of
|
|
168
|
+
`--paid-on`. A data room notice is hashed onto the record; any other reference records no hash, with a warning that
|
|
169
|
+
the link is public.
|
|
170
|
+
- `grant exercise` opens a confidential session when your key is configured, refuses a strike request for more than has
|
|
171
|
+
vested, and quotes the amount due in its payment note; without the key it warns that such a request is refused
|
|
172
|
+
publicly. It refuses a `--net` exercise that nets less than one whole share at the current valuation, and phantom
|
|
173
|
+
units at or under water, when your key can read the strike and the valuation, and warns when it can't.
|
|
174
|
+
- `--paid-on <date>` on `grant confirm-exercise` and `grant record-exercise` counts to the end of that UTC day, or now
|
|
175
|
+
if sooner, and for a record to before expiry, so the vesting check counts the whole day; the date on record stays that
|
|
176
|
+
day.
|
|
177
|
+
- `grant count-exercise <grantId>`: the company counts the shares a holder's net exercise nets at the valuation it was
|
|
178
|
+
filed at, which the holder never sees, then publishes the count and settles them to the holder. `grant exercise
|
|
179
|
+
--net` now only files the request; `grant settle-exercise` refuses a net request until it is counted, and
|
|
180
|
+
`grant exercises` and `grant show` say whether one is counted. `sdk prepare grants.confirmNetExercise` takes a sealed
|
|
181
|
+
count, so it goes through the command. Grant, warrant, milestone and schedule amounts are sealed as whole shares: a
|
|
182
|
+
fraction is refused before anything is sent.
|
|
183
|
+
|
|
184
|
+
- `fundraise hardcap <round> --amount <usd>`: raise an open round's hard cap when an investor wants to put in more, or
|
|
185
|
+
lower it, never below the money in; zero lifts it.
|
|
186
|
+
- `sdk prepare grants.acceptGrant` and `sdk prepare grants.filePaperAcceptance`: a holder's signed acceptance of a
|
|
187
|
+
grant's document, and the company's filing of one given on paper. A grant without a document hash is accepted too,
|
|
188
|
+
and a paper filing takes any scan link, with a `scanHash` of zero unless the scan is a data room document.
|
|
189
|
+
- `docs list --history`: earlier versions too, each with the reference of the version that superseded it.
|
|
190
|
+
- `grant attach-document <grantId> --document <ref>`: attach a data room document, with its hash, to a grant that
|
|
191
|
+
records none. Only a data room document is taken, and only its latest version; it is shared with the holder when
|
|
192
|
+
you hold Records. The attach is permanent, and it replaces an outside link the grant was issued with. It clears
|
|
193
|
+
the holder's signed acceptance, which covered no document, so they accept the attached one; a paper acceptance
|
|
194
|
+
stands. `sdk prepare grants.attachDocument` builds the call directly.
|
|
195
|
+
- `grant show` and `grant list` show each grant's document hash and acceptance (`none`, `signed` or `paper`, and when).
|
|
196
|
+
|
|
197
|
+
### Changed
|
|
198
|
+
|
|
199
|
+
- Reaches the 12 Oct 2026 Arbitrum Sepolia deployment, through SDK 0.35.0.
|
|
200
|
+
- Warrant commands (`grant issue --type warrant`, `pool increase|decrease --budget warrant`, and confirming, recording,
|
|
201
|
+
settling or attaching a document to a warrant) need the Shares role, like every other grant; Fundraise no longer
|
|
202
|
+
covers warrants.
|
|
203
|
+
- `grant issue --milestone` and `vesting create --milestone` take `date:shares` or `<document ref>:date:shares`; the
|
|
204
|
+
leading part was a free-text label and is now a document reference. Every `--document` and `--evidence` refuses text.
|
|
205
|
+
`vesting show` prints each milestone's document reference.
|
|
206
|
+
- `grant exercise` pays no strike on chain. On an option or warrant it files a request: the holder pays the company
|
|
207
|
+
the strike off-platform, and the shares arrive once the company confirms the payment (`grant confirm-exercise`). It
|
|
208
|
+
settles RSUs and phantom units itself, and nets options with `--net`. The prepare action `grants.exerciseGrant`
|
|
209
|
+
replaces `grants.exerciseOptions` and `grants.exercisePhantom`, and `grants.recordExercise` and
|
|
210
|
+
`grants.confirmExercise` are new.
|
|
211
|
+
- `safe issue` and `note issue` require `--document`, the signed agreement's reference, which may be any link. A data
|
|
212
|
+
room document (`obolos://rooms/<room>/folders/<folder>/doc/<index>`) is read with your key and hashed; one stored in
|
|
213
|
+
the clear is hashed with a warning that the investor's private terms are readable. `--document-hash <hex>` gives
|
|
214
|
+
the keccak256 of its bytes instead, and any other link records no hash. A data room document you can't open, such as
|
|
215
|
+
a removed one, is refused, as in the app.
|
|
216
|
+
- A command that records a `--document` hashes a data room document onto the record: its bytes come through
|
|
217
|
+
`OBOLOS_API_URL` or the API the project signed in to, and it opens with your key. Any other reference, an `ipfs://`
|
|
218
|
+
file included, records no hash.
|
|
219
|
+
- `docs replace` files the new version as a new document at a new reference, which the run file's outputs carry
|
|
220
|
+
(`documentRef`, and the old reference as `replaces`); the old reference keeps its bytes and readers. A reference
|
|
221
|
+
that already has a newer version is refused, naming the latest.
|
|
222
|
+
- `docs list` shows the latest version of each document. `docs show` and `docs read` name the newer version when one
|
|
223
|
+
exists, and `docs sign` warns before signing an earlier version.
|
|
224
|
+
- `docs show` lists every version of the document, oldest first. `docs list` and the folder question count each
|
|
225
|
+
folder's current documents: latest versions only, removed ones left out.
|
|
226
|
+
- `grant transfer` shares the grant's data room document with the new holder when you hold Records and your key is
|
|
227
|
+
configured, so they can accept it. Without the key it still prepares, and warns that the document needs sharing by
|
|
228
|
+
hand; nothing about sharing ever stops a transfer.
|
|
229
|
+
- `grant issue`, `safe issue` and `note issue` share a sealed data room document with the recipient in the issuing
|
|
230
|
+
transaction when you hold Records, and warn otherwise.
|
|
231
|
+
- `safe cancel` and `note cancel` hash a data room `--document` onto the record, like the other commands that record
|
|
232
|
+
one.
|
|
233
|
+
- `docs replace` keeps the document's kind tag, refuses a document whose latest version was removed (upload a new
|
|
234
|
+
one instead), and warns that whoever could read the old version keeps it.
|
|
235
|
+
- A command that hashes a `--document` onto its record warns when that reference has a newer version.
|
|
236
|
+
- `compliance presets` lists the selected company's presets (`--company`, `OBOLOS_COMPANY` or `obolos use`), or every
|
|
237
|
+
preset with the entity types it is offered to when none is selected. `compliance policy create --preset` refuses a
|
|
238
|
+
preset the company's entity type is not offered.
|
|
239
|
+
- `fundraise create` warns, instead of refusing, when a round open to anyone rests on a policy without KYC or
|
|
240
|
+
sanctions: attach the rules before investors pay.
|
|
241
|
+
- Workflow commands open a confidential session only when the path they take needs one: a decline or a withdrawal
|
|
242
|
+
prepares without one, and so does a strike exercise request unless your key is configured, when it checks the request
|
|
243
|
+
against what has vested first.
|
|
244
|
+
|
|
245
|
+
### Removed
|
|
246
|
+
|
|
247
|
+
- `fundraise create --person-cap`: the maximum investment always counts per person for wallets bound at the company,
|
|
248
|
+
and per wallet otherwise.
|
|
249
|
+
|
|
250
|
+
### Fixed
|
|
251
|
+
|
|
252
|
+
- `grant exercise` and `grant record-exercise` refuse a grant before its first whole vesting interval has passed, cliff
|
|
253
|
+
or none, as the chain does; `grant exercise` says when the first shares vest.
|
|
254
|
+
- `fundraise reserve --reservation <id>` now sends with a key: the old spot is cancelled, then the new one committed.
|
|
255
|
+
- `fundraise reservation countersign` names the Fundraise viewing permission a signer lacks, before signing.
|
|
256
|
+
- `fundraise subscribe` and `fundraise invest` refuse an address that is not an obolos company.
|
|
257
|
+
- `docs upload` completes its run once the document is filed; it looked for the filing under the room instead of the
|
|
258
|
+
folder.
|
|
259
|
+
|
|
260
|
+
## [0.7.0] - 2026-09-28
|
|
261
|
+
|
|
262
|
+
### Added
|
|
263
|
+
|
|
264
|
+
- `passport attest` and `passport activate` for platforms, over the obolos passport API with `OBOLOS_API_KEY`.
|
|
265
|
+
- `passport activate` and `passport attest` take the wallet's `--signature` and its `--issued-at`, and `attest`
|
|
266
|
+
takes the person's `--code`. `--code -` reads the code from stdin, so it stays out of argv. With `--email`, the
|
|
267
|
+
signed message names that email on its `Email:` line. The refusals `consent_required`, `signature_invalid`,
|
|
268
|
+
`locked` and `rate_limited` exit 4 like every other refusal.
|
|
269
|
+
- `fundraise subscribe <round> --amount <usd>` signs the round's published agreement and pays at its public terms in
|
|
270
|
+
one step; a first subscription at the company opens your private channel with it in the same batch. The company
|
|
271
|
+
accepts by signing within seven days, or refunds; left unaccepted, `fundraise exit` takes the money back after
|
|
272
|
+
seven days.
|
|
273
|
+
|
|
274
|
+
### Changed
|
|
275
|
+
|
|
276
|
+
- **Breaking:** `fundraise create` takes `--agreement <ref>`, the round's agreement, and publishes it unsigned and
|
|
277
|
+
unencrypted in the round's Term Sheets with its hash pinned on the round (`--agreement-hash`, or fetched and hashed
|
|
278
|
+
through `--api-url`) before opening the round. A company without a data room, or an actor without Records
|
|
279
|
+
authority, is refused. `--person-cap` needs `--max` and the company's attestation hub.
|
|
280
|
+
- **Breaking** for rounds open to anyone on custom policies: `fundraise create` without `--whitelist-only` refuses a
|
|
281
|
+
policy that lacks a KYC rule at level 1 or above or a sanctions rule with its oracle set
|
|
282
|
+
(`workflow.fundraise.create.policy_unscreened`, exit 4). Attach them with `compliance rule attach --policy <ref> --kind kyc` or `--kind ofac`, use a policy made from
|
|
283
|
+
a preset, or pass `--whitelist-only`; the company then vets who subscribes.
|
|
284
|
+
- **Breaking:** `fundraise invest` requires `--reservation <id>` and pays a spot the company committed and signed,
|
|
285
|
+
signing its agreement in the same step when you have not, after checking the spot's sealed terms open its
|
|
286
|
+
commitment; `--draft-hash` names a bespoke draft. With a plain key, each step is its own transaction. Subscribing
|
|
287
|
+
at the round's terms is `fundraise subscribe`.
|
|
288
|
+
- **Breaking:** `fundraise reservation countersign --reservation <ids...>` signs deals for the company, several in
|
|
289
|
+
one batch: a spot committed unsigned, one the investor signed first, or a subscription, where signing is the
|
|
290
|
+
acceptance. A subscription older than seven days can no longer be accepted (`acceptance_closed`, exit 4).
|
|
291
|
+
`--draft-hash` names bespoke drafts, and `--paper` files the company's paper signatures instead.
|
|
292
|
+
- **Breaking:** `fundraise record` requires `--reservation <id>`, a spot the company signed. `--document` is the
|
|
293
|
+
investor's paper signature, filed in the same run unless one is on record. Past the round's deadline it is refused
|
|
294
|
+
(`deadline_passed`, exit 4), as the contract refuses the record.
|
|
295
|
+
- `fundraise reserve` commits a spot for a named investor at the round's terms or bespoke ones (`--cap`,
|
|
296
|
+
`--discount`, `--mfn`, `--pro-rata`), over the round's agreement or a bespoke draft (`--draft-hash`), signed for the
|
|
297
|
+
company when you sign documents (`--unsigned` leaves it for a signer). `--reservation <id>` replaces an unfunded
|
|
298
|
+
spot in one batch.
|
|
299
|
+
- `fundraise reservation sign` signs a spot as its investor without paying, for a wire or to pay later;
|
|
300
|
+
`reservation file` files an investor's paper signature; `reservation attach` attaches or replaces a spot's
|
|
301
|
+
document, and both signatures start over; `reservation cancel` withdraws an unfunded spot or refunds a funded
|
|
302
|
+
allocation.
|
|
303
|
+
- `obolos send` hands a run that pins documents storage through the API the project's session signed in to, with that
|
|
304
|
+
session, which goes to no other API; nothing of the session goes into the run file. A run recording another API
|
|
305
|
+
(`normalizedInput.apiUrl`) is refused (`cli.usage`), since its file carries no key and may be edited. A command
|
|
306
|
+
pinning through another API than the session's (`--api-url`, `OBOLOS_API_URL`) is not handed the session and asks
|
|
307
|
+
for a sign-in. A stage stopped for storage says how to resume.
|
|
308
|
+
- **Breaking:** the passport commands send `OBOLOS_API_KEY` only to `OBOLOS_API_URL` or the default API, never
|
|
309
|
+
to the `apiUrl` of a project's `.obolos/session.json`, which could send the key anywhere. `passport attest`
|
|
310
|
+
prints `status: "code_sent"` for an email's first call and `credentialId` in place of `passportId`.
|
|
311
|
+
- **Breaking:** `identity activate` is gone with holder-side activation; platforms use `passport activate`.
|
|
312
|
+
- **Breaking:** `identity secret store`, `identity secret clear` and `identity secret recover` are gone with the
|
|
313
|
+
hub's identity vault, and `identity status` no longer reports it.
|
|
314
|
+
- **Breaking:** `compliance rule attach` and `compliance set accreditation` drop `--qp`. The accredited rule no
|
|
315
|
+
longer carries a qualified-purchaser alternative; qualified-purchaser status is a `qpType` predicate.
|
|
316
|
+
|
|
317
|
+
### Fixed
|
|
318
|
+
|
|
319
|
+
- The provider key (`OBOLOS_API_KEY`) is sent only to `OBOLOS_API_URL` or the default API, never to the API a project's
|
|
320
|
+
`.obolos/session.json` names, so a cloned repository cannot redirect it.
|
|
321
|
+
- The private-key error no longer echoes the rejected value: a malformed `OBOLOS_PRIVATE_KEY` or mnemonic
|
|
322
|
+
used to appear verbatim in `--json` output and on stderr.
|
|
323
|
+
- An acting address that is not an address is refused naming where it came from (`--from`, `OBOLOS_FROM`
|
|
324
|
+
or `.obolos/config.json`), never quoting it, so a private key set there no longer reaches the output.
|
|
325
|
+
- Invalid JSON input keeps the parser's account of the fault but drops its excerpt of the text, so a malformed
|
|
326
|
+
input file never prints what it holds.
|
|
327
|
+
- `send`, `resume` and `--send` validate `--confirmations` before broadcasting; `0`, a negative value or a
|
|
328
|
+
fraction used to send the stage anyway and then hang waiting to reach it.
|
|
329
|
+
- A plan send whose transaction is not included within 120s stops with exit 5 instead of waiting forever,
|
|
330
|
+
and says the transaction may still land, so it is checked by hash before the plan is sent again. Once it
|
|
331
|
+
is included, extra `--confirmations` are waited out untimed, so a mined transaction is never reported as
|
|
332
|
+
unmined and re-sent.
|
|
333
|
+
- `sdk read` and `sdk prepare` refuse internal client plumbing (`executor`, `workflows`, `actions`, ...), and
|
|
334
|
+
builders that take a sealed input or a CoFHE proof (`grants.exerciseNet`, `voting.castBallot`,
|
|
335
|
+
`voting.castBallotFor`) are classified confidential rather than read or plain prepare.
|
|
336
|
+
- `parsePlan` refuses calldata that is not a whole number of bytes.
|
|
337
|
+
|
|
338
|
+
### Changed
|
|
339
|
+
|
|
340
|
+
- The CLI resolves `@obolos/sdk` from the workspace, so the next build also carries the SDK's narrower
|
|
341
|
+
jurisdiction gate (ADR 17: rounds, direct SAFE and note issuance, comp grants and warrants only) and its
|
|
342
|
+
stricter sharing- and prover-permit scoping, with no CLI code of its own to change.
|
|
343
|
+
|
|
344
|
+
## [0.6.0] - 2026-09-16
|
|
345
|
+
|
|
346
|
+
### Added
|
|
347
|
+
|
|
348
|
+
- `obolos distribution`: `dividend` and `waterfall` prepare a distribution (`--payment-date`,
|
|
349
|
+
`--claim-window-days`, `--exclude`, `--off-platform`, `--unvested pay|hold`), then `pay`, `record`,
|
|
350
|
+
`top-up`, `claim`, `claim-pending`, `close`, `cancel` and `show` carry it through settlement.
|
|
351
|
+
|
|
352
|
+
### Changed
|
|
353
|
+
|
|
354
|
+
- Licensed under the obolos Source Available License 1.0 instead of BUSL-1.1.
|
|
355
|
+
|
|
356
|
+
### Removed
|
|
357
|
+
|
|
358
|
+
- The dividend commands.
|
|
359
|
+
|
|
360
|
+
## [0.5.0] - 2026-09-12
|
|
361
|
+
|
|
362
|
+
### Fixed
|
|
363
|
+
|
|
364
|
+
- `compliance presets` works with an actor configured through `--from`, the environment, local config,
|
|
365
|
+
or a signer. Commands only inject an `actor` input when the workflow schema declares it.
|
|
366
|
+
|
|
367
|
+
### Added
|
|
368
|
+
|
|
369
|
+
- `shares parked list --holder <address>` shows a wallet's unclaimed parked lots, and
|
|
370
|
+
`shares parked cancel --holder <address> --lot <id>` voids one that must never be claimed.
|
|
371
|
+
|
|
372
|
+
- `shares issue --issued <date>` records an existing holding's acquisition date without
|
|
373
|
+
requiring a round. `shares claim --lot <id>` selects a parked allocation; the CLI asks
|
|
374
|
+
when several exist. Claims preserve each allocation's date and require current eligibility.
|
|
375
|
+
|
|
376
|
+
- `fundraise create --policy` takes an address or a name and must point at a policy that already
|
|
377
|
+
carries its rules (`compliance policy create`, `compliance rule attach`); the `create` shortcut is
|
|
378
|
+
gone. Missing SAFE or note terms are asked for; `--cap none`, `--discount none`, `--no-mfn`,
|
|
379
|
+
`--no-pro-rata` and `--no-early-repayment` state a negative without a prompt.
|
|
380
|
+
|
|
381
|
+
### Changed
|
|
382
|
+
|
|
383
|
+
- `conversion trigger` no longer prices anything. It reopens a qualifying round's lapsed series
|
|
384
|
+
(`--round <id>`, default the latest qualifying round) on that round's own class, price and
|
|
385
|
+
pre-money basis, over the instruments outstanding when the round qualified. `--class`,
|
|
386
|
+
`--price` and `--document` are gone; a priced round finalizing at the threshold opens the
|
|
387
|
+
series itself.
|
|
388
|
+
|
|
389
|
+
### Added
|
|
390
|
+
|
|
391
|
+
- `obolos skills install|list`: the `use-obolos` Agent Skill now ships with this package. It is
|
|
392
|
+
installed to the cross-agent `~/.agents/skills` root plus every detected agent directory
|
|
393
|
+
(Claude Code, Cursor, OpenCode, GitHub Copilot, Factory Droid), is idempotent, refuses to
|
|
394
|
+
overwrite a locally edited copy without `--replace`, and backs one up when replacing. `--agent`
|
|
395
|
+
accepts `codex`, `gemini`, `amp`, `cline` and `warp` as names for that shared root. Moved
|
|
396
|
+
here from `@obolos/sdk`, whose `obolos-skill` binary is gone: the skill routes an agent to
|
|
397
|
+
these commands, so it belongs with the package that provides them and versions with it.
|
|
398
|
+
- Initial SDK-backed `obolos` CLI with dynamic reads and preparation, tamper-evident plans,
|
|
399
|
+
batching, simulation, company/jurisdiction inspection, structured error decoding, diagnostics,
|
|
400
|
+
and guarded user-owned-key sending.
|
|
401
|
+
- Versioned workflow discovery/preparation (`workflow list|describe|prepare`) and the user-intent
|
|
402
|
+
`shares issue` command, both backed by `@obolos/sdk/workflows` with no duplicated ABI or rules.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
obolos Source Available License 1.0
|
|
2
|
+
===================================
|
|
3
|
+
|
|
4
|
+
Licensor: Obolos Group Incorporated
|
|
5
|
+
|
|
6
|
+
Software: the software the Licensor distributes with this license, including
|
|
7
|
+
the obolos protocol contracts and circuits, the SDK, the CLI, the indexer and
|
|
8
|
+
the backend, each version separately
|
|
9
|
+
|
|
10
|
+
Other licenses: legal@obolos.io
|
|
11
|
+
|
|
12
|
+
1. Acceptance. By using the Software you agree to these terms as conditions of
|
|
13
|
+
every license they grant. If you do not agree, you have no license.
|
|
14
|
+
|
|
15
|
+
2. What you may do.
|
|
16
|
+
|
|
17
|
+
(a) Non-Production Use. You may copy, modify, create derivative works of, and
|
|
18
|
+
distribute the Software for Non-Production Use.
|
|
19
|
+
|
|
20
|
+
(b) Use with Authorised Deployments. You may use, modify and combine with
|
|
21
|
+
your own software the SDK, the CLI, the interface definitions and the
|
|
22
|
+
documentation in Production Use to interact with Authorised Deployments,
|
|
23
|
+
including to build and operate your own products that interact with
|
|
24
|
+
Authorised Deployments.
|
|
25
|
+
|
|
26
|
+
(c) Conditions. Every copy or derivative work you distribute must carry this
|
|
27
|
+
license, the Licensor's copyright notice and any Required Notice, and
|
|
28
|
+
must identify the changes you made. You may not remove or obscure a
|
|
29
|
+
notice or any licensee identification in the Software. A product built
|
|
30
|
+
under section 2(b) may include the SDK and the interface definitions in
|
|
31
|
+
compiled or bundled form without identifying changes, provided the
|
|
32
|
+
notices in the Software's own files are kept.
|
|
33
|
+
|
|
34
|
+
3. What you may not do. Without a separate written license from the Licensor,
|
|
35
|
+
you may not:
|
|
36
|
+
|
|
37
|
+
(a) deploy the protocol contracts, or any derivative work or compiled form of
|
|
38
|
+
them, to any network, or operate such a deployment, other than as an
|
|
39
|
+
Authorised Deployment or as Non-Production Use;
|
|
40
|
+
|
|
41
|
+
(b) use the Software, its interface definitions, ABIs, schemas or
|
|
42
|
+
documentation to deploy, operate or interact with any implementation or
|
|
43
|
+
redeployment of the protocol that is not an Authorised Deployment, other
|
|
44
|
+
than as Non-Production Use;
|
|
45
|
+
|
|
46
|
+
(c) make Production Use of the Software or any derivative work except as
|
|
47
|
+
section 2(b) allows;
|
|
48
|
+
|
|
49
|
+
(d) use the Software or any derivative work to provide a Competing Product;
|
|
50
|
+
|
|
51
|
+
(e) sublicense or transfer your licenses.
|
|
52
|
+
|
|
53
|
+
4. Patents. The Licensor grants you a license under the patent claims it can
|
|
54
|
+
license that your permitted use of the Software would otherwise infringe, for
|
|
55
|
+
that permitted use only. If you or your company make a written claim that the
|
|
56
|
+
Software, or a product or service of the Licensor that uses it, infringes a
|
|
57
|
+
patent, your patent license ends immediately.
|
|
58
|
+
|
|
59
|
+
5. Contributions. If you submit changes or new works to the Licensor, you grant
|
|
60
|
+
the Licensor a perpetual, irrevocable, worldwide, royalty-free, sublicensable
|
|
61
|
+
license, including under any patent claims you can license, to use, modify,
|
|
62
|
+
distribute and relicense them under any terms, and you confirm that you have
|
|
63
|
+
the right to grant it.
|
|
64
|
+
|
|
65
|
+
6. Third-party components. Third-party components included with the Software
|
|
66
|
+
remain under their own licenses, which are identified in the Software. These
|
|
67
|
+
terms do not apply to them and do not limit the rights those licenses give you.
|
|
68
|
+
|
|
69
|
+
7. No trademark rights. These terms grant no right to use the name obolos or
|
|
70
|
+
any other name, mark or logo of the Licensor, except to describe the origin of
|
|
71
|
+
the Software accurately.
|
|
72
|
+
|
|
73
|
+
8. Term and termination. Your licenses continue for as long as you comply with
|
|
74
|
+
these terms and do not expire or convert to any other license. They end
|
|
75
|
+
automatically if you violate these terms. The first time the Licensor notifies
|
|
76
|
+
you in writing of a violation, your licenses continue if you cure it within 30
|
|
77
|
+
days of the notice, except that a violation of section 3(a), 3(b) or 3(d) ends
|
|
78
|
+
your licenses for every current and later version of the Software immediately.
|
|
79
|
+
Termination of your licenses does not end the licenses of people who received
|
|
80
|
+
the Software from you in compliance with these terms.
|
|
81
|
+
|
|
82
|
+
9. Versions and other rights. This license applies separately to each version
|
|
83
|
+
of the Software. The Licensor may offer later versions under different terms
|
|
84
|
+
and may grant anyone other licenses. All rights not expressly granted are
|
|
85
|
+
reserved. Nothing in these terms limits rights you have under applicable law
|
|
86
|
+
that cannot be limited by contract, including fair use, and where the law does
|
|
87
|
+
not allow these terms to restrict the use of interface information to achieve
|
|
88
|
+
the interoperability of an independently created program, they do not restrict
|
|
89
|
+
it. If any term is unenforceable, the rest remain in force. This is not an
|
|
90
|
+
open-source license.
|
|
91
|
+
|
|
92
|
+
10. No warranty and no liability. The Software is provided as is, without
|
|
93
|
+
warranty of any kind, express or implied, including merchantability, fitness
|
|
94
|
+
for a particular purpose, title and non-infringement. To the extent the law
|
|
95
|
+
allows, the Licensor is not liable for any damages arising out of these terms
|
|
96
|
+
or your use of the Software, under any legal theory.
|
|
97
|
+
|
|
98
|
+
11. Definitions.
|
|
99
|
+
|
|
100
|
+
(a) "Authorised Deployment" means an instance of the protocol contracts
|
|
101
|
+
deployed by the Licensor, or by another person with the Licensor's
|
|
102
|
+
written authorisation, at the addresses the Licensor publishes, including
|
|
103
|
+
in the SDK's address configuration, together with every contract created,
|
|
104
|
+
directly or indirectly, by such an instance.
|
|
105
|
+
|
|
106
|
+
(b) "Non-Production Use" means use for evaluation, development, testing,
|
|
107
|
+
security research, audit or education that, if it runs on a network, runs
|
|
108
|
+
only on a local, test or development network, does not create, record or
|
|
109
|
+
transfer rights, obligations or value for any person, and does not
|
|
110
|
+
provide the Software's functionality to third parties as a product or
|
|
111
|
+
service. Any other use is "Production Use".
|
|
112
|
+
|
|
113
|
+
(c) "Competing Product" means a product or service, whether or not offered
|
|
114
|
+
for a fee, that provides functionality substantially similar to the
|
|
115
|
+
Software or to a product or service that the Licensor or one of its
|
|
116
|
+
affiliates provides using the Software, regardless of interface,
|
|
117
|
+
platform, network or programming language. A product that provides its
|
|
118
|
+
functionality through Authorised Deployments is not a Competing Product.
|
|
119
|
+
|
|
120
|
+
(d) "You" means the person or entity agreeing to these terms, and "your
|
|
121
|
+
company" means every organisation you work for and every organisation
|
|
122
|
+
that controls, is controlled by, or is under common control with it.
|
|
123
|
+
|
|
124
|
+
(e) An "affiliate" of the Licensor is any organisation that controls, is
|
|
125
|
+
controlled by, or is under common control with it. Control means the
|
|
126
|
+
power to direct an organisation's management and policies, by ownership,
|
|
127
|
+
vote, contract or otherwise.
|
|
128
|
+
|
|
129
|
+
(f) "Distribute" includes making the Software, or any part of it, available
|
|
130
|
+
to third parties by any means.
|
|
131
|
+
|
|
132
|
+
Required Notice: Copyright (c) 2026 Obolos Group Incorporated. Licensed under
|
|
133
|
+
the obolos Source Available License 1.0, [https://obolos.io/license].
|
|
134
|
+
Commercial licenses: legal@obolos.io.
|