powRSS
Home Recent Glimpses Shuffle Blogs Random

New: Explore conversations across blogs with powRSS Mentions

¬ 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.

August 2026

September 2026

October 2026

Top Words

  • claude
  • code
  • reply
  • github
  • commit
  • homebrew
  • script
  • shell
  • anki
  • update
  • atuin
  • pull

All posts (411)

♠ Previously. Problem statement: preserve Logseq’s task syntax while opening the same markdown files in Obsidian. My migration script originally converted every task into Obsidian’s checkbox syntax: - TODO buy milk -> - [ ] buy milk - DOING ... -> - [/] ... - DONE ... -> - [x] ... Obsidian itself does not recognize...
♠ Today I learned: pi 0.82.1 cannot change its working directory mid-session. The interactive shell syntax looks tempting, but ! and !! run commands in a child process. cd ends with that process; Pi keeps the session’s original cwd. There is no built-in /cd either: % pi --version 0.82.1 % docs="$(brew --prefix...
♠ 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 scan — 3 harnesses (10 more empty), 9 skills ... 0 errors, 5 warnings (5 new) ·...
♠ 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: ReadonlyArray<{ pattern: RegExp; reason: string }> = [ { pattern: /terraform\s+apply/,...
♠ 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 awaits all shutdown handlers, correctly, so quitting waited for everything:...
♠ 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", - "npm:@tmustier/pi-tab-status", - "npm:@tintinweb/pi-subagents" + "npm:@tifan/pi-recap@0.4.4", +...
♠ 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 a deck is to simply export it as a backup and save it elsewhere. But then you...
♠ 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 (can be used multiple times) [...] For example: % pi -e...
♠ 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. With it on, every * auto-inserts its closing *, so a * followed by a space never...
♠ 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 patriceckhart/pi-btw does, as an extension. It opens a side-chat overlay: the LLM...
♠ 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 agent-level retry on transient errors (retry.enabled defaults to true). The catch is when...
♠ 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 and overridable via ~/.pi/agent/keybindings.json, documented in...

Page 8 of 35