Working in a polyrepo as a solo developer is a constant trade-off. You get clean history and isolated deployments, but you lose the "one command to rule them all" simplicity of a monorepo. But Strive-Sync didn't actually start with my studio. It started at my day job.
We manage a project split across 10 or 11 different repositories. My morning routine was a ritual of manual labor: switch directories, git pull, check lockfiles, run npm install, and repeat ten more times. It was a tedious, time-thieving task.
I wrote a quick script to automate it for myself, and it worked so well that I shared it with my teammates. Seeing their reaction made me realize that this wasn't just my friction, as it was an industry-wide annoyance.
When I started building out the Striving Designs ecosystem, I realized the studio needed the same tool. Coordinating PraxorAI, the platform site, and our CLI tools was creating that same "sync drag." I decided to polish that internal script, harden it for public use, and release it as the first official tool in the Strive-CLI suite.
But building a CLI tool that looks good and stays reliable for the public is harder than it looks.
The "Accordion Collapse" Problem
The first iteration of Strive-Sync had a significant visual bug. I wanted a real-time dashboard that showed the status of every repository in the workspace. It worked perfectly in my test directory where paths were shallow.
However, as soon as I ran it against a larger workspace (like the 11-repo monster at work), the dashboard would literally collapse. High-depth file paths were out-pacing the terminal width, causing ANSI escape codes to wrap and overwrite previous lines. It looked like a broken accordion.
I solved this in v1.2.0 by moving to an "identity-first" HUD. Instead of showing the full relative path, the tool now truncates from the middle or the start, prioritizing the unique product name while keeping the status indicators perfectly aligned on the right.
The "Main vs Master" Dilemma
Another friction point was branch detection. Not every repository uses main as the default branch. Some older projects still use master, and others might have custom integration branches.
Manually specifying the branch for every repo in a .repos file felt like exactly the kind of "chore" I was trying to avoid. The solution was a more intelligent detect_default_branch function. It now queries the local git config and the upstream HEAD reference to determine the correct target before attempting any sync. No more manual overrides required.
Hardening for Production
The final hurdle was stability. Running parallel git operations in Bash can create "zombie" processes if the parent script is interrupted (like with a Ctrl+C).
I spent a good chunk of development time refining the cleanup() trap. It now ensures that every background worker is caught and terminated properly, leaving the terminal state clean and the session memory intact.
Strive-Sync v1.2.0
With the addition of the pre-flight review flow and the --yes flag for non-interactive triggers, Strive-Sync has graduated from a "helpful script" to a core part of the Striving Designs workflow.
It's not just about syncing code. It's about removing the mental friction of context switching. When I start my day, I run one command, and I know my entire empire is in sync and ready to go.