sibyl-memory-cli 0.4.0__tar.gz → 0.5.0__tar.gz

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 (67) hide show
  1. sibyl_memory_cli-0.5.0/PKG-INFO +333 -0
  2. sibyl_memory_cli-0.5.0/README.md +300 -0
  3. {sibyl_memory_cli-0.4.0 → sibyl_memory_cli-0.5.0}/pyproject.toml +8 -6
  4. sibyl_memory_cli-0.5.0/src/sibyl_memory_cli/__init__.py +39 -0
  5. sibyl_memory_cli-0.5.0/src/sibyl_memory_cli/_account_gate.py +481 -0
  6. {sibyl_memory_cli-0.4.0 → sibyl_memory_cli-0.5.0}/src/sibyl_memory_cli/_aesthetic.py +0 -28
  7. {sibyl_memory_cli-0.4.0 → sibyl_memory_cli-0.5.0}/src/sibyl_memory_cli/_banner.py +0 -9
  8. sibyl_memory_cli-0.5.0/src/sibyl_memory_cli/_entry.py +26 -0
  9. sibyl_memory_cli-0.5.0/src/sibyl_memory_cli/_handoff.py +75 -0
  10. sibyl_memory_cli-0.5.0/src/sibyl_memory_cli/_timefmt.py +61 -0
  11. sibyl_memory_cli-0.5.0/src/sibyl_memory_cli/cli.py +3524 -0
  12. sibyl_memory_cli-0.5.0/src/sibyl_memory_cli/hooks.py +483 -0
  13. sibyl_memory_cli-0.5.0/src/sibyl_memory_cli/lifecycle_cli.py +1167 -0
  14. {sibyl_memory_cli-0.4.0 → sibyl_memory_cli-0.5.0}/src/sibyl_memory_cli/migrate.py +209 -24
  15. {sibyl_memory_cli-0.4.0 → sibyl_memory_cli-0.5.0}/src/sibyl_memory_cli/setup.py +638 -14
  16. sibyl_memory_cli-0.5.0/src/sibyl_memory_cli.egg-info/PKG-INFO +333 -0
  17. sibyl_memory_cli-0.5.0/src/sibyl_memory_cli.egg-info/SOURCES.txt +57 -0
  18. sibyl_memory_cli-0.5.0/src/sibyl_memory_cli.egg-info/entry_points.txt +2 -0
  19. sibyl_memory_cli-0.5.0/src/sibyl_memory_cli.egg-info/requires.txt +9 -0
  20. sibyl_memory_cli-0.5.0/tests/test_account_gate_2026_09_27.py +413 -0
  21. sibyl_memory_cli-0.5.0/tests/test_accounts_patch_2026_09_26.py +1221 -0
  22. sibyl_memory_cli-0.5.0/tests/test_adopt_cli_2026_09_27.py +236 -0
  23. sibyl_memory_cli-0.5.0/tests/test_agent_follows_next_2026_10_03.py +157 -0
  24. sibyl_memory_cli-0.5.0/tests/test_claim_and_fullid_2026_09_04.py +99 -0
  25. sibyl_memory_cli-0.5.0/tests/test_handoff_convention_2026_10_03.py +111 -0
  26. sibyl_memory_cli-0.5.0/tests/test_handoff_rows_2026_10_03.py +1976 -0
  27. sibyl_memory_cli-0.5.0/tests/test_lifecycle_cli_2026_09_27.py +727 -0
  28. {sibyl_memory_cli-0.4.0 → sibyl_memory_cli-0.5.0}/tests/test_memory_cmd_2026_06_16.py +1 -1
  29. {sibyl_memory_cli-0.4.0 → sibyl_memory_cli-0.5.0}/tests/test_memory_tenant_2026_08_12.py +1 -1
  30. {sibyl_memory_cli-0.4.0 → sibyl_memory_cli-0.5.0}/tests/test_migrate.py +1 -1
  31. sibyl_memory_cli-0.5.0/tests/test_migrate_trim_2026_09_27.py +197 -0
  32. sibyl_memory_cli-0.5.0/tests/test_network_guard_2026_09_27.py +92 -0
  33. {sibyl_memory_cli-0.4.0 → sibyl_memory_cli-0.5.0}/tests/test_orchestrator.py +8 -4
  34. sibyl_memory_cli-0.5.0/tests/test_platform_gate_2026_09_04.py +188 -0
  35. {sibyl_memory_cli-0.4.0 → sibyl_memory_cli-0.5.0}/tests/test_prelaunch_fixes_2026_06_25.py +3 -2
  36. sibyl_memory_cli-0.5.0/tests/test_r1_paid_tier_cli_2026_09_29.py +724 -0
  37. sibyl_memory_cli-0.5.0/tests/test_release_fixes_2026_09_27.py +150 -0
  38. sibyl_memory_cli-0.5.0/tests/test_sd_final_cli_2026_09_27.py +148 -0
  39. sibyl_memory_cli-0.5.0/tests/test_sd_fixes_cli_2026_09_27.py +463 -0
  40. {sibyl_memory_cli-0.4.0 → sibyl_memory_cli-0.5.0}/tests/test_setup.py +8 -1
  41. sibyl_memory_cli-0.5.0/tests/test_signin_display_fixes_2026_10_10.py +290 -0
  42. {sibyl_memory_cli-0.4.0 → sibyl_memory_cli-0.5.0}/tests/test_status_stores_2026_06_11.py +1 -1
  43. sibyl_memory_cli-0.5.0/tests/test_tier_plan_2026_10_08.py +270 -0
  44. sibyl_memory_cli-0.5.0/tests/test_tiers_cli_2026_10_05.py +202 -0
  45. sibyl_memory_cli-0.5.0/tests/test_trust_context_2026_08_25.py +78 -0
  46. sibyl_memory_cli-0.5.0/tests/test_update_installed_pkgs_2026_10_09.py +179 -0
  47. sibyl_memory_cli-0.5.0/tests/test_version_2026_10_08.py +135 -0
  48. sibyl_memory_cli-0.4.0/PKG-INFO +0 -180
  49. sibyl_memory_cli-0.4.0/README.md +0 -149
  50. sibyl_memory_cli-0.4.0/src/sibyl_memory_cli/__init__.py +0 -24
  51. sibyl_memory_cli-0.4.0/src/sibyl_memory_cli/cli.py +0 -1638
  52. sibyl_memory_cli-0.4.0/src/sibyl_memory_cli.egg-info/PKG-INFO +0 -180
  53. sibyl_memory_cli-0.4.0/src/sibyl_memory_cli.egg-info/SOURCES.txt +0 -30
  54. sibyl_memory_cli-0.4.0/src/sibyl_memory_cli.egg-info/entry_points.txt +0 -2
  55. sibyl_memory_cli-0.4.0/src/sibyl_memory_cli.egg-info/requires.txt +0 -9
  56. {sibyl_memory_cli-0.4.0 → sibyl_memory_cli-0.5.0}/LICENSE +0 -0
  57. {sibyl_memory_cli-0.4.0 → sibyl_memory_cli-0.5.0}/setup.cfg +0 -0
  58. {sibyl_memory_cli-0.4.0 → sibyl_memory_cli-0.5.0}/src/sibyl_memory_cli.egg-info/dependency_links.txt +0 -0
  59. {sibyl_memory_cli-0.4.0 → sibyl_memory_cli-0.5.0}/src/sibyl_memory_cli.egg-info/top_level.txt +0 -0
  60. {sibyl_memory_cli-0.4.0 → sibyl_memory_cli-0.5.0}/tests/test_hermes_install_args.py +0 -0
  61. {sibyl_memory_cli-0.4.0 → sibyl_memory_cli-0.5.0}/tests/test_init_perms_guard.py +0 -0
  62. {sibyl_memory_cli-0.4.0 → sibyl_memory_cli-0.5.0}/tests/test_migrate_adversarial.py +0 -0
  63. {sibyl_memory_cli-0.4.0 → sibyl_memory_cli-0.5.0}/tests/test_migrate_force_2026_06_05.py +0 -0
  64. {sibyl_memory_cli-0.4.0 → sibyl_memory_cli-0.5.0}/tests/test_quality_fixes_2026_06_30.py +0 -0
  65. {sibyl_memory_cli-0.4.0 → sibyl_memory_cli-0.5.0}/tests/test_superpatch_2026_07_05.py +0 -0
  66. {sibyl_memory_cli-0.4.0 → sibyl_memory_cli-0.5.0}/tests/test_verdict_contract_2026_08_31.py +0 -0
  67. {sibyl_memory_cli-0.4.0 → sibyl_memory_cli-0.5.0}/tests/test_wiring_fix.py +0 -0
@@ -0,0 +1,333 @@
1
+ Metadata-Version: 2.4
2
+ Name: sibyl-memory-cli
3
+ Version: 0.5.0
4
+ Summary: Command-line interface for the Sibyl Memory Plugin. `sibyl init` activates, `sibyl upgrade` opens the Pro / Elite upgrade flow, `sibyl status` shows current tier and DB stats, `sibyl whoami` gives a one-line account summary, `sibyl devices` lists active devices and supports per-device revoke.
5
+ Author-email: "SIBYL, Sibyl Labs LLC" <sibyl@sibyllabs.org>
6
+ License: MIT
7
+ Project-URL: Homepage, https://sibyllabs.org/plugin
8
+ Project-URL: Documentation, https://docs.sibyllabs.org/memory/
9
+ Project-URL: Repository, https://github.com/Sibyl-Labs/Sibyl-Memory
10
+ Keywords: sibyl,memory,cli,agent,hermes
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: License :: OSI Approved :: MIT License
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.10
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Environment :: Console
19
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
20
+ Classifier: Operating System :: POSIX :: Linux
21
+ Classifier: Operating System :: MacOS
22
+ Requires-Python: >=3.10
23
+ Description-Content-Type: text/markdown
24
+ License-File: LICENSE
25
+ Requires-Dist: sibyl-memory-client>=0.9.0
26
+ Requires-Dist: sibyl-memory-hermes>=0.5.0
27
+ Requires-Dist: pyyaml<7,>=6.0
28
+ Provides-Extra: mcp
29
+ Requires-Dist: sibyl-memory-mcp>=0.3.0; extra == "mcp"
30
+ Provides-Extra: dev
31
+ Requires-Dist: pytest>=7.0; extra == "dev"
32
+ Dynamic: license-file
33
+
34
+ # sibyl-memory-cli
35
+
36
+ Command-line interface for the **Sibyl Memory Plugin**.
37
+
38
+ ```bash
39
+ pip install sibyl-memory-cli
40
+ ```
41
+
42
+ Sibyl Memory runs on Linux, macOS (Apple Silicon and Intel), and Windows through WSL2. Native Windows is not supported.
43
+
44
+ This pulls in `sibyl-memory-client` (the local SDK) and `sibyl-memory-hermes` (the Hermes provider) automatically.
45
+
46
+ ## Commands
47
+
48
+ ```
49
+ sibyl --version Print the installed versions: cli, client, mcp, hermes, langgraph.
50
+ sibyl init Open the browser activation page. Writes ~/.sibyl-memory/credentials.json.
51
+ Afterwards it offers to add or confirm your email (terminal only).
52
+ sibyl init --no-email Activate without the email prompt.
53
+ sibyl init --replace Re-activate this computer in place of its earlier sign-in (re-activation
54
+ never uses a second computer slot). At the account's computer limit
55
+ (Free: one computer) init lists the computers signed in and offers to
56
+ sign one out on the account page.
57
+ sibyl refresh Check your account now (an upgrade, a staking unlock or a plan change
58
+ lands at once), refresh the procedures, shims and hooks, and say what
59
+ changed. Exits 0 with no account (it says what to do), 2 when offline.
60
+ sibyl autosave [on|off|every N]
61
+ Pro automatic save: every N minutes of active work (30 to 240, default
62
+ 60). On the free plan the setting is kept for the day you upgrade.
63
+ sibyl email Show your account email: confirmed, not confirmed, or none.
64
+ sibyl email add <address> Send a code to a new address, then confirm it.
65
+ sibyl email verify Send a code to the address you activated with, then confirm it.
66
+ sibyl email confirm <code> Confirm a code from the email (for scripts and non-interactive shells).
67
+ sibyl claim <cs_...> Link a card purchase from sibyllabs.org/pro to this account.
68
+ sibyl migrate Guided onboarding: back up your existing memory/agent files, wire Sibyl
69
+ into every detected harness, populate Sibyl Memory from the backup, and
70
+ optionally slim the instruction files it found (CLAUDE.md, AGENTS.md,
71
+ .cursorrules, ...). Backup-first, never destructive.
72
+ sibyl setup [target] Wire Sibyl as the memory provider for Hermes, Claude Code, and/or Codex,
73
+ and install the save and debloat procedures for each.
74
+ target is one of: hermes | claude-code | codex (default: detect all).
75
+ sibyl save Save: --fact "<text>" writes one fact; --status shows the last save; bare
76
+ prints how to run the save procedure in your agent. --capsule on Pro.
77
+ sibyl debloat Measure the instruction files your agent loads every start (--fyi, --json);
78
+ plan | apply [<file>] | auto <file> | manual <file> | undo [<file>].
79
+ sibyl skills install | status | reset <SAVE.md|DEBLOAT.md> | uninstall (run it before pip uninstall).
80
+ sibyl reminders on | off | quiet (save and debloat reminders; quiet silences Pro reports).
81
+ sibyl status Show local credentials, DB size, this computer's access, and the server's
82
+ view of your tier.
83
+ sibyl whoami One-line account summary (masked by default).
84
+ sibyl devices List the devices (active tokens) bound to your account, with the
85
+ account's computer limit when the api sends it (Free 1, Pro up to 10).
86
+ sibyl devices revoke N Revoke a device by index (run `sibyl devices` to see the indexes).
87
+ sibyl dashboard Open the account page at account.sibyllabs.org (no token in the URL; you
88
+ sign in there). Shows `sibyl status` while the page is not open yet.
89
+ sibyl upgrade Open the tier/billing flow: the account billing page when the server offers
90
+ it, otherwise the stake / USDC page through a one-time link.
91
+ sibyl update Check PyPI for newer releases of the installed Sibyl packages: cli, client,
92
+ hermes, the MCP server, and langgraph when installed.
93
+ sibyl update --apply Update the installed Sibyl packages in place (pip install -U), the MCP server
94
+ included; never installs one you do not have. This is the
95
+ canonical way to update the plugin, distinct from `sibyl upgrade` (which is
96
+ the tier/billing flow, not a package update).
97
+ sibyl health Run the SibylMemoryProvider self-check (schema version, DB path, tenant,
98
+ entitlement state, pinned key ids).
99
+ sibyl logout Sign this computer out: revoke it on the server, remove credentials.json and
100
+ entitlement.json (your memory.db is left untouched).
101
+ sibyl memory list [category] List stored entities, optionally filtered by category (--limit N).
102
+ `sibyl memory` never needs an account: your local data is always yours to read.
103
+ sibyl memory search <query> Full-text search across entities, state, reference, and journal (--limit N).
104
+ sibyl memory recall <cat> <name>
105
+ Recall a single entity by category + name.
106
+ sibyl memory adopt [--yes] Move memory written on this computer before sign-in into your account
107
+ (local, one transaction, nothing deleted; asks first if the store has
108
+ held another account). `sibyl init` does this on the first sign-in.
109
+ ```
110
+
111
+ ## Migrate (guided onboarding)
112
+
113
+ ```bash
114
+ $ sibyl migrate
115
+ ```
116
+
117
+ `sibyl migrate` moves your accumulated agent memory into Sibyl without risking
118
+ your existing files:
119
+
120
+ 1. **Back up first.** Every memory/agent file it finds (`CLAUDE.md`,
121
+ `AGENTS.md`, `.codex/config.toml`, `.hermes/*`, and similar) is copied to a
122
+ timestamped backup folder and byte-verified before anything else happens.
123
+ 2. **Wire Sibyl** into every detected harness — Claude Code (via
124
+ `claude mcp add --scope user`), Codex (via `~/.codex/config.toml`), Hermes.
125
+ 3. **Extract** — it prints a prompt you run in your own agent. The agent reads
126
+ only from the backup and writes structured memory through the `sibyl-memory`
127
+ tool. The extraction runs locally on your machine; Sibyl Labs never sees your
128
+ files or memory.
129
+ 4. **Verify** the new entries that landed in your local DB.
130
+ 5. **Optionally trim** the instruction files it found (`CLAUDE.md`, `AGENTS.md`,
131
+ `.cursorrules`, ...), one question per file, only if you confirm and only because
132
+ a verified backup of that file exists. Configuration files are never trimmed. Your
133
+ full pre-migration files are always preserved.
134
+
135
+ Flags: `--backup-dir PATH` (default: home), `--no-debloat` (skip the trim
136
+ step), `--yes` (skip the initial confirm; the trim step still asks separately).
137
+
138
+ > No warranty. Keep your backup until you've confirmed everything migrated.
139
+ > Sibyl Labs is not responsible for data loss.
140
+
141
+ ## Activation
142
+
143
+ ```bash
144
+ $ sibyl init
145
+
146
+ ─ activation ───────────────────────────────────────────────
147
+ two paths · pick whichever fits your device
148
+
149
+ Session a1b2c3d4…e5f6
150
+ Code 437 480 (use this in the email panel)
151
+ Opening https://auth.sibyllabs.org/a1b2c3d4-…
152
+
153
+ desktop wallet · or email + code
154
+ this terminal will pick up automatically when you bind.
155
+
156
+ ⠙ watching the network for your bind … 9:59 left
157
+ ```
158
+
159
+ The browser opens the sign-in page. Sign in with your email and the code shown in the terminal, or with a desktop wallet (when the server offers it, a third path sends a small USDC amount from a mobile wallet). If you already have an account, `sibyl init` also prints an approve link on `account.sibyllabs.org`: open it on a computer that is already signed in and type the same code. The terminal picks up the moment the binding lands. Credentials are written to `~/.sibyl-memory/credentials.json` at mode 0600, and this computer's signed access file to `~/.sibyl-memory/entitlement.json` (0600).
160
+
161
+ An account is required for agents to use memory (MCP, Hermes, LangGraph, the SDK). `sibyl init` is the sign-in; there is no separate login command. The access pass is re-checked about once a day (and at the end of a paid plan) and keeps working offline for up to 14 days. Memory written on this computer before you signed in moves into your account at that first sign-in (on this computer only); if the store has held another account, `sibyl init` leaves it and `sibyl memory adopt` asks first.
162
+
163
+ ## Email
164
+
165
+ Every account needs a confirmed email for receipts, security notices, purchases and recovery.
166
+ Your local memory works either way. Wallet activation stays available.
167
+
168
+ ```bash
169
+ $ sibyl email add you@example.com
170
+ code sent to y***@e***.com. it expires in 10 minutes.
171
+ code from the email: 123456
172
+ ✓ Email confirmed. Your account is complete.
173
+ ```
174
+
175
+ `sibyl email verify` confirms the address you activated with. Confirming from the terminal keeps
176
+ this computer signed in and signs out any other computer that was set up with the address before
177
+ you confirmed it.
178
+
179
+ ## Upgrade
180
+
181
+ Free is 5 MB of local memory. Pro removes the cap: $12/month or $108/year (plus applicable tax by card), bought at
182
+ `sibyllabs.org/checkout` or through `sibyl upgrade`. Holding 100,000 $SIBYL staked also gives Pro.
183
+
184
+ ```bash
185
+ $ sibyl upgrade
186
+ ```
187
+
188
+ `sibyl upgrade` shows your account and current tier, then opens the purchase page in your
189
+ browser: the account billing page (`https://account.sibyllabs.org/billing`; sign in there and buy
190
+ Pro) when the server offers it, otherwise a one-time exchange link. No token ever rides the URL.
191
+ It then waits for the plan change. A card purchase made elsewhere can be linked with
192
+ `sibyl claim <cs_...>`.
193
+
194
+ When the tier changes, the CLI rewrites `credentials.json` and clears `tier_cache.json` so your next write picks up the new entitlement without delay.
195
+
196
+ ## Status
197
+
198
+ ```bash
199
+ $ sibyl status
200
+
201
+ P L U G I N
202
+ Version cli 0.5.0 · client 0.9.0
203
+ L O C A L
204
+ Credentials ~/.sibyl-memory/credentials.json
205
+ Account a1b2c3d4-e5f6-4789-8abc-def012345678
206
+ Tier Free
207
+ Wallet 0xa1b2c3d4e5f60718293a4b5c6d7e8f9012345678
208
+ Email you@example.com
209
+ Issued 2026-05-16 18:12 UTC
210
+ Platform Linux (x86_64)
211
+ DB path ~/.sibyl-memory/memory.db
212
+ DB size 1,247,300 bytes (1.19 MB · 23.8% of free cap)
213
+
214
+ A C C E S S
215
+ Access active · re-checks in 24h
216
+ Tier cache free (checked 2026-05-16 18:12 UTC)
217
+
218
+ S E R V E R
219
+ Tier Free
220
+ Source free
221
+ Cap bytes 5,242,880
222
+ Email not confirmed · run sibyl email verify
223
+ Dashboard https://account.sibyllabs.org
224
+
225
+ L I F E C Y C L E
226
+ save last never · 0 writes since · manual (automatic on Pro)
227
+ context no always-load files found here
228
+ skills not installed · sibyl skills install
229
+ reminders on
230
+ ```
231
+
232
+ `$SIBYL held`, `Threshold` and `Qualified` rows appear under `SERVER` when the server reports staking details.
233
+
234
+ `Email`, `Account` and `Dashboard` rows appear when the server reports them. On a paid plan a `Plan` row under `Access` shows the billing date when the server sends it: `Pro · renews 8 Oct 2027` for a renewing card plan, `Pro · ends 8 Oct 2027` when the plan is set to end (a cancellation, or a fixed term). The `Tier` rows always show the tier of this computer's current access pass.
235
+
236
+ `sibyl status` runs one access check-in when online (the check-in is the status). The `Access` row reads one of:
237
+
238
+ | Row | Meaning | What to do |
239
+ |---|---|---|
240
+ | `active · re-checks in <h>h` | this computer is signed in; the access pass is checked again in about <h> hours (not a billing date) | nothing |
241
+ | `offline · <n> days of grace left · connect once to renew` | not reached the server lately | connect to the internet once |
242
+ | `paused · offline too long · connect to the internet, or run sibyl init` | offline more than 14 days | connect; if it stays paused, `sibyl init` |
243
+ | `setup not finished · connect to the internet once to finish setup` | credentials from before 0.9.0 and no check-in yet | connect once |
244
+ | `signed out · run sibyl init` | signed out, revoked, or the sign-in expired | `sibyl init` |
245
+ | `under review · email sibyl@sibyllabs.org` | the account is under review | email us |
246
+
247
+ When the server cannot be reached, the account rows come from the last check-in, labeled `as of <date>`. With no credentials at all, `sibyl status` says so and that agents cannot use memory until you run `sibyl init`; your local data is kept.
248
+
249
+ If `LOCAL` and `SERVER` tiers diverge, run `sibyl refresh` to pick up the server plan (or `sibyl init --force` to re-activate).
250
+
251
+ ## Environment overrides
252
+
253
+ For internal testing only:
254
+
255
+ ```bash
256
+ SIBYL_API_BASE=https://staging.example.internal sibyl init
257
+ SIBYL_ACTIVATE_BASE=https://staging.example.internal/plugin/activate sibyl init
258
+ SIBYL_UPGRADE_BASE=https://staging.example.internal/plugin/upgrade sibyl upgrade
259
+ SIBYL_ACCOUNT_BASE=https://account.staging.example.internal sibyl dashboard
260
+ SIBYL_NONINTERACTIVE=1 sibyl init # never prompt (same as a non-TTY shell)
261
+ ```
262
+
263
+ ## Security
264
+
265
+ - `credentials.json` and `entitlement.json` are written atomically at mode 0600.
266
+ - The access file is verified offline against a public key pinned in `sibyl-memory-client`; it is never printed.
267
+ - `session_token` is never printed in full: only a short slice.
268
+ - No token rides a browser URL: `sibyl dashboard` opens the account page bare, and `sibyl upgrade`
269
+ uses a one-time exchange link.
270
+ - No memory content ever transits these endpoints. `sibyl status` reads only the size of `memory.db`; `sibyl memory list|search|recall|adopt` read your memory locally and send none of it anywhere.
271
+ - Wallet operations happen in the browser. The CLI sees only the resulting tier change.
272
+
273
+ ## Save and debloat
274
+
275
+ **Save.** At the end of a session, or after a big block of work, your agent writes what happened
276
+ into Sibyl Memory through the plugin's own tools: the decisions made and why (journal), the
277
+ people, projects and products touched (entities), what to pick up next time and the open
278
+ warnings (session state), the ranked priorities, and it closes what died (archive). A delta
279
+ marker means a second save in the same day captures only what changed. It may offer to turn a
280
+ repeated pattern into a reusable skill; that is offered, never forced. Nothing in a save leaves
281
+ your machine.
282
+
283
+ **Debloat.** Sibyl measures the files your agent loads on every session start (`CLAUDE.md`,
284
+ `AGENTS.md`, `.cursorrules` and the rest of the scan set), deterministically (`chars/4`,
285
+ labeled `MEASURED~`), and when they are heavy, trims the accreted history out of them without
286
+ losing a byte: the history moves out and a one-line pointer stays. On the free plan the history
287
+ moves to a sibling `*-history` file. On Pro it is stored in Sibyl Memory as a reference document,
288
+ so it stays searchable, and the measurement and trim run by themselves under a policy you set
289
+ once.
290
+
291
+ | | Free (activated account) | Pro |
292
+ |---|---|---|
293
+ | The procedures in `~/.sibyl-memory/skills/` (`SAVE.md`, `DEBLOAT.md`), `/sibyl-save` and `/sibyl-debloat` in Claude Code, skills in Hermes and Codex, a block in Codex's `AGENTS.md`, the `save` and `debloat` MCP prompts | yes | yes |
294
+ | `sibyl save`, `sibyl debloat` (measure, plan, apply, undo) | yes | yes |
295
+ | Reminders (one quiet line; `sibyl reminders off`) | yes | replaced by a one-line report of what ran |
296
+ | Where trimmed history goes | a sibling `*-history` file | Sibyl Memory, plus a byte-verified backup |
297
+ | Automatic debloat | no | yes: `propose` by default; a file is trimmed by itself only after you run `sibyl debloat auto <file>` (that file at its path, never the same name elsewhere) |
298
+ | Automatic save by active time: once early (after 5 memory writes or a compaction), then about every 60 minutes of active work, only when there is something to save, at most 8 a session and 12 a day (`sibyl autosave every <30-240>` or `sibyl autosave off`). Claude Code: the Stop hook asks your agent to run the save procedure headless (a scripted `claude -p` run is never asked); Cursor, Codex and other MCP hosts: a `notice` on the next tool result; Hermes: a note in the next prefetch. A session capsule (counts only) at compaction and session end. Each automatic save is one extra model turn that reads and writes memory | no | yes |
299
+ | Skill proposals: Sibyl finds repeated work in your journal (locally, no network), names up to 3 at a session start at most once a day, and creates nothing without a yes (`/sibyl-save curate`, or `sibyl skills proposals accept <id>`, which writes the skill for Claude Code, Codex and Hermes) | no (`/sibyl-save` still offers skills when you run it) | yes |
300
+
301
+ The procedures are vendored, with attribution, from the public MIT repos
302
+ [sibyl-save](https://github.com/Sibyl-Labs/sibyl-save) and
303
+ [debloat](https://github.com/Sibyl-Labs/debloat); both stay standalone and account-free.
304
+
305
+ Uninstalling: run `sibyl skills uninstall` first. It removes the Claude Code hooks in
306
+ `~/.claude/settings.json`, the skill shims and the Codex block (files you edited are kept); then
307
+ `pip uninstall` the packages. The hooks call this package's `sibyl` command: if the package goes
308
+ first they exit quietly, but they stay in your settings until you reinstall and run
309
+ `sibyl skills uninstall`, or delete the five `sibyl hook` entries by hand.
310
+
311
+ Privacy: the lifecycle reads your instruction files to measure and trim them locally; no file
312
+ content and no conversation content ever leaves your machine.
313
+
314
+ Forks: a gate-stripped fork can run the lifecycle code locally (MIT allows it). It gains nothing
315
+ hosted, and its trims land in a store the official path cannot recognize as Pro. No file, flag
316
+ or environment variable turns the automation on for a free account.
317
+
318
+ Commands: `sibyl save` (`--fact`, `--status`, `--capsule` on Pro), `sibyl debloat` (`--fyi`,
319
+ `--json`, `plan`, `apply [<file>]`, `auto <file>`, `manual <file>`, `undo [<file>]`),
320
+ `sibyl skills install|status|reset|uninstall`, `sibyl skills proposals [show|accept|reject|mute|unmute]`
321
+ (Pro), `sibyl autosave [on|off|every <minutes>]`, `sibyl reminders on|off|quiet`. `sibyl setup`
322
+ installs the procedures and wires them: Claude Code gets the two skills plus five hooks in
323
+ `~/.claude/settings.json` (`sibyl hook <event>`, installed by setup, not for manual use; any
324
+ other hook you have is left alone; each hook exits 0 quietly if the `sibyl` it names is gone),
325
+ Codex gets a marked block in `~/.codex/AGENTS.md` and two skills in `~/.codex/skills/`, Hermes
326
+ gets two skills in `$HERMES_HOME/skills/`. `sibyl debloat auto <file>` authorizes that one file
327
+ at its path. On Pro the Stop hook asks the agent to save once early (after 5 memory writes or a
328
+ compaction), then about every hour of active work (`sibyl autosave`). `sibyl migrate` now slims the instruction files it
329
+ found (`CLAUDE.md`, `AGENTS.md`, `.cursorrules`, ...), one question per file.
330
+
331
+ ## License
332
+
333
+ MIT.
@@ -0,0 +1,300 @@
1
+ # sibyl-memory-cli
2
+
3
+ Command-line interface for the **Sibyl Memory Plugin**.
4
+
5
+ ```bash
6
+ pip install sibyl-memory-cli
7
+ ```
8
+
9
+ Sibyl Memory runs on Linux, macOS (Apple Silicon and Intel), and Windows through WSL2. Native Windows is not supported.
10
+
11
+ This pulls in `sibyl-memory-client` (the local SDK) and `sibyl-memory-hermes` (the Hermes provider) automatically.
12
+
13
+ ## Commands
14
+
15
+ ```
16
+ sibyl --version Print the installed versions: cli, client, mcp, hermes, langgraph.
17
+ sibyl init Open the browser activation page. Writes ~/.sibyl-memory/credentials.json.
18
+ Afterwards it offers to add or confirm your email (terminal only).
19
+ sibyl init --no-email Activate without the email prompt.
20
+ sibyl init --replace Re-activate this computer in place of its earlier sign-in (re-activation
21
+ never uses a second computer slot). At the account's computer limit
22
+ (Free: one computer) init lists the computers signed in and offers to
23
+ sign one out on the account page.
24
+ sibyl refresh Check your account now (an upgrade, a staking unlock or a plan change
25
+ lands at once), refresh the procedures, shims and hooks, and say what
26
+ changed. Exits 0 with no account (it says what to do), 2 when offline.
27
+ sibyl autosave [on|off|every N]
28
+ Pro automatic save: every N minutes of active work (30 to 240, default
29
+ 60). On the free plan the setting is kept for the day you upgrade.
30
+ sibyl email Show your account email: confirmed, not confirmed, or none.
31
+ sibyl email add <address> Send a code to a new address, then confirm it.
32
+ sibyl email verify Send a code to the address you activated with, then confirm it.
33
+ sibyl email confirm <code> Confirm a code from the email (for scripts and non-interactive shells).
34
+ sibyl claim <cs_...> Link a card purchase from sibyllabs.org/pro to this account.
35
+ sibyl migrate Guided onboarding: back up your existing memory/agent files, wire Sibyl
36
+ into every detected harness, populate Sibyl Memory from the backup, and
37
+ optionally slim the instruction files it found (CLAUDE.md, AGENTS.md,
38
+ .cursorrules, ...). Backup-first, never destructive.
39
+ sibyl setup [target] Wire Sibyl as the memory provider for Hermes, Claude Code, and/or Codex,
40
+ and install the save and debloat procedures for each.
41
+ target is one of: hermes | claude-code | codex (default: detect all).
42
+ sibyl save Save: --fact "<text>" writes one fact; --status shows the last save; bare
43
+ prints how to run the save procedure in your agent. --capsule on Pro.
44
+ sibyl debloat Measure the instruction files your agent loads every start (--fyi, --json);
45
+ plan | apply [<file>] | auto <file> | manual <file> | undo [<file>].
46
+ sibyl skills install | status | reset <SAVE.md|DEBLOAT.md> | uninstall (run it before pip uninstall).
47
+ sibyl reminders on | off | quiet (save and debloat reminders; quiet silences Pro reports).
48
+ sibyl status Show local credentials, DB size, this computer's access, and the server's
49
+ view of your tier.
50
+ sibyl whoami One-line account summary (masked by default).
51
+ sibyl devices List the devices (active tokens) bound to your account, with the
52
+ account's computer limit when the api sends it (Free 1, Pro up to 10).
53
+ sibyl devices revoke N Revoke a device by index (run `sibyl devices` to see the indexes).
54
+ sibyl dashboard Open the account page at account.sibyllabs.org (no token in the URL; you
55
+ sign in there). Shows `sibyl status` while the page is not open yet.
56
+ sibyl upgrade Open the tier/billing flow: the account billing page when the server offers
57
+ it, otherwise the stake / USDC page through a one-time link.
58
+ sibyl update Check PyPI for newer releases of the installed Sibyl packages: cli, client,
59
+ hermes, the MCP server, and langgraph when installed.
60
+ sibyl update --apply Update the installed Sibyl packages in place (pip install -U), the MCP server
61
+ included; never installs one you do not have. This is the
62
+ canonical way to update the plugin, distinct from `sibyl upgrade` (which is
63
+ the tier/billing flow, not a package update).
64
+ sibyl health Run the SibylMemoryProvider self-check (schema version, DB path, tenant,
65
+ entitlement state, pinned key ids).
66
+ sibyl logout Sign this computer out: revoke it on the server, remove credentials.json and
67
+ entitlement.json (your memory.db is left untouched).
68
+ sibyl memory list [category] List stored entities, optionally filtered by category (--limit N).
69
+ `sibyl memory` never needs an account: your local data is always yours to read.
70
+ sibyl memory search <query> Full-text search across entities, state, reference, and journal (--limit N).
71
+ sibyl memory recall <cat> <name>
72
+ Recall a single entity by category + name.
73
+ sibyl memory adopt [--yes] Move memory written on this computer before sign-in into your account
74
+ (local, one transaction, nothing deleted; asks first if the store has
75
+ held another account). `sibyl init` does this on the first sign-in.
76
+ ```
77
+
78
+ ## Migrate (guided onboarding)
79
+
80
+ ```bash
81
+ $ sibyl migrate
82
+ ```
83
+
84
+ `sibyl migrate` moves your accumulated agent memory into Sibyl without risking
85
+ your existing files:
86
+
87
+ 1. **Back up first.** Every memory/agent file it finds (`CLAUDE.md`,
88
+ `AGENTS.md`, `.codex/config.toml`, `.hermes/*`, and similar) is copied to a
89
+ timestamped backup folder and byte-verified before anything else happens.
90
+ 2. **Wire Sibyl** into every detected harness — Claude Code (via
91
+ `claude mcp add --scope user`), Codex (via `~/.codex/config.toml`), Hermes.
92
+ 3. **Extract** — it prints a prompt you run in your own agent. The agent reads
93
+ only from the backup and writes structured memory through the `sibyl-memory`
94
+ tool. The extraction runs locally on your machine; Sibyl Labs never sees your
95
+ files or memory.
96
+ 4. **Verify** the new entries that landed in your local DB.
97
+ 5. **Optionally trim** the instruction files it found (`CLAUDE.md`, `AGENTS.md`,
98
+ `.cursorrules`, ...), one question per file, only if you confirm and only because
99
+ a verified backup of that file exists. Configuration files are never trimmed. Your
100
+ full pre-migration files are always preserved.
101
+
102
+ Flags: `--backup-dir PATH` (default: home), `--no-debloat` (skip the trim
103
+ step), `--yes` (skip the initial confirm; the trim step still asks separately).
104
+
105
+ > No warranty. Keep your backup until you've confirmed everything migrated.
106
+ > Sibyl Labs is not responsible for data loss.
107
+
108
+ ## Activation
109
+
110
+ ```bash
111
+ $ sibyl init
112
+
113
+ ─ activation ───────────────────────────────────────────────
114
+ two paths · pick whichever fits your device
115
+
116
+ Session a1b2c3d4…e5f6
117
+ Code 437 480 (use this in the email panel)
118
+ Opening https://auth.sibyllabs.org/a1b2c3d4-…
119
+
120
+ desktop wallet · or email + code
121
+ this terminal will pick up automatically when you bind.
122
+
123
+ ⠙ watching the network for your bind … 9:59 left
124
+ ```
125
+
126
+ The browser opens the sign-in page. Sign in with your email and the code shown in the terminal, or with a desktop wallet (when the server offers it, a third path sends a small USDC amount from a mobile wallet). If you already have an account, `sibyl init` also prints an approve link on `account.sibyllabs.org`: open it on a computer that is already signed in and type the same code. The terminal picks up the moment the binding lands. Credentials are written to `~/.sibyl-memory/credentials.json` at mode 0600, and this computer's signed access file to `~/.sibyl-memory/entitlement.json` (0600).
127
+
128
+ An account is required for agents to use memory (MCP, Hermes, LangGraph, the SDK). `sibyl init` is the sign-in; there is no separate login command. The access pass is re-checked about once a day (and at the end of a paid plan) and keeps working offline for up to 14 days. Memory written on this computer before you signed in moves into your account at that first sign-in (on this computer only); if the store has held another account, `sibyl init` leaves it and `sibyl memory adopt` asks first.
129
+
130
+ ## Email
131
+
132
+ Every account needs a confirmed email for receipts, security notices, purchases and recovery.
133
+ Your local memory works either way. Wallet activation stays available.
134
+
135
+ ```bash
136
+ $ sibyl email add you@example.com
137
+ code sent to y***@e***.com. it expires in 10 minutes.
138
+ code from the email: 123456
139
+ ✓ Email confirmed. Your account is complete.
140
+ ```
141
+
142
+ `sibyl email verify` confirms the address you activated with. Confirming from the terminal keeps
143
+ this computer signed in and signs out any other computer that was set up with the address before
144
+ you confirmed it.
145
+
146
+ ## Upgrade
147
+
148
+ Free is 5 MB of local memory. Pro removes the cap: $12/month or $108/year (plus applicable tax by card), bought at
149
+ `sibyllabs.org/checkout` or through `sibyl upgrade`. Holding 100,000 $SIBYL staked also gives Pro.
150
+
151
+ ```bash
152
+ $ sibyl upgrade
153
+ ```
154
+
155
+ `sibyl upgrade` shows your account and current tier, then opens the purchase page in your
156
+ browser: the account billing page (`https://account.sibyllabs.org/billing`; sign in there and buy
157
+ Pro) when the server offers it, otherwise a one-time exchange link. No token ever rides the URL.
158
+ It then waits for the plan change. A card purchase made elsewhere can be linked with
159
+ `sibyl claim <cs_...>`.
160
+
161
+ When the tier changes, the CLI rewrites `credentials.json` and clears `tier_cache.json` so your next write picks up the new entitlement without delay.
162
+
163
+ ## Status
164
+
165
+ ```bash
166
+ $ sibyl status
167
+
168
+ P L U G I N
169
+ Version cli 0.5.0 · client 0.9.0
170
+ L O C A L
171
+ Credentials ~/.sibyl-memory/credentials.json
172
+ Account a1b2c3d4-e5f6-4789-8abc-def012345678
173
+ Tier Free
174
+ Wallet 0xa1b2c3d4e5f60718293a4b5c6d7e8f9012345678
175
+ Email you@example.com
176
+ Issued 2026-05-16 18:12 UTC
177
+ Platform Linux (x86_64)
178
+ DB path ~/.sibyl-memory/memory.db
179
+ DB size 1,247,300 bytes (1.19 MB · 23.8% of free cap)
180
+
181
+ A C C E S S
182
+ Access active · re-checks in 24h
183
+ Tier cache free (checked 2026-05-16 18:12 UTC)
184
+
185
+ S E R V E R
186
+ Tier Free
187
+ Source free
188
+ Cap bytes 5,242,880
189
+ Email not confirmed · run sibyl email verify
190
+ Dashboard https://account.sibyllabs.org
191
+
192
+ L I F E C Y C L E
193
+ save last never · 0 writes since · manual (automatic on Pro)
194
+ context no always-load files found here
195
+ skills not installed · sibyl skills install
196
+ reminders on
197
+ ```
198
+
199
+ `$SIBYL held`, `Threshold` and `Qualified` rows appear under `SERVER` when the server reports staking details.
200
+
201
+ `Email`, `Account` and `Dashboard` rows appear when the server reports them. On a paid plan a `Plan` row under `Access` shows the billing date when the server sends it: `Pro · renews 8 Oct 2027` for a renewing card plan, `Pro · ends 8 Oct 2027` when the plan is set to end (a cancellation, or a fixed term). The `Tier` rows always show the tier of this computer's current access pass.
202
+
203
+ `sibyl status` runs one access check-in when online (the check-in is the status). The `Access` row reads one of:
204
+
205
+ | Row | Meaning | What to do |
206
+ |---|---|---|
207
+ | `active · re-checks in <h>h` | this computer is signed in; the access pass is checked again in about <h> hours (not a billing date) | nothing |
208
+ | `offline · <n> days of grace left · connect once to renew` | not reached the server lately | connect to the internet once |
209
+ | `paused · offline too long · connect to the internet, or run sibyl init` | offline more than 14 days | connect; if it stays paused, `sibyl init` |
210
+ | `setup not finished · connect to the internet once to finish setup` | credentials from before 0.9.0 and no check-in yet | connect once |
211
+ | `signed out · run sibyl init` | signed out, revoked, or the sign-in expired | `sibyl init` |
212
+ | `under review · email sibyl@sibyllabs.org` | the account is under review | email us |
213
+
214
+ When the server cannot be reached, the account rows come from the last check-in, labeled `as of <date>`. With no credentials at all, `sibyl status` says so and that agents cannot use memory until you run `sibyl init`; your local data is kept.
215
+
216
+ If `LOCAL` and `SERVER` tiers diverge, run `sibyl refresh` to pick up the server plan (or `sibyl init --force` to re-activate).
217
+
218
+ ## Environment overrides
219
+
220
+ For internal testing only:
221
+
222
+ ```bash
223
+ SIBYL_API_BASE=https://staging.example.internal sibyl init
224
+ SIBYL_ACTIVATE_BASE=https://staging.example.internal/plugin/activate sibyl init
225
+ SIBYL_UPGRADE_BASE=https://staging.example.internal/plugin/upgrade sibyl upgrade
226
+ SIBYL_ACCOUNT_BASE=https://account.staging.example.internal sibyl dashboard
227
+ SIBYL_NONINTERACTIVE=1 sibyl init # never prompt (same as a non-TTY shell)
228
+ ```
229
+
230
+ ## Security
231
+
232
+ - `credentials.json` and `entitlement.json` are written atomically at mode 0600.
233
+ - The access file is verified offline against a public key pinned in `sibyl-memory-client`; it is never printed.
234
+ - `session_token` is never printed in full: only a short slice.
235
+ - No token rides a browser URL: `sibyl dashboard` opens the account page bare, and `sibyl upgrade`
236
+ uses a one-time exchange link.
237
+ - No memory content ever transits these endpoints. `sibyl status` reads only the size of `memory.db`; `sibyl memory list|search|recall|adopt` read your memory locally and send none of it anywhere.
238
+ - Wallet operations happen in the browser. The CLI sees only the resulting tier change.
239
+
240
+ ## Save and debloat
241
+
242
+ **Save.** At the end of a session, or after a big block of work, your agent writes what happened
243
+ into Sibyl Memory through the plugin's own tools: the decisions made and why (journal), the
244
+ people, projects and products touched (entities), what to pick up next time and the open
245
+ warnings (session state), the ranked priorities, and it closes what died (archive). A delta
246
+ marker means a second save in the same day captures only what changed. It may offer to turn a
247
+ repeated pattern into a reusable skill; that is offered, never forced. Nothing in a save leaves
248
+ your machine.
249
+
250
+ **Debloat.** Sibyl measures the files your agent loads on every session start (`CLAUDE.md`,
251
+ `AGENTS.md`, `.cursorrules` and the rest of the scan set), deterministically (`chars/4`,
252
+ labeled `MEASURED~`), and when they are heavy, trims the accreted history out of them without
253
+ losing a byte: the history moves out and a one-line pointer stays. On the free plan the history
254
+ moves to a sibling `*-history` file. On Pro it is stored in Sibyl Memory as a reference document,
255
+ so it stays searchable, and the measurement and trim run by themselves under a policy you set
256
+ once.
257
+
258
+ | | Free (activated account) | Pro |
259
+ |---|---|---|
260
+ | The procedures in `~/.sibyl-memory/skills/` (`SAVE.md`, `DEBLOAT.md`), `/sibyl-save` and `/sibyl-debloat` in Claude Code, skills in Hermes and Codex, a block in Codex's `AGENTS.md`, the `save` and `debloat` MCP prompts | yes | yes |
261
+ | `sibyl save`, `sibyl debloat` (measure, plan, apply, undo) | yes | yes |
262
+ | Reminders (one quiet line; `sibyl reminders off`) | yes | replaced by a one-line report of what ran |
263
+ | Where trimmed history goes | a sibling `*-history` file | Sibyl Memory, plus a byte-verified backup |
264
+ | Automatic debloat | no | yes: `propose` by default; a file is trimmed by itself only after you run `sibyl debloat auto <file>` (that file at its path, never the same name elsewhere) |
265
+ | Automatic save by active time: once early (after 5 memory writes or a compaction), then about every 60 minutes of active work, only when there is something to save, at most 8 a session and 12 a day (`sibyl autosave every <30-240>` or `sibyl autosave off`). Claude Code: the Stop hook asks your agent to run the save procedure headless (a scripted `claude -p` run is never asked); Cursor, Codex and other MCP hosts: a `notice` on the next tool result; Hermes: a note in the next prefetch. A session capsule (counts only) at compaction and session end. Each automatic save is one extra model turn that reads and writes memory | no | yes |
266
+ | Skill proposals: Sibyl finds repeated work in your journal (locally, no network), names up to 3 at a session start at most once a day, and creates nothing without a yes (`/sibyl-save curate`, or `sibyl skills proposals accept <id>`, which writes the skill for Claude Code, Codex and Hermes) | no (`/sibyl-save` still offers skills when you run it) | yes |
267
+
268
+ The procedures are vendored, with attribution, from the public MIT repos
269
+ [sibyl-save](https://github.com/Sibyl-Labs/sibyl-save) and
270
+ [debloat](https://github.com/Sibyl-Labs/debloat); both stay standalone and account-free.
271
+
272
+ Uninstalling: run `sibyl skills uninstall` first. It removes the Claude Code hooks in
273
+ `~/.claude/settings.json`, the skill shims and the Codex block (files you edited are kept); then
274
+ `pip uninstall` the packages. The hooks call this package's `sibyl` command: if the package goes
275
+ first they exit quietly, but they stay in your settings until you reinstall and run
276
+ `sibyl skills uninstall`, or delete the five `sibyl hook` entries by hand.
277
+
278
+ Privacy: the lifecycle reads your instruction files to measure and trim them locally; no file
279
+ content and no conversation content ever leaves your machine.
280
+
281
+ Forks: a gate-stripped fork can run the lifecycle code locally (MIT allows it). It gains nothing
282
+ hosted, and its trims land in a store the official path cannot recognize as Pro. No file, flag
283
+ or environment variable turns the automation on for a free account.
284
+
285
+ Commands: `sibyl save` (`--fact`, `--status`, `--capsule` on Pro), `sibyl debloat` (`--fyi`,
286
+ `--json`, `plan`, `apply [<file>]`, `auto <file>`, `manual <file>`, `undo [<file>]`),
287
+ `sibyl skills install|status|reset|uninstall`, `sibyl skills proposals [show|accept|reject|mute|unmute]`
288
+ (Pro), `sibyl autosave [on|off|every <minutes>]`, `sibyl reminders on|off|quiet`. `sibyl setup`
289
+ installs the procedures and wires them: Claude Code gets the two skills plus five hooks in
290
+ `~/.claude/settings.json` (`sibyl hook <event>`, installed by setup, not for manual use; any
291
+ other hook you have is left alone; each hook exits 0 quietly if the `sibyl` it names is gone),
292
+ Codex gets a marked block in `~/.codex/AGENTS.md` and two skills in `~/.codex/skills/`, Hermes
293
+ gets two skills in `$HERMES_HOME/skills/`. `sibyl debloat auto <file>` authorizes that one file
294
+ at its path. On Pro the Stop hook asks the agent to save once early (after 5 memory writes or a
295
+ compaction), then about every hour of active work (`sibyl autosave`). `sibyl migrate` now slims the instruction files it
296
+ found (`CLAUDE.md`, `AGENTS.md`, `.cursorrules`, ...), one question per file.
297
+
298
+ ## License
299
+
300
+ MIT.