feat(writes): enable write actions by default (opt-out)
Invert the global write toggle so writes are ENABLED by default and the user opts OUT, while keeping all other safety intact (per-call confirm=true dry-run preview and the on-disk audit log are unchanged). - writes.py: use a `writes_disabled` flag file instead of `writes_enabled`; `writes_enabled()` returns True unless the flag exists (env var still honored either way); `set_writes(False)` creates the flag, `set_writes(True)` removes it. Update user-facing notes. - tests: default is now ENABLED; adjust toggle/disabled tests (set disabled explicitly via set_writes(False) or FAMILIAR_ENABLE_WRITES=0). - README.md / CLAUDE.md: document writes are on by default, opt out via `familiar writes disable`. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
6 files changed
+36
-23
No files matched your search
@@ -8,7 +8,7 @@ Ask your familiar where your assets are, what your skill queue looks like, what
|
||||
|
||||
## Principles
|
||||
|
||||
- **Safe by default.** Reading is free; every *write* — sending mail, setting waypoints, editing contacts/fittings/PI, fleet commands — is off until you turn it on, previewed before it runs, and recorded in an audit log. The AI can see everything and changes nothing unless you let it.
|
||||
- **Safe by default.** Reading is free; every *write* — sending mail, setting waypoints, editing contacts/fittings/PI, fleet commands — is previewed before it runs (nothing happens without `confirm=true`) and recorded in an audit log. Writes are on by default but can be turned off entirely with `familiar writes disable`. The AI can see everything and changes nothing without your explicit confirm.
|
||||
- **Local-first.** Runs on your own machine. Your refresh token and account data never leave your control.
|
||||
- **Everything, eventually.** The goal is full coverage: the ESI scopes you grant (character *and* corp, read and write), plus the complete static universe. Built in phases so it actually ships.
|
||||
|
||||
@@ -49,12 +49,14 @@ Claude Desktop (`claude_desktop_config.json`):
|
||||
|
||||
Then ask in natural language — "what's Tritanium worth in Jita?", "how much ISK across all my characters?", "where are my characters?".
|
||||
|
||||
### Enabling writes
|
||||
### Write actions
|
||||
|
||||
Write actions (send mail, set waypoints, edit contacts/fittings, fleet commands) are **off by default**. Every write tool also returns a dry-run preview unless called with `confirm=true`, and each executed write is recorded in an audit log.
|
||||
Write actions (send mail, set waypoints, edit contacts/fittings, fleet commands) are **on by default**. Even so, every write tool returns a dry-run preview unless called with `confirm=true` per call, and each executed write is recorded in an audit log — so nothing changes by accident.
|
||||
|
||||
To opt out and block all writes globally:
|
||||
|
||||
```bash
|
||||
uv run familiar writes enable # allow writes (uv run familiar writes disable to revoke)
|
||||
uv run familiar writes disable # turn writes off (uv run familiar writes enable to re-allow)
|
||||
```
|
||||
|
||||
## Roadmap
|
||||
|
||||
Reference in new issue
Block a user