@code-yeongyu/senpi 2026.6.6-3 → 2026.6.10

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 (255) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +113 -111
  3. package/dist/cli/args.d.ts.map +1 -1
  4. package/dist/cli/args.js +1 -2
  5. package/dist/cli/args.js.map +1 -1
  6. package/dist/cli/project-trust.d.ts +10 -0
  7. package/dist/cli/project-trust.d.ts.map +1 -0
  8. package/dist/cli/project-trust.js +48 -0
  9. package/dist/cli/project-trust.js.map +1 -0
  10. package/dist/cli/startup-ui.d.ts +7 -0
  11. package/dist/cli/startup-ui.d.ts.map +1 -0
  12. package/dist/cli/startup-ui.js +59 -0
  13. package/dist/cli/startup-ui.js.map +1 -0
  14. package/dist/cli.js +10 -1
  15. package/dist/cli.js.map +1 -1
  16. package/dist/core/agent-session-runtime.d.ts +3 -1
  17. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  18. package/dist/core/agent-session-runtime.js +4 -1
  19. package/dist/core/agent-session-runtime.js.map +1 -1
  20. package/dist/core/agent-session-services.d.ts +2 -1
  21. package/dist/core/agent-session-services.d.ts.map +1 -1
  22. package/dist/core/agent-session-services.js +2 -2
  23. package/dist/core/agent-session-services.js.map +1 -1
  24. package/dist/core/agent-session.d.ts +1 -0
  25. package/dist/core/agent-session.d.ts.map +1 -1
  26. package/dist/core/agent-session.js +6 -0
  27. package/dist/core/agent-session.js.map +1 -1
  28. package/dist/core/compaction/utils.d.ts +1 -1
  29. package/dist/core/compaction/utils.d.ts.map +1 -1
  30. package/dist/core/compaction/utils.js +1 -1
  31. package/dist/core/compaction/utils.js.map +1 -1
  32. package/dist/core/experimental.d.ts +2 -0
  33. package/dist/core/experimental.d.ts.map +1 -0
  34. package/dist/core/experimental.js +4 -0
  35. package/dist/core/experimental.js.map +1 -0
  36. package/dist/core/extensions/builtin/todotools/index.d.ts.map +1 -1
  37. package/dist/core/extensions/builtin/todotools/index.js +0 -2
  38. package/dist/core/extensions/builtin/todotools/index.js.map +1 -1
  39. package/dist/core/extensions/builtin/todotools/prompt.d.ts +1 -1
  40. package/dist/core/extensions/builtin/todotools/prompt.d.ts.map +1 -1
  41. package/dist/core/extensions/builtin/todotools/prompt.js +0 -2
  42. package/dist/core/extensions/builtin/todotools/prompt.js.map +1 -1
  43. package/dist/core/extensions/index.d.ts +1 -1
  44. package/dist/core/extensions/index.d.ts.map +1 -1
  45. package/dist/core/extensions/index.js.map +1 -1
  46. package/dist/core/extensions/loader.d.ts +1 -1
  47. package/dist/core/extensions/loader.d.ts.map +1 -1
  48. package/dist/core/extensions/loader.js +4 -4
  49. package/dist/core/extensions/loader.js.map +1 -1
  50. package/dist/core/extensions/runner.d.ts +7 -2
  51. package/dist/core/extensions/runner.d.ts.map +1 -1
  52. package/dist/core/extensions/runner.js +34 -0
  53. package/dist/core/extensions/runner.js.map +1 -1
  54. package/dist/core/extensions/types.d.ts +21 -1
  55. package/dist/core/extensions/types.d.ts.map +1 -1
  56. package/dist/core/extensions/types.js.map +1 -1
  57. package/dist/core/index.d.ts +1 -0
  58. package/dist/core/index.d.ts.map +1 -1
  59. package/dist/core/index.js +1 -0
  60. package/dist/core/index.js.map +1 -1
  61. package/dist/core/model-registry.d.ts +3 -1
  62. package/dist/core/model-registry.d.ts.map +1 -1
  63. package/dist/core/model-registry.js +22 -3
  64. package/dist/core/model-registry.js.map +1 -1
  65. package/dist/core/project-trust.d.ts +15 -0
  66. package/dist/core/project-trust.d.ts.map +1 -0
  67. package/dist/core/project-trust.js +58 -0
  68. package/dist/core/project-trust.js.map +1 -0
  69. package/dist/core/prompt-templates.d.ts +2 -1
  70. package/dist/core/prompt-templates.d.ts.map +1 -1
  71. package/dist/core/prompt-templates.js +24 -26
  72. package/dist/core/prompt-templates.js.map +1 -1
  73. package/dist/core/resource-loader.d.ts +14 -3
  74. package/dist/core/resource-loader.d.ts.map +1 -1
  75. package/dist/core/resource-loader.js +128 -58
  76. package/dist/core/resource-loader.js.map +1 -1
  77. package/dist/core/session-manager.d.ts +3 -0
  78. package/dist/core/session-manager.d.ts.map +1 -1
  79. package/dist/core/session-manager.js +34 -17
  80. package/dist/core/session-manager.js.map +1 -1
  81. package/dist/core/session-resident-store.d.ts +16 -0
  82. package/dist/core/session-resident-store.d.ts.map +1 -0
  83. package/dist/core/session-resident-store.js +48 -0
  84. package/dist/core/session-resident-store.js.map +1 -0
  85. package/dist/core/settings-manager.d.ts +4 -0
  86. package/dist/core/settings-manager.d.ts.map +1 -1
  87. package/dist/core/settings-manager.js +9 -0
  88. package/dist/core/settings-manager.js.map +1 -1
  89. package/dist/core/trust-manager.d.ts +22 -0
  90. package/dist/core/trust-manager.d.ts.map +1 -1
  91. package/dist/core/trust-manager.js +75 -22
  92. package/dist/core/trust-manager.js.map +1 -1
  93. package/dist/index.d.ts +5 -5
  94. package/dist/index.d.ts.map +1 -1
  95. package/dist/index.js +2 -2
  96. package/dist/index.js.map +1 -1
  97. package/dist/main.d.ts.map +1 -1
  98. package/dist/main.js +92 -129
  99. package/dist/main.js.map +1 -1
  100. package/dist/migrations.d.ts.map +1 -1
  101. package/dist/migrations.js +39 -34
  102. package/dist/migrations.js.map +1 -1
  103. package/dist/modes/index.d.ts +1 -1
  104. package/dist/modes/index.d.ts.map +1 -1
  105. package/dist/modes/index.js.map +1 -1
  106. package/dist/modes/interactive/components/login-dialog.d.ts +1 -0
  107. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  108. package/dist/modes/interactive/components/login-dialog.js +7 -1
  109. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  110. package/dist/modes/interactive/components/settings-selector.d.ts +3 -1
  111. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  112. package/dist/modes/interactive/components/settings-selector.js +20 -0
  113. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  114. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  115. package/dist/modes/interactive/components/tool-execution.js +26 -4
  116. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  117. package/dist/modes/interactive/components/trust-selector.d.ts +6 -3
  118. package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -1
  119. package/dist/modes/interactive/components/trust-selector.js +22 -18
  120. package/dist/modes/interactive/components/trust-selector.js.map +1 -1
  121. package/dist/modes/interactive/interactive-mode.d.ts +15 -0
  122. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  123. package/dist/modes/interactive/interactive-mode.js +158 -19
  124. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  125. package/dist/modes/interactive/working-status.d.ts +2 -0
  126. package/dist/modes/interactive/working-status.d.ts.map +1 -1
  127. package/dist/modes/interactive/working-status.js +34 -0
  128. package/dist/modes/interactive/working-status.js.map +1 -1
  129. package/dist/package-manager-cli.d.ts +6 -2
  130. package/dist/package-manager-cli.d.ts.map +1 -1
  131. package/dist/package-manager-cli.js +58 -11
  132. package/dist/package-manager-cli.js.map +1 -1
  133. package/dist/senpi +10 -1
  134. package/dist/utils/changelog.d.ts +1 -0
  135. package/dist/utils/changelog.d.ts.map +1 -1
  136. package/dist/utils/changelog.js +78 -0
  137. package/dist/utils/changelog.js.map +1 -1
  138. package/docs/docs.json +4 -0
  139. package/docs/extensions.md +30 -1
  140. package/docs/index.md +1 -0
  141. package/docs/models.md +6 -39
  142. package/docs/packages.md +0 -2
  143. package/docs/prompt-templates.md +8 -1
  144. package/docs/sdk.md +5 -0
  145. package/docs/security.md +55 -0
  146. package/docs/settings.md +7 -4
  147. package/docs/terminal-setup.md +36 -2
  148. package/docs/tmux.md +4 -2
  149. package/docs/usage.md +12 -7
  150. package/examples/extensions/README.md +1 -0
  151. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  152. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  153. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  154. package/examples/extensions/gondolin/package-lock.json +2 -2
  155. package/examples/extensions/gondolin/package.json +1 -1
  156. package/examples/extensions/project-trust.ts +64 -0
  157. package/examples/extensions/sandbox/package-lock.json +2 -2
  158. package/examples/extensions/sandbox/package.json +1 -1
  159. package/examples/extensions/with-deps/package-lock.json +2 -2
  160. package/examples/extensions/with-deps/package.json +1 -1
  161. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js +125 -77
  162. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js.map +1 -1
  163. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.d.ts +1 -1
  164. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.d.ts.map +1 -1
  165. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js +1 -1
  166. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js.map +1 -1
  167. package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts +6 -3
  168. package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts.map +1 -1
  169. package/node_modules/@earendil-works/pi-agent-core/dist/types.js.map +1 -1
  170. package/node_modules/@earendil-works/pi-agent-core/package.json +2 -2
  171. package/node_modules/@earendil-works/pi-ai/README.md +2 -1
  172. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.d.ts +2 -2
  173. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js +6 -6
  174. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js.map +1 -1
  175. package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts +373 -116
  176. package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts.map +1 -1
  177. package/node_modules/@earendil-works/pi-ai/dist/models.generated.js +353 -202
  178. package/node_modules/@earendil-works/pi-ai/dist/models.generated.js.map +1 -1
  179. package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.d.ts.map +1 -1
  180. package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.js +15 -7
  181. package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.js.map +1 -1
  182. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.d.ts +1 -1
  183. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
  184. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.js +17 -7
  185. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.js.map +1 -1
  186. package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.js +1 -0
  187. package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.js.map +1 -1
  188. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-completions.d.ts.map +1 -1
  189. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-completions.js +4 -3
  190. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-completions.js.map +1 -1
  191. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses-shared.d.ts.map +1 -1
  192. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses-shared.js +2 -1
  193. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses-shared.js.map +1 -1
  194. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses.d.ts.map +1 -1
  195. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses.js +3 -2
  196. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses.js.map +1 -1
  197. package/node_modules/@earendil-works/pi-ai/dist/providers/simple-options.d.ts +1 -1
  198. package/node_modules/@earendil-works/pi-ai/dist/providers/simple-options.d.ts.map +1 -1
  199. package/node_modules/@earendil-works/pi-ai/dist/providers/simple-options.js +2 -2
  200. package/node_modules/@earendil-works/pi-ai/dist/providers/simple-options.js.map +1 -1
  201. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +5 -1
  202. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts.map +1 -1
  203. package/node_modules/@earendil-works/pi-ai/dist/types.js.map +1 -1
  204. package/node_modules/@earendil-works/pi-ai/package.json +1 -1
  205. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.d.ts +2 -0
  206. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.d.ts.map +1 -1
  207. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.js.map +1 -1
  208. package/node_modules/@earendil-works/pi-tui/dist/components/editor.d.ts +6 -1
  209. package/node_modules/@earendil-works/pi-tui/dist/components/editor.d.ts.map +1 -1
  210. package/node_modules/@earendil-works/pi-tui/dist/components/editor.js +89 -39
  211. package/node_modules/@earendil-works/pi-tui/dist/components/editor.js.map +1 -1
  212. package/node_modules/@earendil-works/pi-tui/dist/components/loader.d.ts +5 -0
  213. package/node_modules/@earendil-works/pi-tui/dist/components/loader.d.ts.map +1 -1
  214. package/node_modules/@earendil-works/pi-tui/dist/components/loader.js +18 -4
  215. package/node_modules/@earendil-works/pi-tui/dist/components/loader.js.map +1 -1
  216. package/node_modules/@earendil-works/pi-tui/dist/fuzzy.d.ts.map +1 -1
  217. package/node_modules/@earendil-works/pi-tui/dist/fuzzy.js +131 -61
  218. package/node_modules/@earendil-works/pi-tui/dist/fuzzy.js.map +1 -1
  219. package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts +4 -7
  220. package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts.map +1 -1
  221. package/node_modules/@earendil-works/pi-tui/dist/terminal.js +38 -76
  222. package/node_modules/@earendil-works/pi-tui/dist/terminal.js.map +1 -1
  223. package/node_modules/@earendil-works/pi-tui/dist/tui.d.ts.map +1 -1
  224. package/node_modules/@earendil-works/pi-tui/dist/tui.js +14 -4
  225. package/node_modules/@earendil-works/pi-tui/dist/tui.js.map +1 -1
  226. package/node_modules/@earendil-works/pi-tui/dist/utils.d.ts.map +1 -1
  227. package/node_modules/@earendil-works/pi-tui/dist/utils.js +43 -15
  228. package/node_modules/@earendil-works/pi-tui/dist/utils.js.map +1 -1
  229. package/node_modules/@earendil-works/pi-tui/package.json +1 -1
  230. package/npm-shrinkwrap.json +12 -12
  231. package/package.json +4 -8
  232. package/dist/core/extensions/builtin/todotools/continuation/config.d.ts +0 -10
  233. package/dist/core/extensions/builtin/todotools/continuation/config.d.ts.map +0 -1
  234. package/dist/core/extensions/builtin/todotools/continuation/config.js +0 -33
  235. package/dist/core/extensions/builtin/todotools/continuation/config.js.map +0 -1
  236. package/dist/core/extensions/builtin/todotools/continuation/index.d.ts +0 -2
  237. package/dist/core/extensions/builtin/todotools/continuation/index.d.ts.map +0 -1
  238. package/dist/core/extensions/builtin/todotools/continuation/index.js +0 -2
  239. package/dist/core/extensions/builtin/todotools/continuation/index.js.map +0 -1
  240. package/dist/core/extensions/builtin/todotools/continuation/prompt.d.ts +0 -5
  241. package/dist/core/extensions/builtin/todotools/continuation/prompt.d.ts.map +0 -1
  242. package/dist/core/extensions/builtin/todotools/continuation/prompt.js +0 -34
  243. package/dist/core/extensions/builtin/todotools/continuation/prompt.js.map +0 -1
  244. package/dist/core/extensions/builtin/todotools/continuation/runtime.d.ts +0 -11
  245. package/dist/core/extensions/builtin/todotools/continuation/runtime.d.ts.map +0 -1
  246. package/dist/core/extensions/builtin/todotools/continuation/runtime.js +0 -201
  247. package/dist/core/extensions/builtin/todotools/continuation/runtime.js.map +0 -1
  248. package/dist/core/extensions/builtin/todotools/settings.d.ts +0 -6
  249. package/dist/core/extensions/builtin/todotools/settings.d.ts.map +0 -1
  250. package/dist/core/extensions/builtin/todotools/settings.js +0 -58
  251. package/dist/core/extensions/builtin/todotools/settings.js.map +0 -1
  252. package/dist/core/extensions/builtin/todotools/system-messages.d.ts +0 -34
  253. package/dist/core/extensions/builtin/todotools/system-messages.d.ts.map +0 -1
  254. package/dist/core/extensions/builtin/todotools/system-messages.js +0 -82
  255. package/dist/core/extensions/builtin/todotools/system-messages.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # Changelog
2
2
 
3
+ ## [Unreleased]
4
+
5
+ ### Added
6
+
7
+ ### Fixed
8
+
9
+ ### Removed
10
+
11
+ ## [2026.6.10] - 2026-06-10
12
+
13
+ ### Added
14
+
15
+ ### Fixed
16
+
17
+ - Fixed inherited autocomplete suggestions to refresh after editor cursor movement ([#5499](https://github.com/earendil-works/pi/pull/5499) by [@Roman-Galeev](https://github.com/Roman-Galeev)).
18
+
19
+ ### Removed
20
+
21
+ - Removed todo continuation auto-follow-up (the `--disable-todo-continuation` flag and `todotools.continuation` settings).
22
+
3
23
  ## [2026.6.6-3] - 2026-06-06
4
24
 
5
25
  ### Added
@@ -18,9 +38,14 @@
18
38
 
19
39
  - Added project trust gating for project-local settings, resources, instructions, and packages ([#5332](https://github.com/earendil-works/pi/pull/5332)).
20
40
  - Added the latest prompt cache hit rate to the interactive footer.
41
+ - Exported RPC extension UI request and response types from the public API ([#5455](https://github.com/earendil-works/pi/issues/5455)).
42
+ - Exported coding-agent package asset path helpers from the public API ([#5415](https://github.com/earendil-works/pi/issues/5415)).
21
43
 
22
44
  ### Fixed
23
45
 
46
+ - Fixed the compaction summarization system prompt to use neutral AI assistant wording for non-coding agents ([#5401](https://github.com/earendil-works/pi/issues/5401)).
47
+ - Fixed `models.json` schema support for OpenAI Responses `compat.supportsDeveloperRole` ([#5456](https://github.com/earendil-works/pi/issues/5456)).
48
+ - Fixed tmux setup documentation to require tmux 3.5 for `extended-keys-format csi-u` and document the tmux 3.2-3.4 fallback ([#5432](https://github.com/earendil-works/pi/issues/5432)).
24
49
  - Fixed built-in tool expand hints to style closing parentheses consistently ([#5359](https://github.com/earendil-works/pi/issues/5359)).
25
50
 
26
51
  ## [2026.6.4] - 2026-06-04
package/README.md CHANGED
@@ -1,26 +1,27 @@
1
1
  <p align="center">
2
2
  <a href="https://pi.dev">
3
- <picture>
4
- <source media="(prefers-color-scheme: dark)" srcset="https://pi.dev/logo.svg">
5
- <source media="(prefers-color-scheme: light)" srcset="https://huggingface.co/buckets/julien-c/my-training-bucket/resolve/pi-logo-dark.svg">
6
- <img alt="senpi logo" src="https://pi.dev/logo.svg" width="128">
7
- </picture>
3
+ <img alt="pi logo" src="https://pi.dev/logo-auto.svg" width="128">
8
4
  </a>
9
5
  </p>
10
6
  <p align="center">
11
7
  <a href="https://discord.com/invite/3cU7Bz4UPx"><img alt="Discord" src="https://img.shields.io/badge/discord-community-5865F2?style=flat-square&logo=discord&logoColor=white" /></a>
12
- <a href="https://www.npmjs.com/package/@code-yeongyu/senpi"><img alt="npm" src="https://img.shields.io/npm/v/@code-yeongyu/senpi?style=flat-square" /></a>
13
- <a href="https://github.com/code-yeongyu/senpi/actions/workflows/ci.yml"><img alt="Build status" src="https://img.shields.io/github/actions/workflow/status/code-yeongyu/senpi/ci.yml?style=flat-square&branch=main" /></a>
8
+ <a href="https://www.npmjs.com/package/@earendil-works/pi-coding-agent"><img alt="npm" src="https://img.shields.io/npm/v/@earendil-works/pi-coding-agent?style=flat-square" /></a>
14
9
  </p>
15
10
  <p align="center">
16
- <strong>senpi</strong> is a senpai-name pun, and also a more <strong>sane</strong> pi with practical extras.
11
+ <a href="https://pi.dev">pi.dev</a> domain graciously donated by
12
+ <br /><br />
13
+ <a href="https://exe.dev"><img src="docs/images/exy.png" alt="Exy mascot" width="48" /><br />exe.dev</a>
17
14
  </p>
18
15
 
19
- Senpi is a minimal terminal coding harness. Adapt senpi to your workflows, not the other way around, without having to fork and modify core internals. Extend it with TypeScript [Extensions](#extensions), [Skills](#skills), [Prompt Templates](#prompt-templates), and [Themes](#themes). Put your extensions, skills, prompt templates, and themes in [Senpi Packages](#pi-packages) and share them with others via npm or git.
16
+ > New issues and PRs from new contributors are auto-closed by default. Maintainers review auto-closed issues daily. See [CONTRIBUTING.md](../../CONTRIBUTING.md).
20
17
 
21
- Senpi ships with powerful defaults but skips features like sub agents and plan mode. Instead, you can ask senpi to build what you want or install a third party package that matches your workflow.
18
+ ---
19
+
20
+ Pi is a minimal terminal coding harness. Adapt pi to your workflows, not the other way around, without having to fork and modify pi internals. Extend it with TypeScript [Extensions](#extensions), [Skills](#skills), [Prompt Templates](#prompt-templates), and [Themes](#themes). Put your extensions, skills, prompt templates, and themes in [Pi Packages](#pi-packages) and share them with others via npm or git.
22
21
 
23
- Senpi runs in four modes: interactive, print or JSON, RPC for process integration, and an SDK for embedding in your own apps. See [openclaw/openclaw](https://github.com/openclaw/openclaw) for a real-world SDK integration.
22
+ Pi ships with powerful defaults but skips features like sub agents and plan mode. Instead, you can ask pi to build what you want or install a third party pi package that matches your workflow.
23
+
24
+ Pi runs in four modes: interactive, print or JSON, RPC for process integration, and an SDK for embedding in your own apps. See [openclaw/openclaw](https://github.com/openclaw/openclaw) for a real-world SDK integration.
24
25
 
25
26
  ## Share your OSS coding agent sessions
26
27
 
@@ -57,7 +58,7 @@ I regularly publish my own `pi-mono` work sessions here:
57
58
  - [Skills](#skills)
58
59
  - [Extensions](#extensions)
59
60
  - [Themes](#themes)
60
- - [Senpi Packages](#pi-packages)
61
+ - [Pi Packages](#pi-packages)
61
62
  - [Programmatic Usage](#programmatic-usage)
62
63
  - [Philosophy](#philosophy)
63
64
  - [CLI Reference](#cli-reference)
@@ -67,26 +68,32 @@ I regularly publish my own `pi-mono` work sessions here:
67
68
  ## Quick Start
68
69
 
69
70
  ```bash
70
- npm install -g @code-yeongyu/senpi
71
+ npm install -g --ignore-scripts @earendil-works/pi-coding-agent
71
72
  ```
72
73
 
73
- `@code-yeongyu/senpi` is the npm package name. The installed executable is still `senpi`.
74
+ `--ignore-scripts` disables dependency lifecycle scripts during install. Pi does not require install scripts for normal npm installs.
75
+
76
+ Installer alternative:
77
+
78
+ ```bash
79
+ curl -fsSL https://pi.dev/install.sh | sh
80
+ ```
74
81
 
75
82
  Authenticate with an API key:
76
83
 
77
84
  ```bash
78
85
  export ANTHROPIC_API_KEY=sk-ant-...
79
- senpi
86
+ pi
80
87
  ```
81
88
 
82
89
  Or use your existing subscription:
83
90
 
84
91
  ```bash
85
- senpi
92
+ pi
86
93
  /login # Then select provider
87
94
  ```
88
95
 
89
- Then just talk to senpi. By default, senpi gives the model four tools: `read`, `write`, `edit`, and `bash`. The model uses these to fulfill your requests. Add capabilities via [skills](#skills), [prompt templates](#prompt-templates), [extensions](#extensions), or [senpi packages](#pi-packages).
96
+ Then just talk to pi. By default, pi gives the model four tools: `read`, `write`, `edit`, and `bash`. The model uses these to fulfill your requests. Add capabilities via [skills](#skills), [prompt templates](#prompt-templates), [extensions](#extensions), or [pi packages](#pi-packages).
90
97
 
91
98
  **Platform notes:** [Windows](docs/windows.md) | [Termux (Android)](docs/termux.md) | [tmux](docs/tmux.md) | [Terminal setup](docs/terminal-setup.md) | [Shell aliases](docs/shell-aliases.md)
92
99
 
@@ -94,7 +101,7 @@ Then just talk to senpi. By default, senpi gives the model four tools: `read`, `
94
101
 
95
102
  ## Providers & Models
96
103
 
97
- For each built-in provider, senpi maintains a list of tool-capable models, updated with every release. Authenticate via subscription (`/login`) or API key, then select any model from that provider via `/model` (or Ctrl+L).
104
+ For each built-in provider, pi maintains a list of tool-capable models, updated with every release. Authenticate via subscription (`/login`) or API key, then select any model from that provider via `/model` (or Ctrl+L).
98
105
 
99
106
  **Subscriptions:**
100
107
  - Anthropic Claude Pro/Max
@@ -135,7 +142,7 @@ For each built-in provider, senpi maintains a list of tool-capable models, updat
135
142
 
136
143
  See [docs/providers.md](docs/providers.md) for detailed setup instructions.
137
144
 
138
- **Custom providers & models:** Add providers via `~/.senpi/agent/models.json` if they speak a supported API (OpenAI, Anthropic, Google). For custom APIs or OAuth, use extensions. See [docs/models.md](docs/models.md) and [docs/custom-provider.md](docs/custom-provider.md).
145
+ **Custom providers & models:** Add providers via `~/.pi/agent/models.json` if they speak a supported API (OpenAI, Anthropic, Google). For custom APIs or OAuth, use extensions. See [docs/models.md](docs/models.md) and [docs/custom-provider.md](docs/custom-provider.md).
139
146
 
140
147
  ---
141
148
 
@@ -172,7 +179,7 @@ Type `/` in the editor to trigger commands. [Extensions](#extensions) can regist
172
179
  |---------|-------------|
173
180
  | `/login`, `/logout` | OAuth authentication |
174
181
  | `/model` | Switch models |
175
- | `/favorite-models` | Manage favorite models for Ctrl+P cycling |
182
+ | `/scoped-models` | Enable/disable models for Ctrl+P cycling |
176
183
  | `/settings` | Thinking level, theme, message delivery, transport |
177
184
  | `/resume` | Pick from previous sessions |
178
185
  | `/new` | Start a new session |
@@ -189,11 +196,11 @@ Type `/` in the editor to trigger commands. [Extensions](#extensions) can regist
189
196
  | `/reload` | Reload keybindings, extensions, skills, prompts, and context files (themes hot-reload automatically) |
190
197
  | `/hotkeys` | Show all keyboard shortcuts |
191
198
  | `/changelog` | Display version history |
192
- | `/quit` | Quit senpi |
199
+ | `/quit` | Quit pi |
193
200
 
194
201
  ### Keyboard Shortcuts
195
202
 
196
- See `/hotkeys` for the full list. Customize via `~/.senpi/agent/keybindings.json`. See [docs/keybindings.md](docs/keybindings.md).
203
+ See `/hotkeys` for the full list. Customize via `~/.pi/agent/keybindings.json`. See [docs/keybindings.md](docs/keybindings.md).
197
204
 
198
205
  **Commonly used:**
199
206
 
@@ -204,7 +211,7 @@ See `/hotkeys` for the full list. Customize via `~/.senpi/agent/keybindings.json
204
211
  | Escape | Cancel/abort |
205
212
  | Escape twice | Open `/tree` |
206
213
  | Ctrl+L | Open model selector |
207
- | Ctrl+P / Shift+Ctrl+P | Cycle favorite models forward/backward |
214
+ | Ctrl+P / Shift+Ctrl+P | Cycle scoped models forward/backward |
208
215
  | Shift+Tab | Cycle thinking level |
209
216
  | Ctrl+O | Collapse/expand tool output |
210
217
  | Ctrl+T | Collapse/expand thinking blocks |
@@ -218,7 +225,7 @@ Submit messages while the agent is working:
218
225
  - **Escape** aborts and restores queued messages to editor
219
226
  - **Alt+Up** retrieves queued messages back to editor
220
227
 
221
- On Windows Terminal, `Alt+Enter` is fullscreen by default. Remap it in [docs/terminal-setup.md](docs/terminal-setup.md) so senpi can receive the follow-up shortcut.
228
+ On Windows Terminal, `Alt+Enter` is fullscreen by default. Remap it in [docs/terminal-setup.md](docs/terminal-setup.md) so pi can receive the follow-up shortcut.
222
229
 
223
230
  Configure delivery in [settings](docs/settings.md): `steeringMode` and `followUpMode` can be `"one-at-a-time"` (default, waits for response) or `"all"` (delivers all queued at once). `transport` selects provider transport preference (`"sse"`, `"websocket"`, or `"auto"`) for providers that support multiple transports.
224
231
 
@@ -230,15 +237,15 @@ Sessions are stored as JSONL files with a tree structure. Each entry has an `id`
230
237
 
231
238
  ### Management
232
239
 
233
- Sessions auto-save to `~/.senpi/agent/sessions/` organized by working directory.
240
+ Sessions auto-save to `~/.pi/agent/sessions/` organized by working directory.
234
241
 
235
242
  ```bash
236
- senpi -c # Continue most recent session
237
- senpi -r # Browse and select from past sessions
238
- senpi --no-session # Ephemeral mode (don't save)
239
- senpi --name "my task" # Set session display name at startup
240
- senpi --session <path|id> # Use specific session file or ID
241
- senpi --fork <path|id> # Fork specific session file or ID into a new session
243
+ pi -c # Continue most recent session
244
+ pi -r # Browse and select from past sessions
245
+ pi --no-session # Ephemeral mode (don't save)
246
+ pi --name "my task" # Set session display name at startup
247
+ pi --session <path|id> # Use specific session file or ID
248
+ pi --fork <path|id> # Fork specific session file or ID into a new session
242
249
  ```
243
250
 
244
251
  Use `/session` in interactive mode to see the current session ID before reusing it with `--session <id>` or `--fork <id>`.
@@ -277,20 +284,24 @@ Use `/settings` to modify common options, or edit JSON files directly:
277
284
 
278
285
  | Location | Scope |
279
286
  |----------|-------|
280
- | `~/.senpi/agent/settings.json` | Global (all projects) |
281
- | `.senpi/settings.json` | Project (overrides global) |
287
+ | `~/.pi/agent/settings.json` | Global (all projects) |
288
+ | `.pi/settings.json` | Project (overrides global) |
282
289
 
283
290
  See [docs/settings.md](docs/settings.md) for all options.
284
291
 
285
292
  ### Project Trust
286
293
 
287
- On interactive startup, pi asks before trusting a project folder that contains project-local inputs and has no saved decision in `~/.pi/agent/trust.json`. Trusting a project allows pi to read project instructions (`AGENTS.md`/`CLAUDE.md`), load `.pi/settings.json` and `.pi` resources, install missing project packages, and execute project extensions.
294
+ On interactive startup, pi asks before trusting a project folder that contains project-local extensions or settings and has no saved decision for the folder or a parent folder in `~/.pi/agent/trust.json`. Trusting a project allows pi to load `.pi/settings.json` and `.pi` resources, install missing project packages, and execute project extensions.
288
295
 
289
- Non-interactive modes (`-p`, `--mode json`, and `--mode rpc`) do not show a trust prompt. Without a saved trust decision, they ignore project-local inputs unless `--approve`/`-a` is passed. Use `--no-approve`/`-na` to ignore project-local inputs for one run even when the project is trusted.
296
+ Before the trust decision, pi loads only context files, user/global extensions, and CLI `-e` extensions so they can handle the `project_trust` event. Project-local extensions, project package-managed extensions, and project settings are loaded only after the project is trusted. This split also applies when switching to a session from a different cwd whose trust has not been resolved in the current process.
290
297
 
291
- `pi config` assumes project trust for that command so you can view and change project resource settings before starting a session. It does not save a trust decision; starting a session in that folder still prompts. Pass `--no-approve` to hide project-local inputs in `pi config`.
298
+ Non-interactive modes (`-p`, `--mode json`, and `--mode rpc`) do not show a trust prompt. Without an applicable saved trust decision, they use `defaultProjectTrust` from global settings: `ask` (default) and `never` ignore trust-gated project inputs, while `always` trusts them. Pass `--approve`/`-a` or `--no-approve`/`-na` to override project trust for one run.
292
299
 
293
- Use `/trust` in interactive mode to save a project trust decision for future sessions. It writes `~/.pi/agent/trust.json` only; the current session is not reloaded, so restart pi for changes to take effect.
300
+ If no extension or saved decision applies, `defaultProjectTrust` controls the fallback behavior. Set it to `"ask"`, `"always"`, or `"never"` in `~/.senpi/agent/settings.json`, or change it with `/settings`.
301
+
302
+ `senpi config` and package commands use the same project trust flow. Pass `--approve` to trust project-local settings for one command or `--no-approve` to ignore them.
303
+
304
+ Use `/trust` in interactive mode to save a project trust decision for future sessions, including trust for the immediate parent folder. It writes `~/.senpi/agent/trust.json` only; the current session is not reloaded, so restart senpi for changes to take effect.
294
305
 
295
306
  ### Telemetry and update checks
296
307
 
@@ -316,7 +327,7 @@ Disable context file loading with `--no-context-files` (or `-nc`).
316
327
 
317
328
  ### System Prompt
318
329
 
319
- Replace the default system prompt with `.senpi/SYSTEM.md` (project) or `~/.senpi/agent/SYSTEM.md` (global). Append without replacing via `APPEND_SYSTEM.md`.
330
+ Replace the default system prompt with `.pi/SYSTEM.md` (project) or `~/.pi/agent/SYSTEM.md` (global). Append without replacing via `APPEND_SYSTEM.md`.
320
331
 
321
332
  ---
322
333
 
@@ -327,19 +338,19 @@ Replace the default system prompt with `.senpi/SYSTEM.md` (project) or `~/.senpi
327
338
  Reusable prompts as Markdown files. Type `/name` to expand.
328
339
 
329
340
  ```markdown
330
- <!-- ~/.senpi/agent/prompts/review.md -->
341
+ <!-- ~/.pi/agent/prompts/review.md -->
331
342
  Review this code for bugs, security issues, and performance problems.
332
343
  Focus on: {{focus}}
333
344
  ```
334
345
 
335
- Place in `~/.senpi/agent/prompts/`, `.senpi/prompts/`, or a [senpi package](#pi-packages) to share with others. See [docs/prompt-templates.md](docs/prompt-templates.md).
346
+ Place in `~/.pi/agent/prompts/`, `.pi/prompts/`, or a [pi package](#pi-packages) to share with others. See [docs/prompt-templates.md](docs/prompt-templates.md).
336
347
 
337
348
  ### Skills
338
349
 
339
350
  On-demand capability packages following the [Agent Skills standard](https://agentskills.io). Invoke via `/skill:name` or let the agent load them automatically.
340
351
 
341
352
  ```markdown
342
- <!-- ~/.senpi/agent/skills/my-skill/SKILL.md -->
353
+ <!-- ~/.pi/agent/skills/my-skill/SKILL.md -->
343
354
  # My Skill
344
355
  Use this skill when the user asks about X.
345
356
 
@@ -348,13 +359,13 @@ Use this skill when the user asks about X.
348
359
  2. Then that
349
360
  ```
350
361
 
351
- Place in `~/.senpi/agent/skills/`, `~/.agents/skills/`, `.senpi/skills/`, or `.agents/skills/` (from `cwd` up through parent directories) or a [senpi package](#pi-packages) to share with others. See [docs/skills.md](docs/skills.md).
362
+ Place in `~/.pi/agent/skills/`, `~/.agents/skills/`, `.pi/skills/`, or `.agents/skills/` (from `cwd` up through parent directories) or a [pi package](#pi-packages) to share with others. See [docs/skills.md](docs/skills.md).
352
363
 
353
364
  ### Extensions
354
365
 
355
366
  <p align="center"><img src="docs/images/doom-extension.png" alt="Doom Extension" width="600"></p>
356
367
 
357
- TypeScript modules that extend senpi with custom tools, commands, keyboard shortcuts, event handlers, and UI components.
368
+ TypeScript modules that extend pi with custom tools, commands, keyboard shortcuts, event handlers, and UI components.
358
369
 
359
370
  ```typescript
360
371
  export default function (pi: ExtensionAPI) {
@@ -368,7 +379,7 @@ The default export can also be `async`. pi waits for async extension factories b
368
379
 
369
380
  **What's possible:**
370
381
  - Custom tools (or replace built-in tools entirely)
371
- - Plan mode
382
+ - Sub-agents and plan mode
372
383
  - Custom compaction and summarization
373
384
  - Permission gates and path protection
374
385
  - Custom editors and UI components
@@ -376,49 +387,47 @@ The default export can also be `async`. pi waits for async extension factories b
376
387
  - Git checkpointing and auto-commit
377
388
  - SSH and sandbox execution
378
389
  - MCP server integration
379
- - Make senpi look like Claude Code
390
+ - Make pi look like Claude Code
380
391
  - Games while waiting (yes, Doom runs)
381
392
  - ...anything you can dream up
382
393
 
383
- Place in `~/.senpi/agent/extensions/`, `.senpi/extensions/`, or a [senpi package](#pi-packages) to share with others. See [docs/extensions.md](docs/extensions.md) and [examples/extensions/](examples/extensions/).
384
-
385
- Builtin extensions ship inside senpi and load before user extensions. Configure them in `settings.json` with `enabledBuiltinExtensions` to allow only specific builtin ids, or `disabledBuiltinExtensions` to skip ids while keeping the default set. The `openai-api-parallel-tool-calls`, `bash-timeout`, `webfetch`, and `gpt-apply-patch` builtin snapshots are refreshed from the sibling `pi-extensions` checkout at build time when available, and their source versions are recorded in `src/core/extensions/builtin/external-versions.json`.
394
+ Place in `~/.pi/agent/extensions/`, `.pi/extensions/`, or a [pi package](#pi-packages) to share with others. See [docs/extensions.md](docs/extensions.md) and [examples/extensions/](examples/extensions/).
386
395
 
387
396
  ### Themes
388
397
 
389
- Built-in: `dark`, `light`. Themes hot-reload: modify the active theme file and senpi immediately applies changes.
398
+ Built-in: `dark`, `light`. Themes hot-reload: modify the active theme file and pi immediately applies changes.
390
399
 
391
- Place in `~/.senpi/agent/themes/`, `.senpi/themes/`, or a [senpi package](#pi-packages) to share with others. See [docs/themes.md](docs/themes.md).
400
+ Place in `~/.pi/agent/themes/`, `.pi/themes/`, or a [pi package](#pi-packages) to share with others. See [docs/themes.md](docs/themes.md).
392
401
 
393
- ### Senpi Packages
402
+ ### Pi Packages
394
403
 
395
404
  Bundle and share extensions, skills, prompts, and themes via npm or git. Find packages on [npmjs.com](https://www.npmjs.com/search?q=keywords%3Api-package) or [Discord](https://discord.com/channels/1456806362351669492/1457744485428629628).
396
405
 
397
- > **Security:** Senpi packages run with full system access. Extensions execute arbitrary code, and skills can instruct the model to perform any action including running executables. Review source code before installing third-party packages.
406
+ > **Security:** Pi packages run with full system access. Extensions execute arbitrary code, and skills can instruct the model to perform any action including running executables. Review source code before installing third-party packages.
398
407
 
399
408
  ```bash
400
- senpi install npm:@foo/senpi-tools
401
- senpi install npm:@foo/senpi-tools@1.2.3 # pinned version
402
- senpi install git:github.com/user/repo
403
- senpi install git:github.com/user/repo@v1 # tag or commit
404
- senpi install git:git@github.com:user/repo
405
- senpi install git:git@github.com:user/repo@v1 # tag or commit
406
- senpi install https://github.com/user/repo
407
- senpi install https://github.com/user/repo@v1 # tag or commit
408
- senpi install ssh://git@github.com/user/repo
409
- senpi install ssh://git@github.com/user/repo@v1 # tag or commit
410
- senpi remove npm:@foo/senpi-tools
411
- senpi uninstall npm:@foo/senpi-tools # alias for remove
412
- senpi list
413
- senpi update # update senpi and packages (skips pinned packages)
414
- senpi update --extensions # update packages only
415
- senpi update --self # update senpi only
416
- senpi update --self --force # reinstall senpi even if current
417
- senpi update npm:@foo/senpi-tools # update one package
418
- senpi config # enable/disable extensions, skills, prompts, themes
409
+ pi install npm:@foo/pi-tools
410
+ pi install npm:@foo/pi-tools@1.2.3 # pinned version
411
+ pi install git:github.com/user/repo
412
+ pi install git:github.com/user/repo@v1 # tag or commit
413
+ pi install git:git@github.com:user/repo
414
+ pi install git:git@github.com:user/repo@v1 # tag or commit
415
+ pi install https://github.com/user/repo
416
+ pi install https://github.com/user/repo@v1 # tag or commit
417
+ pi install ssh://git@github.com/user/repo
418
+ pi install ssh://git@github.com/user/repo@v1 # tag or commit
419
+ pi remove npm:@foo/pi-tools
420
+ pi uninstall npm:@foo/pi-tools # alias for remove
421
+ pi list
422
+ pi update # update pi and packages (skips pinned packages)
423
+ pi update --extensions # update packages only
424
+ pi update --self # update pi only
425
+ pi update --self --force # reinstall pi even if current
426
+ pi update npm:@foo/pi-tools # update one package
427
+ pi config # enable/disable extensions, skills, prompts, themes
419
428
  ```
420
429
 
421
- Packages install to `~/.senpi/agent/git/` (git) or global npm. Use `-l` for project-local installs (`.senpi/git/`, `.senpi/npm/`). Git `@ref` values are pinned tags or commits; pinned packages are skipped by `senpi update`, so use `senpi install git:host/user/repo@new-ref` to move an existing package to a new ref. Git packages install dependencies with `npm install --omit=dev` by default, so runtime deps must be listed under `dependencies`; when `npmCommand` is configured, git packages use plain `install` for compatibility with wrappers. If you use a Node version manager and want package installs to reuse a stable npm context, set `npmCommand` in `settings.json`, for example `["mise", "exec", "node@20", "--", "npm"]`.
430
+ Packages install to `~/.pi/agent/git/` (git) or `~/.pi/agent/npm/` (npm). Use `-l` for project-local installs (`.pi/git/`, `.pi/npm/`). Git `@ref` values are pinned tags or commits; pinned packages are skipped by `pi update`, so use `pi install git:host/user/repo@new-ref` to move an existing package to a new ref. Git packages install dependencies with `npm install --omit=dev` by default, so runtime deps must be listed under `dependencies`; when `npmCommand` is configured, git packages use plain `install` for compatibility with wrappers. If you use a Node version manager and want package installs to reuse a stable npm context, set `npmCommand` in `settings.json`, for example `["mise", "exec", "node@20", "--", "npm"]`.
422
431
 
423
432
  Create a package by adding a `pi` key to `package.json`:
424
433
 
@@ -435,7 +444,7 @@ Create a package by adding a `pi` key to `package.json`:
435
444
  }
436
445
  ```
437
446
 
438
- Without a `pi` manifest, senpi auto-discovers from conventional directories (`extensions/`, `skills/`, `prompts/`, `themes/`).
447
+ Without a `pi` manifest, pi auto-discovers from conventional directories (`extensions/`, `skills/`, `prompts/`, `themes/`).
439
448
 
440
449
  See [docs/packages.md](docs/packages.md).
441
450
 
@@ -446,7 +455,7 @@ See [docs/packages.md](docs/packages.md).
446
455
  ### SDK
447
456
 
448
457
  ```typescript
449
- import { AuthStorage, createAgentSession, ModelRegistry, SessionManager } from "@code-yeongyu/senpi";
458
+ import { AuthStorage, createAgentSession, ModelRegistry, SessionManager } from "@earendil-works/pi-coding-agent";
450
459
 
451
460
  const authStorage = AuthStorage.create();
452
461
  const modelRegistry = ModelRegistry.create(authStorage);
@@ -459,8 +468,6 @@ const { session } = await createAgentSession({
459
468
  await session.prompt("What files are in the current directory?");
460
469
  ```
461
470
 
462
- The package name is scoped, but runtime branding, config paths, and the CLI command stay `senpi`.
463
-
464
471
  For advanced multi-session runtime replacement, use `createAgentSessionRuntime()` and `AgentSessionRuntime`.
465
472
 
466
473
  See [docs/sdk.md](docs/sdk.md) and [examples/sdk/](examples/sdk/).
@@ -470,7 +477,7 @@ See [docs/sdk.md](docs/sdk.md) and [examples/sdk/](examples/sdk/).
470
477
  For non-Node.js integrations, use RPC mode over stdin/stdout:
471
478
 
472
479
  ```bash
473
- senpi --mode rpc
480
+ pi --mode rpc
474
481
  ```
475
482
 
476
483
  RPC mode uses strict LF-delimited JSONL framing. Clients must split records on `\n` only. Do not use generic line readers like Node `readline`, which also split on Unicode separators inside JSON payloads.
@@ -481,24 +488,21 @@ See [docs/rpc.md](docs/rpc.md) for the protocol.
481
488
 
482
489
  ## Philosophy
483
490
 
484
- Senpi inherits upstream pi's extension-first design the **core stays minimal**, every feature is reachable through the [extension API](docs/extensions.md). The senpi fork's bet is that a small, opinionated set of features is so commonly wanted that shipping them as **builtin extensions** (loaded by default, disable per-id via `disabledBuiltinExtensions`) beats forcing every user to bolt them on. Anything you do not want is still one settings flag away from being off.
491
+ Pi is aggressively extensible so it doesn't have to dictate your workflow. Features that other tools bake in can be built with [extensions](#extensions), [skills](#skills), or installed from third-party [pi packages](#pi-packages). This keeps the core minimal while letting you shape pi to fit how you work.
492
+
493
+ **No MCP.** Build CLI tools with READMEs (see [Skills](#skills)), or build an extension that adds MCP support. [Why?](https://mariozechner.at/posts/2025-11-02-what-if-you-dont-need-mcp/)
494
+
495
+ **No sub-agents.** There's many ways to do this. Spawn pi instances via tmux, or build your own with [extensions](#extensions), or install a package that does it your way.
485
496
 
486
- Upstream pi-mono explicitly omits these features. Senpi ships them as builtins (see the root [README](../../README.md#what-this-fork-adds) for the full list):
497
+ **No permission popups.** Run in a container, or build your own confirmation flow with [extensions](#extensions) inline with your environment and security requirements.
487
498
 
488
- - **Permission popups** full opencode-style permission flow via [`permission-system`](src/core/extensions/builtin/permission-system/AGENTS.md). Opt-in per tool/rule; non-interactive modes auto-deny unknown calls.
489
- - **Built-in to-dos** — `todowrite` / `todoread` tools with branch-aware persistence and a continuation loop. Required by senpi's dynamic prompt; remove the builtin id to opt out.
490
- - **Dynamic system prompt** — intent gate + tool categorization + policy enforcement via [`dynamic-prompt/`](src/core/dynamic-prompt/AGENTS.md). Replaces upstream's static prompt.
491
- - **Per-model prompt presets** — `gpt-5.x`, `claude-opus-4-{5,6,7}`, `kimi-k2-6` via [`prompt-preset`](src/core/extensions/builtin/prompt-preset/AGENTS.md).
492
- - **GPT `apply_patch` tool** — Codex-style freeform grammar via [`gpt-apply-patch`](src/core/extensions/builtin/gpt-apply-patch/AGENTS.md), activated only for GPT models.
493
- - **Compaction pipeline** — speculative + restoration + degradation monitoring via [`compaction`](src/core/extensions/builtin/compaction/AGENTS.md).
499
+ **No plan mode.** Write plans to files, or build it with [extensions](#extensions), or install a package.
494
500
 
495
- Senpi still keeps the things upstream **does** drop:
501
+ **No built-in to-dos.** They confuse models. Use a TODO.md file, or build your own with [extensions](#extensions).
496
502
 
497
- **No MCP** build CLI tools with READMEs (see [Skills](#skills)) or add MCP via an extension. [Why?](https://mariozechner.at/posts/2025-11-02-what-if-you-dont-need-mcp/)
498
- **No plan mode** — write plans to files, or build it via an extension.
499
- **No background bash** — use tmux for full observability and direct interaction.
503
+ **No background bash.** Use tmux. Full observability, direct interaction.
500
504
 
501
- Read upstream's [blog post](https://mariozechner.at/posts/2025-11-30-pi-coding-agent/) for the original rationale that senpi forks from.
505
+ Read the [blog post](https://mariozechner.at/posts/2025-11-30-pi-coding-agent/) for the full rationale.
502
506
 
503
507
  ---
504
508
 
@@ -523,7 +527,7 @@ senpi list # List installed packages
523
527
  senpi config # Enable/disable package resources
524
528
  ```
525
529
 
526
- Project package commands accept `--approve`/`--no-approve` to trust or ignore project-local package settings for one command.
530
+ `senpi config` and project package commands accept `--approve`/`--no-approve` to trust or ignore project-local settings for one command.
527
531
 
528
532
  ### Modes
529
533
 
@@ -535,10 +539,10 @@ Project package commands accept `--approve`/`--no-approve` to trust or ignore pr
535
539
  | `--mode rpc` | RPC mode for process integration (see [docs/rpc.md](docs/rpc.md)) |
536
540
  | `--export <in> [out]` | Export session to HTML |
537
541
 
538
- In print mode, senpi also reads piped stdin and merges it into the initial prompt:
542
+ In print mode, pi also reads piped stdin and merges it into the initial prompt:
539
543
 
540
544
  ```bash
541
- cat README.md | senpi -p "Summarize this text"
545
+ cat README.md | pi -p "Summarize this text"
542
546
  ```
543
547
 
544
548
  ### Model Options
@@ -548,8 +552,8 @@ cat README.md | senpi -p "Summarize this text"
548
552
  | `--provider <name>` | Provider (anthropic, openai, google, etc.) |
549
553
  | `--model <pattern>` | Model pattern or ID (supports `provider/id` and optional `:<thinking>`) |
550
554
  | `--api-key <key>` | API key (overrides env vars) |
551
- | `--thinking <level>` | `off`, `minimal`, `low`, `medium`, `high`, `xhigh`, `max` |
552
- | `--models <patterns>` | Comma-separated patterns that narrow the global model catalog |
555
+ | `--thinking <level>` | `off`, `minimal`, `low`, `medium`, `high`, `xhigh` |
556
+ | `--models <patterns>` | Comma-separated patterns for Ctrl+P cycling |
553
557
  | `--list-models [search]` | List available models |
554
558
 
555
559
  ### Session Options
@@ -608,61 +612,59 @@ Combine `--no-*` with explicit flags to load exactly what you need, ignoring set
608
612
  Prefix files with `@` to include in the message:
609
613
 
610
614
  ```bash
611
- senpi @prompt.md "Answer this"
612
- senpi -p @screenshot.png "What's in this image?"
613
- senpi @code.ts @test.ts "Review these files"
615
+ pi @prompt.md "Answer this"
616
+ pi -p @screenshot.png "What's in this image?"
617
+ pi @code.ts @test.ts "Review these files"
614
618
  ```
615
619
 
616
620
  ### Examples
617
621
 
618
622
  ```bash
619
623
  # Interactive with initial prompt
620
- senpi "List all .ts files in src/"
624
+ pi "List all .ts files in src/"
621
625
 
622
626
  # Non-interactive
623
- senpi -p "Summarize this codebase"
627
+ pi -p "Summarize this codebase"
624
628
 
625
629
  # Non-interactive with piped stdin
626
- cat README.md | senpi -p "Summarize this text"
630
+ cat README.md | pi -p "Summarize this text"
627
631
 
628
632
  # Named one-shot session
629
633
  pi --name "release audit" -p "Audit this repository"
630
634
 
631
635
  # Different model
632
- senpi --provider openai --model gpt-4o "Help me refactor"
636
+ pi --provider openai --model gpt-4o "Help me refactor"
633
637
 
634
638
  # Model with provider prefix (no --provider needed)
635
- senpi --model openai/gpt-4o "Help me refactor"
639
+ pi --model openai/gpt-4o "Help me refactor"
636
640
 
637
641
  # Model with thinking level shorthand
638
- senpi --model sonnet:high "Solve this complex problem"
642
+ pi --model sonnet:high "Solve this complex problem"
639
643
 
640
644
  # Limit model cycling
641
- senpi --models "claude-*,gpt-4o"
645
+ pi --models "claude-*,gpt-4o"
642
646
 
643
647
  # Read-only mode
644
- senpi --tools read,grep,find,ls -p "Review the code"
648
+ pi --tools read,grep,find,ls -p "Review the code"
645
649
 
646
650
  # Disable one extension or built-in tool while keeping the rest available
647
651
  pi --exclude-tools ask_question
648
652
 
649
653
  # High thinking level
650
- senpi --thinking high "Solve this complex problem"
654
+ pi --thinking high "Solve this complex problem"
651
655
  ```
652
656
 
653
657
  ### Environment Variables
654
658
 
655
659
  | Variable | Description |
656
660
  |----------|-------------|
657
- | `SENPI_CODING_AGENT_DIR` | Override config directory (default: `~/.senpi/agent`) |
658
- | `SENPI_CODING_AGENT_SESSION_DIR` | Override session storage directory (overridden by `--session-dir`) |
661
+ | `PI_CODING_AGENT_DIR` | Override config directory (default: `~/.pi/agent`) |
662
+ | `PI_CODING_AGENT_SESSION_DIR` | Override session storage directory (overridden by `--session-dir`) |
659
663
  | `PI_PACKAGE_DIR` | Override package directory (useful for Nix/Guix where store paths tokenize poorly) |
660
664
  | `PI_OFFLINE` | Disable startup network operations, including update checks, package update checks, and install/update telemetry |
661
665
  | `PI_SKIP_VERSION_CHECK` | Skip the Pi version update check at startup. This prevents the `pi.dev` latest-version request |
662
666
  | `PI_TELEMETRY` | Override install/update telemetry and provider attribution headers. Use `1`/`true`/`yes` to enable or `0`/`false`/`no` to disable. This does not disable update checks |
663
667
  | `PI_CACHE_RETENTION` | Set to `long` for extended prompt cache (Anthropic: 1h, OpenAI: 24h) |
664
- | `PI_BASH_DEFAULT_TIMEOUT_SECONDS` | Default timeout in seconds applied to `bash` tool calls when the model omits `timeout` (default: `120`). |
665
- | `PI_BASH_MAX_TIMEOUT_SECONDS` | Recommended maximum timeout in seconds for prompt guidance (default: `600`, automatically raised to default if a smaller value is configured). Explicit timeout values are preserved. |
666
668
  | `VISUAL`, `EDITOR` | External editor for Ctrl+G |
667
669
 
668
670
  ---
@@ -1 +1 @@
1
- {"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAGnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAEjE,MAAM,MAAM,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAE3C,MAAM,WAAW,IAAI;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,8EAA8E;IAC9E,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,CAAC;IAC5C,WAAW,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACnE;AAID,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,aAAa,CAE1E;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAqJ9C;AAED,wBAAgB,SAAS,CAAC,cAAc,CAAC,EAAE,aAAa,EAAE,GAAG,IAAI,CAqLhE"}
1
+ {"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAGnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAEjE,MAAM,MAAM,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAE3C,MAAM,WAAW,IAAI;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,8EAA8E;IAC9E,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,CAAC;IAC5C,WAAW,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACnE;AAID,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,aAAa,CAE1E;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAqJ9C;AAED,wBAAgB,SAAS,CAAC,cAAc,CAAC,EAAE,aAAa,EAAE,GAAG,IAAI,CAoLhE"}
package/dist/cli/args.js CHANGED
@@ -243,7 +243,7 @@ ${chalk.bold("Options:")}
243
243
  --session-dir <dir> Directory for session storage and lookup
244
244
  --no-session Don't save session (ephemeral)
245
245
  --name, -n <name> Set session display name
246
- --models <patterns> Comma-separated patterns that narrow the global model catalog
246
+ --models <patterns> Comma-separated model patterns for Ctrl+P cycling
247
247
  Supports globs (anthropic/*, *sonnet*) and fuzzy matching
248
248
  --no-tools, -nt Disable all tools by default (built-in and extension)
249
249
  --no-builtin-tools, -nbt Disable built-in tools by default but keep extension/custom tools enabled
@@ -252,7 +252,6 @@ ${chalk.bold("Options:")}
252
252
  --exclude-tools, -xt <tools> Comma-separated denylist of tool names to disable
253
253
  Applies to built-in, extension, and custom tools
254
254
  --thinking <level> Set thinking level: off, minimal, low, medium, high, xhigh, max
255
- (xhigh/max are Anthropic-native tiers; xhigh also covers GPT-5.x)
256
255
  --extension, -e <path> Load an extension file (can be used multiple times)
257
256
  --no-extensions, -ne Disable extension discovery (explicit -e paths still work)
258
257
  --skill <path> Load a skill file or directory (can be used multiple times)