summaryrefslogtreecommitdiff
path: root/bin
AgeCommit message (Collapse)Author
2026-10-01bin/wispr-keys: Flow dictation on the Caps Lock keyIgor Soarez
Push to talk on F20, Command Mode on Ctrl+F20, written into Flow's config.json because its settings screen refuses F20 without a modifier while its key listener accepts it. The key codes and action names come from reading Flow 1.6.1021's app.asar: shortcuts are keyed by macOS key codes string-sorted and joined with "+", f20 is 90, ctrl is 59, ptt is Push to talk and lens is Command Mode. splitKeybinds is kept in step so Flow cannot read back a disagreeing pair. A bin/ tool rather than a link/ part, though it was proposed as one. It has to quit and restart Flow for an edit to stick, and link.sh runs unattended after every sync: a part that can kill a dictation mid-sentence is a poor trade for a binding that can wait until someone asks for it. On demand it is also free to fail loudly, since nothing else's run depends on it. Flow ignores an AppleScript quit, so it gets a TERM; and it is launched by bundle id, because the bundle contains a second app also called "Wispr Flow" -- its Swift helper -- that `open -a` can start instead, which exits at once. The file as first found is kept as config.json.pre-wispr-keys.
2026-09-28AGENTS.md is the file; CLAUDE.md imports itIgor Soarez
Every agent here except Claude Code reads AGENTS.md -- pi, codex, and aider now that its read: says so. The vendor-neutral name was the symlink and the Claude-specific one the real file, with a header saying the file was guidance "to Claude Code". Swapped, keeping history on the real file through git mv. Claude Code has read AGENTS.md directly since v2.1.277 and the machine this was done on is newer, so the obvious move was to delete CLAUDE.md. Checking the other machines first was worth it: four were on versions between 2.1.158 and 2.1.263, and a session on any of them would have found no instructions at all. So CLAUDE.md stays as one line, `@AGENTS.md`, which the documentation endorses for exactly this case and which -- unlike the symlink it replaces -- works on Windows and does not trip Claude Code's refusal to write through a symlink. The header says to delete it once every machine is current.
2026-09-27macos: hot corners and tap to click, and a way to find the next keyIgor Soarez
Three settings this account has always set by hand on every new Mac, now in the script that exists for exactly that: the bottom-right hot corner sleeping the display, tap to click, and three-finger drag on an external trackpad -- the last a gap, since the script set it only for the built-in one. Each of those is written in more than one place because macOS keeps them in more than one place: an external Magic Trackpad has its own domain, and the login window reads com.apple.mouse.tapBehavior rather than either of them, per-host for this machine and globally for any other. Setting one and not the others is why tap to click sometimes survives a reboot and sometimes does not. bin/macos-defaults-diff is the general answer: snapshot, change one setting, and it prints what moved, including the -currentHost domains a plain `defaults read` never shows. It flushes cfprefsd first, since a change made seconds earlier can otherwise be missing from the read meant to reveal it, and it says plainly when nothing changed -- anything behind Privacy & Security lives in the SIP-protected TCC database and cannot be scripted at all.
2026-09-25dot-request: file a change request from a machine that cannot pushIgor Soarez
A clone made over https cannot publish anything, so a fix found on such a machine is lost at the next pull. The instructions already said to hand back a change request instead of editing; this is the command that does it. The request is markdown on stdin, signed with a key that machine holds, and posted to the inbox, which stores it only if the signature is from a key authorised there. Where the key is not authorised, nothing is stored and the submission says so. The endpoint is named here, which the leak rule would otherwise forbid, and the rule now carries the exception: a public endpoint this repo's own tooling must reach, already published by a DNS record and a certificate in the transparency logs, is not a leak. Concealing it would protect nothing and cost every machine a hand-written config file; what protects it is the signature. The private layer's check has the same exception, so it is enforced rather than remembered, and it does not extend to hosts, addresses or internal-only names. The other side is documented too: where `sz-requests` exists, what arrived can be read and judged. A signature says which machine produced the text, never that the text is right -- the machines filing these are the ones this account does not fully control.
2026-09-17dotfilesIgor Soarez
Shell, editor and terminal configuration, the tools that go with them, and szecret, an age-based secret manager whose store lives elsewhere. History restarts here. What came before was not written to be read by anyone else, and carried machine names, addresses and an encrypted secret store; it is kept privately instead. What is left is meant to be safe on any machine, including one whose owner is not me: see CLAUDE.md for the rule it is written to.