open-research-protocol 0.4.13 → 0.4.15
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/AGENT_INTEGRATION.md +50 -0
- package/README.md +273 -144
- package/bin/orp.js +14 -1
- package/cli/orp.py +14846 -9925
- package/docs/AGENT_LOOP.md +13 -0
- package/docs/AGENT_MODES.md +79 -0
- package/docs/CANONICAL_CLI_BOUNDARY.md +15 -0
- package/docs/EXCHANGE.md +94 -0
- package/docs/LAUNCH_KIT.md +107 -0
- package/docs/ORP_HOSTED_WORKSPACE_CONTRACT.md +295 -0
- package/docs/ORP_PUBLIC_LAUNCH_CHECKLIST.md +5 -0
- package/docs/START_HERE.md +567 -0
- package/package.json +5 -2
- package/packages/lifeops-orp/README.md +67 -0
- package/packages/lifeops-orp/package.json +48 -0
- package/packages/lifeops-orp/src/index.d.ts +106 -0
- package/packages/lifeops-orp/src/index.js +7 -0
- package/packages/lifeops-orp/src/mapping.js +309 -0
- package/packages/lifeops-orp/src/workspace.js +108 -0
- package/packages/lifeops-orp/test/orp.test.js +187 -0
- package/packages/orp-workspace-launcher/README.md +82 -0
- package/packages/orp-workspace-launcher/package.json +39 -0
- package/packages/orp-workspace-launcher/src/commands.js +77 -0
- package/packages/orp-workspace-launcher/src/core-plan.js +506 -0
- package/packages/orp-workspace-launcher/src/hosted-state.js +208 -0
- package/packages/orp-workspace-launcher/src/index.js +82 -0
- package/packages/orp-workspace-launcher/src/ledger.js +745 -0
- package/packages/orp-workspace-launcher/src/list.js +488 -0
- package/packages/orp-workspace-launcher/src/orp-command.js +126 -0
- package/packages/orp-workspace-launcher/src/orp.js +912 -0
- package/packages/orp-workspace-launcher/src/registry.js +558 -0
- package/packages/orp-workspace-launcher/src/slot.js +188 -0
- package/packages/orp-workspace-launcher/src/sync.js +363 -0
- package/packages/orp-workspace-launcher/src/tabs.js +166 -0
- package/packages/orp-workspace-launcher/test/commands.test.js +164 -0
- package/packages/orp-workspace-launcher/test/core-plan.test.js +253 -0
- package/packages/orp-workspace-launcher/test/fixtures/smoke-notes.txt +2 -0
- package/packages/orp-workspace-launcher/test/fixtures/workspace-manifest.json +17 -0
- package/packages/orp-workspace-launcher/test/ledger.test.js +244 -0
- package/packages/orp-workspace-launcher/test/list.test.js +299 -0
- package/packages/orp-workspace-launcher/test/orp-command.test.js +44 -0
- package/packages/orp-workspace-launcher/test/orp.test.js +224 -0
- package/packages/orp-workspace-launcher/test/tabs.test.js +168 -0
- package/scripts/orp-kernel-agent-pilot.py +10 -1
- package/scripts/orp-kernel-agent-replication.py +10 -1
- package/scripts/orp-kernel-canonical-continuation.py +10 -1
- package/scripts/orp-kernel-continuation-pilot.py +10 -1
- package/scripts/render-terminal-demo.py +416 -0
- package/spec/v1/exchange-report.schema.json +105 -0
- package/spec/v1/hosted-workspace-event.schema.json +102 -0
- package/spec/v1/hosted-workspace.schema.json +332 -0
- package/spec/v1/workspace.schema.json +108 -0
|
@@ -0,0 +1,567 @@
|
|
|
1
|
+
# Start Here
|
|
2
|
+
|
|
3
|
+
Use this guide when you are new to ORP and want the shortest correct path from "fresh repo" to "agent and repo are operating in lockstep."
|
|
4
|
+
|
|
5
|
+
The design goal is simple:
|
|
6
|
+
|
|
7
|
+
- local-first by default
|
|
8
|
+
- hosted sync is optional
|
|
9
|
+
- the workspace ledger remembers where ongoing work lives
|
|
10
|
+
- repo governance keeps work intentional
|
|
11
|
+
- the agent uses ORP as its operating lens, not as an afterthought
|
|
12
|
+
|
|
13
|
+
## Core Rule
|
|
14
|
+
|
|
15
|
+
Do not let ORP process scaffolding masquerade as evidence or repository truth.
|
|
16
|
+
|
|
17
|
+
ORP is there to:
|
|
18
|
+
|
|
19
|
+
- keep the workspace ledger honest
|
|
20
|
+
- keep repo governance explicit
|
|
21
|
+
- keep secrets and continuity usable
|
|
22
|
+
- help the agent stay aligned
|
|
23
|
+
|
|
24
|
+
But canonical evidence still lives in the repo's real artifacts: code, data, proofs, papers, logs, and outputs.
|
|
25
|
+
|
|
26
|
+
## Start In 60 Seconds
|
|
27
|
+
|
|
28
|
+
Install:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
npm i -g open-research-protocol
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
If you already know you want the standard local-first ORP loop in a repo, the fastest path is:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
orp home
|
|
38
|
+
orp init
|
|
39
|
+
orp workspace create main-cody-1
|
|
40
|
+
orp workspace tabs main
|
|
41
|
+
orp secrets ensure --alias openai-primary --provider openai --current-project --json
|
|
42
|
+
orp status --json
|
|
43
|
+
orp checkpoint create -m "capture loop state" --json
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
That gets you:
|
|
47
|
+
|
|
48
|
+
- the discovery screen
|
|
49
|
+
- repo governance initialized
|
|
50
|
+
- a local workspace ledger
|
|
51
|
+
- the main recovery surface
|
|
52
|
+
- secrets setup
|
|
53
|
+
- a clean repo-governance read
|
|
54
|
+
- a first intentional checkpoint
|
|
55
|
+
|
|
56
|
+
## Beginner Flow
|
|
57
|
+
|
|
58
|
+
This is the zero-assumption path for a new user.
|
|
59
|
+
|
|
60
|
+
### 1. Install the CLI once
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
npm i -g open-research-protocol
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
This gives you a global `orp` command.
|
|
67
|
+
|
|
68
|
+
### 2. Start with the home screen
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
orp home
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Use `orp home` when you want the main operator screen:
|
|
75
|
+
|
|
76
|
+
- what ORP is
|
|
77
|
+
- what the current daily loop is
|
|
78
|
+
- what command families exist
|
|
79
|
+
- what discovery docs to read next
|
|
80
|
+
|
|
81
|
+
### 3. Initialize the repo
|
|
82
|
+
|
|
83
|
+
From the repo root:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
orp init
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
`orp init` makes the repo ORP-governed. It creates the starter config/runtime scaffolding, seeds the handoff and checkpoint log, and records the repo's governance state.
|
|
90
|
+
|
|
91
|
+
More concretely, `orp init` does these jobs:
|
|
92
|
+
|
|
93
|
+
- creates a git repo if one does not already exist
|
|
94
|
+
- creates `orp.yml` if it is missing
|
|
95
|
+
- creates the ORP runtime directories under `orp/`
|
|
96
|
+
- seeds:
|
|
97
|
+
- `orp/HANDOFF.md`
|
|
98
|
+
- `orp/checkpoints/CHECKPOINT_LOG.md`
|
|
99
|
+
- `analysis/orp.kernel.task.yml`
|
|
100
|
+
- writes governance metadata like:
|
|
101
|
+
- `orp/governance.json`
|
|
102
|
+
- `orp/agent-policy.json`
|
|
103
|
+
- `orp/state.json`
|
|
104
|
+
|
|
105
|
+
So `orp init` is not "start doing the work." It is "make this repo legible and governable for humans and agents."
|
|
106
|
+
|
|
107
|
+
After that, check the repo state:
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
orp status --json
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### 4. Create the workspace ledger
|
|
114
|
+
|
|
115
|
+
This is the local-first memory layer for ongoing work.
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
orp workspace create main-cody-1
|
|
119
|
+
orp workspace list
|
|
120
|
+
orp workspace tabs main
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
You do not need a hosted account for this. The workspace ledger works locally out of the box.
|
|
124
|
+
|
|
125
|
+
The important idea is:
|
|
126
|
+
|
|
127
|
+
- the workspace ledger is not a GUI tab manager
|
|
128
|
+
- it is the saved memory of where work lives
|
|
129
|
+
- it stores paths plus exact resumable command lines
|
|
130
|
+
- it is the crash-recovery layer for you and the agent
|
|
131
|
+
|
|
132
|
+
### 5. Save ongoing tabs and sessions
|
|
133
|
+
|
|
134
|
+
If you want ORP to remember an ongoing repo path plus a resumable session, add it explicitly:
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
orp workspace add-tab main --path /absolute/path/to/project --resume-command "codex resume <session-id>"
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
For Claude:
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
orp workspace add-tab main --path /absolute/path/to/project --resume-tool claude --resume-session-id <session-id>
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
To inspect what is saved:
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
orp workspace tabs main
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
The `resume:` line is the exact copyable recovery command:
|
|
153
|
+
|
|
154
|
+
```text
|
|
155
|
+
resume: cd '/absolute/path/to/project' && codex resume <session-id>
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
or:
|
|
159
|
+
|
|
160
|
+
```text
|
|
161
|
+
resume: cd '/absolute/path/to/project' && claude --resume <session-id>
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
To remove something from the saved ledger:
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
orp workspace remove-tab main --path /absolute/path/to/project
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
So the `workspace` lane is really:
|
|
171
|
+
|
|
172
|
+
- `create` a ledger
|
|
173
|
+
- `add-tab` to remember a path/session
|
|
174
|
+
- `remove-tab` to prune old work
|
|
175
|
+
- `tabs` to inspect exact saved recovery commands
|
|
176
|
+
- `list` to see all saved workspaces
|
|
177
|
+
|
|
178
|
+
### 6. Set up secrets
|
|
179
|
+
|
|
180
|
+
Today, secrets are the one part of ORP that still starts from the hosted ORP account layer. So before you save or resolve secrets, log in:
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
orp auth login
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
After that, think about secrets in two separate user flows:
|
|
187
|
+
|
|
188
|
+
- human operator flow
|
|
189
|
+
- agent/script flow
|
|
190
|
+
|
|
191
|
+
#### Human operator flow
|
|
192
|
+
|
|
193
|
+
If you are at the terminal and want to save a new key manually, use:
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
orp secrets add --alias openai-primary --label "OpenAI Primary" --provider openai
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
ORP then prompts:
|
|
200
|
+
|
|
201
|
+
```text
|
|
202
|
+
Secret value:
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
That is where you paste the real key.
|
|
206
|
+
|
|
207
|
+
After that, you can inspect and reuse it:
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
orp secrets list
|
|
211
|
+
orp secrets show openai-primary
|
|
212
|
+
orp secrets resolve openai-primary --reveal
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
That is the clearest beginner flow:
|
|
216
|
+
|
|
217
|
+
1. log in
|
|
218
|
+
2. add the key
|
|
219
|
+
3. paste the value when prompted
|
|
220
|
+
4. list or show it later
|
|
221
|
+
5. resolve it when you need to use it
|
|
222
|
+
|
|
223
|
+
#### Agent or script flow
|
|
224
|
+
|
|
225
|
+
If an agent or script needs to save a key non-interactively, use stdin:
|
|
226
|
+
|
|
227
|
+
```bash
|
|
228
|
+
printf '%s' 'sk-...' | orp secrets add --alias openai-primary --label "OpenAI Primary" --provider openai --value-stdin
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
This is the safe automation path because the secret value is not typed into the command line flags directly.
|
|
232
|
+
|
|
233
|
+
#### Convenience flow: `ensure`
|
|
234
|
+
|
|
235
|
+
If the repo or agent needs an API key and you want ORP to handle both "already exists" and "missing" cases, use:
|
|
236
|
+
|
|
237
|
+
```bash
|
|
238
|
+
orp secrets ensure --alias openai-primary --provider openai --current-project
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
In plain English, that means:
|
|
242
|
+
|
|
243
|
+
```text
|
|
244
|
+
Make sure this project has an OpenAI key available to it.
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
The important thing to understand is:
|
|
248
|
+
|
|
249
|
+
- this command does not contain the key itself
|
|
250
|
+
- it is a lookup-or-create command
|
|
251
|
+
- the actual key is either already saved, or ORP will ask you for it
|
|
252
|
+
|
|
253
|
+
`ensure` is the beginner-friendly path because it handles both cases:
|
|
254
|
+
|
|
255
|
+
- if the secret already exists in ORP, reuse it
|
|
256
|
+
- if it does not exist yet, create it
|
|
257
|
+
- if `--current-project` is present, bind it to the repo you are in now
|
|
258
|
+
|
|
259
|
+
If the secret does not exist yet, ORP will ask you for the secret value securely unless you provide it explicitly with `--value` or `--value-stdin`.
|
|
260
|
+
|
|
261
|
+
That means the common beginner flow is simply:
|
|
262
|
+
|
|
263
|
+
1. run:
|
|
264
|
+
```bash
|
|
265
|
+
orp secrets ensure --alias openai-primary --provider openai --current-project
|
|
266
|
+
```
|
|
267
|
+
2. if ORP already knows the key, it reuses it
|
|
268
|
+
3. if ORP does not know the key yet, it prompts:
|
|
269
|
+
```text
|
|
270
|
+
Secret value:
|
|
271
|
+
```
|
|
272
|
+
4. paste the real key there
|
|
273
|
+
|
|
274
|
+
So the easiest path for a new user is still:
|
|
275
|
+
|
|
276
|
+
```bash
|
|
277
|
+
orp secrets ensure --alias openai-primary --provider openai --current-project
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
If ORP already knows that key, it reuses it.
|
|
281
|
+
If ORP does not know that key yet, it prompts for the value and then saves it.
|
|
282
|
+
|
|
283
|
+
If you want to be explicit and add a brand-new key first, you can also do it in two steps:
|
|
284
|
+
|
|
285
|
+
```bash
|
|
286
|
+
orp secrets add --alias openai-primary --provider openai --current-project
|
|
287
|
+
orp secrets ensure --alias openai-primary --provider openai --current-project
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
The mental model is:
|
|
291
|
+
|
|
292
|
+
- `add` = I know this is a brand-new secret
|
|
293
|
+
- `ensure` = use the existing one, or create it if missing
|
|
294
|
+
- `list` = show me what is saved
|
|
295
|
+
- `show` = show me one saved secret record
|
|
296
|
+
- `resolve` = give me the actual value so I can use it now
|
|
297
|
+
- `sync-keychain` = keep a secure local Mac copy too
|
|
298
|
+
|
|
299
|
+
You can ignore `--env-var-name` at first.
|
|
300
|
+
It is only optional metadata like `OPENAI_API_KEY`.
|
|
301
|
+
It is not the secret value itself.
|
|
302
|
+
|
|
303
|
+
For example:
|
|
304
|
+
|
|
305
|
+
```bash
|
|
306
|
+
orp secrets resolve --provider openai --current-project --reveal
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
If you want a local secure copy on macOS too:
|
|
310
|
+
|
|
311
|
+
```bash
|
|
312
|
+
orp secrets sync-keychain openai-primary --json
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
The right mental model is:
|
|
316
|
+
|
|
317
|
+
- hosted ORP secret inventory can be the canonical source of truth
|
|
318
|
+
- local Keychain can be the secure local cache
|
|
319
|
+
- `ensure` means "reuse it if it exists, create it if it doesn't, and bind it if needed"
|
|
320
|
+
- if the key is missing and you did not pass a value, ORP prompts you for it
|
|
321
|
+
- `add` is the clearest first command for a brand-new human user
|
|
322
|
+
|
|
323
|
+
### 7. Start working safely
|
|
324
|
+
|
|
325
|
+
ORP's default repo-governance loop is:
|
|
326
|
+
|
|
327
|
+
```bash
|
|
328
|
+
orp branch start work/<topic> --json
|
|
329
|
+
orp checkpoint create -m "describe completed unit" --json
|
|
330
|
+
orp backup -m "backup current work" --json
|
|
331
|
+
orp ready --json
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
The most important habit is simple:
|
|
335
|
+
|
|
336
|
+
- do meaningful work on a work branch
|
|
337
|
+
- checkpoint intentionally
|
|
338
|
+
- keep the repo status honest
|
|
339
|
+
|
|
340
|
+
That is the boundary between "we are just editing files" and "we are working in a governed research or engineering loop."
|
|
341
|
+
|
|
342
|
+
This is the checkpoint governance loop:
|
|
343
|
+
|
|
344
|
+
1. `orp status --json`
|
|
345
|
+
Inspect whether the repo is safe for work right now.
|
|
346
|
+
This tells you things like:
|
|
347
|
+
- whether the repo is ORP-governed
|
|
348
|
+
- whether git is present
|
|
349
|
+
- whether the worktree is dirty
|
|
350
|
+
- whether you are on a protected branch
|
|
351
|
+
- whether validation and readiness are in a good state
|
|
352
|
+
|
|
353
|
+
2. `orp branch start work/<topic> --json`
|
|
354
|
+
Create or switch to a safe work branch.
|
|
355
|
+
ORP wants meaningful edits to happen on a non-protected work branch unless you have explicitly allowed protected-branch work.
|
|
356
|
+
|
|
357
|
+
3. `orp checkpoint create -m "describe completed unit" --json`
|
|
358
|
+
Create an intentional checkpoint commit.
|
|
359
|
+
This is the core save-state action.
|
|
360
|
+
It does not mean "ship the work." It means:
|
|
361
|
+
- record a meaningful completed unit
|
|
362
|
+
- make the state recoverable
|
|
363
|
+
- update the checkpoint log and local governance runtime
|
|
364
|
+
|
|
365
|
+
4. `orp backup -m "backup current work" --json`
|
|
366
|
+
Create a safer backup snapshot, and push it to a dedicated remote ref when possible.
|
|
367
|
+
If the repo is dirty in a risky context, ORP can create a backup work branch first.
|
|
368
|
+
So `backup` is the "make sure this state exists off-machine too" step.
|
|
369
|
+
|
|
370
|
+
5. `orp ready --json`
|
|
371
|
+
Mark the repo locally ready only when the real conditions are met.
|
|
372
|
+
`ready` is stricter than "I feel done."
|
|
373
|
+
It checks things like:
|
|
374
|
+
- handoff/checkpoint files exist
|
|
375
|
+
- working tree is clean
|
|
376
|
+
- branch policy is respected
|
|
377
|
+
- the latest validation run passed
|
|
378
|
+
- there is a checkpoint after that passing validation
|
|
379
|
+
|
|
380
|
+
6. `orp doctor --json`
|
|
381
|
+
Inspect governance health and optionally repair missing ORP files with `--fix`.
|
|
382
|
+
Use this when the repo feels out of sync with ORP.
|
|
383
|
+
|
|
384
|
+
7. `orp cleanup --json`
|
|
385
|
+
Inspect stale branch cleanup candidates.
|
|
386
|
+
This is the "help me prune old branch debris safely" step, not a destructive reset tool.
|
|
387
|
+
|
|
388
|
+
So the checkpoint governance loop is really:
|
|
389
|
+
|
|
390
|
+
- inspect the repo
|
|
391
|
+
- move onto a safe work branch
|
|
392
|
+
- checkpoint meaningful progress
|
|
393
|
+
- back it up when needed
|
|
394
|
+
- mark readiness honestly
|
|
395
|
+
- doctor and cleanup when the repo drifts
|
|
396
|
+
|
|
397
|
+
That is the part of ORP that keeps the human, the agent, and the repo in check together.
|
|
398
|
+
|
|
399
|
+
### 8. Keep the program context visible
|
|
400
|
+
|
|
401
|
+
If the work belongs to a longer-running research or product trajectory:
|
|
402
|
+
|
|
403
|
+
```bash
|
|
404
|
+
orp frontier state --json
|
|
405
|
+
orp frontier roadmap --json
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
This is the "where are we in the program?" layer.
|
|
409
|
+
|
|
410
|
+
The distinction is:
|
|
411
|
+
|
|
412
|
+
- `workspace` answers: where is the work physically happening?
|
|
413
|
+
- `frontier` answers: where are we logically in the larger program?
|
|
414
|
+
|
|
415
|
+
### 9. Use optional perspective support
|
|
416
|
+
|
|
417
|
+
When the work feels too linear, too trapped, or too narrow:
|
|
418
|
+
|
|
419
|
+
```bash
|
|
420
|
+
orp mode nudge sleek-minimal-progressive --json
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
This is optional. It does not override the protocol. It just gives the agent or operator a lightweight perspective shift.
|
|
424
|
+
|
|
425
|
+
It is there to help with:
|
|
426
|
+
|
|
427
|
+
- getting unstuck
|
|
428
|
+
- zooming in or out
|
|
429
|
+
- rotating the angle of attack
|
|
430
|
+
- keeping the work fresh without making the workflow sloppy
|
|
431
|
+
|
|
432
|
+
### 10. Optional hosted sync
|
|
433
|
+
|
|
434
|
+
Hosted ORP is not required for the local workspace ledger or repo-governance loop.
|
|
435
|
+
|
|
436
|
+
If you want hosted identity, ideas, workspace sync, or runners later:
|
|
437
|
+
|
|
438
|
+
```bash
|
|
439
|
+
orp auth login
|
|
440
|
+
orp whoami --json
|
|
441
|
+
orp workspaces list --json
|
|
442
|
+
orp workspace sync main
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
So the rule is:
|
|
446
|
+
|
|
447
|
+
- local-first works immediately
|
|
448
|
+
- hosted adds sync and control-plane features later
|
|
449
|
+
|
|
450
|
+
## Daily Loop
|
|
451
|
+
|
|
452
|
+
Once a repo is ORP-governed and the workspace ledger already exists, this is the main operating loop:
|
|
453
|
+
|
|
454
|
+
```bash
|
|
455
|
+
orp workspace tabs main
|
|
456
|
+
orp status --json
|
|
457
|
+
orp secrets ensure --alias <alias> --provider <provider> --current-project --json
|
|
458
|
+
orp frontier state --json
|
|
459
|
+
```
|
|
460
|
+
|
|
461
|
+
Then do the next meaningful unit of work.
|
|
462
|
+
|
|
463
|
+
After a real step, checkpoint it:
|
|
464
|
+
|
|
465
|
+
```bash
|
|
466
|
+
orp checkpoint create -m "describe completed unit" --json
|
|
467
|
+
```
|
|
468
|
+
|
|
469
|
+
If the current state should exist off-machine too:
|
|
470
|
+
|
|
471
|
+
```bash
|
|
472
|
+
orp backup -m "backup current work" --json
|
|
473
|
+
```
|
|
474
|
+
|
|
475
|
+
When the work is truly in a ready state:
|
|
476
|
+
|
|
477
|
+
```bash
|
|
478
|
+
orp ready --json
|
|
479
|
+
```
|
|
480
|
+
|
|
481
|
+
The guiding rule is simple:
|
|
482
|
+
|
|
483
|
+
- recover the saved workspace
|
|
484
|
+
- inspect repo safety
|
|
485
|
+
- resolve the right secret
|
|
486
|
+
- inspect the current frontier
|
|
487
|
+
- do the next honest move
|
|
488
|
+
- checkpoint at honest boundaries
|
|
489
|
+
|
|
490
|
+
## Minimum Working Loop
|
|
491
|
+
|
|
492
|
+
If you only want the irreducible ORP loop, it is this:
|
|
493
|
+
|
|
494
|
+
1. recover the workspace ledger
|
|
495
|
+
```bash
|
|
496
|
+
orp workspace tabs main
|
|
497
|
+
```
|
|
498
|
+
2. inspect repo safety
|
|
499
|
+
```bash
|
|
500
|
+
orp status --json
|
|
501
|
+
```
|
|
502
|
+
3. resolve the right secret
|
|
503
|
+
```bash
|
|
504
|
+
orp secrets ensure --alias <alias> --provider <provider> --current-project --json
|
|
505
|
+
```
|
|
506
|
+
4. inspect the current frontier
|
|
507
|
+
```bash
|
|
508
|
+
orp frontier state --json
|
|
509
|
+
```
|
|
510
|
+
5. do the next honest move
|
|
511
|
+
6. checkpoint it
|
|
512
|
+
```bash
|
|
513
|
+
orp checkpoint create -m "describe completed unit" --json
|
|
514
|
+
```
|
|
515
|
+
|
|
516
|
+
That is the shortest version of the protocol:
|
|
517
|
+
|
|
518
|
+
- recover continuity
|
|
519
|
+
- inspect safety
|
|
520
|
+
- resolve access
|
|
521
|
+
- inspect context
|
|
522
|
+
- do the work
|
|
523
|
+
- checkpoint it honestly
|
|
524
|
+
|
|
525
|
+
## Agent Contract
|
|
526
|
+
|
|
527
|
+
If you want the agent to stay aligned with ORP, the default check sequence should be:
|
|
528
|
+
|
|
529
|
+
```bash
|
|
530
|
+
orp workspace tabs main
|
|
531
|
+
orp status --json
|
|
532
|
+
orp secrets ensure --alias <alias> --provider <provider> --current-project --json
|
|
533
|
+
orp frontier state --json
|
|
534
|
+
```
|
|
535
|
+
|
|
536
|
+
And before handoff or a meaningful completed unit:
|
|
537
|
+
|
|
538
|
+
```bash
|
|
539
|
+
orp checkpoint create -m "checkpoint note" --json
|
|
540
|
+
```
|
|
541
|
+
|
|
542
|
+
That is the practical ORP loop:
|
|
543
|
+
|
|
544
|
+
1. recover the workspace ledger
|
|
545
|
+
2. inspect repo safety
|
|
546
|
+
3. resolve the right key
|
|
547
|
+
4. inspect the current frontier
|
|
548
|
+
5. do the work
|
|
549
|
+
6. checkpoint it honestly
|
|
550
|
+
|
|
551
|
+
The key point is that ORP should become the lens:
|
|
552
|
+
|
|
553
|
+
- not "something we remember to use sometimes"
|
|
554
|
+
- but the operating frame the agent checks before and after meaningful work
|
|
555
|
+
|
|
556
|
+
## If You Only Remember 8 Commands
|
|
557
|
+
|
|
558
|
+
```bash
|
|
559
|
+
orp home
|
|
560
|
+
orp init
|
|
561
|
+
orp workspace create main-cody-1
|
|
562
|
+
orp workspace tabs main
|
|
563
|
+
orp workspace add-tab main --path /absolute/path/to/project --resume-command "codex resume <id>"
|
|
564
|
+
orp secrets ensure --alias openai-primary --provider openai --current-project --json
|
|
565
|
+
orp status --json
|
|
566
|
+
orp checkpoint create -m "capture loop state" --json
|
|
567
|
+
```
|
package/package.json
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "open-research-protocol",
|
|
3
|
-
"version": "0.4.
|
|
4
|
-
"description": "ORP CLI (Open Research Protocol):
|
|
3
|
+
"version": "0.4.15",
|
|
4
|
+
"description": "ORP CLI (Open Research Protocol): workspace ledgers, secrets, scheduling, governed execution, and agent-friendly research workflows.",
|
|
5
5
|
"license": "MIT",
|
|
6
|
+
"author": "Fractal Research Group <cody@frg.earth>",
|
|
6
7
|
"repository": {
|
|
7
8
|
"type": "git",
|
|
8
9
|
"url": "git+https://github.com/SproutSeeds/orp.git"
|
|
@@ -21,6 +22,7 @@
|
|
|
21
22
|
"docs/",
|
|
22
23
|
"examples/",
|
|
23
24
|
"modules/",
|
|
25
|
+
"packages/",
|
|
24
26
|
"packs/",
|
|
25
27
|
"scripts/",
|
|
26
28
|
"spec/",
|
|
@@ -41,6 +43,7 @@
|
|
|
41
43
|
"scripts": {
|
|
42
44
|
"postinstall": "node scripts/npm-postinstall-check.js",
|
|
43
45
|
"prepublishOnly": "node scripts/npm-prepublish-guard.js",
|
|
46
|
+
"render:terminal-demo": "python3 scripts/render-terminal-demo.py",
|
|
44
47
|
"test": "python3 -m unittest discover -s tests -v"
|
|
45
48
|
},
|
|
46
49
|
"keywords": [
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# @lifeops/orp
|
|
2
|
+
|
|
3
|
+
`@lifeops/orp` is the bridge between ORP and Life Ops.
|
|
4
|
+
|
|
5
|
+
It reads ORP's machine-readable surfaces and turns them into:
|
|
6
|
+
|
|
7
|
+
- Life Ops-compatible agenda items
|
|
8
|
+
- share-ready project context
|
|
9
|
+
- structured prompts for outbound follow-up and project sharing
|
|
10
|
+
|
|
11
|
+
## Install
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npm install @lifeops/orp
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
If you also want the Life Ops SDK:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npm install @lifeops/core @lifeops/orp
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## What it does
|
|
24
|
+
|
|
25
|
+
- runs ORP JSON commands like `status`, `frontier state`, `frontier roadmap`, and `frontier checklist`
|
|
26
|
+
- maps readiness, next actions, frontier phases, and checklist items into Life Ops item objects
|
|
27
|
+
- derives a share-ready project input object that can be passed into `@lifeops/core`
|
|
28
|
+
- optionally builds a full project-share packet if you inject `buildProjectSharePacket` from `@lifeops/core`
|
|
29
|
+
|
|
30
|
+
## Quick example
|
|
31
|
+
|
|
32
|
+
```js
|
|
33
|
+
import { LifeOpsClient, buildProjectSharePacket } from "@lifeops/core";
|
|
34
|
+
import {
|
|
35
|
+
createOrpConnector,
|
|
36
|
+
buildOrpProjectSharePacket,
|
|
37
|
+
} from "@lifeops/orp";
|
|
38
|
+
|
|
39
|
+
const connector = createOrpConnector({
|
|
40
|
+
repoRoot: "/abs/path/to/repo",
|
|
41
|
+
orpCommand: "orp",
|
|
42
|
+
projectName: "My Research Project",
|
|
43
|
+
organization: "ORP",
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
const client = new LifeOpsClient({
|
|
47
|
+
connectors: [connector],
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
const agenda = await client.agenda({
|
|
51
|
+
timezone: "America/Chicago",
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
const sharePacket = await buildOrpProjectSharePacket({
|
|
55
|
+
repoRoot: "/abs/path/to/repo",
|
|
56
|
+
projectName: "My Research Project",
|
|
57
|
+
repoUrl: "https://github.com/example/project",
|
|
58
|
+
recipients: [
|
|
59
|
+
{
|
|
60
|
+
name: "Alicia",
|
|
61
|
+
email: "alicia@example.com",
|
|
62
|
+
whyRecipient: "You care about agent-native workflows and research tooling.",
|
|
63
|
+
},
|
|
64
|
+
],
|
|
65
|
+
buildProjectSharePacket,
|
|
66
|
+
});
|
|
67
|
+
```
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@lifeops/orp",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "ORP companion connector for Life Ops agendas, readiness surfaces, and structured project sharing.",
|
|
5
|
+
"author": "Fractal Research Group <cody@frg.earth>",
|
|
6
|
+
"homepage": "https://github.com/SproutSeeds/orp/tree/main/packages/lifeops-orp",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/SproutSeeds/orp.git",
|
|
10
|
+
"directory": "packages/lifeops-orp"
|
|
11
|
+
},
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/SproutSeeds/orp/issues"
|
|
14
|
+
},
|
|
15
|
+
"type": "module",
|
|
16
|
+
"exports": {
|
|
17
|
+
".": {
|
|
18
|
+
"types": "./src/index.d.ts",
|
|
19
|
+
"import": "./src/index.js"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"files": [
|
|
23
|
+
"src",
|
|
24
|
+
"README.md"
|
|
25
|
+
],
|
|
26
|
+
"scripts": {
|
|
27
|
+
"test": "node --test"
|
|
28
|
+
},
|
|
29
|
+
"engines": {
|
|
30
|
+
"node": ">=20"
|
|
31
|
+
},
|
|
32
|
+
"peerDependencies": {
|
|
33
|
+
"@lifeops/core": "^0.1.0"
|
|
34
|
+
},
|
|
35
|
+
"peerDependenciesMeta": {
|
|
36
|
+
"@lifeops/core": {
|
|
37
|
+
"optional": true
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"keywords": [
|
|
41
|
+
"lifeops",
|
|
42
|
+
"orp",
|
|
43
|
+
"open-research-protocol",
|
|
44
|
+
"agenda",
|
|
45
|
+
"workflow"
|
|
46
|
+
],
|
|
47
|
+
"license": "MIT"
|
|
48
|
+
}
|