Skip to content

v2026.09.0

Choose a tag to compare

@noodles noodles released this 13 Sep 08:14
· 8 commits to main since this release

The command is now pb, not proj. brew install proj installs PROJ, the
cartographic projections library, which puts a proj binary on PATH and
arrives as a dependency of gdal, postgis and qgis. Shipping a tool that shadows
it, or gets shadowed by it depending on PATH order, was a defect rather than a
preference. Nothing in Homebrew or on a stock macOS installs a pb command.

  • proj.py is now pb.py, the shell function is pb, and the environment
    variable the function sets is PB_SHELL_WRAPPER
  • The data directory moved from ~/.proj to ~/.pb. It migrates itself on
    first run, and only when the old directory exists and the new one does not, so
    it can never merge two sets of data or overwrite anything. The notice goes to
    stderr so that stdout stays parseable
  • Re-run bash install.sh && source ~/.zshrc to replace the old shell function.
    The old proj name is deliberately not kept as an alias: it would re-create
    the collision for exactly the people the rename protects
  • Add pb list --json for scripts and agents. It emits the same object shape as
    pb info --json, which means the stored fields plus status, computed from
    last_worked_at rather than stored. Filters, sorting and --limit apply, so
    the JSON is exactly what the table would have shown; an empty result is []
    rather than prose
  • Ship a Claude Code skill at skills/pb/SKILL.md so an agent can resolve a
    project the user names out loud into a path. install.sh offers to link it
    into ~/.claude/skills/ and defaults to no, because a project CLI has no
    business writing into an agent's config directory uninvited
  • Remove every em dash and en dash from the repository, including the ADR
    templates that get scaffolded into other people's projects, and add a test
    that fails if one comes back
  • pb info now prints - rather than an em dash for an empty field