assist
-
v0.109 - Refactor rename commands and madge integration
Added two new
refactor renamesubcommands powered byts-morph.refactor rename filemoves a TypeScript file and updates all imports across the project, whilerefactor rename symbolrenames a variable, function, class, or type and updates every reference. Both default to dry-run mode showing what would change, with an--applyflag to execute.Also added
madgeas an option inverify initfor circular dependency detection — selecting it installs the package and wires up averify:madgescript automatically.Fixed a test that was failing on non-Windows platforms by skipping the MSYS path conversion test when not running on Windows.
-
v0.108 - RSS news reader with web UI
Built an RSS news reader into the CLI.
news addlets you add feed URLs to your global config, andnews webspins up a local web server that fetches all configured feeds, parses both RSS and Atom formats, and renders items in a React UI grouped by date. Each feed gets a consistent color-coded badge, items show favicons and relative timestamps, and excerpts are extracted from descriptions with HTML stripped. Also extracted shared web server utilities intosrc/shared/web.tsto deduplicate the pattern already used by the backlog web view.Separately, fixed the
prs fixedcommand to push the commit before resolving the review thread — previously it would resolve the thread with a commit link that didn’t exist on the remote yet. Also suppressed noisy JSON output fromgh apicalls when resolving PR comment threads. -
v0.107 - Jira authentication and acceptance criteria
Added Jira integration with two new commands.
jira authhandles authentication via API token, prompting for site, email, and token then persisting the site and email to~/.assist/jira.jsonfor future use.jira acfetches and prints acceptance criteria for a given issue key, converting Atlassian Document Format to readable markdown text with support for headings, ordered and bullet lists, and inline code.Also fixed
gh apicalls in the PR comment resolution flow to suppress JSON output that was being dumped to the terminal by piping stdout topipeinstead ofinherit. -
v0.106 - Devlog repos command and skip list relocation
Added a
devlog reposcommand that scans all tracked repositories and displays a summary table of their devlog status — showing the last version, date, and how many unversioned days remain. Handy for quickly seeing which repos have pending devlog entries.Moved the devlog skip days configuration out of each individual repo’s
assist.ymland into the blog repo’s config instead. Skip days are now keyed by repo name in a single central location, which keeps per-repo configs cleaner and makes the skip list easier to manage. Updateddevlog skip,devlog list, anddevlog nextto read from the new location. -
v0.102 - .NET Framework dependency tree and run parameters
Added a
netframework depscommand that builds and prints a dependency tree for .NET Framework projects. It finds containing solutions, resolves.csprojreferences, and displays the tree structure. Useful for understanding project dependencies in legacy codebases.Enhanced the
runcommand with positional parameter support —run addcan now define named parameters that get substituted at runtime, making custom commands more flexible. Also added elapsed time printing after each run completes, so you can see how long commands take.Fixed npm install detection to work through
fnmandnvmversion manager wrappers. -
v0.98 - Compound command support in CLI hook
Extended the CLI hook to handle compound commands — piped commands,
&&chains, and semicolons are now split and each part checked individually against the approved reads list. This means Claude Code can auto-approve things likegit status && git diffwithout needing each compound form explicitly listed. Consolidated the cli-hook subcommands into a cleaner structure.Also switched the cli-reads lookup to pure JavaScript to avoid shell overhead on each hook invocation, and made
assist updaterunnpm installafter pulling to ensure dependencies stay in sync. -
v0.96 - CLI read permissions and auto-discovery
Built a CLI permissions system that auto-discovers read-only commands from installed CLIs and generates a flat file (
assist.cli-reads) of safe-to-approve patterns. Thecli-discovercommand parses help output from CLIs to classify subcommands as read-only or mutating, andcli-hookintegrates with Claude Code’s hook system to auto-approve matching commands. This replaces the manually-maintained allow list insettings.jsonfor read operations.Also auto-approves read-only
gh apicalls by inspecting the HTTP method and endpoint, added a/syncslash command for syncing settings from the terminal, and fixed commit argument ordering to put the message first. -
v0.93 - Commit workflow improvements and shell escaping
Improved the
commitcommand to accept a message directly without requiring file arguments, and updatednewto automatically add VS Code configuration when scaffolding a Vite project. Fixed shell argument escaping across the tool and added a--verboseflag for debugging.Several fixes around packaging and release — made voice runtime dependencies optional so they don’t block installation, synced
package-lock.jsonwith the newastalias, and ensured the lock file gets committed during releases. Also fixedisGitRepoto check the exact git root rather than matching parent directories, and used a shorter notification sound for WSL. -
v0.91 - GPU speech-to-text and radon complexity checks
Switched the voice daemon’s speech-to-text to use GPU inference for faster transcription, and fixed silence detection to properly reset after smart turn checks. Also added word-level diffing for more accurate voice typing output.
Added radon-based complexity checks for Python projects — both cyclomatic complexity and maintainability index at the file level. This complements the existing TypeScript complexity checks and runs as part of
verify.Introduced
astas a short alias for theassistcommand. Added context percentage colouring to the status line, madecommitaccept explicit file lists and status output, paginated the GitHub API inlist-commentsto handle large PRs, and hid completed items frombacklog listby default. -
v0.85 - Voice interaction daemon
Built a voice interaction daemon that listens for a wake word and transcribes speech to type into Claude Code. The daemon runs as a background process with configurable wake and submit words — say the wake word to start listening, then the submit word to send. Iterated on it throughout the day, fixing word-level diff for more accurate typing, deduplicating daemon code, and routing debug output to a separate console window.
Added
prs commentfor posting new review comments on PRs, and expandedverifywith anallmode and diff-based filters so you can run all checks or only checks relevant to changed files. Also addedrunenvironment support and ano-venvverification check for Python projects. -
v0.78 - Backlog web polish and verify list
Spent the day polishing the backlog web UI. Migrated the forms to Base UI components and switched the styling to Tailwind for a cleaner look. Added a completed items toggle, a delete command, and story/bug type categorisation. The web UI now opens the browser automatically and is the default when running
assist backlogwith no arguments.On the CLI side, added
verify listandrun listcommands so you can see what verification steps and run configs are available without actually running them. Also addedhardcoded-colorsto the ignore config for projects that need to opt out of colour literal checks. -
v0.67 - React web UI for backlog management
Built a web frontend for the backlog command using React. Running
assist backlog webspins up a local server that serves a single-page app for managing backlog items — viewing, creating, and editing items with descriptions and acceptance criteria. The UI is bundled withtsupand served inline via an HTML template, keeping it self-contained without needing a separate dev server.Also fixed config saving to preserve unknown keys, so custom or future config values aren’t silently dropped when writing back to
assist.yml. -
v0.66 - Verify from run configs and command generation
Updated
verifyto resolve its entries from both run configs and package scripts, so custom verification steps defined viaassist run addare picked up automatically alongside the standard checks. Also maderun addgenerate a command file when adding a new run config, giving each custom command a proper home rather than just an inline script. -
v0.64 - Journal and standup commands
Added
/journaland/standupClaude commands. The journal command appends an entry summarising recent work, decisions, and notable observations. The standup command reads recent journal entries and generates a standup update. Both are Claude commands rather than CLI commands since they rely on Claude’s context and summarisation abilities.Also fixed the commit config to include proper defaults so it works correctly even when not explicitly configured.
-
v0.63 - Roam Research OAuth integration
Added a
roam authcommand that handles the full OAuth authorization flow for Roam Research. It prompts for client credentials, opens the browser for authorization, spins up a local callback server to receive the auth code, and exchanges it for an access token. The token gets stored in the config for use by future Roam commands.Also added a few more git commands (
git status,git grep,git log) to the permissions allow list so Claude Code can use them without prompting. -
v0.58 - Review comment skipping and self-update
Added a skip option to the
/review-commentsClaude command so individual comments can be passed over without needing to reply or resolve them. This is useful for comments that need more thought or aren’t actionable yet.Also added an
assist updatecommand for self-updating the tool via npm, and fixed the permissions allow list for complexity commands. -
v0.56 - Backlog management and project scaffolding
Added a
backlogcommand for managing a simple task backlog — items can be listed (with a verbose flag for descriptions), added with an editor for longer descriptions, and picked off with/next-backlog-itemwhich selects and starts implementing the next item. This gives a lightweight way to track what needs doing without leaving the terminal.Built an
assist newcommand that scaffolds a new project — sets up a Vite React TypeScript template, initialises git, and gets everything ready to go. Also addedtsupsupport tovscode initfor projects using that bundler, and wired maintainability checks intoverify initso new projects get code quality gates from the start. -
v0.48 - Continued restructuring and complexity defaults
Continued the maintainability-driven restructuring from yesterday, breaking apart more modules across the codebase —
computeRewrites,planFileMoves,parseVtt,displayPaginated, and others were split into focused sub-modules. This was another round of using the restructure command on the codebase itself.Added a default action to the
complexitycommand so running it without arguments gives useful output immediately. Also added SHA validation toprs fixedto match whatwontfixalready had, and allowedgh pr viewandgh pr diffin the permissions allow list. Improved the maintainability error message to be clearer about what needs attention. -
v0.46 - Restructure command and codebase reorganisation
Added a
refactor restructurecommand that analyses import graphs, clusters tightly-coupled files, and generates a plan to reorganise them into cohesive directories. It builds an import graph, clusters files by coupling, computes file moves, and can execute the plan — all without needing AI assistance. Also exposed it as a/restructureClaude command for interactive use.Then I ate my own dogfood and used it to restructure the
assistcodebase itself. Large modules likecomplexity/shared.ts,prs/listComments.ts,transcript/parseVtt.ts, andindex.tswere broken apart into focused sub-modules. The mainindex.tswent from a monolithic command registration file to thinregister*.tsfiles. This brought the codebase maintainability scores above 60 across the board.Also added a
readmeCLI command (previously only a Claude command) and cappedwontfixreasons to 15 words. -
v0.42 - Maintainability index as a verification step
Expanded the complexity command into a proper verification step. The maintainability index can now run as part of
verify, failing the build when files drop below a configurable threshold. When a file fails, it includes an explanation of what the maintainability index measures and what’s dragging the score down, which makes the output actionable rather than just a number.Added
complexity.ignoreto the config schema so specific files or patterns can be excluded from checks. Also added support for custom lint verify scripts, letting projects define their own lint commands alongside the built-in ones. -
v0.37 - Config command and settings sync
Added a
configcommand backed by Zod schema validation. It lists current configuration values with their defaults applied from the schema, so you can see effective values even when they’re not explicitly set. This builds on the existingassist.ymlconfig file andloadConfig()infrastructure.Introduced a
syncsubcommand that copies user-level Claude instructions (CLAUDE.md) to the home directory, keeping project-specific settings in sync across workspaces. Also madenotifyconfigurable via the new config system with a default-enabled flag.Fixed packaging issues where Claude commands weren’t being included in the published package, and added type checking to the CI release pipeline to catch build errors earlier.
-
v0.33 - Meeting transcript processing commands
Added a suite of transcript commands for processing meeting recordings. The
transcript formatcommand parses VTT subtitle files into clean markdown transcripts, handling speaker identification and timestamp formatting. Thetranscript summarisecommand uses a staged workflow — it first generates a summary via a Claude command, then saves it alongside the original transcript with a link back to the source file. Iterated on the summary output a few times to get the file paths and links right, including URL encoding and using relative paths.Also improved the PR review workflow —
prs list-commentsnow includes resolved comments (marked as such) for better context, andwontfixvalidates commit SHAs before responding. Updated the/review-commentsClaude command docs to enforce backticks for code references and clarify the markdown link syntax. -
v0.30 - Fixed and wontfix PR comment responses
Continued building out the PR review workflow with
prs fixedandprs wontfixcommands. These replace the earlierreplyandresolvecommands with more opinionated actions —fixedreplies with a message about the fix and resolves the thread, whilewontfixexplains why the comment won’t be addressed and resolves it. This better matches how I actually respond to review feedback.Improved the
list-commentsflow to handle the case where all review threads are already resolved — it now drops the comment cache and prints a clear message instead of showing an empty list. -
v0.27 - PR review workflow and readme checks
Built out the PR review workflow with
prs replyandprs resolvecommands, so I can respond to review comments and mark threads as resolved directly from the CLI. Updated the/review-commentsClaude command to take advantage of these — it now filters out already-resolved threads so Claude only focuses on what still needs attention.Added a
/readmeClaude command that checksREADME.mdfor missing command documentation. This ties into the project convention of keeping the README in sync whenever CLI or Claude commands change.Small fix to use 7-character SHAs in commit output for consistency, and enforced LF line endings across the repo via
.gitattributes. -
v0.22 - Complexity analysis and PR review comments
Added a
complexitycommand that calculates maintainability metrics for source files — cyclomatic complexity, Halstead measures, and SLOC — giving a quick code health overview without needing external tools.Built out PR review comment support in two parts. First, a
prs commentssubcommand that fetches and displays review comments from GitHub PRs in a human-readable format, with proper error handling for missing repos. Second, a/review-commentsClaude command that lets Claude Code process PR review comments interactively. Iterated on the comments output to handle Windows path compatibility and 404s gracefully.Tightened up the codebase with a lint rule to catch
.jsimport extensions in TypeScript files and renamed source files to follow camelCase conventions enforced by Biome. Fixedknipto properly fail verification on config hints instead of silently passing. Removed the unusedenable-ralphcommand and updated the README. -
v0.16 - Desktop notifications and package.json versioning
Added a
notifycommand that integrates with Claude Code’s notification hooks to show desktop notifications when Claude needs attention. It handles different notification types like permission prompts and idle prompts, displaying the project name and relevant message. The command works across platforms - usingnode-notifieron native systems and calling SnoreToast directly from WSL to show Windows notifications. Fixed an issue on macOS where notifications would disappear immediately by setting a long timeout and enabling wait mode.Improved the
devlog nextcommand to read the version directly frompackage.jsonat the last commit whencommit.conventionalis enabled. Previously it relied on parsing devlog entries to determine the current version, but for repos using semantic-release the version is already tracked inpackage.json. This makes the version suggestions more accurate for projects that don’t have a devlog entry for every release. -
v0.15 - Commit workflow, status line, and deploy features
A productive day with several new features for the
assistCLI.Added a
status-linecommand that formats Claude Code’s status JSON into a readable status line showing the model name, token counts (input/output), and context window usage percentage. This integrates with Claude Code’s custom status line feature.Enhanced the
commitcommand with conventional commit validation. Whencommit.conventionalis enabled inassist.yml, messages must follow the standard format likefeat: add featureorfix(scope): fix bug. Also added configurablepullandpushoptions so commits can automatically sync with the remote.The
deploycommand gained aredirectsubcommand that injects a trailing slash redirect script intoindex.html, useful for static site deployments. Thedeploy initcommand now prompts to installnetlify-cliif it’s missing.Updated VS Code settings generation to configure Biome’s organize imports on save, replacing the per-language formatter overrides with a single global config.
Fixed a WSL compatibility issue where enquirer’s confirm prompts displayed incorrectly. Replaced the Unicode symbols with ASCII
[x]and[ ]markers. Also extracted the ESLint removal logic into a shared utility so bothlint initandnewcommands can use it. -
v0.12 - Run command for configured scripts
Added a new
runcommand that executes configured commands stored inassist.yml. You can define named commands with optional default arguments, then invoke them withassist run <name>. Any extra arguments passed get appended to the configured ones. There’s alsoassist run addto quickly register new configurations without editing the YAML manually.The config loader now checks
.claude/assist.ymlfirst before falling back toassist.ymlin the project root, allowing the configuration to live alongside other Claude-related settings.Fixed an issue where
run addwould mangle arguments containing colons or other special characters due to Commander’s argument parsing. The fix bypasses Commander and parsesprocess.argvdirectly to preserve the original argument values. -
v0.11 - PR listing command and automated npm releases
Added a new
prscommand that lists pull requests for the current repository using the GitHub CLI. It supports filtering by state (--openor--closed) and paginates results with interactive navigation when there are more than 10 PRs. Each entry shows the PR number, title, author, status with date, and changed file count.Also set up semantic-release for automated npm publishing. When commits land on main, the release workflow analyzes commit messages and automatically bumps the version, updates the changelog, publishes to npm, and creates a GitHub release. The package is now published as
@staff0rd/assistwith public access. Added conventional commit guidance toCLAUDE.mdto ensure proper version bumping. -
v0.10.2 - Lint init now propagates overrides
Fixed a bug in the
lint initcommand where biome overrides weren’t being copied to the target project’sbiome.json. Previously only the linter rules were propagated, but now any overrides defined in the template (like allowingconstants.tsfiles to use kebab-case naming) get copied over too.Also tweaked the
verify:testscript to use vitest’s dot reporter, which only shows output for failing tests rather than listing every test file. Makes the verify output much cleaner when everything passes.Did some internal refactoring as well, extracting each verify setup function into its own file to keep things organized.
-
v0.10.1 - Devlog command refinements
Made several small improvements to the devlog workflow. Added support for overriding the project name in assist.yml via
devlog.name, useful when the git repo name doesn’t match what I want in devlog entries.Also refined the Claude Code command prompt: improved tag selection guidance to prefer existing tags over creating new ones, added a diff check before skipping entries to ensure nothing meaningful gets missed, and reordered the tag fetch to happen later in the workflow.
-
v0.10 - New project scaffolding commands
Added a
newcommand for scaffolding fresh projects. It sets up the basic structure and automatically runs initialization commands to get a project ready to go. Also added vite base configuration to new projects so they’re ready for building out of the box.Created two new init commands:
lint initsets up biome with my preferred linting configuration, anddeploy initadds a GitHub Actions workflow for automated builds and deployments. The new project command chains these together so a freshly created project has linting and CI/CD configured from the start. -
v0.9 - Major refactoring and filename conventions
Spent the day on a significant refactoring pass. Extracted large modules into smaller, focused files - the verify init command alone went from a monolithic 377 lines down to several purpose-built modules like
detectExistingSetup,setupKnip, andinstallPackage. Did the same for devlog, refactor, and vscode commands.Added filename convention enforcement via biome, requiring files to use either camelCase or be named
index.ts. This prompted renaming several files likedevlog.ts→index.tsandfileNameCheck.ts→runFileNameCheck.ts.Also improved jscpd integration with quieter output and detection of outdated configurations, plus deduplicated package.json reading logic into a shared utility.
-
v0.8 - Refactor check now runs verify scripts
Enhanced the refactor check command to automatically run any
verify:*scripts from package.json before reporting results. This catches issues that static analysis might miss by running the project’s actual verification suite. The verify scripts run quietly in the background and only show output on failure.Also added devlog as a Claude Code skill for easier access, and updated documentation.
-
v0.7 - New init and verify commands
Added a suite of new initialization and verification commands today. The main addition is
vscode init, which sets up VS Code configuration for a project. I also created a generalinitcommand framework to organize these setup utilities.On the verification side, I built
verify hardcoded-colorsto detect hardcoded color values in code (with example fixes), and significantly improvedverify init. The init verification now properly handles package installation, supports vitest for testing, and works with vite-only builds that don’t use a separate build script. -
v0.6 - Devlog command enhancements
Continued refining the devlog workflow today. Added a
--reverseoption todevlog diffso I can view changes in chronological order instead of reverse-chronological, which is more natural when reviewing a sequence of work.Extended the config system with a skip day feature and git permissions, making it easier to manage which dates get skipped and controlling git operations. Also updated the README with documentation for all the new devlog commands.
-
v0.5 - New devlog command for tracking releases
Built out a comprehensive
devlogcommand system today. The main feature isdevlog next, which shows commits since the last versioned devlog entry and suggests the next patch and minor version numbers. This makes it easy to see what needs documenting and pick the right version bump.Added
devlog skipfor marking dates as intentionally skipped (trivial changes that don’t warrant an entry), anddevlog difffor reviewing changes with filtering options like--sinceand--verbose. The diff command also shows devlog status per date so I can see at a glance what’s been documented.Made several supporting improvements: the sync command now shows line-by-line diffs when copying settings, verify got a
--timeroption for performance tracking, and I added verify/commit to the global permissions list so they run without confirmation prompts.Also did some internal cleanup, extracting the devlog functionality into separate modules and adding VSCode settings for biome.
-
v0.4.1 - Fixed verify command path resolution
Fixed an issue with the verify command where it would fail to find the package.json file when running from a subdirectory of the project. The command now walks up the directory tree to locate the nearest package.json, matching the behavior users expect when working in nested folders.
-
v0.4 - Configurable max-lines for refactor checks
Added a
--max-linesoption to the refactor check command, making the file length threshold configurable rather than hardcoded. This lets me adjust the limit based on project needs or temporarily raise it when I’m not ready to split a file yet.Also updated the README to better clarify what the tool does.
-
v0.3 - Git filters for refactor check
Added git filter options to the
refactor checkcommand. The new--modified,--staged, and--unstagedflags let me focus the check on files I’m currently working on rather than scanning the entire codebase. This makes the command much more useful during active development when I only care about files I’ve touched.Also removed the unused
refactor check nextsubcommand that showed the single largest violation - the main check command with sorting already handles this use case well enough. -
v0.2 - Refactor command improvements
Spent the day polishing the refactor command. Fixed stderr handling in the verify command so errors don’t clutter the output, and made the refactor ignore system use the maxLines setting properly.
Added a new static import linting check to catch cases where dynamic imports could be converted to static ones. Also introduced a
refactor nextsubcommand that shows just the next violation to fix, making it easier to work through issues one at a time.Did some cleanup on the violation output, moving extraction tips inline and creating a shared logViolations helper to reduce duplication. Test files are now excluded from refactor checks since they often have legitimate reasons for patterns we’d normally flag.
-
v0.1 - Assist CLI genesis
Started building a personal CLI tool called
assistto streamline my development workflow. The core features include a commit helper that stages and commits with AI-generated messages, a sync command for updating global commands and settings, and a verify command that runs all project checks in parallel.Added code quality tooling with lint and refactor commands. The refactor command runs various checks (unused exports, file naming conventions, etc.) and supports pattern filtering for targeted analysis. There’s also an ignore mechanism for suppressing false positives.
Switched from plain tsc to tsup for bundling, which should make the CLI easier to distribute. Wrote up documentation including installation instructions and a CLAUDE.md for AI context.