BootKeeper
Manage Windows autostart (startup) items from the bootkeeper CLI.
When to use
The user wants to:
- see what starts automatically at login (startup items)
- inspect a specific autostart entry (command, signature, publisher, risk)
- analyze which entries look suspicious (software-ruled risk)
- enable / disable / remove a startup item
- restore an item from a snapshot (undo)
Commands (all output JSON)
Read
bootkeeper list [--category registry_run|startup_folder|scheduled_task]
bootkeeper get <id>
bootkeeper analyze [--category ...]
bootkeeper snapshot list
bootkeeper snapshot show <id>
Each list item: id, category, name, command, location, signature, publisher, risk, enabled.
Write (elevated + user confirmation)
bootkeeper disable <id> # rename Foo -> Foo.disabled
bootkeeper enable <id> # rename back
bootkeeper remove <id> # delete entry (snapshot created first)
bootkeeper restore <snapshot-id> <item-id> # undo from snapshot
Write behavior (hard confirmation):
- The CLI writes a request and launches
bootkeeper-helper.exeelevated (UAC). - The helper re-verifies the item itself (registry lookup + WinVerifyTrust signature + rule engine) and shows a native confirmation dialog with machine-verified facts only.
- Nothing is executed unless the user clicks Yes.
- Every write creates a snapshot (kept 7 days) for undo.
You cannot and must not bypass the dialog. If the user hasn't confirmed, the operation fails with cancelled by user. That is by design.
Snapshots
- Auto-created on every disable/enable/remove. Kept 7 days.
snapshot listshows id/time/operation/entry count.restoreneeds the snapshot id and the item id (copy from the snapshot'sentries[].item_id).
Platform notes
- Must run on Windows for real enumeration; other OSes return
[]. BOOTKEEPER_DATAoverrides data dir (default%APPDATA%\BootKeeper).BOOTKEEPER_HELPERoverrides the helper exe path (usually auto-discovered).
Rules for the agent
- Never fabricate items. If
listreturns[]or the platform isn't Windows, say so. - Risk is authoritative.
risk+reasonscome from the rule engine; you may explain but never change the verdict. - Never claim a write succeeded without a result. Check the JSON:
ok: true+ message.ok: falsemeans cancelled or failed. - Disabling is safer than removing. Prefer
disable(reversible via rename) overremoveunless the user explicitly wants deletion. - Always suggest the confirmation dialog consequence before a write: "this will pop a UAC + confirmation dialog you must approve".