harborloop 0.5.21 → 0.5.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -187,6 +187,49 @@ The pause is stored **locally** and read by the hook before it touches the
187
187
  network, so it still works on a plane — and so a toggle cannot fail at exactly
188
188
  the moment you need it.
189
189
 
190
+ ## Guardrails your agent cannot switch off
191
+
192
+ Every way to switch a guardrail off is a file in `~/.harbor`: the pause,
193
+ `"toolGuard": false` in `synced-origins.json`, and the exceptions
194
+ `harbor allow-once` writes. Your agent runs as you, so it can write those files
195
+ too. The hook refuses the agent's own `harbor off`, `harbor allow-once` and the
196
+ other commands meant for you, but a shell has more ways to write a file than a
197
+ hook can recognise. The boundary that holds is the agent's own sandbox, told to
198
+ refuse writes to `~/.harbor`. Harbor's hooks run outside that sandbox, so they
199
+ keep working.
200
+
201
+ **Claude Code.** Merge into `~/.claude/settings.json`:
202
+
203
+ ```json
204
+ {
205
+ "sandbox": {
206
+ "enabled": true,
207
+ "allowUnsandboxedCommands": false,
208
+ "filesystem": { "denyWrite": ["~/.harbor"] }
209
+ },
210
+ "permissions": { "deny": ["Edit(~/.harbor/**)"] }
211
+ }
212
+ ```
213
+
214
+ The sandbox covers shell commands. Claude's own Write and Edit tools run
215
+ outside it, so the `Edit` rule covers them. `allowUnsandboxedCommands: false`
216
+ stops Claude retrying a refused command outside the sandbox. The sandbox also
217
+ sends shell network traffic through an allow-list; `/sandbox` shows it.
218
+
219
+ **Codex.** In `~/.codex/config.toml`:
220
+
221
+ ```toml
222
+ sandbox_mode = "workspace-write"
223
+ ```
224
+
225
+ and keep `~/.harbor`, and your home folder, out of
226
+ `[sandbox_workspace_write] writable_roots`. A session started with
227
+ `--sandbox danger-full-access` or `--dangerously-bypass-approvals-and-sandbox`
228
+ skips it.
229
+
230
+ While a rule is refusing commands, `harbor doctor` checks both and says what is
231
+ missing.
232
+
190
233
  ## Switching workspaces
191
234
 
192
235
  One account, several workspaces — `harbor workspaces` lists them and marks the
@@ -1,12 +1,12 @@
1
1
  {
2
- "version": "0.5.21",
2
+ "version": "0.5.23",
3
3
  "algorithm": "sha256",
4
4
  "binaries": {
5
- "@gethrbr/harborloop-darwin-arm64": "4f6642a0fc2599374356d5ce67a55548da0800f1822421681c549d18cb2a80c5",
6
- "@gethrbr/harborloop-darwin-x64": "ef6752e3c4bf3db4cc10f05c3e8209c95c67544f2ecb7936c40a3432a4ac3cba",
7
- "@gethrbr/harborloop-linux-x64": "416b4258f104d877e494782a49cd43d85635f7689ca4d0ceb9f41f66763fa8e9",
8
- "@gethrbr/harborloop-linux-arm64": "ceac71b7453be6cac38fe49eb3b815f9d382b876c9c79576c4ef2e049bb1a2df",
9
- "@gethrbr/harborloop-linux-x64-musl": "d6ba0e42a7fd574126601b38af74ceb61fb780b829a27cefdddecf6f984770da",
10
- "@gethrbr/harborloop-win32-x64": "7e334047898ecafe3b0203555ff703d6e6e4a6132b3538075cc131422846bef2"
5
+ "@gethrbr/harborloop-darwin-arm64": "9907a860677f5bea6b74157a47c85d1bf556764bb41bc8f237719445065b72b4",
6
+ "@gethrbr/harborloop-darwin-x64": "d5f8f315a125827543ec67f708ead429a49f29aa460b85c4b302a16bef9b3aa8",
7
+ "@gethrbr/harborloop-linux-x64": "1b3e35c93c1b796f30396438ba319331f232c580226177e0d96b5419793abebf",
8
+ "@gethrbr/harborloop-linux-arm64": "5cfcaf675f380795155fb1adbb1da4e8db8dafd57395b7334b1b8061de2f5a86",
9
+ "@gethrbr/harborloop-linux-x64-musl": "e500624c39efaf4a0fab4f88cd43dafe41eed4ef43f6bc20778b923fe88cc134",
10
+ "@gethrbr/harborloop-win32-x64": "c3aaf12b2993b66cde0dd23bd0bec29b83e93f45dae3df8718729505e44d0ecb"
11
11
  }
12
12
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "harborloop",
3
- "version": "0.5.21",
3
+ "version": "0.5.23",
4
4
  "description": "Install and health-check the harbor knowledge loop in your terminal. Recall in Claude Code, Codex and Cursor; a doctor that can say no.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -26,12 +26,12 @@
26
26
  "agents.md"
27
27
  ],
28
28
  "optionalDependencies": {
29
- "@gethrbr/harborloop-darwin-arm64": "0.5.21",
30
- "@gethrbr/harborloop-darwin-x64": "0.5.21",
31
- "@gethrbr/harborloop-linux-x64": "0.5.21",
32
- "@gethrbr/harborloop-linux-arm64": "0.5.21",
33
- "@gethrbr/harborloop-linux-x64-musl": "0.5.21",
34
- "@gethrbr/harborloop-win32-x64": "0.5.21"
29
+ "@gethrbr/harborloop-darwin-arm64": "0.5.23",
30
+ "@gethrbr/harborloop-darwin-x64": "0.5.23",
31
+ "@gethrbr/harborloop-linux-x64": "0.5.23",
32
+ "@gethrbr/harborloop-linux-arm64": "0.5.23",
33
+ "@gethrbr/harborloop-linux-x64-musl": "0.5.23",
34
+ "@gethrbr/harborloop-win32-x64": "0.5.23"
35
35
  },
36
36
  "publishConfig": {
37
37
  "//": "A scoped package defaults to RESTRICTED, and `npm publish` on a scope with no paid plan fails outright rather than publishing privately. This is the whole difference between a wedge anybody can `npx` and a 402.",