@outerlayer/cli 0.15.0 → 0.16.1

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.
Files changed (69) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/{agent-setup-CN2HUBEJ.js → agent-setup-K3ABU5NL.js} +8 -7
  3. package/dist/build-info.json +1 -1
  4. package/dist/{check-2JSSXCKJ.js → check-CNTMSGOG.js} +19 -16
  5. package/dist/{chunk-HFKKFTXU.js → chunk-2MNPHL23.js} +19 -11
  6. package/dist/{chunk-FOJGZYFC.js → chunk-42ZI52JW.js} +1 -1
  7. package/dist/{chunk-SXWS25JC.js → chunk-5FEK6PNE.js} +6 -6
  8. package/dist/{chunk-PQUM37BK.js → chunk-6JNURGOA.js} +1 -1
  9. package/dist/{chunk-JR6ERP3M.js → chunk-6QRMLNH3.js} +1 -1
  10. package/dist/chunk-C5Y5ZJJZ.js +88 -0
  11. package/dist/{chunk-HXLMZOKU.js → chunk-CA3XMYFN.js} +3 -3
  12. package/dist/{chunk-NXUH742G.js → chunk-EHAAPRWY.js} +9 -7
  13. package/dist/{chunk-UUDDPNRJ.js → chunk-EWORLJMO.js} +19 -5
  14. package/dist/{chunk-F7GBYX2P.js → chunk-FWX735W7.js} +18 -4
  15. package/dist/{chunk-3NLOVYJQ.js → chunk-JEHRUE3F.js} +47 -22
  16. package/dist/{chunk-MTF3PHVZ.js → chunk-NBGDBTO2.js} +3 -3
  17. package/dist/{chunk-2M63GG56.js → chunk-OHVJA253.js} +1 -1
  18. package/dist/{chunk-KFRM23WD.js → chunk-ONRCEE6D.js} +2 -2
  19. package/dist/{chunk-T5VPP6H7.js → chunk-OZGHL5Y5.js} +1 -1
  20. package/dist/{chunk-ZA5CHAFY.js → chunk-POJMEEJJ.js} +21 -4
  21. package/dist/{chunk-ASOSIKA4.js → chunk-R4ZQQ7U2.js} +28 -6
  22. package/dist/{chunk-Z3NOIFDR.js → chunk-RSPXEVDX.js} +1 -1
  23. package/dist/{chunk-MSASO5O4.js → chunk-U3HXXRTY.js} +1 -1
  24. package/dist/{chunk-QLTYTPYU.js → chunk-W3EKCZSQ.js} +12 -5
  25. package/dist/{chunk-LCEXHCHD.js → chunk-WTE3MQML.js} +1 -1
  26. package/dist/{cli-RGGXQTWI.js → cli-AEWH62UE.js} +61 -58
  27. package/dist/{command-ETUAEXP2.js → command-HHPBR6CS.js} +8 -7
  28. package/dist/{context-adopt-PJUMW2EZ.js → context-adopt-VMMGFRUZ.js} +5 -4
  29. package/dist/{context-materialize-FDHYKNDT.js → context-materialize-2WXTS4CW.js} +5 -4
  30. package/dist/{doctor-CORFPYY6.js → doctor-N6Y7HKK3.js} +11 -10
  31. package/dist/{emit-artifact-cmd-FOGNJXVR.js → emit-artifact-cmd-H5MH3AOP.js} +2 -2
  32. package/dist/{emit-cmd-ZEYWLC2C.js → emit-cmd-IJ3GVRFD.js} +4 -3
  33. package/dist/{emit-finding-cmd-DLI4MKMN.js → emit-finding-cmd-ZXDRL6PG.js} +158 -45
  34. package/dist/{emit-result-cmd-MUSL7GQA.js → emit-result-cmd-RFKALS5Z.js} +2 -2
  35. package/dist/{hook-fast-WYQD6D7T.js → hook-fast-D7HV4IXG.js} +1 -1
  36. package/dist/{import-capture-cmd-6QVCOIHK.js → import-capture-cmd-EQ35EARA.js} +3 -3
  37. package/dist/{import-ruler-cmd-KLRGRBCP.js → import-ruler-cmd-BGAZXCQM.js} +1 -1
  38. package/dist/index.js +3 -3
  39. package/dist/{init-MIC37V6J.js → init-FBCA4DRA.js} +10 -9
  40. package/dist/{init-OPB7HHXO.js → init-MYX7YMIH.js} +10 -9
  41. package/dist/{init-cmd-JR3RKNFB.js → init-cmd-CAG572UE.js} +9 -8
  42. package/dist/{init-update-O5YYFGF4.js → init-update-VDFF4K3B.js} +9 -8
  43. package/dist/{loop-QNSM5GXS.js → loop-75J4YXLZ.js} +16 -15
  44. package/dist/{machine-IT6GG7FF.js → machine-A6ZCTUGS.js} +8 -7
  45. package/dist/{runner-env-XTC53CHN.js → runner-env-EN7YE7QX.js} +1 -1
  46. package/dist/{runner-key-7SSNMUBQ.js → runner-key-W25ISHI3.js} +10 -9
  47. package/dist/{session-sender-4M247XSV.js → session-sender-24L5EW25.js} +3 -3
  48. package/dist/{starter-pack-IB4UUIX3.js → starter-pack-KF66HGZR.js} +3 -3
  49. package/dist/{status-7ZX57OFJ.js → status-XHSGEYO5.js} +11 -10
  50. package/dist/{sync-cmd-UWD5JOFU.js → sync-cmd-5G5EIEHD.js} +2 -2
  51. package/dist/{watch-DBNB7R6X.js → watch-UTOXO4SE.js} +2 -2
  52. package/dist/{work-claim-cmd-A6IS6CQ7.js → work-claim-cmd-RKHYFE5Y.js} +3 -3
  53. package/dist/{work-cmd-EQSW5DTD.js → work-cmd-DJQJEZVB.js} +1 -1
  54. package/dist/{work-comment-cmd-7VLKI7FN.js → work-comment-cmd-A55CUSYE.js} +1 -1
  55. package/dist/{work-open-pr-cmd-JEVD4HMQ.js → work-open-pr-cmd-E6O53IJD.js} +1 -1
  56. package/package.json +1 -1
  57. package/skill-pack/maintained/{amend → outerlayer-amend}/SKILL.md +2 -2
  58. package/skill-pack/maintained/{outerlayer → outerlayer-cli}/SKILL.md +3 -3
  59. package/skill-pack/maintained/{emitting-evidence → outerlayer-evidence}/SKILL.md +1 -1
  60. package/skill-pack/maintained/{reporting-findings → outerlayer-findings}/SKILL.md +24 -30
  61. package/skill-pack/shipped.json +10 -1
  62. package/skill-pack/template/build/SKILL.md +5 -1
  63. package/skill-pack/template/build/references/agent-briefs.md +7 -1
  64. package/skill-pack/template/build/references/evidence.md +1 -1
  65. package/skill-pack/template/build/references/release.md +1 -1
  66. package/skill-pack/template/build/references/review-briefs.md +6 -0
  67. package/skill-pack/template/writing-specs/SKILL.md +1 -1
  68. /package/skill-pack/maintained/{outerlayer → outerlayer-cli}/references/open-pull-request.md +0 -0
  69. /package/skill-pack/maintained/{emitting-evidence → outerlayer-evidence}/references/agents-snippet.md +0 -0
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { AGENT_COMMANDS, RunnerEnvError, credentialFromStdin, hasStoredCredential, isAgentName, restartForCredential, storeClaudeCredential } from './chunk-T5VPP6H7.js';
3
+ export { AGENT_COMMANDS, RunnerEnvError, credentialFromStdin, hasStoredCredential, isAgentName, restartForCredential, storeClaudeCredential } from './chunk-OZGHL5Y5.js';
4
4
  import './chunk-RLYZLUQ7.js';
5
5
  import './chunk-6MZSX4M7.js';
6
6
  import './chunk-22RMZBGW.js';
@@ -1,15 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { readConfigObject, RunnerInitError } from './chunk-HXLMZOKU.js';
4
- import './chunk-Z3NOIFDR.js';
5
- import './chunk-UUDDPNRJ.js';
3
+ import { readConfigObject, RunnerInitError } from './chunk-CA3XMYFN.js';
4
+ import './chunk-RSPXEVDX.js';
5
+ import './chunk-EWORLJMO.js';
6
6
  import './chunk-KMDLFI4P.js';
7
7
  import './chunk-QKFB4K7X.js';
8
8
  import './chunk-RSNSZ2LJ.js';
9
- import './chunk-T5VPP6H7.js';
9
+ import './chunk-OZGHL5Y5.js';
10
10
  import './chunk-RLYZLUQ7.js';
11
11
  import './chunk-6MZSX4M7.js';
12
- import { postJson, WorkCommandError, getJson } from './chunk-JR6ERP3M.js';
12
+ import { postJson, WorkCommandError, getJson } from './chunk-6QRMLNH3.js';
13
13
  import './chunk-NPQWKGUA.js';
14
14
  import './chunk-IP7BIBXJ.js';
15
15
  import { runnerCredentialProblem } from './chunk-22RMZBGW.js';
@@ -29,13 +29,14 @@ import './chunk-4KSQKQXE.js';
29
29
  import './chunk-N6LURUEF.js';
30
30
  import './chunk-YRYMNBGQ.js';
31
31
  import './chunk-WZBHBH3J.js';
32
- import './chunk-3NLOVYJQ.js';
33
- import './chunk-LCEXHCHD.js';
32
+ import './chunk-JEHRUE3F.js';
33
+ import './chunk-WTE3MQML.js';
34
+ import './chunk-C5Y5ZJJZ.js';
34
35
  import './chunk-ZJSNLVCE.js';
35
36
  import './chunk-YO4PSLVB.js';
36
37
  import './chunk-BYT5O5RV.js';
37
- import './chunk-ZA5CHAFY.js';
38
- import './chunk-2M63GG56.js';
38
+ import './chunk-POJMEEJJ.js';
39
+ import './chunk-OHVJA253.js';
39
40
  import './chunk-PLMTLGYH.js';
40
41
  import './chunk-J5M7BSJQ.js';
41
42
  import { readCloudConfig } from './chunk-EABW6AJQ.js';
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { runSessionSender, senderPidfile, startSessionSender } from './chunk-KFRM23WD.js';
4
- import './chunk-MSASO5O4.js';
3
+ export { runSessionSender, senderPidfile, startSessionSender } from './chunk-ONRCEE6D.js';
4
+ import './chunk-U3HXXRTY.js';
5
5
  import './chunk-HHJDN6AU.js';
6
6
  import './chunk-TBT347UY.js';
7
7
  import './chunk-IP7BIBXJ.js';
@@ -20,7 +20,7 @@ import './chunk-J5M7BSJQ.js';
20
20
  import './chunk-EABW6AJQ.js';
21
21
  import './chunk-V7NIVOFD.js';
22
22
  import './chunk-ZM2IMMYN.js';
23
- import './chunk-PQUM37BK.js';
23
+ import './chunk-6JNURGOA.js';
24
24
  import './chunk-XCCLFVXM.js';
25
25
  import './chunk-BJ3KTMDH.js';
26
26
  import './chunk-VNVZDWO3.js';
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { POLICY_CONTENT, POLICY_PATH, StarterPackError, VALIDATORS_DIR, VALIDATOR_FILES, assertKnownTemplate, formatStarterPackOutput, installStarterPack } from './chunk-FOJGZYFC.js';
3
+ export { POLICY_CONTENT, POLICY_PATH, StarterPackError, VALIDATORS_DIR, VALIDATOR_FILES, assertKnownTemplate, formatStarterPackOutput, installStarterPack } from './chunk-42ZI52JW.js';
4
4
  import './chunk-YRYMNBGQ.js';
5
- import './chunk-ZA5CHAFY.js';
6
- import './chunk-2M63GG56.js';
5
+ import './chunk-POJMEEJJ.js';
6
+ import './chunk-OHVJA253.js';
7
7
  import './chunk-J5M7BSJQ.js';
8
8
  import './chunk-RA3O54FC.js';
9
9
  import './chunk-Z5GEFMRW.js';
@@ -1,18 +1,18 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { LEASE_SECONDS, ALREADY_RELEASED, RENEW_INTERVAL_SECONDS } from './chunk-ASOSIKA4.js';
3
+ import { LEASE_SECONDS, ALREADY_RELEASED, RENEW_INTERVAL_SECONDS } from './chunk-R4ZQQ7U2.js';
4
4
  import './chunk-RMWLBUCJ.js';
5
5
  import './chunk-HYZRY4KZ.js';
6
- import './chunk-KFRM23WD.js';
7
- import './chunk-MSASO5O4.js';
6
+ import './chunk-ONRCEE6D.js';
7
+ import './chunk-U3HXXRTY.js';
8
8
  import './chunk-HHJDN6AU.js';
9
9
  import { formatBytes } from './chunk-YYYRBYWG.js';
10
10
  import './chunk-TBT347UY.js';
11
- import { formatDuration, formatClock, relativeToRunner } from './chunk-UUDDPNRJ.js';
11
+ import { formatDuration, formatClock, relativeToRunner } from './chunk-EWORLJMO.js';
12
12
  import './chunk-KMDLFI4P.js';
13
13
  import './chunk-QKFB4K7X.js';
14
14
  import './chunk-RSNSZ2LJ.js';
15
- import './chunk-JR6ERP3M.js';
15
+ import './chunk-6QRMLNH3.js';
16
16
  import './chunk-NPQWKGUA.js';
17
17
  import './chunk-IP7BIBXJ.js';
18
18
  import './chunk-22RMZBGW.js';
@@ -36,20 +36,21 @@ import './chunk-YRYMNBGQ.js';
36
36
  import './chunk-GQD22KKN.js';
37
37
  import './chunk-WZBHBH3J.js';
38
38
  import './chunk-5QRP3MVS.js';
39
- import './chunk-3NLOVYJQ.js';
40
- import './chunk-LCEXHCHD.js';
39
+ import './chunk-JEHRUE3F.js';
40
+ import './chunk-WTE3MQML.js';
41
+ import './chunk-C5Y5ZJJZ.js';
41
42
  import './chunk-ZJSNLVCE.js';
42
43
  import './chunk-YO4PSLVB.js';
43
44
  import './chunk-BYT5O5RV.js';
44
- import './chunk-ZA5CHAFY.js';
45
- import './chunk-2M63GG56.js';
45
+ import './chunk-POJMEEJJ.js';
46
+ import './chunk-OHVJA253.js';
46
47
  import './chunk-PLMTLGYH.js';
47
48
  import './chunk-J5M7BSJQ.js';
48
49
  import './chunk-EABW6AJQ.js';
49
50
  import './chunk-RA3O54FC.js';
50
51
  import './chunk-V7NIVOFD.js';
51
52
  import { runnerDir, jobsDir } from './chunk-ZM2IMMYN.js';
52
- import './chunk-PQUM37BK.js';
53
+ import './chunk-6JNURGOA.js';
53
54
  import './chunk-XCCLFVXM.js';
54
55
  import './chunk-BJ3KTMDH.js';
55
56
  import './chunk-VNVZDWO3.js';
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { CHUNK_PART_TARGET_BYTES, RETRYABLE_STATUSES, SyncConfigError, SyncTransportError, detectCi, isLoopbackUrl, resolveTier, runSync } from './chunk-MSASO5O4.js';
3
+ export { CHUNK_PART_TARGET_BYTES, RETRYABLE_STATUSES, SyncConfigError, SyncTransportError, detectCi, isLoopbackUrl, resolveTier, runSync } from './chunk-U3HXXRTY.js';
4
4
  import './chunk-HHJDN6AU.js';
5
5
  import './chunk-TBT347UY.js';
6
6
  import './chunk-IP7BIBXJ.js';
@@ -19,7 +19,7 @@ import './chunk-J5M7BSJQ.js';
19
19
  export { cloudConfigPath, readCloudConfig, writeCloudConfig } from './chunk-EABW6AJQ.js';
20
20
  import './chunk-V7NIVOFD.js';
21
21
  import './chunk-ZM2IMMYN.js';
22
- import './chunk-PQUM37BK.js';
22
+ import './chunk-6JNURGOA.js';
23
23
  import './chunk-XCCLFVXM.js';
24
24
  import './chunk-BJ3KTMDH.js';
25
25
  import './chunk-VNVZDWO3.js';
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { LiveUploader } from './chunk-MSASO5O4.js';
3
+ import { LiveUploader } from './chunk-U3HXXRTY.js';
4
4
  import './chunk-HHJDN6AU.js';
5
5
  import './chunk-TBT347UY.js';
6
6
  import './chunk-IP7BIBXJ.js';
@@ -19,7 +19,7 @@ import './chunk-J5M7BSJQ.js';
19
19
  import './chunk-EABW6AJQ.js';
20
20
  import './chunk-V7NIVOFD.js';
21
21
  import './chunk-ZM2IMMYN.js';
22
- import './chunk-PQUM37BK.js';
22
+ import './chunk-6JNURGOA.js';
23
23
  import './chunk-XCCLFVXM.js';
24
24
  import './chunk-BJ3KTMDH.js';
25
25
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { RUNNER_PROTOCOL } from './chunk-ADJRGVZC.js';
4
- import { resolveCredentials, WorkCommandError, parsePositiveInt, postJson, environmentFacts, resolveRepository, findLiveItem } from './chunk-JR6ERP3M.js';
5
- export { WorkCommandError } from './chunk-JR6ERP3M.js';
4
+ import { resolveCredentials, WorkCommandError, parsePositiveInt, postJson, environmentFacts, resolveRepository, findLiveItem } from './chunk-6QRMLNH3.js';
5
+ export { WorkCommandError } from './chunk-6QRMLNH3.js';
6
6
  import './chunk-NPQWKGUA.js';
7
7
  import './chunk-IP7BIBXJ.js';
8
8
  import { defaultRunnerConfigPath } from './chunk-22RMZBGW.js';
@@ -118,7 +118,7 @@ async function runWorkRelease(opts) {
118
118
  { sessionId, ended: true },
119
119
  fetchImpl
120
120
  );
121
- const { markWorkLeaseRenewed } = await import('./hook-fast-WYQD6D7T.js');
121
+ const { markWorkLeaseRenewed } = await import('./hook-fast-D7HV4IXG.js');
122
122
  markWorkLeaseRenewed(sessionId, opts.home ?? homeFromEnv(env));
123
123
  const output2 = opts.json ? JSON.stringify(data2) : `released session ${sessionId}'s lease on #${itemId}, if it held one`;
124
124
  if (!opts.quiet) process.stdout.write(output2 + "\n");
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { WorkCommandError, environmentFacts, findLiveItem, getJson, parsePositiveInt, postJson, resolveCredentials, resolveRepository, runWorkBuild, runWorkLinkSession, runWorkList, runWorkRemove, runWorkStatus } from './chunk-JR6ERP3M.js';
3
+ export { WorkCommandError, environmentFacts, findLiveItem, getJson, parsePositiveInt, postJson, resolveCredentials, resolveRepository, runWorkBuild, runWorkLinkSession, runWorkList, runWorkRemove, runWorkStatus } from './chunk-6QRMLNH3.js';
4
4
  import './chunk-NPQWKGUA.js';
5
5
  import './chunk-IP7BIBXJ.js';
6
6
  import './chunk-YDSMROTB.js';
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { resolveCredentials, postJson, getJson } from './chunk-JR6ERP3M.js';
3
+ import { resolveCredentials, postJson, getJson } from './chunk-6QRMLNH3.js';
4
4
  import './chunk-NPQWKGUA.js';
5
5
  import { detectActiveSession } from './chunk-IP7BIBXJ.js';
6
6
  import './chunk-YDSMROTB.js';
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { itemLabel, runWorkPr, WorkPrCommandError } from './chunk-JJEGKEFV.js';
4
- import { resolveCredentials } from './chunk-JR6ERP3M.js';
4
+ import { resolveCredentials } from './chunk-6QRMLNH3.js';
5
5
  import './chunk-NPQWKGUA.js';
6
6
  import './chunk-IP7BIBXJ.js';
7
7
  import './chunk-YDSMROTB.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@outerlayer/cli",
3
- "version": "0.15.0",
3
+ "version": "0.16.1",
4
4
  "description": "OuterLayer CLI — commands: init, connect, doctor, login, logout, sync, daemon (alias: watch), emit, work, runner, hooks, mcp, import, context. Capture and sync coding-agent sessions, and record proof of factory work.",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Magu Studios, Inc.",
@@ -1,11 +1,11 @@
1
1
  ---
2
- name: amend
2
+ name: outerlayer-amend
3
3
  description: >
4
4
  Answer the review threads waiting on an agent on an open pull request: read each
5
5
  thread a person handed to an agent, fix what it says on the pull request's branch,
6
6
  reply on the thread with a replacement artifact or a sentence, and push. Use when a
7
7
  work item has threads waiting on an agent, or when asked to "answer the review" or
8
- "fix what the reviewer failed". Invoke with /amend.
8
+ "fix what the reviewer failed". Invoke with /outerlayer-amend.
9
9
  ---
10
10
 
11
11
  Answer every thread waiting on an agent on one work item's pull request, then
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: outerlayer
2
+ name: outerlayer-cli
3
3
  description: >
4
4
  Explain what OuterLayer is and how work flows through it: work items, the
5
5
  OUTERLAYER_WORK variable, the factory, and building an issue or specifying one.
@@ -34,9 +34,9 @@ from the output of `outerlayer work build`.
34
34
  instead. With `--local`, the person builds it on their own machine with
35
35
  `OUTERLAYER_WORK=<number> claude "/build"`.
36
36
  4. `outerlayer emit artifact <file> --caption "<what it shows>"` attaches a
37
- screenshot, recording, report or log as evidence. The `emitting-evidence`
37
+ screenshot, recording, report or log as evidence. The `outerlayer-evidence`
38
38
  skill says what to capture.
39
- 5. `/amend` answers the review threads a person handed to an agent.
39
+ 5. `/outerlayer-amend` answers the review threads a person handed to an agent.
40
40
 
41
41
  ## Several repositories
42
42
 
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: emitting-evidence
2
+ name: outerlayer-evidence
3
3
  description: >
4
4
  Emit artifacts — screenshots, recordings, reports, logs — as proof that a
5
5
  change works, bound to the pull request via `outerlayer emit artifact`.
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: reporting-findings
2
+ name: outerlayer-findings
3
3
  description: >
4
4
  Records factory problems: anything in a repository's instructions, tests, tooling or
5
5
  local setup that cost an agent time and was not caused by its own change. Use when
@@ -88,17 +88,24 @@ server join a finding to a known problem without asking you.
88
88
 
89
89
  ## Time lost
90
90
 
91
- When you run `outerlayer emit finding` without `--started-at`, it prints your
92
- recent session events, each with an id and a time:
91
+ Every finding records the time it cost, read from two events of your session
92
+ or its subagents. Never estimate minutes yourself.
93
+
94
+ - Start: `--started-at <id>`, else the first tool output that shows your
95
+ `--error` text. Copy `--error` exactly as the output printed it.
96
+ - End: `--ended-at <id>`, else the newest event. Record as soon as you are
97
+ past the problem, and the default is right.
98
+
99
+ With no start found, nothing is stored and the recent events are listed:
93
100
 
94
101
  ```
95
- e118 14:02:11 agent: Bash: yarn test
102
+ e118 14:02:11 agent: Bash: yarn test
103
+ a5c9fb78:e42 14:09:30 user: result: FAIL src/app.test.ts
96
104
  ```
97
105
 
98
- Run it again with `--started-at <id>` for the event where you first hit the
99
- problem and `--ended-at <id>` for the event where you got past it. The time is
100
- read from those two events. Never estimate minutes yourself. A finding with no
101
- events still counts toward how often the problem occurs.
106
+ Run it again with `--started-at`. A prefixed id is a subagent's event.
107
+ `--find <text>` lists older events containing the text. `--untimed` is only
108
+ for a problem that cost no time here. Never pipe the command through `tail`.
102
109
 
103
110
  ## Linking a finding to a problem
104
111
 
@@ -129,33 +136,28 @@ outerlayer emit finding --id <short-id> --category <category> \
129
136
  --title "<one sentence>" --file <path> [--line <n>] --where "<what you were doing>" \
130
137
  [--cause "<cause>"] [--detail "<text>"] [--suggestion "<text>"] \
131
138
  [--command "<cmd>"] [--error "<first error line>"] [--test "<name>"] [--symbol "<function>"] \
132
- [--started-at <event id> --ended-at <event id>] \
139
+ [--started-at <event id>] [--ended-at <event id>] \
133
140
  [--problem <id> --link-reason "<why>" | --new]
134
141
  ```
135
142
 
136
143
  Inside a recorded session the work item is found automatically. Outside one,
137
144
  add `--item <number>`.
138
145
 
139
- Examples, one per category:
146
+ Examples. The ones with no `--error` name their start:
140
147
 
141
148
  ```bash
142
- outerlayer emit finding --id worktree-hooks --category context \
143
- --title "No document says a fresh worktree has no git hooks until yarn prepare runs" \
144
- --file AGENTS.md --rule-path AGENTS.md --rule-relation missing \
145
- --where "first push from a new worktree"
146
-
147
149
  outerlayer emit finding --id stale-path --category context \
148
150
  --title "The build skill names a directory that no longer exists" \
149
151
  --file .outerlayer/skills/build/SKILL.md --line 42 \
150
152
  --rule-path .outerlayer/skills/build/SKILL.md --rule-line 42 --rule-relation broken \
151
153
  --rule-quote "Read the plan from reports/plan.md" \
152
- --where "implementation stage"
154
+ --where "implementation stage" --started-at e118
153
155
 
154
156
  outerlayer emit finding --id flaky-refresh --category flaky-test \
155
157
  --title "refresh.test.ts fails once, then passes on rerun" \
156
158
  --file apps/tenant-dashboard/src/lib/system/pr-session-comment/__tests__/refresh.test.ts \
157
159
  --test "refreshes the comment after a push" \
158
- --where "vitest run <file> failed, then passed with no change"
160
+ --where "vitest run <file> failed, then passed with no change" --started-at e204
159
161
 
160
162
  outerlayer emit finding --id gate-skip --category tooling \
161
163
  --title "The pre-push gate prints green when a step was skipped" \
@@ -164,19 +166,10 @@ outerlayer emit finding --id gate-skip --category tooling \
164
166
  --cause "the skip path returns before the summary is computed" \
165
167
  --where "expected a failure, got exit 0"
166
168
 
167
- outerlayer emit finding --id shared-db --category environment \
168
- --title "A peer session reset the shared Supabase project mid-run" \
169
- --file apps/tenant-dashboard/supabase/config.toml \
170
- --where "needed a stable database, found it re-seeded"
171
-
172
169
  outerlayer emit finding --id null-read --category defect \
173
170
  --title "readItem throws on an item with no claim" \
174
171
  --file src/lib/work/read.ts --line 88 --symbol readItem \
175
- --where "reproduce: call readItem on a fresh item"
176
-
177
- outerlayer emit finding --id slow-hook --category other \
178
- --title "The session-start hook adds about ten seconds on every launch" \
179
- --file .husky/post-checkout --where "timed with time(1)"
172
+ --where "reproduce: call readItem on a fresh item" --started-at a5c9fb78:e42
180
173
  ```
181
174
 
182
175
  To record several at once, write a JSON batch and run
@@ -207,9 +200,10 @@ To record several at once, write a JSON batch and run
207
200
  }
208
201
  ```
209
202
 
210
- `startedAt` and `endedAt` are event ids from `emit finding`'s list, given
211
- together or not at all. `problems` with `linkReason`, and `new: true`, are
212
- for a finding that needs a choice; give neither and the server decides by key
203
+ `startedAt` and `endedAt` are event ids, defaulting as in `emit finding`. A
204
+ finding with no start found stops the batch; `"untimed": true` is the
205
+ exception. `problems` with `linkReason`, and `new: true`, are for a finding
206
+ that needs a choice; give neither and the server decides by key
213
207
  or lists candidates. `emit findings` stores the findings that match a key,
214
208
  lists the ones that need a choice, and exits with code 3.
215
209
 
@@ -6,15 +6,19 @@
6
6
  "78c95632b51600df0cb2e206d843e75789ccba2f80fd8dfab36d16239062b008"
7
7
  ],
8
8
  ".outerlayer/skills/build/SKILL.md": [
9
+ "0fe8ee00567a1e8942de27597b0a64588fd4b75abd8fb5cd4998785b3e6c7f2b",
9
10
  "5cf9bd75fb1f984f6e6b470d1f1581dc06168abf062448e6f43711fed8f6632a",
10
11
  "6177ea457be0d238659640e6d29807708d60d68533ae3ff93af10fb513139ced",
11
12
  "77cab8b446fb1aa865710f7cb8356c5334301a942f58f9243766bf1acf1377ad",
12
13
  "93953397c31d47a6f1c06edb8ae2190e1d8a3fca20c616deb33991311cee39a8",
13
14
  "a6743050c5c387e962ad4264526d9a3c10edf36823e4b6829f200bf79a4e45e7",
14
15
  "b0aa9b6962675f772b67a4390c15b6b0100390983d958c656a826a066399f3d0",
16
+ "b95986e95ea3b1ef4202f7f0c00bfcd35865d4fda033b3d6947a5bb9d33cd24c",
15
17
  "f4e1661c6f87d7ff6d23c6182530fa0a9cb87c4dc3f31e48f2be11f32ebb2c00"
16
18
  ],
17
19
  ".outerlayer/skills/build/references/agent-briefs.md": [
20
+ "09bfa482e1d7f8ceabd29a6e23e74641f3ff6e655126362d27a05df422c584ed",
21
+ "20eece295abc7ccecd289ce6d408dd3c4c038e2cbfdb3acdba069bd0ccb86496",
18
22
  "3c875a4f287f574eea954c6daa52b17529cdeba8ec4007d78084d911350d1218",
19
23
  "7c2a651e7c827d8e3fb9df889d3776b552eb02d315db5ace27d2baad78aab6a5"
20
24
  ],
@@ -22,19 +26,23 @@
22
26
  "62db8f6d77f31ca25a9071c05429e0f639f9b2bdd7f7cb04cb14a1b0db509537"
23
27
  ],
24
28
  ".outerlayer/skills/build/references/evidence.md": [
29
+ "557d62885555606d64e86cc9fb16a5e2ee0f2257e6fe2aeec5a294292d57cecf",
25
30
  "ceff5488bae31198ed4738ae1a230c0119f973ced439dac360eba6e24e1604f4",
26
31
  "f27502610358e436e7ffb61d4fd281289e162f6de6b2c11396f17b2fa63802c9"
27
32
  ],
28
33
  ".outerlayer/skills/build/references/release.md": [
29
34
  "0b0af40c82473cf192f697537ed5a84801a14e79bb11790d72226d7f7f49cca0",
30
35
  "1113259bdf7d8c28edcbdb9b4c83c2f2bd4c5eaf817cf30bf428478ff91694e9",
36
+ "1d0e000433676a39c7ac4fbf3e92b1fe4235b10240c09f87ec0003f3c8d7956e",
31
37
  "1f4fe97ca8f11d6681db5734f3103af5ea175a9472ff1d38b10cb463f4956a6a",
32
38
  "4687f56bcec766f1926d58a208418f800a1727c073b5e6047b40e3aaac2bd6c9",
33
39
  "81a764eb317fcb4672bedd35e7b9aa68d1c0b73f82fc2dfa03e5a78758db8f14",
34
40
  "985e02b98105b00c356014e003b2d60e9c458c3dcbeef7378274ccb84af031fc"
35
41
  ],
36
42
  ".outerlayer/skills/build/references/review-briefs.md": [
37
- "2c8b436795b583a61aa6f98f48611db554f0dd52b27a9ab748a7db5f96526aec"
43
+ "2c8b436795b583a61aa6f98f48611db554f0dd52b27a9ab748a7db5f96526aec",
44
+ "8f04427895a01c1b86f1ee2caab983163201c75fafe4c0feba02e8f665089aac",
45
+ "a9af0ddd115496480702743e628be3206426c40563f03aa4bb1714176ff70146"
38
46
  ],
39
47
  ".outerlayer/skills/build/references/review-loop.md": [
40
48
  "155ab732ccf4c25f000853e98a27a3d2f3a022c75979601bb71d86f07983216d",
@@ -56,6 +64,7 @@
56
64
  ],
57
65
  ".outerlayer/skills/writing-specs/SKILL.md": [
58
66
  "a956aac4249118a058c4327c5751472883588720950d4a96f80c7e91f454bef9",
67
+ "dbadb39cba5dae936e7c4b97cb852c59072e4a60e44caec01b128a045c1be090",
59
68
  "eb8aa95f5e76a46ae9bf340989fb40e470fd750ded791ba80b5f8c5c325513e5"
60
69
  ],
61
70
  ".outerlayer/skills/writing-specs/references/agents-snippet.md": [
@@ -82,7 +82,7 @@ These bind the orchestrator in every phase. Rule 5 also binds every spawned agen
82
82
  report bodies. Delete both at the end of phase 6.
83
83
  Once a pull request exists, read `outerlayer work threads --item
84
84
  "$OUTERLAYER_WORK" --json`. Each thread with `waitingOn` of `agent` holds a
85
- person's comment. Answer each before the run ends, as the `amend` skill does.
85
+ person's comment. Answer each before the run ends, as the `outerlayer-amend` skill does.
86
86
  5. **A session never records a pass or fail on an artifact.** It emits
87
87
  artifacts. A person decides pass or fail. A build records two results,
88
88
  both verdicts of its own agents: its review's, on the `code-review`
@@ -106,6 +106,10 @@ These bind the orchestrator in every phase. Rule 5 also binds every spawned agen
106
106
  state file. Past three quarters, say where the count stands in the status
107
107
  line. A run that would exceed the budget stops and lists what is left
108
108
  unverified. The review phase also holds a limit on agents in flight.
109
+ 10. **Factory problems are findings.** Every agent records the problems it
110
+ hit outside the change with the `outerlayer-findings` skill, as its brief
111
+ says. The orchestrator records only the ones it hit itself. The final
112
+ report lists every finding by id.
109
113
 
110
114
  ## Phases
111
115
 
@@ -61,6 +61,12 @@ report with the command, and leave that step undone.
61
61
 
62
62
  A session never records a pass or fail on an artifact.
63
63
 
64
+ A problem in the repository's instructions, tests, tooling or setup that
65
+ cost you time, and that the change did not cause, is a finding. Record it with
66
+ the `outerlayer-findings` skill as soon as you are past it, under an id that
67
+ starts with your stage, such as `implement-tooling-1`. End your report with a
68
+ "Factory problems" section that lists each id and title.
69
+
64
70
  Write your full report to the path this brief names. Then return at most ten
65
71
  lines. Anything you leave out of the file is lost to the next stage.
66
72
 
@@ -218,7 +224,7 @@ ten lines naming the CI conclusion, the mergeability and every failed check.
218
224
 
219
225
  ## Evidence brief
220
226
 
221
- The shared rules apply, and the emitting-evidence skill governs the emit
227
+ The shared rules apply, and the outerlayer-evidence skill governs the emit
222
228
  mechanics. Your inputs are the issue, the pull request number, the criteria
223
229
  that declare a proof form, and the instructions-file pointer.
224
230
 
@@ -12,7 +12,7 @@ earlier phase from the state file.
12
12
  The orchestrator does not run the app, drive a browser or emit an artifact
13
13
  itself. Spawn one evidence agent in a fresh context on the Evidence brief, with
14
14
  the issue, the pull request number, the criteria that declare a proof form, the
15
- instructions-file pointer and the emitting-evidence skill.
15
+ instructions-file pointer and the outerlayer-evidence skill.
16
16
 
17
17
  A criterion that declares `proof: screenshot` needs a screenshot bound to its
18
18
  id. One that declares `proof: video` needs a video. A screenshot never
@@ -23,7 +23,7 @@ no telemetry, round tables or reviewer roles. Those go in the final report.
23
23
 
24
24
  How to open it, and how to link it to the work item, depends on whether this is
25
25
  a runner build or a local session. Read
26
- `.outerlayer/skills/outerlayer/references/open-pull-request.md` and follow the
26
+ `.outerlayer/skills/outerlayer-cli/references/open-pull-request.md` and follow the
27
27
  steps for where this build runs.
28
28
 
29
29
  Run the reader pass on the title and body before opening, and after any later
@@ -38,6 +38,12 @@ git.
38
38
  Never ask the user a question. If you need a ruling, state your assumption in
39
39
  your report and continue.
40
40
 
41
+ A problem in the repository's instructions, tests, tooling or setup that
42
+ cost you time, and that the change did not cause, is a finding. Record it with
43
+ the `outerlayer-findings` skill as soon as you are past it, under an id that
44
+ starts with your stage, such as `implement-tooling-1`. End your report with a
45
+ "Factory problems" section that lists each id and title.
46
+
41
47
  You are a cold adversarial reviewer. You know nothing about how this change
42
48
  was built, and that is deliberate. Judge only the branch diff, the issue (its
43
49
  criteria, when it has them, are the definition of done), and the
@@ -103,7 +103,7 @@ implementing. Never write them by reading the finished implementation back.
103
103
  human-visible evidence. Use `video` for a flow of more than one step and
104
104
  `screenshot` for a single state. A test is the proof only where nothing visible
105
105
  changes. The proof shows the running page, never a component render. The
106
- emitting-evidence skill covers capture.
106
+ outerlayer-evidence skill covers capture.
107
107
 
108
108
  ## The two verdicts
109
109