@kindgi/cli 0.1.7 → 0.1.8

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 (219) hide show
  1. package/README.md +1 -1
  2. package/dist/api-address.d.ts +57 -0
  3. package/dist/api-address.d.ts.map +1 -0
  4. package/dist/api-address.js +144 -0
  5. package/dist/api-address.js.map +1 -0
  6. package/dist/build/defaults.d.ts +9 -0
  7. package/dist/build/defaults.d.ts.map +1 -1
  8. package/dist/build/defaults.js +132 -30
  9. package/dist/build/defaults.js.map +1 -1
  10. package/dist/build/hosted.d.ts +32 -0
  11. package/dist/build/hosted.d.ts.map +1 -0
  12. package/dist/build/hosted.js +62 -0
  13. package/dist/build/hosted.js.map +1 -0
  14. package/dist/build/runners.d.ts +10 -0
  15. package/dist/build/runners.d.ts.map +1 -1
  16. package/dist/commands/adapters.d.ts.map +1 -1
  17. package/dist/commands/adapters.js +5 -9
  18. package/dist/commands/adapters.js.map +1 -1
  19. package/dist/commands/agents.d.ts.map +1 -1
  20. package/dist/commands/agents.js +2 -1
  21. package/dist/commands/agents.js.map +1 -1
  22. package/dist/commands/artifacts.js +1 -1
  23. package/dist/commands/artifacts.js.map +1 -1
  24. package/dist/commands/auth.js +1 -1
  25. package/dist/commands/auth.js.map +1 -1
  26. package/dist/commands/blocks.d.ts.map +1 -1
  27. package/dist/commands/blocks.js +4 -3
  28. package/dist/commands/blocks.js.map +1 -1
  29. package/dist/commands/build.d.ts.map +1 -1
  30. package/dist/commands/build.js +191 -47
  31. package/dist/commands/build.js.map +1 -1
  32. package/dist/commands/conversations.js +1 -1
  33. package/dist/commands/conversations.js.map +1 -1
  34. package/dist/commands/deploy.d.ts.map +1 -1
  35. package/dist/commands/deploy.js +296 -36
  36. package/dist/commands/deploy.js.map +1 -1
  37. package/dist/commands/dev.d.ts +0 -2
  38. package/dist/commands/dev.d.ts.map +1 -1
  39. package/dist/commands/dev.js +74 -54
  40. package/dist/commands/dev.js.map +1 -1
  41. package/dist/commands/doctor.d.ts +1 -1
  42. package/dist/commands/doctor.d.ts.map +1 -1
  43. package/dist/commands/doctor.js +64 -2
  44. package/dist/commands/doctor.js.map +1 -1
  45. package/dist/commands/flows.d.ts.map +1 -1
  46. package/dist/commands/flows.js +2 -1
  47. package/dist/commands/flows.js.map +1 -1
  48. package/dist/commands/init.d.ts +1 -1
  49. package/dist/commands/init.js +13 -12
  50. package/dist/commands/init.js.map +1 -1
  51. package/dist/commands/license.d.ts.map +1 -1
  52. package/dist/commands/license.js +130 -5
  53. package/dist/commands/license.js.map +1 -1
  54. package/dist/commands/projects.d.ts.map +1 -1
  55. package/dist/commands/projects.js +67 -8
  56. package/dist/commands/projects.js.map +1 -1
  57. package/dist/commands/runs.d.ts.map +1 -1
  58. package/dist/commands/runs.js +2 -2
  59. package/dist/commands/runs.js.map +1 -1
  60. package/dist/commands/schedules.d.ts.map +1 -1
  61. package/dist/commands/schedules.js +30 -2
  62. package/dist/commands/schedules.js.map +1 -1
  63. package/dist/commands/secrets.js +1 -1
  64. package/dist/commands/secrets.js.map +1 -1
  65. package/dist/commands/skills.d.ts +42 -6
  66. package/dist/commands/skills.d.ts.map +1 -1
  67. package/dist/commands/skills.js +258 -158
  68. package/dist/commands/skills.js.map +1 -1
  69. package/dist/commands/sso.d.ts.map +1 -1
  70. package/dist/commands/sso.js +5 -2
  71. package/dist/commands/sso.js.map +1 -1
  72. package/dist/commands/webhooks.d.ts +0 -6
  73. package/dist/commands/webhooks.d.ts.map +1 -1
  74. package/dist/commands/webhooks.js +12 -85
  75. package/dist/commands/webhooks.js.map +1 -1
  76. package/dist/config.d.ts +34 -0
  77. package/dist/config.d.ts.map +1 -1
  78. package/dist/config.js +58 -20
  79. package/dist/config.js.map +1 -1
  80. package/dist/context.d.ts +8 -0
  81. package/dist/context.d.ts.map +1 -1
  82. package/dist/context.js +1 -0
  83. package/dist/context.js.map +1 -1
  84. package/dist/deploy/defaults.d.ts.map +1 -1
  85. package/dist/deploy/defaults.js +5 -1
  86. package/dist/deploy/defaults.js.map +1 -1
  87. package/dist/deploy/post.d.ts +9 -1
  88. package/dist/deploy/post.d.ts.map +1 -1
  89. package/dist/deploy/post.js +100 -2
  90. package/dist/deploy/post.js.map +1 -1
  91. package/dist/deploy/response.d.ts.map +1 -1
  92. package/dist/deploy/response.js +3 -0
  93. package/dist/deploy/response.js.map +1 -1
  94. package/dist/deploy/runners.d.ts +67 -0
  95. package/dist/deploy/runners.d.ts.map +1 -1
  96. package/dist/dev/blocked.d.ts +57 -0
  97. package/dist/dev/blocked.d.ts.map +1 -0
  98. package/dist/dev/blocked.js +127 -0
  99. package/dist/dev/blocked.js.map +1 -0
  100. package/dist/dev/defaults.d.ts +2 -1
  101. package/dist/dev/defaults.d.ts.map +1 -1
  102. package/dist/dev/defaults.js +20 -5
  103. package/dist/dev/defaults.js.map +1 -1
  104. package/dist/dev/port.d.ts +2 -1
  105. package/dist/dev/port.d.ts.map +1 -1
  106. package/dist/dev/port.js +11 -3
  107. package/dist/dev/port.js.map +1 -1
  108. package/dist/dev/preview-expiry.d.ts +35 -0
  109. package/dist/dev/preview-expiry.d.ts.map +1 -0
  110. package/dist/dev/preview-expiry.js +57 -0
  111. package/dist/dev/preview-expiry.js.map +1 -0
  112. package/dist/dev/runners.d.ts +6 -2
  113. package/dist/dev/runners.d.ts.map +1 -1
  114. package/dist/dev/runtime-container.d.ts +2 -0
  115. package/dist/dev/runtime-container.d.ts.map +1 -1
  116. package/dist/dev/runtime-container.js +16 -4
  117. package/dist/dev/runtime-container.js.map +1 -1
  118. package/dist/dev/runtime-image.d.ts +1 -1
  119. package/dist/dev/runtime-image.js +1 -1
  120. package/dist/dev/runtime-registry.d.ts +6 -2
  121. package/dist/dev/runtime-registry.d.ts.map +1 -1
  122. package/dist/dev/runtime-registry.js +14 -15
  123. package/dist/dev/runtime-registry.js.map +1 -1
  124. package/dist/init/augment-scaffolder.d.ts +1 -1
  125. package/dist/init/augment-scaffolder.d.ts.map +1 -1
  126. package/dist/init/augment-scaffolder.js +5 -3
  127. package/dist/init/augment-scaffolder.js.map +1 -1
  128. package/dist/init/dependency-specs.d.ts +1 -1
  129. package/dist/init/dependency-specs.d.ts.map +1 -1
  130. package/dist/init/dependency-specs.js +1 -1
  131. package/dist/init/dependency-specs.js.map +1 -1
  132. package/dist/init/gitignore-patcher.d.ts +13 -3
  133. package/dist/init/gitignore-patcher.d.ts.map +1 -1
  134. package/dist/init/gitignore-patcher.js +8 -4
  135. package/dist/init/gitignore-patcher.js.map +1 -1
  136. package/dist/init/java-augment.js +1 -1
  137. package/dist/init/java-augment.js.map +1 -1
  138. package/dist/init/mode-detect.d.ts.map +1 -1
  139. package/dist/init/mode-detect.js +3 -2
  140. package/dist/init/mode-detect.js.map +1 -1
  141. package/dist/init/python-augment.d.ts.map +1 -1
  142. package/dist/init/python-augment.js +5 -4
  143. package/dist/init/python-augment.js.map +1 -1
  144. package/dist/init/scala-augment.js +2 -2
  145. package/dist/init/scala-augment.js.map +1 -1
  146. package/dist/license/expiry.d.ts +3 -1
  147. package/dist/license/expiry.d.ts.map +1 -1
  148. package/dist/license/expiry.js +4 -2
  149. package/dist/license/expiry.js.map +1 -1
  150. package/dist/license/license-key.d.ts.map +1 -1
  151. package/dist/license/license-key.js +2 -0
  152. package/dist/license/license-key.js.map +1 -1
  153. package/dist/license/protocol.d.ts +25 -0
  154. package/dist/license/protocol.d.ts.map +1 -1
  155. package/dist/license/protocol.js +65 -0
  156. package/dist/license/protocol.js.map +1 -1
  157. package/dist/license/renew.d.ts +18 -1
  158. package/dist/license/renew.d.ts.map +1 -1
  159. package/dist/license/renew.js +33 -4
  160. package/dist/license/renew.js.map +1 -1
  161. package/dist/license/stores.d.ts.map +1 -1
  162. package/dist/license/stores.js +2 -1
  163. package/dist/license/stores.js.map +1 -1
  164. package/dist/main.d.ts +3 -0
  165. package/dist/main.d.ts.map +1 -1
  166. package/dist/main.js +1 -0
  167. package/dist/main.js.map +1 -1
  168. package/dist/providers/models-guide.d.ts +7 -0
  169. package/dist/providers/models-guide.d.ts.map +1 -0
  170. package/dist/providers/models-guide.js +11 -0
  171. package/dist/providers/models-guide.js.map +1 -0
  172. package/dist/rate-limit-wait.d.ts +42 -0
  173. package/dist/rate-limit-wait.d.ts.map +1 -0
  174. package/dist/rate-limit-wait.js +104 -0
  175. package/dist/rate-limit-wait.js.map +1 -0
  176. package/dist/sdk-skills/kindgi-authoring-agents/SKILL.md +1 -1
  177. package/dist/sdk-skills/kindgi-authoring-flows/SKILL.md +1 -1
  178. package/dist/sdk-skills/kindgi-authoring-guardrails/SKILL.md +1 -1
  179. package/dist/sdk-skills/kindgi-authoring-mcp-servers/SKILL.md +1 -1
  180. package/dist/sdk-skills/kindgi-authoring-providers/SKILL.md +75 -5
  181. package/dist/sdk-skills/kindgi-authoring-tools/SKILL.md +4 -2
  182. package/dist/sdk-skills/kindgi-framework-feedback/SKILL.md +1 -1
  183. package/dist/sdk-skills/kindgi-getting-started/SKILL.md +37 -11
  184. package/dist/sdk-skills/kindgi-java-authoring-agents/SKILL.md +3 -3
  185. package/dist/sdk-skills/kindgi-java-authoring-flows/SKILL.md +9 -3
  186. package/dist/sdk-skills/kindgi-java-authoring-guardrails/SKILL.md +3 -3
  187. package/dist/sdk-skills/kindgi-java-authoring-tools/SKILL.md +9 -4
  188. package/dist/sdk-skills/kindgi-java-getting-started/SKILL.md +33 -8
  189. package/dist/sdk-skills/kindgi-python-authoring-agents/SKILL.md +1 -1
  190. package/dist/sdk-skills/kindgi-python-authoring-flows/SKILL.md +1 -1
  191. package/dist/sdk-skills/kindgi-python-authoring-guardrails/SKILL.md +1 -1
  192. package/dist/sdk-skills/kindgi-python-authoring-tools/SKILL.md +6 -2
  193. package/dist/sdk-skills/kindgi-python-getting-started/SKILL.md +33 -8
  194. package/dist/sdk-skills/kindgi-scala-authoring-agents/SKILL.md +3 -3
  195. package/dist/sdk-skills/kindgi-scala-authoring-flows/SKILL.md +9 -3
  196. package/dist/sdk-skills/kindgi-scala-authoring-guardrails/SKILL.md +3 -3
  197. package/dist/sdk-skills/kindgi-scala-authoring-tools/SKILL.md +9 -4
  198. package/dist/sdk-skills/kindgi-scala-getting-started/SKILL.md +33 -8
  199. package/dist/sdk-skills/kindgi-using/SKILL.md +1 -1
  200. package/dist/templates/drupal/AGENTS.md +40 -15
  201. package/dist/templates/drupal/README.md.tmpl +2 -3
  202. package/dist/templates/drupal/kindgi.config.ts.tmpl +23 -19
  203. package/dist/templates/java/AGENTS.md +32 -3
  204. package/dist/templates/java/README.md.tmpl +1 -1
  205. package/dist/templates/minimal/AGENTS.md +42 -17
  206. package/dist/templates/minimal/README.md.tmpl +11 -10
  207. package/dist/templates/minimal/kindgi.config.ts.tmpl +23 -22
  208. package/dist/templates/python/AGENTS.md +28 -8
  209. package/dist/templates/python/README.md.tmpl +1 -1
  210. package/dist/templates/python/pyproject.toml.tmpl +10 -6
  211. package/dist/templates/sample/AGENTS.md +42 -17
  212. package/dist/templates/sample/README.md.tmpl +1 -1
  213. package/dist/templates/sample/kindgi.config.ts.tmpl +23 -19
  214. package/dist/templates/scala/AGENTS.md +32 -3
  215. package/dist/templates/scala/README.md.tmpl +1 -1
  216. package/dist/templates/woocommerce/AGENTS.md +38 -13
  217. package/dist/templates/woocommerce/README.md.tmpl +28 -3
  218. package/dist/templates/woocommerce/kindgi.config.ts.tmpl +23 -19
  219. package/package.json +13 -13
@@ -15,8 +15,8 @@ description: >
15
15
  kindgi-java-authoring-tools, Java agents by kindgi-java-authoring-agents.
16
16
  type: core
17
17
  library: "kindgi-pack (Java)"
18
- version: "0.1.0"
19
- sdk_version: "0.1.7"
18
+ version: "0.1.2"
19
+ sdk_version: "0.1.8"
20
20
  pack_languages: [java]
21
21
  sources:
22
22
  - sdks/java/kindgi-pack/README.md
@@ -32,7 +32,7 @@ sources:
32
32
  > `./mvnw`.
33
33
  >
34
34
  > Java support is in preview: tested and supported, but the API may still
35
- > change in 0.1.6 without the usual deprecation period.
35
+ > change in a later release without the usual deprecation period.
36
36
 
37
37
  A **flow** is a versioned, durable graph of steps: tools (your code) and
38
38
  agents (a model's judgment), joined by edges that can carry conditions. It
@@ -252,6 +252,12 @@ public final class TriageTicket {
252
252
  `outputSchema`). `convergence` decides the result: `all-succeed`,
253
253
  `any-succeed` (the first success wins), or `settle-all` (wait for every
254
254
  branch and report each).
255
+ Every branch gets the fanout's whole input: the output of the step
256
+ before it (the run input after `$start`). A record refuses
257
+ properties it doesn't name, so when a branch tool takes only some of
258
+ them, its input record says `@JsonIgnoreProperties(ignoreUnknown = true)`
259
+ (`com.fasterxml.jackson.annotation`). Without it, the branch fails with
260
+ `input-validation-failed`.
255
261
  - **A sub-flow** (`"kind": "subgraph"`) is part of the flow schema, but a run
256
262
  refuses it today (`flow-unbound`). Inline the steps instead.
257
263
 
@@ -14,8 +14,8 @@ description: >
14
14
  by kindgi-java-authoring-tools.
15
15
  type: core
16
16
  library: "kindgi-pack (Java)"
17
- version: "0.1.0"
18
- sdk_version: "0.1.7"
17
+ version: "0.1.1"
18
+ sdk_version: "0.1.8"
19
19
  pack_languages: [java]
20
20
  sources:
21
21
  - sdks/java/kindgi-pack/README.md
@@ -31,7 +31,7 @@ sources:
31
31
  > `./mvnw`.
32
32
  >
33
33
  > Java support is in preview: tested and supported, but the API may still
34
- > change in 0.1.6 without the usual deprecation period.
34
+ > change in a later release without the usual deprecation period.
35
35
 
36
36
  A **guardrail** is a rule an agent's turn must satisfy: a **check** (a
37
37
  function over the turn's trace) plus an **action** (what happens when it
@@ -14,8 +14,8 @@ description: >
14
14
  by kindgi-java-getting-started.
15
15
  type: core
16
16
  library: "kindgi-pack (Java)"
17
- version: "0.1.0"
18
- sdk_version: "0.1.7"
17
+ version: "0.1.2"
18
+ sdk_version: "0.1.8"
19
19
  pack_languages: [java]
20
20
  sources:
21
21
  - sdks/java/kindgi-pack/README.md
@@ -31,7 +31,7 @@ sources:
31
31
  > Windows). Maven runs as `./mvnw` (or the app's own `mvn`).
32
32
  >
33
33
  > Java support is in preview: tested and supported, but the API may still
34
- > change in 0.1.6 without the usual deprecation period.
34
+ > change in a later release without the usual deprecation period.
35
35
 
36
36
  A **tool** is a unit of work an agent (or a flow step) calls: typed input,
37
37
  typed output, your code in between. In a Java pack it is a
@@ -181,7 +181,12 @@ final class Citator {
181
181
  `onCancel(action)`.
182
182
  - `ctx.secrets()`: the secrets the tool declares (below). Printing the
183
183
  context shows their names, never their values.
184
- - `ctx.env()`, `ctx.config()`: **reserved, empty today**.
184
+ - `ctx.env()`: the env values the tool declares (`set("needsSpec",
185
+ Map.of("env", …))`), resolved for the call: its project's value, else its
186
+ org's, else the tenant's (`kindgi env set NAME <value>
187
+ --scope=project:<id> --env=<env>`), with a declared `default` filled in.
188
+ Strings, and not secret.
189
+ - `ctx.config()`: **reserved, empty today**.
185
190
 
186
191
  ## Configuration and secrets
187
192
 
@@ -16,8 +16,8 @@ description: >
16
16
  kindgi-authoring-providers.
17
17
  type: core
18
18
  library: "kindgi-pack (Java)"
19
- version: "0.1.0"
20
- sdk_version: "0.1.7"
19
+ version: "0.1.2"
20
+ sdk_version: "0.1.8"
21
21
  pack_languages: [java]
22
22
  sources:
23
23
  - sdks/java/kindgi-pack/README.md
@@ -34,7 +34,7 @@ sources:
34
34
  > `./kindgiw <command>`, and `./kindgiw upgrade` moves the pin.
35
35
  >
36
36
  > **Preview:** Java and Scala support is tested and supported, but its API
37
- > may still change in 0.1.6 without the usual deprecation period.
37
+ > may still change in a later release without the usual deprecation period.
38
38
 
39
39
  ## What a pack is
40
40
 
@@ -127,7 +127,8 @@ my-pack/
127
127
  │ ├── agents/EchoAgent.java # Agent.define(...)
128
128
  │ └── flows/EchoFlow.java # Flow.define(...)
129
129
  ├── src/test/java/mypack/ToolsTest.java # the tools, called directly
130
- └── .claude/skills/ # these skills (`./kindgiw skills sync` refreshes them)
130
+ ├── .claude/skills/ # these skills (`./kindgiw skills sync` refreshes them)
131
+ └── .agents/skills/ # the same skills, where Codex and Gemini CLI look
131
132
  ```
132
133
 
133
134
  The package comes from the pack's id (`my-pack` becomes `mypack`).
@@ -256,6 +257,27 @@ names it; one the pack doesn't declare is dropped before the code loads
256
257
  primitive (`<pack-id>.<name>`): pick it once.
257
258
  - **Model credentials.** Ask for the key; never invent or hard-code one.
258
259
 
260
+ ## Commands for the person's own terminal
261
+
262
+ Two commands are always the person's to run, in their own terminal, since
263
+ they ask for a secret:
264
+
265
+ - `./kindgiw secrets set`, which asks for the value without echoing it;
266
+ - `./kindgiw auth registry`, which logs Docker in to the runtime image's registry.
267
+
268
+ Others need what a coding agent's sandbox often blocks: `./kindgiw dev` and any
269
+ dev server of the app (they keep running), and `./kindgiw build` or anything
270
+ else that needs Docker. When your sandbox blocks a command (a process it can't
271
+ start, `spawn EPERM`; Docker's socket denied; `localhost` refused; a folder it
272
+ keeps read-only, as Codex's keeps `.agents/`, which `./kindgiw skills sync`
273
+ writes), don't work around it: don't turn your sandbox off, and don't start the
274
+ command in the background. Give the person the exact command, the folder to run
275
+ it in and what they'll see, then wait for them. Once they say `./kindgiw dev` is
276
+ running, starting it yourself exits 3 and says where theirs runs: use that one.
277
+
278
+ A tool's own `EPERM` while it runs under `./kindgiw dev` is something else:
279
+ Kindgi's dev sandbox (see the tools skill). Never turn that one off either.
280
+
259
281
  ## Keys and tokens: hands off
260
282
 
261
283
  Never open, read, grep, `cat`, copy or print the files that hold keys and
@@ -274,8 +296,11 @@ model provider. To see which secrets exist, run
274
296
  `./kindgiw secrets list --env=local --scope=tenant` (names only). To store one,
275
297
  ask the person to run `./kindgiw secrets set NAME --env=local --scope=tenant`
276
298
  themselves: it prompts without echoing. Never put a value on a command line.
277
- `kindgi init` adds these files to the deny rules in `.claude/settings.json`;
278
- in a monorepo, also to the repository root's, under the pack's path.
299
+ `kindgi init` adds these files to the deny rules in `.claude/settings.json`
300
+ (Claude Code); in a monorepo, also to the repository root's, under the pack's
301
+ path. It adds them to `.cursorignore`, `.geminiignore` or `.aiderignore` too
302
+ when the project has one. Nothing `kindgi init` writes binds Codex. Whichever
303
+ agent you are, keep to the rule above yourself.
279
304
 
280
305
  ## Next
281
306
 
@@ -289,8 +314,8 @@ in a monorepo, also to the repository root's, under the pack's path.
289
314
 
290
315
  ## Keeping skills up to date
291
316
 
292
- `./kindgiw skills sync` refreshes `.claude/skills/` from the CLI's copy
293
- (local edits are kept unless `--force`). `kindgi dev` says when they are out
317
+ `./kindgiw skills sync` refreshes `.claude/skills/` and `.agents/skills/`
318
+ from the CLI's copy (local edits are kept unless `--force`). `kindgi dev` says when they are out
294
319
  of date.
295
320
 
296
321
  ## When the framework itself is the problem
@@ -16,7 +16,7 @@ description: >
16
16
  type: core
17
17
  library: "kindgi (Python)"
18
18
  version: "0.1.5"
19
- sdk_version: "0.1.7"
19
+ sdk_version: "0.1.8"
20
20
  pack_languages: [python]
21
21
  sources:
22
22
  - sdks/python/src/kindgi/pack/define.py
@@ -17,7 +17,7 @@ description: >
17
17
  type: core
18
18
  library: "kindgi (Python)"
19
19
  version: "0.1.2"
20
- sdk_version: "0.1.7"
20
+ sdk_version: "0.1.8"
21
21
  pack_languages: [python]
22
22
  sources:
23
23
  - sdks/python/src/kindgi/pack/define.py
@@ -15,7 +15,7 @@ description: >
15
15
  type: core
16
16
  library: "kindgi (Python)"
17
17
  version: "0.1.4"
18
- sdk_version: "0.1.7"
18
+ sdk_version: "0.1.8"
19
19
  pack_languages: [python]
20
20
  sources:
21
21
  - sdks/python/src/kindgi/pack/define.py
@@ -14,8 +14,8 @@ description: >
14
14
  kindgi-python-getting-started.
15
15
  type: core
16
16
  library: "kindgi (Python)"
17
- version: "0.1.3"
18
- sdk_version: "0.1.7"
17
+ version: "0.1.4"
18
+ sdk_version: "0.1.8"
19
19
  pack_languages: [python]
20
20
  sources:
21
21
  - sdks/python/src/kindgi/pack/define.py
@@ -279,6 +279,10 @@ lookup_case = http_tool(
279
279
  - Also `timeout_ms=` (default 30000), `parse_json=` (default `True`),
280
280
  `success_status=(200, 299)`, `effects=`, `version=`, and
281
281
  `mutating=False` for a request that changes nothing (a GET, usually).
282
+ - `timeout_ms` covers the whole call, reading the response included, and
283
+ so does a run's cancel. A response body over 10 MiB, counted after it's
284
+ decompressed, fails the call. So point the tool at an endpoint that
285
+ pages or filters, not one that returns everything.
282
286
 
283
287
  The spec is checked where it's declared, against the same schema as
284
288
  TypeScript's. Calling the tool in Python raises: it runs in Kindgi, so
@@ -14,8 +14,8 @@ description: >
14
14
  kindgi-python-authoring-agents; models by kindgi-authoring-providers.
15
15
  type: core
16
16
  library: "kindgi (Python)"
17
- version: "0.1.7"
18
- sdk_version: "0.1.7"
17
+ version: "0.1.8"
18
+ sdk_version: "0.1.8"
19
19
  pack_languages: [python]
20
20
  sources:
21
21
  - sdks/python/README.md
@@ -115,7 +115,8 @@ my-pack/
115
115
  ├── flows/echo_flow.py # Flow(...)
116
116
  ├── tests/test_tools.py # the tools and the check, called directly
117
117
  ├── README.md
118
- └── .claude/skills/ # these skills (`kindgi skills sync` refreshes them)
118
+ ├── .claude/skills/ # these skills (`kindgi skills sync` refreshes them)
119
+ └── .agents/skills/ # the same skills, where Codex and Gemini CLI look
119
120
  ```
120
121
 
121
122
  The `[tool.kindgi]` keys are the ones `kindgi.config.ts` takes —
@@ -302,6 +303,27 @@ build before anything uploads, with the range to use.
302
303
  every primitive (`<pack-id>.<name>`); pick it once.
303
304
  - **Model credentials.** Ask for the key; never invent or hard-code one.
304
305
 
306
+ ## Commands for the person's own terminal
307
+
308
+ Two commands are always the person's to run, in their own terminal, since
309
+ they ask for a secret:
310
+
311
+ - `kindgi secrets set`, which asks for the value without echoing it;
312
+ - `kindgi auth registry`, which logs Docker in to the runtime image's registry.
313
+
314
+ Others need what a coding agent's sandbox often blocks: `kindgi dev` and any dev
315
+ server of the app (they keep running), and `kindgi build` or anything else that
316
+ needs Docker. When your sandbox blocks a command (a process it can't start,
317
+ `spawn EPERM`; Docker's socket denied; `localhost` refused; a folder it keeps
318
+ read-only, as Codex's keeps `.agents/`, which `kindgi skills sync` writes),
319
+ don't work around it: don't turn your sandbox off, and don't start the command
320
+ in the background. Give the person the exact command, the folder to run it in
321
+ and what they'll see, then wait for them. Once they say `kindgi dev` is running,
322
+ starting it yourself exits 3 and says where theirs runs: use that one.
323
+
324
+ A tool's own `EPERM` while it runs under `kindgi dev` is something else:
325
+ Kindgi's dev sandbox (see the tools skill). Never turn that one off either.
326
+
305
327
  ## Keys and tokens: hands off
306
328
 
307
329
  Never open, read, grep, `cat`, copy or print the files that hold keys and
@@ -320,8 +342,11 @@ model provider. To see which secrets exist, run
320
342
  `kindgi secrets list --env=local --scope=tenant` (names only). To store one,
321
343
  ask the person to run `kindgi secrets set NAME --env=local --scope=tenant`
322
344
  themselves: it prompts without echoing. Never put a value on a command line.
323
- `kindgi init` adds these files to the deny rules in `.claude/settings.json`;
324
- in a monorepo, also to the repository root's, under the pack's path.
345
+ `kindgi init` adds these files to the deny rules in `.claude/settings.json`
346
+ (Claude Code); in a monorepo, also to the repository root's, under the pack's
347
+ path. It adds them to `.cursorignore`, `.geminiignore` or `.aiderignore` too
348
+ when the project has one. Nothing `kindgi init` writes binds Codex. Whichever
349
+ agent you are, keep to the rule above yourself.
325
350
 
326
351
  ## Next
327
352
 
@@ -335,9 +360,9 @@ in a monorepo, also to the repository root's, under the pack's path.
335
360
 
336
361
  ## Keeping skills up to date
337
362
 
338
- `kindgi skills sync` refreshes `.claude/skills/` from the CLI's copy
339
- (local edits are kept unless `--force`); `kindgi dev` says when they are
340
- out of date.
363
+ `kindgi skills sync` refreshes `.claude/skills/` and `.agents/skills/` from
364
+ the CLI's copy (local edits are kept unless `--force`); `kindgi dev` says
365
+ when they are out of date.
341
366
 
342
367
  ## When the framework itself is the problem
343
368
 
@@ -16,8 +16,8 @@ description: >
16
16
  kindgi-authoring-providers.
17
17
  type: core
18
18
  library: "kindgi-pack-scala"
19
- version: "0.1.0"
20
- sdk_version: "0.1.7"
19
+ version: "0.1.1"
20
+ sdk_version: "0.1.8"
21
21
  pack_languages: [scala]
22
22
  sources:
23
23
  - sdks/scala/README.md
@@ -33,7 +33,7 @@ sources:
33
33
  > `kindgi <command>` below runs as `./kindgiw <command>`.
34
34
  >
35
35
  > Scala support is in preview: tested and supported, but the API may still
36
- > change in 0.1.6 without the usual deprecation period.
36
+ > change in a later release without the usual deprecation period.
37
37
 
38
38
  An **agent** is a versioned, model-driven orchestrator. It's made of:
39
39
  - instructions (a prompt template);
@@ -16,8 +16,8 @@ description: >
16
16
  kindgi-scala-authoring-agents.
17
17
  type: core
18
18
  library: "kindgi-pack-scala"
19
- version: "0.1.0"
20
- sdk_version: "0.1.7"
19
+ version: "0.1.2"
20
+ sdk_version: "0.1.8"
21
21
  pack_languages: [scala]
22
22
  sources:
23
23
  - sdks/scala/README.md
@@ -32,7 +32,7 @@ sources:
32
32
  > `kindgi <command>` below runs as `./kindgiw <command>`.
33
33
  >
34
34
  > Scala support is in preview: tested and supported, but the API may still
35
- > change in 0.1.6 without the usual deprecation period.
35
+ > change in a later release without the usual deprecation period.
36
36
 
37
37
  A **flow** is a versioned, durable graph of steps: tools (your code) and
38
38
  agents (a model's judgment), joined by edges that can carry conditions. It
@@ -228,6 +228,12 @@ object TriageTicket {
228
228
  `outputSchema`). `convergence` decides the result: `all-succeed`,
229
229
  `any-succeed` (the first success wins), or `settle-all` (wait for every
230
230
  branch and report each).
231
+ Every branch gets the fanout's whole input: the output of the step
232
+ before it (the run input after `$start`). A case class refuses
233
+ properties it doesn't name, so when a branch tool takes only some of
234
+ them, its input case class says `@JsonIgnoreProperties(ignoreUnknown = true)`
235
+ (`com.fasterxml.jackson.annotation`). Without it, the branch fails with
236
+ `input-validation-failed`.
231
237
  - **A sub-flow** (`"kind" -> "subgraph"`) is part of the flow schema, but a
232
238
  run refuses it today (`flow-unbound`). Inline the steps instead.
233
239
 
@@ -15,8 +15,8 @@ description: >
15
15
  tools by kindgi-scala-authoring-tools.
16
16
  type: core
17
17
  library: "kindgi-pack-scala"
18
- version: "0.1.0"
19
- sdk_version: "0.1.7"
18
+ version: "0.1.1"
19
+ sdk_version: "0.1.8"
20
20
  pack_languages: [scala]
21
21
  sources:
22
22
  - sdks/scala/README.md
@@ -31,7 +31,7 @@ sources:
31
31
  > `kindgi <command>` below runs as `./kindgiw <command>`.
32
32
  >
33
33
  > Scala support is in preview: tested and supported, but the API may still
34
- > change in 0.1.6 without the usual deprecation period.
34
+ > change in a later release without the usual deprecation period.
35
35
 
36
36
  A **guardrail** is a rule an agent's turn must satisfy: a **check** (a
37
37
  function over the turn's trace) plus an **action** (what happens when it
@@ -15,8 +15,8 @@ description: >
15
15
  kindgi-scala-getting-started.
16
16
  type: core
17
17
  library: "kindgi-pack-scala"
18
- version: "0.1.0"
19
- sdk_version: "0.1.7"
18
+ version: "0.1.2"
19
+ sdk_version: "0.1.8"
20
20
  pack_languages: [scala]
21
21
  sources:
22
22
  - sdks/scala/README.md
@@ -32,7 +32,7 @@ sources:
32
32
  > your `PATH`.
33
33
  >
34
34
  > Scala support is in preview: tested and supported, but the API may still
35
- > change in 0.1.6 without the usual deprecation period.
35
+ > change in a later release without the usual deprecation period.
36
36
 
37
37
  A **tool** is a unit of work an agent (or a flow step) calls: typed input,
38
38
  typed output, your code in between. In a Scala pack it is a `val` of type
@@ -167,7 +167,12 @@ object Citator {
167
167
  `ctx.cancellation.onCancel(() => …)`.
168
168
  - `ctx.secrets`: the secrets the tool declares (below), as a Java map.
169
169
  Printing the context shows their names, never their values.
170
- - `ctx.env`, `ctx.config`: **reserved, empty today**.
170
+ - `ctx.env`: the env values the tool declares (`set("needsSpec",
171
+ Map("env" -> …))`), resolved for the call, as a Java map: its project's
172
+ value, else its org's, else the tenant's (`kindgi env set NAME <value>
173
+ --scope=project:<id> --env=<env>`), with a declared `default` filled in.
174
+ Strings, and not secret.
175
+ - `ctx.config`: **reserved, empty today**.
171
176
 
172
177
  ## Configuration and secrets
173
178
 
@@ -16,8 +16,8 @@ description: >
16
16
  kindgi-authoring-providers.
17
17
  type: core
18
18
  library: "kindgi-pack-scala"
19
- version: "0.1.0"
20
- sdk_version: "0.1.7"
19
+ version: "0.1.2"
20
+ sdk_version: "0.1.8"
21
21
  pack_languages: [scala]
22
22
  sources:
23
23
  - sdks/scala/README.md
@@ -33,7 +33,7 @@ sources:
33
33
  > moves the pin, and kindgi-pack-scala's version in `build.sbt` with it.
34
34
  >
35
35
  > **Preview:** Java and Scala support is tested and supported, but its API
36
- > may still change in 0.1.6 without the usual deprecation period.
36
+ > may still change in a later release without the usual deprecation period.
37
37
 
38
38
  ## What a pack is
39
39
 
@@ -139,7 +139,8 @@ my-pack/
139
139
  │ ├── agents/EchoAgent.scala # Agent(...)
140
140
  │ └── flows/EchoFlow.scala # Flow(...)
141
141
  ├── src/test/scala/mypack/ToolsSuite.scala # the tools, called directly (munit)
142
- └── .claude/skills/ # these skills (`./kindgiw skills sync` refreshes them)
142
+ ├── .claude/skills/ # these skills (`./kindgiw skills sync` refreshes them)
143
+ └── .agents/skills/ # the same skills, where Codex and Gemini CLI look
143
144
  ```
144
145
 
145
146
  The package comes from the pack's id, with Java's and Scala's keywords
@@ -287,6 +288,27 @@ names it; one the pack doesn't declare is dropped before the code loads
287
288
  primitive (`<pack-id>.<name>`): pick it once.
288
289
  - **Model credentials.** Ask for the key; never invent or hard-code one.
289
290
 
291
+ ## Commands for the person's own terminal
292
+
293
+ Two commands are always the person's to run, in their own terminal, since
294
+ they ask for a secret:
295
+
296
+ - `./kindgiw secrets set`, which asks for the value without echoing it;
297
+ - `./kindgiw auth registry`, which logs Docker in to the runtime image's registry.
298
+
299
+ Others need what a coding agent's sandbox often blocks: `./kindgiw dev` and any
300
+ dev server of the app (they keep running), and `./kindgiw build` or anything
301
+ else that needs Docker. When your sandbox blocks a command (a process it can't
302
+ start, `spawn EPERM`; Docker's socket denied; `localhost` refused; a folder it
303
+ keeps read-only, as Codex's keeps `.agents/`, which `./kindgiw skills sync`
304
+ writes), don't work around it: don't turn your sandbox off, and don't start the
305
+ command in the background. Give the person the exact command, the folder to run
306
+ it in and what they'll see, then wait for them. Once they say `./kindgiw dev` is
307
+ running, starting it yourself exits 3 and says where theirs runs: use that one.
308
+
309
+ A tool's own `EPERM` while it runs under `./kindgiw dev` is something else:
310
+ Kindgi's dev sandbox (see the tools skill). Never turn that one off either.
311
+
290
312
  ## Keys and tokens: hands off
291
313
 
292
314
  Never open, read, grep, `cat`, copy or print the files that hold keys and
@@ -305,8 +327,11 @@ model provider. To see which secrets exist, run
305
327
  `./kindgiw secrets list --env=local --scope=tenant` (names only). To store one,
306
328
  ask the person to run `./kindgiw secrets set NAME --env=local --scope=tenant`
307
329
  themselves: it prompts without echoing. Never put a value on a command line.
308
- `kindgi init` adds these files to the deny rules in `.claude/settings.json`;
309
- in a monorepo, also to the repository root's, under the pack's path.
330
+ `kindgi init` adds these files to the deny rules in `.claude/settings.json`
331
+ (Claude Code); in a monorepo, also to the repository root's, under the pack's
332
+ path. It adds them to `.cursorignore`, `.geminiignore` or `.aiderignore` too
333
+ when the project has one. Nothing `kindgi init` writes binds Codex. Whichever
334
+ agent you are, keep to the rule above yourself.
310
335
 
311
336
  ## Next
312
337
 
@@ -320,8 +345,8 @@ in a monorepo, also to the repository root's, under the pack's path.
320
345
 
321
346
  ## Keeping skills up to date
322
347
 
323
- `./kindgiw skills sync` refreshes `.claude/skills/` from the CLI's copy
324
- (local edits are kept unless `--force`). `kindgi dev` says when they are out
348
+ `./kindgiw skills sync` refreshes `.claude/skills/` and `.agents/skills/`
349
+ from the CLI's copy (local edits are kept unless `--force`). `kindgi dev` says when they are out
325
350
  of date.
326
351
 
327
352
  ## When the framework itself is the problem
@@ -15,7 +15,7 @@ description: >
15
15
  type: core
16
16
  library: "@kindgi/sdk"
17
17
  version: "0.1.0"
18
- sdk_version: "0.1.7"
18
+ sdk_version: "0.1.8"
19
19
  pack_languages: [node, python, java, scala]
20
20
  ---
21
21
 
@@ -10,12 +10,12 @@ Agents answer through a model provider. `kindgi dev` gives a new pack
10
10
  `dev-echo`, a fallback that isn't a model: it calls the first tool and
11
11
  replies "Tool responded: …" after a warning line, while no other provider
12
12
  fits. For a real model, put one LLM provider's key in `.env`
13
- (`ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, `GEMINI_API_KEY`, `GROQ_API_KEY` or
14
- `OPENROUTER_API_KEY`) and declare its preset (`{ preset: 'anthropic' }`,
15
- `'openai'`, `'gemini-api'`, `'groq'` or `'openrouter'`) in
16
- `kindgi.config.ts`'s `providers`: `kindgi dev` then registers it on every
17
- boot, in every worktree. Other providers and per-agent model choice:
18
- `.claude/skills/kindgi-authoring-providers/SKILL.md`.
13
+ (`ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, `GEMINI_API_KEY`, `GROQ_API_KEY`
14
+ or `OPENROUTER_API_KEY`) and declare its preset
15
+ (`{ preset: 'anthropic' }`, `'openai'`, `'gemini-api'`, `'groq'` or
16
+ `'openrouter'`) in `kindgi.config.ts`'s `providers`: `kindgi dev` then
17
+ registers it on every boot, in every worktree. Other providers and
18
+ per-agent model choice: the `kindgi-authoring-providers` skill.
19
19
 
20
20
  ## This pack: a Drupal site
21
21
 
@@ -46,17 +46,42 @@ README.md explains the whole design; keep it true when you change the pack.
46
46
  - **The client secret is a secret** (`DRUPAL_CLIENT_SECRET`, set with
47
47
  `kindgi secrets set`): never write it in a file, a test or the chat.
48
48
 
49
- ## For Claude Code sessions
49
+ ## Skills
50
50
 
51
- When you diagnose a framework bug (something in Kindgi itself, not in
52
- this pack's code), append an entry to `FEEDBACK.md` at the pack root
53
- via `kindgi feedback write` — see
54
- `.claude/skills/kindgi-framework-feedback/SKILL.md`. Mark items fixed
55
- by adding a `> **Fixed:** <note>` line right after their header; the
56
- file is a plain markdown list you edit directly.
51
+ `.claude/skills/` and `.agents/skills/` hold the same Kindgi skills: getting
52
+ started, tools, guardrails, agents and flows, model providers, MCP servers,
53
+ framework feedback, and guiding the person in using what you built
54
+ (`kindgi-using`). Claude Code loads `.claude/skills/` on its own; Codex and
55
+ Gemini CLI look in `.agents/skills/`; any other coding agent can read
56
+ either. `kindgi skills sync` refreshes both.
57
+
58
+ When you diagnose a framework bug (something in Kindgi itself, not in this
59
+ pack's code), append an entry to `FEEDBACK.md` at the pack root via
60
+ `kindgi feedback write` — see the `kindgi-framework-feedback` skill. Mark
61
+ items fixed by adding a `> **Fixed:** <note>` line right after their
62
+ header; the file is a plain markdown list you edit directly.
57
63
 
58
64
  When the person asks how to use what you built (where something is in
59
65
  Kindgi's console, what an agent did, what it cost, who has access), answer
60
66
  from `kindgi`'s read-only commands and give the console link beside it —
61
- see `.claude/skills/kindgi-using/SKILL.md`. Deciding approvals, erasing,
62
- adding people and rating answers stay with the person.
67
+ see the `kindgi-using` skill. Deciding approvals, erasing, adding people
68
+ and rating answers stay with the person.
69
+
70
+ ## Commands for the person's own terminal
71
+
72
+ Two commands are always the person's to run, in their own terminal, since
73
+ they ask for a secret: `kindgi secrets set` and `kindgi auth registry`.
74
+ Others need what a coding agent's sandbox often blocks: `kindgi dev` and any
75
+ dev server (they keep running), and `kindgi build` or anything else that
76
+ needs Docker. When your sandbox blocks a command (a process it can't start,
77
+ `spawn EPERM`; Docker's socket denied; `localhost` refused; a folder it
78
+ keeps read-only, as Codex's keeps `.agents/`, which `kindgi skills sync`
79
+ writes), don't work around it: don't turn your sandbox off, and don't start
80
+ the command in the background. Give the person the exact command, the folder
81
+ to run it in and what they'll see, then wait for them. Once they say
82
+ `kindgi dev` is running, starting it yourself exits 3 and says where theirs
83
+ runs: use that one.
84
+
85
+ A tool's own `EPERM` while it runs under `kindgi dev` is something else:
86
+ Kindgi's dev sandbox, which the tools skill covers. Never turn that one off
87
+ either.
@@ -218,8 +218,7 @@ calls the first tool. For Claude, with `kindgi dev` running:
218
218
  {{KINDGI}} providers register --preset=anthropic
219
219
  ```
220
220
 
221
- `.claude/skills/kindgi-authoring-providers/SKILL.md` has the other
222
- providers.
221
+ The `kindgi-authoring-providers` skill has the other providers.
223
222
 
224
223
  Ask the content agent something:
225
224
 
@@ -286,7 +285,7 @@ starts a run:
286
285
  ```sh
287
286
  composer require drupal/webhooks:^3.0@rc && drush en webhooks
288
287
  {{KINDGI}} webhooks register --flow={{PACK_ID}}.content-review --flow-version={{PACK_VERSION}} \
289
- --preset=drupal-webhooks --generate-secret --secret=DRUPAL_WEBHOOK_SECRET --env=local \
288
+ --preset=drupal-webhooks --generate-secret --secret=DRUPAL_WEBHOOK_SECRET \
290
289
  --label="Drupal articles"
291
290
  ```
292
291
 
@@ -13,28 +13,32 @@ const config = {
13
13
  flows: 'flows/**/*.ts',
14
14
  },
15
15
  // ---------------------------------------------------------------
16
- // Environments — one entry per deploy target. `kindgi build`
17
- // reads `.build`, `.registry`, `.signingKey`, `.tenantId` for the
18
- // chosen env; `kindgi deploy` reads `.endpoint`.
16
+ // Environments: one entry per place you deploy to, picked with
17
+ // `--env <name>` (default `staging`). `kindgi build` reads `build`,
18
+ // `registry`, `signingKey` and `tenantId`; `kindgi deploy` reads
19
+ // `endpoint`. Local `kindgi dev` doesn't read this block.
19
20
  //
20
- // Fill these in when you're ready to push a build. Local
21
- // `kindgi dev` does NOT read this block.
21
+ // Your API key goes only to the address you signed in to
22
+ // (`kindgi auth login --url <url>`), so an `endpoint` here must be
23
+ // that address. Builds are signed with a key of yours: make it with
24
+ // `kindgi key create <id>`, and let the runtime trust it with
25
+ // `kindgi key trust <id>` (once).
22
26
  // ---------------------------------------------------------------
23
27
  environments: {
24
- staging: {
25
- endpoint: 'https://api.staging.example.com',
26
- build: 'http://localhost:8787', // your Kindgi build server
27
- registry: 'ghcr.io/your-org',
28
- signingKey: '~/.kindgi/keys/staging.pem',
29
- tenantId: 'tenant-your-org-staging',
30
- },
31
- production: {
32
- endpoint: 'https://api.example.com',
33
- build: 'https://build.example.com',
34
- registry: 'ghcr.io/your-org',
35
- signingKey: '~/.kindgi/keys/production.pem',
36
- tenantId: 'tenant-your-org-production',
37
- },
28
+ // Kindgi Cloud: `kindgi deploy --env=prod` builds there and deploys.
29
+ // prod: {
30
+ // build: 'hosted',
31
+ // signingKey: '~/.kindgi/keys/<id>.pem',
32
+ // },
33
+ //
34
+ // A runtime of your own:
35
+ // production: {
36
+ // endpoint: 'https://kindgi.your-company.example', // the address you signed in to
37
+ // build: 'https://build.your-company.example', // your Kindgi build server
38
+ // registry: 'ghcr.io/your-org',
39
+ // signingKey: '~/.kindgi/keys/<id>.pem',
40
+ // tenantId: '<your tenant id>',
41
+ // },
38
42
  },
39
43
  } as const;
40
44