Why I Use #4: My Own Tools, From Finding a Project to Shipping Its README Software developer Michael Wright detailed five Rust command-line tools he built for his own workflow in the fourth post of his "Why I Use" series: pjmai-rs for locating and navigating git repositories, agentrail for tracking numbered "saga" work steps committed alongside code, reg-rs for golden-output regression testing, sw-checklist for enforcing project standards, and markdown-checker for verifying README rendering. Wright said agentrail was built to keep AI agents on track across fresh contexts and now records work done in parallel or elsewhere when several agents work the same family of repositories at once. Why I Use 4: My Own Tools, From Finding a Project to Shipping Its README 1046 words • 6 min read • Abstract The first three posts in this series were about languages. This one is about tools I wrote for myself, and I use them at different levels of the same working day: where is the project, what is the next step, did I break anything, is the code still well built, and will its README display. Each is a small command-line program written in Rust. | Resource | Link | |---|---| | pjmai-rs | sw-cli-tools/pjmai-rs https://github.com/sw-cli-tools/pjmai-rs ; TBT 6 https://blog.softwarewrighter.com/2026/03/05/tbt-pjmai-rs-project-manager/ , history and fuzzy completion https://blog.softwarewrighter.com/2026/03/07/pjmai-rs-navigation-history-and-fuzzy-completion/ | | agentrail | sw-vibe-coding/agentrail-rs https://github.com/sw-vibe-coding/agentrail-rs ; AI Tools 2 https://blog.softwarewrighter.com/2026/04/23/ai-tools-agentrail-rs-mid-saga-flexibility/ , Saw 15 https://blog.softwarewrighter.com/2026/10/18/saw-agentrail-correcting-the-record/ | | reg-rs | sw-cli-tools/reg-rs https://github.com/sw-cli-tools/reg-rs ; TBT 7 https://blog.softwarewrighter.com/2026/03/19/tbt-reg-rs-regression-testing/ | | sw-checklist | softwarewrighter/sw-checklist https://github.com/softwarewrighter/sw-checklist ; AI Tools 3 https://blog.softwarewrighter.com/2026/04/27/sw-checklist-ratchet-ai-coding-agents/ | | markdown-checker | softwarewrighter/markdown-checker https://github.com/softwarewrighter/markdown-checker | | The series | Why I Use: every post https://blog.softwarewrighter.com/series/ why-i-use | | Comments | Discord https://discord.com/invite/Ctzk5uHggZ | pjmai-rs: where is the project? I develop on several machines, and each has its own set of repositories in its own places. pjmai-rs https://github.com/sw-cli-tools/pjmai-rs keeps a registry of them and hooks into the shell, so I can find where any project sits on the machine I am on and go there: scpj scan for git repositories and add the new ones lspj list every project on this system chpj myproject switch to one It also keeps a navigation history hypj and completes project names fuzzily. TBT 6 https://blog.softwarewrighter.com/2026/03/05/tbt-pjmai-rs-project-manager/ tells where the idea came from. agentrail: what is the next step? Once I am in a project, agentrail https://github.com/sw-vibe-coding/agentrail-rs holds the plan. Work is a saga of numbered steps, committed with the code, so the plan, its progress and the record of what each step did live in the repository rather than in a chat that a new context will not remember. It was built to keep AI agents on track across fresh contexts, and it does the same for me. Plans change, so it has to handle more than a straight line: inserting and reordering steps, reopening one, and taking a detour without losing the thread AI Tools 2 https://blog.softwarewrighter.com/2026/04/23/ai-tools-agentrail-rs-mid-saga-flexibility/ , and, now that several agents often work the same family of repositories at once, recording work done in parallel or somewhere else Saw 15 https://blog.softwarewrighter.com/2026/10/18/saw-agentrail-correcting-the-record/ . reg-rs: did I break anything? reg-rs https://github.com/sw-cli-tools/reg-rs creates, discovers, runs and reports on regression tests: run a command, keep its output as the golden result, and fail when the output changes. That is what lets me change code with confidence, whether a refactoring, a fix or a new feature. For the compilers, interpreters and emulators I build, the output is the specification, and a golden test notices what no unit test thought to ask. It has run under most of what this blog has shown lately, from X eTaL’s hundreds of goldens to the Forth kernel that rebuilds itself. TBT 7 https://blog.softwarewrighter.com/2026/03/19/tbt-reg-rs-regression-testing/ traces it from C++ to Java to Rust. sw-checklist: is it still well built? sw-checklist https://github.com/softwarewrighter/sw-checklist reins in bad practice. It checks a project against my standards, including size limits that warn first and then fail: | Measure | Warns over | Fails over | |---|---|---| | Lines in a function | 25 | 50 | | Lines in a file | 350 | 500 | | Functions in a module | 4 | 7 | | Modules in a crate | 4 | 7 | | Crates in a project | 4 | 7 | The limits are a forcing function. Code that stays under them tends to be readable, maintainable, extensible, modular and loosely coupled, because the only way to grow is to split things along their seams. AI Tools 3 https://blog.softwarewrighter.com/2026/04/27/sw-checklist-ratchet-ai-coding-agents/ covers how it works as a ratchet on AI coding agents, which otherwise grow functions and files without limit. markdown-checker: will the README display? The smallest of them. markdown-checker https://github.com/softwarewrighter/markdown-checker makes sure a project’s main README.md contains only plain, printable characters, so that nothing in it keeps GitHub from rendering the page as intended. The usual offenders are the tree-drawing symbols people paste in to show a directory layout; markdown-checker --fix replaces them with ASCII equivalents. Five levels, one day Read in order, they follow a working session: find the project, pick up the plan, change the code without breaking it, keep the code in shape, and publish a README that displays. Part 4 of the Why I Use series. View all parts https://blog.softwarewrighter.com/series/ why-i-use Comments or questions? SW Lab Discord https://discord.com/invite/Ctzk5uHggZ or YouTube @SoftwareWrighter https://www.youtube.com/@SoftwareWrighter .