¬ just serendipity 🍀

¬ just serendipity 🍀

Thiago Perrotta

Welcome to my digital garden – a space dedicated to exploring technology and sharing what I’ve been learning. This site reflects my passion for continuous learning and open-source software, wherein I document my journey, offer insights, and dive into miscellaneous topics that reflect my interest. My goal is to maintain a corner of the Web for self-expression focused on valuable, distraction-free content. I believe in the power of the Open Web as a platform for sharing knowledge.

Latest Posts

♠ I found drskill through Drew Breunig’s post about managing an agent’s loadout. Problem statement: lint skills bundled in a Claude Code plugin with drskill. Running it through uvx is easy enough: % uvx drskill scan --detailed drskill...
♠ Problem statement: block destructive shell commands issued by pi without resorting to grepping shell source with regular expressions. My first guard was a direct port of an older hook in Claude Code: const BLOCKED_COMMANDS:...
♠ Problem statement: ctrl+d in pi took several seconds to quit. The culprit was pi-memory’s session_shutdown handler. It sent one last LLM request to summarize the session, wrote its answer to the daily log, then ran qmd update. Pi...
♠ Problem statement: pin pi npm packages without giving up convenient updates. My settings.json used to leave some package versions unpinned, until now: "npm:@heyhuynhgiabuu/pi-diff@0.7.6", - "npm:@tifan/pi-recap", -...
♠ Previously. The Anki official docs do not provide explicit instructions about the archival of decks that are no longer needed. Archiving is better than deleting because you never know when you may need a deck again. One way to archive...
♠ Problem statement: using pi, install an extension (package) as an one-off, without persisting it, for the sake of test-driving it, akin to pre-commit try-repo. Solution: % pi --help [...] --extension, -e <path> Load an extension file...
♠ Problem statement: in Obsidian, out-of-the-box, typing * at the start of a new line emits *|* (an empty bold pair, cursor in the middle) instead of starting a bullet point. The culprit is Settings → Editor → Auto pair Markdown syntax....
♠ Previously. Problem statement: mid-task, I want to ask the LLM agent a quick tangential question — “will this change cause downtime?” — without polluting the main agent thread. Claude Code has /btw1 for exactly this. pi doesn’t, but...
♠ Previously. Problem statement: sometimes a prompt in pi just hangs, as if the network dropped. It never recovers on its own — I have to hit Esc and re-prompt. It’s 2026, this symptom should be self-recoverable. Pi already has...
♠ Previously. Problem statement: pi binds ctrl+p to app.model.cycleForward1 by default, but has no default binding to cycle backward other than shift+ctrl+p, which is arguably difficult to remember. Every keybinding in pi is namespaced...
♠ Previously, previously. Problem statement: adopt caveman in pi. Pi isn’t one of the 30+ agents caveman auto-detects. The install matrix (INSTALL.md) lists agent detection rules one by one — claude, cursor, windsurf, opencode, openclaw,...
♠ Previously. Problem statement: LogSeq v2 is moving its graph format from markdown files to a sqlite database: What’s New with Logseq DB — May 16th 2026 Big update: Logseq is splitting into two versions This is not OK for my workflow....
♠ The recently released Apple Sports app was surely a great way to keep up with the World Cup on the go. It is very polished; it does one thing, and does it well. Simple yet effective. I do recommend it. It’s especially handy when you’re...
♠ This site respects your privacy by not containing ads, not using tracking cookies, and not collecting any personally identifiable information. — § —
♠ TIL: brew pin. For reasons to be elaborated in another post, I am currently prevented from upgrading LogSeq to its latest version in homebrew: % brew outdated [...] logseq (0.10.14) != 2.0.1 [...] LogSeq v2 introduces breaking changes...
Search Random