@interf/compiler 0.16.0 → 0.21.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.
Files changed (203) hide show
  1. package/LICENSE.md +1 -0
  2. package/README.md +90 -73
  3. package/TRADEMARKS.md +4 -4
  4. package/dist/cli/commands/mcp.d.ts +0 -34
  5. package/dist/cli/commands/mcp.js +246 -45
  6. package/dist/cli/commands/method.js +261 -15
  7. package/dist/cli/commands/prep.js +116 -15
  8. package/dist/cli/commands/runs.js +103 -9
  9. package/dist/cli/commands/status.js +4 -2
  10. package/dist/cli/commands/test.d.ts +10 -0
  11. package/dist/cli/commands/{verify.js → test.js} +24 -17
  12. package/dist/cli/commands/web.js +82 -8
  13. package/dist/cli/commands/wizard.js +158 -51
  14. package/dist/cli/index.d.ts +2 -2
  15. package/dist/cli/index.js +3 -3
  16. package/dist/compiler-ui/404.html +1 -1
  17. package/dist/compiler-ui/__next.__PAGE__.txt +5 -5
  18. package/dist/compiler-ui/__next._full.txt +13 -12
  19. package/dist/compiler-ui/__next._head.txt +3 -3
  20. package/dist/compiler-ui/__next._index.txt +5 -4
  21. package/dist/compiler-ui/__next._tree.txt +4 -3
  22. package/dist/compiler-ui/_next/static/chunks/01646j7yi.w5a.css +1 -0
  23. package/dist/compiler-ui/_next/static/chunks/{0n51hrfoufc7g.js → 02f_.8.ebn556.js} +1 -1
  24. package/dist/compiler-ui/_next/static/chunks/02r7siaw-_p5w.js +1 -0
  25. package/dist/compiler-ui/_next/static/chunks/{08m7vf5asqlsm.js → 04d0ly-7xb~-j.js} +10 -10
  26. package/dist/compiler-ui/_next/static/chunks/0fhs9psnxqd8s.js +1 -0
  27. package/dist/compiler-ui/_next/static/chunks/0mssmhpbifj15.css +2 -0
  28. package/dist/compiler-ui/_next/static/chunks/0nypu~ddwxari.js +116 -0
  29. package/dist/compiler-ui/_next/static/chunks/0p3s8iyhgcww2.js +31 -0
  30. package/dist/compiler-ui/_next/static/chunks/0tjf-vu_rz8s0.css +1 -0
  31. package/dist/compiler-ui/_next/static/chunks/0u6p3fpbbfgtl.js +1 -0
  32. package/dist/compiler-ui/_next/static/chunks/0wpx5..8dnh0w.js +1 -0
  33. package/dist/compiler-ui/_next/static/chunks/0y0uj160p0ts~.js +1 -0
  34. package/dist/compiler-ui/_next/static/chunks/10t8l~_oenf.c.js +1 -0
  35. package/dist/compiler-ui/_next/static/chunks/13gz9e7z~imx1.js +5 -0
  36. package/dist/compiler-ui/_next/static/chunks/156xed-b6czaw.js +1 -0
  37. package/dist/compiler-ui/_next/static/chunks/{turbopack-0.uq1k8c0j4s..js → turbopack-02-3e_c-yz~5g.js} +1 -1
  38. package/dist/compiler-ui/_next/static/chunks/{turbopack-10e~t1yzi4svj.js → turbopack-0apv8vb-nczuy.js} +1 -1
  39. package/dist/compiler-ui/_not-found/__next._full.txt +10 -9
  40. package/dist/compiler-ui/_not-found/__next._head.txt +3 -3
  41. package/dist/compiler-ui/_not-found/__next._index.txt +5 -4
  42. package/dist/compiler-ui/_not-found/__next._not-found.__PAGE__.txt +2 -2
  43. package/dist/compiler-ui/_not-found/__next._not-found.txt +3 -3
  44. package/dist/compiler-ui/_not-found/__next._tree.txt +3 -2
  45. package/dist/compiler-ui/_not-found.html +1 -1
  46. package/dist/compiler-ui/_not-found.txt +10 -9
  47. package/dist/compiler-ui/index.html +1 -1
  48. package/dist/compiler-ui/index.txt +13 -12
  49. package/dist/packages/contracts/index.d.ts +2 -2
  50. package/dist/packages/contracts/index.js +1 -1
  51. package/dist/packages/contracts/lib/schema.d.ts +275 -72
  52. package/dist/packages/contracts/lib/schema.js +244 -83
  53. package/dist/packages/engine/action-definitions.d.ts +174 -13
  54. package/dist/packages/engine/action-definitions.js +125 -122
  55. package/dist/packages/engine/action-planner.js +4 -11
  56. package/dist/packages/engine/agents/lib/shells.d.ts +15 -5
  57. package/dist/packages/engine/agents/lib/shells.js +134 -123
  58. package/dist/packages/engine/agents/role-executors.js +1 -1
  59. package/dist/packages/engine/cloud-seams.d.ts +115 -0
  60. package/dist/packages/engine/cloud-seams.js +84 -0
  61. package/dist/packages/engine/compile/artifact-counts.d.ts +1 -1
  62. package/dist/packages/engine/compile/artifact-counts.js +3 -3
  63. package/dist/packages/engine/compile/artifact-status.d.ts +41 -0
  64. package/dist/packages/engine/compile/artifact-status.js +166 -0
  65. package/dist/packages/engine/compile/billing-events.d.ts +89 -0
  66. package/dist/packages/engine/compile/billing-events.js +74 -0
  67. package/dist/packages/engine/compile/check-evaluator.d.ts +66 -0
  68. package/dist/packages/engine/compile/check-evaluator.js +298 -0
  69. package/dist/packages/engine/compile/compiled-paths.js +6 -6
  70. package/dist/packages/engine/compile/compiled-schema.d.ts +7 -17
  71. package/dist/packages/engine/compile/compiled-schema.js +55 -70
  72. package/dist/packages/engine/compile/compiled-stage-plan.d.ts +1 -0
  73. package/dist/packages/engine/compile/compiled-stage-plan.js +32 -15
  74. package/dist/packages/engine/compile/compiled-stage-runner.js +1 -1
  75. package/dist/packages/engine/compile/index.d.ts +0 -1
  76. package/dist/packages/engine/compile/index.js +0 -1
  77. package/dist/packages/engine/compile/lib/schema.d.ts +111 -92
  78. package/dist/packages/engine/compile/lib/schema.js +35 -39
  79. package/dist/packages/engine/compile/method-primitives.d.ts +2 -2
  80. package/dist/packages/engine/compile/method-primitives.js +1 -1
  81. package/dist/packages/engine/compile/reset.js +4 -4
  82. package/dist/packages/engine/compile/runtime-contracts.js +2 -1
  83. package/dist/packages/engine/compile/runtime-prompt.js +3 -2
  84. package/dist/packages/engine/compile/runtime-reconcile.js +35 -35
  85. package/dist/packages/engine/compile/runtime-runs.js +0 -1
  86. package/dist/packages/engine/compile/runtime-types.d.ts +7 -8
  87. package/dist/packages/engine/compile/runtime.d.ts +1 -2
  88. package/dist/packages/engine/compile/runtime.js +0 -1
  89. package/dist/packages/engine/compile/state-health.js +6 -6
  90. package/dist/packages/engine/compile/state-view.js +7 -6
  91. package/dist/packages/engine/compile/validate-compiled.js +61 -30
  92. package/dist/packages/engine/compile/validate.js +26 -24
  93. package/dist/packages/engine/connection-config.js +1 -1
  94. package/dist/packages/engine/execution/lib/schema.d.ts +89 -33
  95. package/dist/packages/engine/execution/lib/schema.js +13 -5
  96. package/dist/packages/engine/index.d.ts +2 -2
  97. package/dist/packages/engine/index.js +1 -1
  98. package/dist/packages/engine/instance-paths.d.ts +15 -9
  99. package/dist/packages/engine/instance-paths.js +15 -9
  100. package/dist/packages/engine/lib/schema.d.ts +1316 -351
  101. package/dist/packages/engine/lib/schema.js +99 -36
  102. package/dist/packages/engine/native-run-handlers.js +25 -15
  103. package/dist/packages/engine/preparation-store.d.ts +9 -7
  104. package/dist/packages/engine/preparation-store.js +20 -0
  105. package/dist/packages/engine/requested-artifacts.d.ts +5 -0
  106. package/dist/packages/engine/requested-artifacts.js +36 -0
  107. package/dist/packages/engine/routes.d.ts +7 -1
  108. package/dist/packages/engine/routes.js +7 -1
  109. package/dist/packages/engine/run-observability.js +4 -4
  110. package/dist/packages/engine/runtime-event-applier.js +7 -0
  111. package/dist/packages/engine/runtime-proposal-helpers.d.ts +2 -2
  112. package/dist/packages/engine/runtime-proposal-helpers.js +6 -8
  113. package/dist/packages/engine/runtime-resource-builders.d.ts +11 -6
  114. package/dist/packages/engine/runtime-resource-builders.js +18 -6
  115. package/dist/packages/engine/runtime.d.ts +70 -8
  116. package/dist/packages/engine/runtime.js +304 -49
  117. package/dist/packages/engine/server.d.ts +25 -0
  118. package/dist/packages/engine/server.js +161 -50
  119. package/dist/packages/engine/verify/index.d.ts +10 -10
  120. package/dist/packages/engine/verify/index.js +8 -8
  121. package/dist/packages/engine/verify/readiness-check-run.d.ts +27 -4
  122. package/dist/packages/engine/verify/readiness-check-run.js +92 -24
  123. package/dist/packages/engine/verify/{test-execution.d.ts → verify-execution.d.ts} +2 -2
  124. package/dist/packages/engine/verify/{test-execution.js → verify-execution.js} +3 -3
  125. package/dist/packages/engine/verify/{test-paths.d.ts → verify-paths.d.ts} +1 -1
  126. package/dist/packages/engine/verify/{test-sandbox.d.ts → verify-sandbox.d.ts} +1 -1
  127. package/dist/packages/engine/verify/{test-specs.d.ts → verify-specs.d.ts} +1 -1
  128. package/dist/packages/engine/verify/{test-specs.js → verify-specs.js} +1 -1
  129. package/dist/packages/engine/verify/{test-targets.d.ts → verify-targets.d.ts} +1 -1
  130. package/dist/packages/engine/verify/{test.d.ts → verify.d.ts} +4 -4
  131. package/dist/packages/engine/verify/{test.js → verify.js} +3 -3
  132. package/dist/packages/engine/wire-schemas.d.ts +549 -0
  133. package/dist/packages/engine/wire-schemas.js +59 -0
  134. package/dist/packages/methods/authoring/method-authoring.d.ts +5 -1
  135. package/dist/packages/methods/authoring/method-authoring.js +68 -18
  136. package/dist/packages/methods/authoring/method-edit-session.js +5 -5
  137. package/dist/packages/methods/authoring/method-improvement.js +1 -1
  138. package/dist/packages/methods/package/builtin-compiled-method.d.ts +12 -12
  139. package/dist/packages/methods/package/builtin-compiled-method.js +26 -23
  140. package/dist/packages/methods/package/context-interface.d.ts +39 -26
  141. package/dist/packages/methods/package/context-interface.js +48 -39
  142. package/dist/packages/methods/package/interf-method-package.js +28 -47
  143. package/dist/packages/methods/package/local-methods.d.ts +4 -4
  144. package/dist/packages/methods/package/local-methods.js +53 -66
  145. package/dist/packages/methods/package/method-definitions.d.ts +4 -6
  146. package/dist/packages/methods/package/method-definitions.js +1 -5
  147. package/dist/packages/methods/package/method-helpers.d.ts +0 -2
  148. package/dist/packages/methods/package/method-helpers.js +0 -4
  149. package/dist/packages/project/interf-detect.js +6 -6
  150. package/dist/packages/project/interf-scaffold.js +12 -12
  151. package/dist/packages/project/lib/schema.d.ts +193 -0
  152. package/dist/packages/project/lib/schema.js +46 -1
  153. package/dist/packages/project/source-config.js +6 -1
  154. package/dist/packages/project/source-folders.js +1 -1
  155. package/package.json +12 -23
  156. package/public-repo/CONTRIBUTING.md +47 -0
  157. package/public-repo/LICENSE.md +1 -0
  158. package/public-repo/README.md +325 -0
  159. package/public-repo/SECURITY.md +67 -0
  160. package/public-repo/TRADEMARKS.md +8 -0
  161. package/{builtin-methods → public-repo/methods}/interf-default/README.md +10 -7
  162. package/{builtin-methods → public-repo/methods}/interf-default/compile/stages/shape/SKILL.md +4 -8
  163. package/{builtin-methods → public-repo/methods}/interf-default/method.json +8 -69
  164. package/public-repo/methods/interf-default/method.schema.json +75 -0
  165. package/public-repo/methods/interf-default/use/query/SKILL.md +23 -0
  166. package/public-repo/plugins/README.md +9 -0
  167. package/public-repo/plugins/interf/.claude-plugin/plugin.json +21 -0
  168. package/public-repo/plugins/interf/.mcp.json +12 -0
  169. package/public-repo/plugins/interf/README.md +29 -0
  170. package/public-repo/plugins/interf/skills/interf/SKILL.md +477 -0
  171. package/public-repo/skills/interf/SKILL.md +477 -0
  172. package/agent-skills/interf-actions/SKILL.md +0 -185
  173. package/agent-skills/interf-actions/references/cli.md +0 -243
  174. package/builtin-methods/interf-default/method.schema.json +0 -73
  175. package/builtin-methods/interf-default/use/query/SKILL.md +0 -28
  176. package/dist/cli/commands/verify.d.ts +0 -8
  177. package/dist/compiler-ui/_next/static/chunks/06yhdspx~ca5-.js +0 -5
  178. package/dist/compiler-ui/_next/static/chunks/06z~l3kwb891e.js +0 -1
  179. package/dist/compiler-ui/_next/static/chunks/08g7lvje.te.u.js +0 -1
  180. package/dist/compiler-ui/_next/static/chunks/0_i-3_5l9t2qe.js +0 -1
  181. package/dist/compiler-ui/_next/static/chunks/0b-ywny_j0g~0.js +0 -1
  182. package/dist/compiler-ui/_next/static/chunks/0b52v41o1gixx.js +0 -1
  183. package/dist/compiler-ui/_next/static/chunks/0gpzgsv0w.q~m.js +0 -31
  184. package/dist/compiler-ui/_next/static/chunks/0ilwfezfvu6~-.js +0 -1
  185. package/dist/compiler-ui/_next/static/chunks/0jipmpez3_ehh.js +0 -89
  186. package/dist/compiler-ui/_next/static/chunks/0xxmf45eskdt~.css +0 -1
  187. package/dist/compiler-ui/_next/static/chunks/13awzu4tooflw.css +0 -3
  188. package/dist/compiler-ui/_next/static/chunks/14wtz~vq25~qq.js +0 -1
  189. package/dist/packages/engine/compile/runtime-acceptance.d.ts +0 -9
  190. package/dist/packages/engine/compile/runtime-acceptance.js +0 -265
  191. /package/dist/compiler-ui/_next/static/{a3UiUF0DiMEbfWy_0gihg → tYHMLL9oKds1yDoNYgkPV}/_buildManifest.js +0 -0
  192. /package/dist/compiler-ui/_next/static/{a3UiUF0DiMEbfWy_0gihg → tYHMLL9oKds1yDoNYgkPV}/_clientMiddlewareManifest.js +0 -0
  193. /package/dist/compiler-ui/_next/static/{a3UiUF0DiMEbfWy_0gihg → tYHMLL9oKds1yDoNYgkPV}/_ssgManifest.js +0 -0
  194. /package/dist/packages/engine/verify/{test-paths.js → verify-paths.js} +0 -0
  195. /package/dist/packages/engine/verify/{test-profile-presets.d.ts → verify-profile-presets.d.ts} +0 -0
  196. /package/dist/packages/engine/verify/{test-profile-presets.js → verify-profile-presets.js} +0 -0
  197. /package/dist/packages/engine/verify/{test-sandbox.js → verify-sandbox.js} +0 -0
  198. /package/dist/packages/engine/verify/{test-targets.js → verify-targets.js} +0 -0
  199. /package/dist/packages/engine/verify/{test-types.d.ts → verify-types.d.ts} +0 -0
  200. /package/dist/packages/engine/verify/{test-types.js → verify-types.js} +0 -0
  201. /package/{builtin-methods → public-repo/methods}/interf-default/compile/stages/structure/SKILL.md +0 -0
  202. /package/{builtin-methods → public-repo/methods}/interf-default/compile/stages/summarize/SKILL.md +0 -0
  203. /package/{builtin-methods → public-repo/methods}/interf-default/improve/SKILL.md +0 -0
@@ -0,0 +1,477 @@
1
+ ---
2
+ name: interf
3
+ description: "Use when an agent needs to operate Interf from natural language: install or connect to the local Interf engine, manage Preparations, review Build Plans, compile source files into verifiable Artifacts, and read portable context for agent work."
4
+ ---
5
+
6
+ # Interf
7
+
8
+ Interf prepares data for agent work by compiling source files into verifiable Artifacts and writing portable context that agents can read, so agents work from a verified full picture instead of guessing. It runs locally, shows evidence that the data is ready, and writes portable context that agents can read.
9
+
10
+ The model is **Instance + Preparation + Artifacts + Build Plan**:
11
+
12
+ - **Instance** = the engine (a local `interf web` process, or a future cloud endpoint). Owns all preparation state. Same wire shape both ends.
13
+ - **Source** = input files or data. A local folder is the current binding shape; Interf scans it by reference, not by copy.
14
+ - **Preparation** = the durable wrapper for a Source, agent goal, user instructions, requested Artifacts, Build Plan, connected agents, compile runs, readiness evidence, and portable-context location. Lives inside an instance.
15
+ - **Build Plan** = the user-facing plan for how Interf will compile the requested Artifacts from the Source. It can be a draft candidate, selected for one Preparation, or saved/promoted for reuse. The current CLI/API still stores this through `method_id`.
16
+ - **Method package** = the saved reusable Build Plan implementation (`method.json` + Artifact declarations + stage docs). It can be applied to different Sources and Preparations when installed or promoted.
17
+ - **Artifact** = a Build Plan output agents need, such as an atlas, index, timeline, summary set, claim set, or custom file.
18
+ - **Compile run** = one execution of a Preparation. Append-only. Produces portable context.
19
+
20
+ Agents should think in Artifacts: "what files do I need Interf to compile from this Source so I can do the user's job reliably?"
21
+
22
+ There is **no workspace concept**. The CLI carries one piece of state: the active connection record.
23
+
24
+ When Interf MCP tools are available, prefer them over shelling out to the CLI.
25
+ They are API-backed and, in Cowork, can run from the user's device instead of
26
+ the isolated VM shell. Use the CLI examples below as the fallback and as the
27
+ source of command semantics.
28
+
29
+ ## Connection model
30
+
31
+ The CLI is a thin authorized client of one connected instance. Every mutating command requires a reachable connection. If the active connection is missing or unreachable, the command exits non-zero with:
32
+
33
+ ```text
34
+ Not connected to any Interf instance.
35
+ Start one with `interf web` or `interf web start`, or set --url / `interf login` for a remote one.
36
+ ```
37
+
38
+ There is no hidden auto-start inside mutating commands. Agents must verify a
39
+ connection exists before running mutating commands.
40
+
41
+ Use `interf` when it is installed. If the command is missing, try
42
+ `npx -y @interf/compiler@latest` for this session. If neither works, stop
43
+ before mutating work and say plainly that this runtime can inspect the source
44
+ and propose Artifacts, but cannot create a Preparation or run Interf until the
45
+ CLI is installed or a reachable Interf instance is connected. Do not probe
46
+ machine-specific install paths in the skill flow.
47
+
48
+ Be explicit about which runtime you are using:
49
+
50
+ - **Claude Code local / local terminal**: shell commands run on the user's
51
+ machine. This is the best current path for full Interf execution.
52
+ - **Claude Code remote / cloud session**: shell commands run in the provider's
53
+ cloud environment. It can run Interf only if the Source, CLI, engine, and
54
+ compile-time agent executor are available inside that environment.
55
+ - **Claude Cowork**: shell/code execution may run inside an isolated VM.
56
+ `127.0.0.1` from that shell may refer to the VM, not the Mac/Windows host.
57
+ Do not treat VM shell failure as proof that the user's local Interf engine is
58
+ down. Use a local Interf MCP bridge only when the host has actually launched
59
+ it on the user's device; otherwise use a local Claude Code / Codex session
60
+ for execution.
61
+ - **Computer use**: Claude may be able to operate the user's actual desktop
62
+ apps with permission, but do not rely on screen automation as the primary
63
+ Interf execution path.
64
+
65
+ In Cowork, a plain Skill is guidance only. It can teach Claude when to use
66
+ Interf and how to explain requested Artifacts, but it does not by itself give
67
+ Claude a host-level Interf tool. For full Cowork execution, the host must launch
68
+ a local MCP server or desktop extension whose tools call the Interf service on
69
+ the user's machine. The local tool surface should be `interf mcp`, which
70
+ forwards to the same Interf service API as the CLI and UI. A remote connector is
71
+ useful for Interf Cloud or public HTTPS endpoints; it is not the default way to
72
+ reach `127.0.0.1` on the user's machine.
73
+
74
+ When Interf is unavailable in the current runtime, do not create helper
75
+ scripts, driver files, shell files, or command files for the user to run later.
76
+ Do not write anything into the Source folder. The Source is read-only input.
77
+ Give a short limitation message and the smallest next action instead, such as
78
+ continuing in a local Claude Code / Codex session that can reach the Interf
79
+ engine.
80
+
81
+ For local or containerized agent sessions:
82
+
83
+ ```sh
84
+ interf web # local: foreground server in another terminal
85
+ interf web start # local: managed background server for agent sessions
86
+ interf login --url <...> # remote: writes connection.json
87
+ ```
88
+
89
+ When using the `npx` fallback, replace `interf` in examples with
90
+ `npx -y @interf/compiler@latest`.
91
+
92
+ ## Agent flow
93
+
94
+ 1. **Confirm a connection** — call `interf status` or `interf prep ls`. If the
95
+ command is missing, try the `npx` fallback once. If the command returns
96
+ `Not connected...`, start a managed local engine with `interf web start`,
97
+ then call `interf status` again. If the user already has a visible
98
+ `interf web` terminal running, do not start another engine; just connect to
99
+ it. Track whether you started the engine in this turn. Before ending the
100
+ session, run `interf web stop` if you started it and no compile/test run is
101
+ still active. Do not run foreground `interf web` inside the agent loop
102
+ because it blocks.
103
+ In Cowork, only start or stop Interf from a trusted host-level Interf MCP
104
+ tool or local desktop extension. Do not ask the VM shell to start a local
105
+ Mac/Windows engine and then expect the VM's `127.0.0.1` to reach it.
106
+ 2. **Propose requested Artifacts in human language** — first inspect what you
107
+ can about the Source the user gave you: filenames, file types, obvious page
108
+ counts, section names, and anything that affects the user's question. Treat
109
+ that as an advisory source profile, not proof that Interf processed the
110
+ files. Then propose the Artifacts you need before answering.
111
+
112
+ Focus on what the agent needs Interf to prepare so it does not miss
113
+ important source evidence. Do not turn normal analysis choices into blocking
114
+ questions. If a term is ambiguous but the Source gives reasonable candidates,
115
+ state the assumption and record the ambiguity as an Artifact check. Ask a
116
+ clarification only when the Source or task cannot be identified, or when the
117
+ ambiguity makes the Artifact request impossible to draft.
118
+
119
+ If the user invoked `/interf` or explicitly said to use Interf for this
120
+ task, that is permission to inspect the Source and propose requested
121
+ Artifacts only. Stop after the proposal. Do not create the Preparation,
122
+ draft the Build Plan, or compile until the user explicitly says to create,
123
+ draft, proceed, or do the flow end-to-end.
124
+
125
+ Do not show JSON to the user. Do not copy example wording from this skill.
126
+ Do not use technical labels such as "scope resolver", "evidence map",
127
+ "market page relevance map", or "comparison evidence". Use short names a
128
+ knowledge worker understands. Prefer a few meaningful Artifacts, but do not
129
+ invent a fixed maximum.
130
+
131
+ Keep the first proposal compact enough to fit on one screen:
132
+
133
+ - one sentence naming the source and what you know about it
134
+ - one short sentence explaining why Interf helps for this task
135
+ - one short sentence for any important ambiguity, phrased as an assumption
136
+ - a compact numbered list of Artifacts
137
+ - one final line asking the user to approve or edit
138
+
139
+ Do not use markdown tables; some chat surfaces collapse them into unreadable
140
+ text. Do not write Artifact entries as paragraphs. For each Artifact, use a
141
+ readable mini-card:
142
+
143
+ - Artifact name as the numbered line, in bold
144
+ - `Why it helps:` one short sentence
145
+ - `Checks:` followed by two or three plain-English bullet points
146
+
147
+ Each check must be a complete human-readable sentence, not compressed
148
+ shorthand. Keep checks concrete enough that a user can say "yes, that is
149
+ what I wanted." Do not include extracted numbers, chart readings, JSON
150
+ fields, stage names, or commands in the human proposal. Detailed numbers
151
+ belong in the compiled Artifacts, not in the proposal.
152
+
153
+ Format shape. Replace the placeholders with the actual source and task; do
154
+ not output angle-bracket placeholders.
155
+
156
+ ```text
157
+ I found <source summary>. For <task>, I should prepare the source first because <risk>.
158
+ <Optional ambiguity or assumption in one sentence.>
159
+
160
+ 1. **<Plain-English name>**
161
+ Why it helps: <short sentence>
162
+ Checks:
163
+ - <human-readable check>
164
+ - <human-readable check>
165
+
166
+ If this looks right, tell me to create the Preparation and draft the Build Plan for review. I will stop here until you approve it.
167
+ ```
168
+
169
+ Store the same proposal as structured
170
+ `requested_artifacts[]` on the Preparation. Store the advisory source
171
+ interpretation as `source_profile` when useful. `requested_artifacts[]`
172
+ requires only a `title`; include `purpose`, `checks[]`, and stable `id`
173
+ values when you know them. Only include exact `output.shape` / typed output
174
+ checks when you already know the required Build Plan output contract.
175
+ 3. **List or create a preparation after the user approves the Artifact proposal** —
176
+ ```sh
177
+ interf prep ls # see what exists
178
+ interf prep create <id> --source <path> [--about "<agent job>"] \
179
+ --requested-artifacts-json '<json-array>' \
180
+ --source-profile-json '<json-object>'
181
+ interf prep set-method <id> <method-id> # select later if needed
182
+ ```
183
+ Keep JSON out of the human proposal. Use compact JSON only in the command
184
+ or API request after the user confirms.
185
+ 4. **Draft the Build Plan after the user approves the Artifact proposal unless the user chose a saved one** — for real
186
+ analytical work, the recommended path is a custom Build Plan for this
187
+ Preparation. Do not silently bind `interf-default` as the final plan just
188
+ because it exists. Use `interf-default` only when the user explicitly asks
189
+ for the default/smoke-test flow or when you need a temporary fallback.
190
+
191
+ If the user has not chosen an existing Build Plan, say plainly:
192
+
193
+ ```text
194
+ I'll create the Preparation and draft a custom Build Plan for review. This may take a few minutes. I'll send the review link when the plan is ready; I will not compile until you approve it.
195
+ ```
196
+
197
+ Then run:
198
+
199
+ ```sh
200
+ interf method draft <prep-id> \
201
+ --task "<agent job>" \
202
+ --artifacts "<optional extra Artifact notes or change request>" \
203
+ --ready-when "<proof and coverage the user should trust>"
204
+ interf runs status <run-id> # poll until the draft run is terminal
205
+ interf method show <method-id> # summarize the drafted Build Plan headlessly
206
+ ```
207
+
208
+ Do not generate custom shell polling loops. In Cowork or any MCP-enabled
209
+ host, use the Interf MCP `runs_status` tool for status checks. In CLI-only
210
+ hosts, run `interf runs status <run-id>` as a single command when you need a
211
+ fresh status, or share the run link and continue without blocking. Avoid
212
+ asking the user to approve repeated polling commands.
213
+
214
+ `interf method draft` automatically receives saved `requested_artifacts[]`
215
+ and `source_profile` from the Preparation. If you already resolved exact
216
+ Build Plan output constraints, pass them with
217
+ `--artifact-requirements-json '<json-array>'`; otherwise let the Build Plan
218
+ draft agent decide the output paths and checks from the requested Artifacts.
219
+
220
+ While the Build Plan is being drafted, do not show the Preparation review
221
+ link as if the plan is ready. You may show the run link so the user can see
222
+ activity, but the review link comes after the draft run finishes and the
223
+ candidate Build Plan is available. After the draft finishes, show the user a
224
+ short text summary of the Build Plan Artifacts and stages from
225
+ `interf method show <method-id>` so review works even when they do not open
226
+ the UI.
227
+ 5. **Show the review link before compile by default** — after the Build Plan is
228
+ drafted, selected, or materially changed, send the user to the Preparation
229
+ Build Plan review:
230
+ ```text
231
+ http://127.0.0.1:4873/?section=preparations&preparation=<prep-id>&preparationTab=build-plan
232
+ ```
233
+ Build Plan drafting creates or updates a candidate plan with its own Activity
234
+ record. A successful draft run selects that Build Plan on the Preparation so
235
+ the review page is concrete; it still does not mean the user approved a
236
+ compile run.
237
+ The thing to review is the requested Artifacts and the Build Plan: which
238
+ Artifacts will be compiled, why the agent needs them, which stages will
239
+ build them, and what proof should show the Source was fully processed.
240
+ Include the same information in the chat as a compact summary: requested
241
+ Artifacts, stage names, and what each stage writes.
242
+ Unless the user explicitly asked you to handle the whole flow autonomously,
243
+ pause here so they can select, remove, or ask you to change the proposed
244
+ Artifacts, then select the candidate Build Plan for the Preparation before
245
+ you start a compile run. If the plan should be reused, save/promote it as a
246
+ Method package. If they ask for changes, draft/improve the Build Plan and
247
+ show the review link again. If they already granted autonomy, you may select
248
+ the candidate Build Plan and compile, but still print the Artifacts review
249
+ link and the compile run link so the user can inspect what happened.
250
+ 6. **Compile** — preparation id is positional:
251
+ ```sh
252
+ interf compile <prep-id> [--watch] [--quiet] [--idempotency-key <key>]
253
+ ```
254
+ Default is async-return: prints `run id`, the artifact `locator`, and current readiness. With `--quiet`, only the locator is printed. With `--watch`, the CLI tails events until the run reaches a terminal state.
255
+ 7. **Inspect runs** —
256
+ ```sh
257
+ interf runs status <run-id>
258
+ interf runs ls [--prep <id>]
259
+ interf runs fetch <run-id> --to <abs-path>
260
+ interf runs cancel <run-id>
261
+ ```
262
+ 8. **Read the portable context** — for a local engine the locator is a `local-path` you can open directly with any tool. For a remote engine it is a signed `remote-url`; `interf runs fetch` localizes it.
263
+ 9. **On `not ready`**, propose Build Plan improvement:
264
+ ```sh
265
+ interf method improve <prep-id> \
266
+ --task "<what needs to change>" \
267
+ --artifacts "<Artifact changes, if any>" \
268
+ --ready-when "<proof or coverage changes, if any>"
269
+ ```
270
+
271
+ ## Connected agents and the role map
272
+
273
+ Interf treats the agents it can shell out to (Claude Code, Codex, custom CLIs) as a first-class primitive. `GET /v1/instance` reports `agent_count` and `default_agent`; if `agent_count` is `0`, **`interf compile` and `interf test` will hard-error** — install one or register a custom CLI before retrying.
274
+
275
+ ```sh
276
+ interf agents ls # list registered + detected agents
277
+ interf agents use <name> # set the active agent (sweeps role map)
278
+ interf agents register <name> --command "<cmd>" # register a custom CLI
279
+ interf agents unregister <name> # remove a custom CLI
280
+ interf agents map <role> <agent> # pin a role to an agent
281
+ interf agents unmap <role> # fall back to the active agent
282
+ ```
283
+
284
+ Roles are: `extractor`, `summarizer`, `structurer`, `verifier`, `general` (Build Plans / Method packages may declare custom names; the engine treats unknown roles as `general`). Default behavior is single-active-agent — every role maps to the same agent — so existing agent flows do not change unless the user opts into per-role specialization.
285
+
286
+ ## Agent contract — flags every CLI run uses
287
+
288
+ | Flag | What it controls | When the agent passes it |
289
+ |---|---|---|
290
+ | `--url <url>` | Override the active connection URL for one call. | When the user has multiple instances and wants to target a specific one without changing the active connection record. |
291
+ | `--token <token>` | Override the active bearer token for one call. | Cloud / non-loopback connections only. |
292
+ | `--watch` | Block until the run finishes and tail stages. | Only when the agent must wait inline. Default is async return-with-id. |
293
+ | `--quiet` | Print only the artifact locator on success. | Scripting and agent handoff. |
294
+ | `--idempotency-key <key>` | Sent as `X-Interf-Idempotency-Key`. The instance caches the key for an hour and returns the original run id on retries instead of starting a fresh run. | Whenever the agent might retry the same compile. |
295
+ | `--to <abs-path>` | (`interf runs fetch`) Absolute destination to copy portable context into. | When the agent needs portable context outside the instance. |
296
+
297
+ ## Operating rules
298
+
299
+ - Use exact preparation ids and Build Plan / Method-package ids returned by the API. Do not invent ids.
300
+ - Always confirm a connection exists before running mutating commands. If no
301
+ instance is connected, explicitly run `interf web start` for an agent-owned
302
+ local/container session, ask the user to start foreground `interf web` when
303
+ they want to own the engine, or connect a remote instance. Do not call
304
+ foreground `interf web` inside the agent loop because it blocks.
305
+ - For long-running work, use the async default and check status by id (`interf runs status <id>`). Only use `--watch` when the agent must wait inline.
306
+ - Do not call the local HTTP API directly unless Interf explicitly gives an API-integration task. Use CLI commands for normal agent work.
307
+ - If the user invoked `/interf` or explicitly asked to use Interf for a data
308
+ task, stop after the concise Artifact proposal. Do not create the
309
+ Preparation or start the Build Plan draft run until the user explicitly
310
+ approves the proposal or grants autonomy. Print run links only after a run
311
+ actually starts.
312
+ - Do not create shell scripts or handoff files when the CLI is unavailable.
313
+ Never write helper files into the Source folder. If you cannot run Interf,
314
+ say that directly and stop after the Artifact proposal.
315
+ - Treat requested-Artifact and Build Plan review as the default human trust
316
+ gate. Do not bury the proposed Artifacts in prose; link the user to the
317
+ Preparation Build Plan review before compile when the Build Plan was newly drafted or
318
+ materially changed. Drafted Build Plans are candidates until they are selected
319
+ for the Preparation by the user or by an agent acting under explicit autonomy.
320
+ Save/promote a useful plan as a Method package when reuse matters.
321
+ - When the user asks for a new analysis over their data, prefer “create
322
+ Preparation → draft custom Build Plan → show review link → compile after
323
+ approval.” Only use `interf-default` as the selected Build Plan when the user
324
+ explicitly asks for the default, asks for a fast smoke test, or accepts that
325
+ fallback after you explain the tradeoff.
326
+ - When drafting or improving a Build Plan, pass the user's requested Artifact
327
+ shape and change request in the UI/action form when available. From CLI,
328
+ pass the request through `--task`, `--artifacts`, and `--ready-when` so the
329
+ Build Plan run has the actual user intent, not just the Preparation id.
330
+ - Separate proposal from proof. Before compile, you can say what Interf plans
331
+ to build and what coverage/proof it will check. After compile, you can say
332
+ which files/pages were processed, what evidence was produced, and whether
333
+ portable context is ready.
334
+ - In review copy, lead with proposed Artifacts and the stage plan that will
335
+ build them. The Method package is the technical container; the user's decision
336
+ is whether those Artifacts and the Build Plan are the right portable context
337
+ for the agent work.
338
+ - Ask one concise clarification only when the Source or agent goal is missing,
339
+ or when the ambiguity makes the requested Artifacts impossible to draft. For
340
+ normal domain ambiguity, state the assumption and make it a check in the
341
+ requested Artifacts / Build Plan.
342
+
343
+ ## Show your work — always print the run URL
344
+
345
+ Interf Compiler UI is the user's verification surface. The agent does
346
+ the work; the user clicks a URL to see live trace, events, readiness,
347
+ and proof. **Whenever you kick off a run, print a deep-link to the run
348
+ page in the same message as the run id.** The user should never have
349
+ to navigate the UI manually to find what you just started.
350
+
351
+ The base URL is whatever `interf status` reports as the connected
352
+ instance (e.g. `http://127.0.0.1:4873` for a local engine,
353
+ `https://api.interf.cloud/...` for cloud). Append query params:
354
+
355
+ | Param | Value |
356
+ |---|---|
357
+ | `preparation` | the preparation id |
358
+ | `run` | the run id returned by the CLI |
359
+ | `runTab` | optional: `trace` (default), `events`, or `readiness` |
360
+
361
+ **Example output after `interf compile <prep-id>`:**
362
+
363
+ ```text
364
+ Started compile run <run-id>.
365
+ Watch live: http://127.0.0.1:4873/?preparation=<prep-id>&run=<run-id>
366
+
367
+ I'll check status in a moment with `interf runs status <run-id>`.
368
+ ```
369
+
370
+ The same pattern applies to readiness-check, Build Plan improvement, and
371
+ Build Plan authoring runs. When a run finishes, print the same URL with
372
+ `runTab=readiness` so the user can click through to the readiness summary.
373
+
374
+ The agent stays the executor; the URL is the user's "I can see what's
375
+ happening" handle. It also makes failures self-explanatory — when a run
376
+ errors, the user clicks through to the same trace the agent is reading.
377
+
378
+ ## Reading the artifact locator
379
+
380
+ `interf compile <prep-id>` prints a short multi-line block by default. The portable-context locator looks like one of:
381
+
382
+ ```text
383
+ Portable context: <local-path-returned-by-interf>
384
+ ```
385
+
386
+ ```text
387
+ Portable context: https://api.interf.cloud/v1/runs/run_2x4abc.../portable-context
388
+ ```
389
+
390
+ For `local-path`, use the agent's filesystem tools to read the directory. For `remote-url`, use HTTP or `interf runs fetch <run-id> --to <path>`.
391
+
392
+ ## Interf Compiler UI freeform proposal mode
393
+
394
+ When Interf Compiler UI asks for a proposal, do not run CLI commands. Write a single JSON object to the requested output path. Structured UI controls call the local service directly; this mode is only for freeform planning.
395
+
396
+ Use these action types:
397
+
398
+ - `compile`
399
+ - `test`
400
+ - `readiness-check-draft`
401
+ - `method-authoring`
402
+ - `method-improvement`
403
+ - `clarification`
404
+
405
+ Use `compile` when the user asks to prepare data, build artifacts, refresh portable context, or compile source files for agent work. Set `method` to the selected Build Plan id, and, if the request named one, `preparation` to the preparation id. CLI equivalent: `interf compile <prep-id>`.
406
+
407
+ Readiness-check proposals always run against the compiled portable context in 0.15+. The legacy `values.mode` field is gone — omit it from `test` proposals.
408
+
409
+ Return this shape:
410
+
411
+ ```json
412
+ {
413
+ "action_type": "compile",
414
+ "method": "method-id",
415
+ "preparation": "prep-id",
416
+ "title": "short approval card title",
417
+ "summary": "one sentence describing which artifacts will be compiled",
418
+ "assistant_message": "concise explanation for the user",
419
+ "command_preview": "interf compile prep-id"
420
+ }
421
+ ```
422
+
423
+ For Build Plan drafting proposals, keep requested Artifacts structured in
424
+ `values.requested_artifacts[]` and keep the advisory source summary in
425
+ `values.source_profile`. Do not flatten them into prose only:
426
+
427
+ ```json
428
+ {
429
+ "action_type": "method-authoring",
430
+ "preparation": "prep-id",
431
+ "method": "prep-id-build-plan",
432
+ "title": "Draft Build Plan",
433
+ "summary": "Drafts the Build Plan for the requested Artifacts.",
434
+ "values": {
435
+ "method_id": "prep-id-build-plan",
436
+ "task_prompt": "London versus South West annual take-up",
437
+ "requested_artifacts": [
438
+ {
439
+ "title": "Guide to the report",
440
+ "purpose": "A short note for each page, so the agent knows what is where.",
441
+ "checks": ["Every page is listed.", "Each page has a plain-English summary."]
442
+ }
443
+ ],
444
+ "source_profile": {
445
+ "summary": "One 26-page office market report.",
446
+ "observations": ["No obvious section is called South West."]
447
+ }
448
+ }
449
+ }
450
+ ```
451
+
452
+ Use `clarification` only when the request cannot be mapped safely to one Interf action.
453
+
454
+ ## Reference
455
+
456
+ For exact CLI syntax, run the installed command's help:
457
+
458
+ ```sh
459
+ interf --help
460
+ interf <command> --help
461
+ interf <command> <subcommand> --help
462
+ ```
463
+
464
+ The installed `interf` command is the source of truth. Do not rely on a copied
465
+ command reference when the CLI is available.
466
+
467
+ Use CLI read commands before asking the user to inspect the UI:
468
+
469
+ ```sh
470
+ interf status
471
+ interf prep show <prep-id>
472
+ interf method show <method-id>
473
+ interf runs status <run-id>
474
+ ```
475
+
476
+ The UI link is for visual proof. The CLI output is for agent-readable status,
477
+ Build Plan review, Artifact status, run errors, proof, and readiness summaries.
@@ -1,185 +0,0 @@
1
- ---
2
- name: interf-actions
3
- description: Use when an agent needs to operate Interf from natural language: connect to an instance, manage preparations, compile a Method against a Source Folder, propose safe CLI commands, or write action proposals for Interf Compiler UI.
4
- ---
5
-
6
- # Interf Actions
7
-
8
- Interf prepares data for agent work. It runs locally, processes source files, shows evidence that the data is ready, and writes portable context: a local folder agents can read from.
9
-
10
- The model in 0.13 is **instance + preparation**:
11
-
12
- - **Instance** = the engine (a local `interf web` process, or a future cloud endpoint). Owns all preparation state. Same wire shape both ends.
13
- - **Method** = reusable recipe (`method.json` + stage docs). A package, no runtime state. Lives bundled with `@interf/compiler` or installed in the user library at `~/.interf/methods/<id>/`.
14
- - **Preparation** = a unit of work — `id + source binding + method + readiness checks + run history`. The project-level identifier the agent names. Lives inside an instance.
15
- - **Compile run** = one execution of a Preparation. Append-only. Produces portable context.
16
-
17
- A **Source Folder** is the agent's input — files Interf scans by reference, not by copy. The agent's executor reads them; Interf never copies.
18
-
19
- There is **no workspace concept** in 0.13. The CLI carries one piece of state: the active connection at `~/.interf/connection.json`.
20
-
21
- ## Connection model
22
-
23
- The CLI is a thin authorized client of one connected instance. Every mutating command requires a reachable connection. If `~/.interf/connection.json` is missing or unreachable, the command exits non-zero with:
24
-
25
- ```text
26
- Not connected to any Interf instance.
27
- Start one with `interf web`, or set --url / `interf login` for a remote one.
28
- ```
29
-
30
- There is **no auto-start**. Agents must verify a connection exists before running mutating commands. To set up a connection:
31
-
32
- ```sh
33
- interf web # local: starts the engine in the foreground (blocks)
34
- interf login --url <…> # remote: writes connection.json
35
- ```
36
-
37
- ## Agent flow
38
-
39
- 1. **Confirm a connection** — call `interf status` or `interf prep ls`. If they return `Not connected…`, ask the user to start an instance.
40
- 2. **List or create a preparation** —
41
- ```sh
42
- interf prep ls # see what exists
43
- interf prep create <id> --source <path> --method <method-id> # create one
44
- ```
45
- 3. **Compile** — preparation id is positional:
46
- ```sh
47
- interf compile <prep-id> [--watch] [--quiet] [--idempotency-key <key>]
48
- ```
49
- Default is async-return: prints `run id`, the artifact `locator`, and current readiness. With `--quiet`, only the locator is printed (suitable for `$(interf compile bristol --quiet)/home.md`). With `--watch`, the CLI tails events until the run reaches a terminal state.
50
- 4. **Inspect runs** —
51
- ```sh
52
- interf runs status <run-id>
53
- interf runs watch <run-id>
54
- interf runs ls [--prep <id>]
55
- interf runs fetch <run-id> --to <abs-path>
56
- interf runs cancel <run-id>
57
- ```
58
- 5. **Read the portable context** — for a local engine the locator is a `local-path` you can open directly with any tool. For a remote engine it is a signed `remote-url`; `interf runs fetch` localizes it.
59
- 6. **On `not ready`**, propose method improvement:
60
- ```sh
61
- interf method improve <prep-id>
62
- ```
63
-
64
- ## Connected agents and the role map
65
-
66
- Interf treats the agents it can shell out to (Claude Code, Codex, custom CLIs) as a first-class primitive. `GET /v1/instance` reports `agent_count` and `default_agent`; if `agent_count` is `0`, **`interf compile` and `interf verify` will hard-error** — install one or register a custom CLI before retrying.
67
-
68
- ```sh
69
- interf agents ls # list registered + detected agents
70
- interf agents use <name> # set the active agent (sweeps role map)
71
- interf agents register <name> --command "<cmd>" # register a custom CLI
72
- interf agents unregister <name> # remove a custom CLI
73
- interf agents map <role> <agent> # pin a role to an agent
74
- interf agents unmap <role> # fall back to the active agent
75
- ```
76
-
77
- Roles are: `extractor`, `summarizer`, `structurer`, `verifier`, `general` (Methods may declare custom names; the engine treats unknown roles as `general`). Default behavior is single-active-agent — every role maps to the same agent — so existing agent flows do not change unless the user opts into per-role specialization.
78
-
79
- ## Agent contract — flags every CLI run uses
80
-
81
- | Flag | What it controls | When the agent passes it |
82
- |---|---|---|
83
- | `--url <url>` | Override the active connection URL for one call. | When the user has multiple instances and wants to target a specific one without rewriting `~/.interf/connection.json`. |
84
- | `--token <token>` | Override the active bearer token for one call. | Cloud / non-loopback connections only. |
85
- | `--watch` | Block until the run finishes and tail stages. | Only when the agent must wait inline. Default is async return-with-id. |
86
- | `--quiet` | Print only the artifact locator on success. | Scripting (`$(interf compile bristol --quiet)`). |
87
- | `--idempotency-key <key>` | Sent as `X-Interf-Idempotency-Key`. The instance caches the key for an hour and returns the original run id on retries instead of starting a fresh run. | Whenever the agent might retry the same compile. |
88
- | `--to <abs-path>` | (`interf runs fetch`) Absolute destination to copy portable context into. Must be empty or non-existent unless `--overwrite` is set. | When the agent needs portable context outside the instance. |
89
- | `--overwrite` | (`interf runs fetch`) Allow copying into a destination that already has files. | Only when the agent wants to replace existing files. |
90
-
91
- ## Operating rules
92
-
93
- - Use exact preparation ids and Method ids returned by the API. Do not invent ids.
94
- - Always confirm a connection exists before running mutating commands. Agents must not call `interf web` themselves — that command blocks the foreground; running it inside an agent loop hangs the loop.
95
- - For long-running work, use the async default and check status by id (`interf runs status <id>`). Only use `--watch` when the agent must wait inline.
96
- - Do not call the local HTTP API directly unless Interf explicitly gives an API-integration task. Use CLI commands for normal agent work.
97
- - Propose the command first and wait for approval before running commands that write files, start runs, create Method packages, build portable context, or run readiness checks.
98
- - If the request is ambiguous, ask one concise clarification instead of guessing.
99
-
100
- ## Show your work — always print the run URL
101
-
102
- Interf Compiler UI is the user's verification surface. The agent does
103
- the work; the user clicks a URL to see live trace, events, readiness,
104
- and proof. **Whenever you kick off a run, print a deep-link to the run
105
- page in the same message as the run id.** The user should never have
106
- to navigate the UI manually to find what you just started.
107
-
108
- The base URL is whatever `interf status` reports as the connected
109
- instance (e.g. `http://127.0.0.1:4873` for a local engine,
110
- `https://api.interf.cloud/...` for cloud). Append query params:
111
-
112
- | Param | Value |
113
- |---|---|
114
- | `preparation` | the preparation id |
115
- | `run` | the run id returned by the CLI |
116
- | `runTab` | optional: `trace` (default), `events`, or `readiness` |
117
-
118
- **Example output after `interf compile serge`:**
119
-
120
- ```text
121
- Started compile run compile_8x2abc...
122
- Watch live: http://127.0.0.1:4873/?preparation=serge&run=compile_8x2abc...
123
-
124
- I'll check status in a moment with `interf runs status compile_8x2abc...`.
125
- ```
126
-
127
- The same pattern applies to verify, method-improvement, and method-authoring
128
- runs. When a run finishes, print the same URL with `runTab=readiness` so the
129
- user can click through to the readiness summary.
130
-
131
- The agent stays the executor; the URL is the user's "I can see what's
132
- happening" handle. It also makes failures self-explanatory — when a run
133
- errors, the user clicks through to the same trace the agent is reading.
134
-
135
- ## Reading the artifact locator
136
-
137
- `interf compile <prep-id>` prints a short multi-line block by default. The portable-context locator looks like one of:
138
-
139
- ```text
140
- Portable context: /Users/me/.interf/preparations/bristol/portable-context
141
- ```
142
-
143
- ```text
144
- Portable context: https://api.interf.cloud/v1/runs/run_2x4abc.../portable-context
145
- ```
146
-
147
- For `local-path`, use the agent's filesystem tools to read the directory. For `remote-url`, use HTTP or `interf runs fetch <run-id> --to <path>`.
148
-
149
- ## Interf Compiler UI freeform proposal mode
150
-
151
- When Interf Compiler UI asks for a proposal, do not run CLI commands. Write a single JSON object to the requested output path. Structured UI controls call the local service directly; this mode is only for freeform planning.
152
-
153
- Use these action types:
154
-
155
- - `compile`
156
- - `test`
157
- - `readiness-check-draft`
158
- - `method-authoring`
159
- - `method-improvement`
160
- - `clarification`
161
-
162
- Use `compile` when the user asks to prepare, build, or refresh portable context. Set `method` to the Method id and, if the request named one, `preparation` to the preparation id. CLI equivalent: `interf compile --method`.
163
-
164
- Readiness-check proposals always run against the compiled portable context in 0.15+. The legacy `values.mode` field is gone — omit it from `test` proposals.
165
-
166
- Return this shape:
167
-
168
- ```json
169
- {
170
- "action_type": "compile",
171
- "method": "method-id",
172
- "preparation": "prep-id",
173
- "values": { "mode": "both if applicable" },
174
- "title": "short approval card title",
175
- "summary": "one sentence describing what will run",
176
- "assistant_message": "concise explanation for the user",
177
- "command_preview": "interf compile --method method-id"
178
- }
179
- ```
180
-
181
- Use `clarification` only when the request cannot be mapped safely to one Interf action.
182
-
183
- ## Reference
184
-
185
- For the full CLI surface and per-command flags, see [`references/cli.md`](./references/cli.md). It is a generated snapshot of `interf <command> --help` and is checked against the built package in the repo test suite. The installed `interf` command remains the source of truth when available.