Week of August 17 – August 21
Releases 0.9.3 and 0.10.0 shipped this week, introducing opt-in local experimental tools for target resolution and source diffs, adding documentation source evidence to search results, and improving CLI recovery, validation, and diagnostics.New
Opt-in local experimental tools:resolve and code diff
0.10.0 adds a hidden-by-default experimental suite to the githits CLI and its local stdio MCP server: githits resolve (with the matching resolve_target MCP tool) ranks canonical package and GitHub repository targets, and githits code diff (with code_diff) produces bounded, Git-like diffs across code navigation targets. Enable them by setting [experimental] tools = true in your CLI configuration. The hosted MCP at https://mcp.githits.com, plugins, extensions, and the public MCP API stay on the stable tool inventory.Documentation source evidence on search
Unified search and search-status responses now identify the repository and published-site documentation behind each result. Healthy sources render as compact references; stale, incomplete, pending, or unavailable sources explain what was searched and what the published evidence actually covers, so you can tell partial hits from full coverage at a glance.githits code diff (silent dogfood in 0.9.3)
0.9.3 introduced githits code diff as an unpromoted CLI surface: bounded Git-like views, repository-relative glob filtering, reversible path quoting, apply-safe patch handling, structured completeness diagnostics, and --json output. 0.10.0 promotes it to the experimental suite alongside the matching MCP tool.Improved
Authoritative documentation site identities Discoverysearch and search-status now carry canonical documentation site URLs and show the host and path even when no hits are returned, so you can see exactly which site was consulted.Repository-wide code diff scope, spelled out
CLI help, legacy-scope diagnostics, and public client docs for code diff / code_diff now explain that package targets resolve repository and commit identity while raw diffs remain repository-wide. Bounded results may contain only sibling paths, and the surface says so instead of implying a package-scoped diff.Confident target resolution guidance
resolve now emits direct canonical next actions only for non-ambiguous exact or high-confidence matches. Weaker and empty results require explicit correction or selection instead of an unsafe auto-pick.Diff terminal output
code diff aligns wide Unicode paths by terminal cell width and colors patches, stat bars, summary markers, and change statuses when the terminal supports it. Verbose code-file rows use the same alignment.Standalone-site search recovery
search now preserves ordered backend site suggestions, distinguishes truncated candidate lists, and directs active crawls through search-status without guessing or rewriting your target. Help text also separates atomic interim evidence from opted-in partial target/source subsets.Fixed
- Exact-path recovery names the right surface.
code_readandcode_grepnow returnFILE_PATH_EXCLUDEDfor excluded files andSOURCE_FILE_INVENTORY_UNKNOWNwhen the index cannot verify a path, with actionable path and resolution details, instead of a genericNOT_FOUND. See code navigation. - Waited searches no longer suggest an older ref. After a waited
searchor code navigation call reaches the requested commit, the response no longer recommends falling back to an earlier ref. - Code validation errors match the caller’s surface. Client-side
INVALID_ARGUMENTerrors from shared code-read and grep request builders name CLI commands, positionals, and flags for thegithitsCLI while MCP callers keep MCP-native tool and argument syntax.
Week of August 12 – August 14
Releases 0.9.1 and 0.9.2 shipped this week, tightening exact-path recovery on code navigation, makinggithits init checks for Claude Code and Codex CLI reliable, and sharpening client-side validation error messages so CLI and MCP callers see the right syntax for the surface they’re on.Improved
Surface-native validation guidance Client-sideINVALID_ARGUMENT errors from shared code read and grep request builders now name the right syntax for the caller. The githits CLI sees githits code read, githits code grep, positionals, and flags; MCP callers see code_read, code_grep, and MCP argument names. No more mismatched examples in errors.Fixed
- Exact-path recovery on missing files. Typed
FILE_NOT_FOUNDresponses fromcode_readandcode_grepnow namecode_files,code_grep, andcode_read(or theirgithits code …CLI equivalents) in path-discovery guidance. Extensionless exact files use their containing directory for the follow-up listing, and genericNOT_FOUNDerrors no longer receive misleading file-path hints. - Reliable Claude Code and Codex CLI setup in
githits init. User-scoped MCP checks now run outside project configuration, use targeted server probes with host-specific timeouts, and distinguish missing, non-canonical, disabled, and failed states. Enabled customized Codex entries are preserved, and a cleanup no-op is no longer reported as successful setup when a later command fails.
Week of August 10 – August 11
Release 0.9.0 adds a canonicalgithits settings surface with Terms of Service acceptance, tightens search and code_grep recovery so agents stop retrying futile calls, hardens the OAuth callback flow for remote and sandboxed logins, and picks up the latest undici security patches.New
Manage account settings and Terms of Service from the CLI The newgithits settings command group lets you view and update account settings (default language, license mode, blocked license IDs, marketing emails) without leaving the terminal. Use githits settings show to print the full canonical settings object, githits settings get <key> and githits settings set <key> <values...> for individual fields, and githits settings clear <key> to reset a clearable field. Every subcommand supports --json for scripting.Accept the Terms of Service without a browser round-trip
githits settings terms shows the current Terms of Service acceptance requirement, and githits settings terms accept records acceptance directly from the CLI. When the API returns a terms-remediation error on any authenticated call, the githits CLI and MCP tools now surface a structured error pointing at githits settings terms accept so agents know exactly which command to run.Improved
Bounded recovery guidance forsearch and code_grep
Empty and still-indexing results on search and code_grep now come with bounded, actionable follow-ups instead of open-ended retry prompts. Terminal search sessions no longer poll indefinitely, deferred searches return an explicit continuation, grep truncation messages use normalized producer values, and case-sensitivity and per-command pivots are accurate across MCP and CLI output. Identical retry loops are prevented while structured JSON diagnostics are preserved.Forward-compatible account settings
The account settings client now accepts unknown fields returned by newer account APIs, so older githits CLI versions keep working when the server adds new settings.Fixed
- OAuth login completes cleanly on interrupted callbacks. Valid sign-in callbacks now resolve even when the response closes before finish, timeout and callback-error reporting stay independent of listener teardown, and
githits loginno longer blocks waiting for the temporary callback server to shut down. See authentication for the full flow. githits initsandbox and--no-browserlogins are more resilient. Temporary callback connections are force-closed after the response finishes and token exchange continues without awaiting listener teardown, so proxied sandbox and SSH-tunneled logins finish reliably. See theinitcommand reference for--no-browserand--port.undicisecurity patches. The bundled HTTP client was upgraded toundici7.29.0 to resolve five published advisories while retaining Node 20 compatibility.
Week of August 3 – August 7
Releases 0.6.7, 0.7.0, and 0.8.0 shipped this week.githits init now discloses what it sends where before any changes land, cross-host plugin packaging consolidates into a single canonical source, and GitHits ships as a portable Agent Plugins 1.0.0 package that any compliant client can install directly.New
Portable Agent Plugins 1.0.0 support 0.8.0 publishes GitHits as a portable Agent Plugin alongside the existing native adapters. Any Agent Plugins 1.0.0 client can install GitHits from the repository root and connect to the hosted remote MCP athttps://mcp.githits.com over Streamable HTTP, no host-specific glue required. Existing installs for Claude Code, Cursor, Codex, Gemini CLI, Google Antigravity, and VS Code/GitHub Copilot OpenPlugin keep working unchanged. See Manual remote MCP setup for the hosted transport.githits init discloses outbound data flows and requires a review acknowledgment
Before configuring any coding tool, githits init now shows the outbound queries, targets, and feedback endpoints it will contact and asks you to acknowledge the install review, even when there is nothing to write. Guidance-only remediation stays actionable, MCP configuration targets are listed separately from supporting-guidance targets, and --no-guidance is preserved through the generated install and verification commands.Explicit documentation site targets on unified search
Unified search now accepts explicit indexed documentation site targets, so you can point a query at a specific site instead of relying on inferred routing. Responses continue to surface per-source coverage state — pages crawled, frontier remaining, and a human-readable note — for sites that are partially crawled or capped.Consolidated cross-host plugin packaging
0.7.0 collapses cross-host packaging around the githits-cli repository as the single source of truth. Claude Code, Cursor, Codex, Gemini CLI, Google Antigravity, and generic/OpenPlugin now expose the same four current skills (githits-onboarding, githits-mcp, githits-code, githits-package), and every plugin/extension install goes through the hosted remote MCP at https://mcp.githits.com with host-managed OAuth. See Manual remote MCP setup for the hosted transport, and Skills for the shared skill contract.Changed
- Direct
githits initinstalls continue to use local stdio MCP for supported tools, with one exception: Cursor is now remote-only. Automatic local MCP setup covers the local stdio flow; Cursor users should follow Manual remote MCP setup. - Legacy plugin surfaces removed. The legacy Cursor command payload and the duplicated standalone Claude and Gemini plugin repositories have been retired now that every host reads from the canonical repository.
Fixed
- Concurrent auth operations stay isolated across process restarts. The local auth storage lock now caches each process’s identity per storage instance and retries transient identity lookups, so PID-reuse protection can’t be weakened when multiple
githitsCLI or MCP processes touch credentials at the same time. See authentication for the full storage model.
Week of July 27 – July 31
Release 0.6.6 tightens keychain error handling, adds schema-level validation to thecode_grep tool, clarifies docs_read output limits, and surfaces documentation crawl coverage warnings on unified search.Improved
- Clearer
code_grepcontext limits. Thecontext_lines,context_lines_before, andcontext_lines_afterparameters oncode_grepare now validated at the MCP schema level (integer, 0–100), so agents catch out-of-range values before the call is made. Each field also documents that_before/_afteroverride the sharedcontext_linesfor their side. - Precise
docs_readtext output description. Thedocs_readtool description and parameter hints now spell out the text-mode behavior explicitly: text output is capped at 150 lines per call (including explicit larger ranges), the response reports the returned range plustotalLinesfor follow-up slices, and JSON output remains uncapped whenend_lineis omitted. - Partial documentation coverage is surfaced on
search. When a hosted documentation site is still being crawled or its crawl was capped, unifiedsearchresponses now include per-source coverage state (pages crawled, frontier remaining, and a human-readable note) so agents can decide whether to retry, widen the query, or proceed with the partial hits instead of assuming full coverage.
Fixed
- Keychain access failures no longer look like a missing login. The migrating auth storage layer now distinguishes a missing credential from an unreachable system keychain. In keychain mode, a locked or otherwise unavailable keychain surfaces a clear storage error (with guidance to unlock the keychain, set
GITHITS_API_TOKEN, or opt intoauth.storage = "file") instead of silently returning “unauthenticated” or falling back to plaintext files. See authentication for the full storage model.
Week of July 27 – July 28
Release 0.6.5 restores silent automatic refresh of expired local logins, so long-running CLI and MCP sessions no longer see strayAUTH_REQUIRED prompts when a valid refresh token is on disk.Fixed
- Expired access tokens refresh silently again. Once an access token expired, authenticated
githitsCLI and MCP calls could incorrectly raise anAUTH_REQUIREDprompt even with a valid refresh token stored. Normal expiry is noninteractive again — the token is refreshed in the background and the call proceeds. - Transient refresh failures preserve stored credentials. Transport, timeout, and 5xx failures during token refresh no longer surface as a missing-token error. The recoverable failure is reported to the caller, the refresh token stays on disk, and later calls retry the refresh automatically. See authentication for the full recovery model.
- Missing OAuth client registration is reported explicitly. If tokens exist but the companion dynamic OAuth client registration is missing or unreadable, authenticated calls return a clear re-login error instead of the generic missing-token message.
Week of July 20 – July 24
A small maintenance week:githits init picks up the same SSH-friendly callback options that githits login already exposes, so guided setup works cleanly on remote and headless machines. Runtime and workflow dependencies also got a routine refresh.Fixed
githits initsupports--no-browserand--port. You can now run guided setup on a remote host or SSH session and either print the sign-in URL as a fallback or forward the callback over an SSH tunnel — for examplessh -N -L 8765:127.0.0.1:8765 user@remote-hostalongsidenpx githits@latest init --port 8765. See theinitcommand reference for the full flag list.
Week of July 13 – July 17
Releases 0.6.3 and 0.6.4 shipped this week, bringing structured rate-limit and timeout errors across thegithits CLI and MCP tools, marketplace-ready MCP tool annotations with a compact-by-default output format, and tighter credential persistence when refreshes hit transient failures.New
Marketplace-ready MCP tool annotations Every public MCP tool now declares explicitreadOnlyHint, openWorldHint, and destructiveHint annotations, so MCP-aware clients and marketplaces (including the OpenAI marketplace) can classify what each tool does before calling it. Read-only tools like docs_read, pkg_info, pkg_vulns, pkg_deps, pkg_changelog, and pkg_upgrade_review are marked as such; tools that may enqueue private indexing or crawl work (like search, code_files, code_read, code_grep, and docs_list) are explicit about the bounded, non-destructive nature of those writes.Compact text-v1 is now the default MCP output format
Format-selectable MCP tools now default to text-v1 and advertise it as the first format option. Agents get concise, markdown-shaped responses out of the box instead of the full JSON envelope, cutting context usage on code_read, code_grep, docs_read, pkg_changelog, and pkg_deps. JSON stays available as an opt-in for scripting.Improved
Structured rate-limit and timeout errors across CLI and MCP API rate-limit (429) and request-timeout responses are now classified consistently across the githits example command, code navigation, documentation access, and package inspection. JSON output preserves standard retry metadata (details.retryAfterSeconds, details.timeoutMs) with retryable: true; terminal output surfaces the same information in plain language, for example Request limit reached. Try again in 17 seconds. The client returns the error immediately instead of silently retrying, and public messages stay provider-neutral.Longer client deadline for githits example
Example generation now uses a longer client-side deadline than shorter metadata operations, so complex example requests can complete without spurious timeouts. Explicit timeout overrides are honored for tests and embedding clients, and hosted transports can reserve time for their outer response boundaries. The CLI default stays at four minutes.Fixed
- Transient auth failures no longer clear your refresh credentials. Transport, timeout, and 5xx failures during token refresh now retain the stored refresh token and retry on the next call. Only classified terminal failures (revoked sessions, refresh-token reuse, invalid client) clear credentials — see authentication for details.
- Auth files preserve tightened permissions. On POSIX, new and rewritten
auth.json,client.json,metadata.json, anddiagnostics.jsonare capped at0600; existing more-restrictive modes (like0400) are preserved instead of being loosened. - Ambiguous legacy plaintext credentials are reconciled safely. File-mode auth loads now run under the auth lock when migration is needed: the newest valid timestamp wins, canonical copies are re-persisted, and legacy copies are cleared. Ambiguous ties between legacy stores are left intact with a warning instead of guessing.
Week of July 6 – July 10
A batch of network and reliability fixes landed onmain this week: githits now honors standard HTTP proxy environment variables across every CLI-originated call, local auth commands no longer trip over a malformed proxy setting, and missing GitHub repositories in code navigation get a clean “not found” instead of a generic error.New
HTTP proxy support across the CLI Thegithits CLI now honors HTTP_PROXY, HTTPS_PROXY, and NO_PROXY (and their lowercase aliases) for every CLI-originated request — OAuth discovery, sign-in, token refresh, REST API calls, code and package service calls, local MCP tool calls started through githits mcp start, and npm update checks. Lowercase values win when both cases are set, matching standard proxy precedence. NO_PROXY bypass and credential redaction in error messages both work out of the box, so you can now run GitHits from behind a corporate proxy without extra configuration. The Node.js floor moves to ^20.18.1 || >=22.13.0 as part of this change.Fixed
githits auth statusandgithits logoutno longer fail on malformed proxy env. Proxy validation is now deferred until the first network call, so local-only auth paths (checking status, logging out) run cleanly even whenHTTP_PROXYis set to an unparseable value.- Missing GitHub repositories now return
NOT_FOUNDfrom code navigation. A backendREPOSITORY_NOT_FOUNDused to surface as a generic error; it’s now classified as a clean, non-retryableNOT_FOUND, withrepoUrlandrequestedRefechoed in the error details so agents can give a specific “that repo doesn’t exist” message instead of guessing.
Week of July 6, 2026
Release 0.6.2 shipped this week, adding a scripting-friendlygithits auth token command, publishing GitHits to the official MCP registry as com.githits/githits, and polishing the githits login URL fallback plus the packaged GitHits MCP skill copy.New
githits auth token for scripting and CI
A new githits auth token command prints the current bearer token to stdout — no labels, prompts, or extra whitespace — so you can pipe it directly to other tools or use it in command substitution. Resolution matches the rest of the CLI: if GITHITS_API_TOKEN is set it wins, otherwise the stored OAuth access token is printed, refreshing it against the saved client first if it’s expired. When no credentials are available the command exits non-zero instead of triggering an interactive login, so CI runs fail fast with a clear signal.com.githits/githits, giving MCP-aware clients a canonical discovery and installation path in addition to the existing npx githits@latest init flow. The registry entry is published automatically from the release pipeline, so it stays in lockstep with each new CLI release.Improved
Visible sign-in URL fallback duringgithits login
githits login now always prints the browser sign-in URL as a visible fallback during normal runs, not just under --no-browser. If the browser launch is hidden (for example inside a wrapper terminal) or fails silently, you’ll still see the URL and can open it yourself without rerunning the command.Tightened GitHits MCP skill guidance
The packaged githits-mcp skill installed by guided githits init picks up small copy tweaks — clearer framing that GitHits covers public OSS and package evidence, and less prescriptive advice about unrelated local tools — so agents get a calmer, more accurate description of when to reach for GitHits.Week of June 29 – July 3
Release 0.6.0 shipped this week, making guided GitHits MCP setup the recommendedgithits init path, adding a packaged githits-mcp skill and short managed instruction block that agents pick up automatically, and expanding the set of supported MCP setup targets.New
Guided GitHits MCP init is the new recommended pathgithits init now leads with Install GitHits MCP + supporting instructions (Recommended) as the top choice, with plain MCP and standalone Agent Skills kept as explicit alternatives. Guided setup installs the MCP server plus a small githits-mcp skill and a managed instruction block, so agents reliably reach for GitHits as the default OSS context layer instead of falling back to model memory or generic web search.New flags let you pick a mode non-interactively:githits init --guidance— install MCP plus the supporting skill and instruction block.githits init --no-guidance— install plain MCP only.githits init uninstall --keep-guidance— remove the MCP config but keep the skill and instruction block in place.
--yes, and staged --install-agents all default to guided MCP unless --no-guidance is passed. Reruns are idempotent: if MCP is already installed but guidance is missing, guided init installs only the missing pieces, and vice versa. Uninstall cleans up GitHits MCP config, the managed instruction block (identified by <!-- githits --> markers), and the GitHits-owned githits-mcp/SKILL.md from every target path, deleting the skill directory only if it ends up empty.Guidance is installed at both user and project scope depending on the tool — for example a project-level .claude/skills/githits-mcp/SKILL.md alongside a user-level ~/.copilot/instructions/githits.instructions.md.Packaged githits-mcp skill and managed instruction block
GitHits now ships a dedicated githits-mcp Agent Skill and a short managed instruction paragraph that guided init drops into AGENTS.md, CLAUDE.md, GEMINI.md, and equivalent per-tool instruction files. The skill tells agents to prefer GitHits for open-source discovery, planning, research, implementation, debugging, and maintenance — package docs, indexed package and repository source, examples, dependency graphs, vulnerabilities, changelogs, and upgrade-review evidence — and to route to the right tool (search, docs_*, code_*, pkg_*, get_example) instead of relying on model memory. The instruction block stays intentionally one paragraph; the skill carries the detailed behavior, so agent context stays lean.Expanded MCP setup targets
Guided and plain githits init now configure MCP for a wider set of current, docs-backed clients:- Zed —
context_serversin~/.config/zed/settings.json(user) or.zed/settings.json(project). - Junie —
mcpServersin~/.junie/mcp/mcp.jsonor.junie/mcp/mcp.json. - Qwen Code —
mcpServersin~/.qwen/settings.jsonor.qwen/settings.json. - Kiro —
mcpServersin~/.kiro/settings/mcp.jsonor.kiro/settings/mcp.json. - Kilo Code —
mcpin~/.config/kilo/kilo.jsoncor.kilo/kilo.jsonc, using the local command shape. - Factory Droid —
mcpServersin~/.factory/mcp.jsonor.factory/mcp.json. - Amazon Q CLI — command-driven user install via detected
q mcp/qchat mcp; no direct file editing.
--install-agents --json flows as existing tools.Fixed
- Headless-friendly
githits initsign-in. Release 0.6.1 adds a--no-browserflag togithits initthat prints the sign-in URL instead of trying to open a browser, so SSH sessions, containers, and other display-less environments can complete guided setup without a remote browser popping up. Behaves the same asgithits login --no-browser.
Week of June 22 – June 26
Releases 0.5.1, 0.5.2, and 0.5.3 shipped this week, focused on a canonical syntax for GitHub repository targets, sharper “did you mean” guidance when a ref doesn’t exist, and a leaner aggregate path forpkg_upgrade_review.New
Canonicalgithub:owner/repo#ref target syntax
Code navigation, search, and documentation access now accept GitHub repository targets in a canonical github:owner/repo#ref form, plus full https://github.com/owner/repo URLs. The #ref form makes refs that contain @ (for example n8n@2.26.5) unambiguous, and CLI and MCP follow-ups now echo the same canonical label everywhere. Malformed GitHub URLs are rejected up front instead of being passed through.Aggregate pkg_upgrade_review with transitive truncation metadata
pkg_upgrade_review now uses a single aggregate backend query instead of fanning out per package, so reviews are faster and JSON/text output stays in lockstep. Public JSON also gains *TotalCount and *Truncated fields on transitive vulnerability detail pages, so agents can tell when a list was cut off and decide whether to ask for more.Improved
Cleanergithits init status rows
githits init now shows the read-only probe command (for example checked via claude plugin list) on rows that didn’t change, prints install or uninstall commands only when they actually ran, and aligns multi-command continuation rows to the detail column. Composite rows that pair a CLI check with a config-file write are preserved.Leaner package metadata payloads
Package summary, dependency, and changelog backend calls now request only the fields each output mode actually uses — compact text and --omit-bodies skip verbose fields, while JSON and verbose modes keep everything. You should see faster responses for the common pkg info, pkg deps, and pkg changelog paths with no change in what’s rendered.“Did you mean” suggestions for unknown repository refs
When code navigation hits a REF_NOT_FOUND for a GitHub target, the error now includes the backend’s suggestedRefs (a short “did you mean” list) separately from availableRefs (indexed refs you can retry against). CLI and MCP error details surface both, and the inline hint only appends a suggestion when the backend message doesn’t already include one — no more duplicated suggestions in the same error.Indexing wait estimates in error messages
Code navigation responses for repos that are still being indexed now include a compact estimate of how long indexing should take, alongside structured indexingEstimate fields in the error details. You’ll know whether to wait a few seconds or come back later.Week of June 15 – June 19
Releases 0.4.14 and 0.4.15 shipped this week, focused on a much clearerinit install/uninstall experience, stricter package target syntax, and a wave of auth hardening for users running multiple agents in parallel.New
Per-tool change rows ingithits init
githits init now reports exactly what changed for every detected tool — created, updated, unchanged, or ran — alongside the config path or command it touched, instead of a generic success line. Already-configured tools are included in the audit so you can see at a glance what your setup looks like, and --install-agents --json includes structured changes for scripting.Unified init uninstall UX
githits init uninstall now uses the same selection model as install: configured tools are pre-checked, deselecting one keeps it, and --yes removes from all configured tools. Per-tool result rows use the same aligned renderer as install, so install and uninstall finally read the same way.Auth-clear breadcrumb in githits doctor
githits doctor now surfaces the last auth-clear event (reason + timestamp) when your token went missing — for example after a refresh-token reuse, a rejected client registration, or an explicit logout. When the active token is missing, doctor also prints a cause-specific recommendation so you know what to do next. No secrets are stored.Improved
Explicit package registries in target specs Package targets acrosssearch, code navigation, documentation access, and package inspection now require an explicit registry prefix — for example npm:express instead of a bare express. GitHub repository shorthands github:owner/repo and github.com/owner/repo are normalized. Errors for mixed package/repo targets, CLI help, and MCP tool descriptions were rewritten to match.Cleaner login and logout output
githits login and githits logout output is now concise — no token-lifetime or environment details, no implementation-oriented progress lines. Just what happened.Dedicated message for missing git refs
Code navigation tools now classify backend REF_NOT_FOUND responses separately and show repo/ref-specific guidance instead of generic path-narrowing or “try code_files” hints. You’ll know immediately when a branch, tag, or commit doesn’t exist.Windows launcher detection in doctor
githits doctor’s PATH lookup now checks PATHEXT launchers like githits.cmd on Windows, so doctor correctly reports the CLI as installed instead of missing.Fixed
- Refresh-token reuse races between concurrent agents. The auth refresh lock is now keyed to the credential scope (per-user) instead of the active config directory, so two local agents sharing the same keychain credential no longer both submit the same single-use refresh token and trigger a server-side family revocation. Terminal
invalid_clientand refresh-reuse failures also clear stale state immediately so the next login starts clean. - Cross-class credential tug-of-war. Keychain and file-mode auth storage are now isolated for both reads and writes — agents running in different storage modes can no longer steal and delete each other’s tokens. Switching
auth.storagebetween modes now requires an explicitgithits login. - Automatic auth clears stay scoped to the active backend. A stale credential in an inactive backend (for example a leftover keychain token) can no longer wipe the good credential in the mode you actually run. Explicit
githits logoutstill clears every backend. - Auth lock acquisition retries on write races. Concurrent token refreshes no longer fail with
ENOENTwhen another contender removes the lock directory between create and owner-file write.
Week of June 8 – June 12
New
GitHits onboarding skill A newgithits-onboarding skill walks coding agents through a safe, staged GitHits setup — detecting supported tools, asking before writing any config, installing the ones you pick, guiding you through login, and verifying the result. It ships as a public skill and as part of the Claude Code plugin. Install GitHits Skills and your agent can run setup for you instead of you wiring init flags by hand.Improved
More resilientgithits init on slow machines
Agent detection and config probes in githits init now run with bounded timeouts (2–5s) so a stuck binary lookup or hung config check fails fast instead of stalling onboarding. Set GITHITS_INIT_TRACE=1 to print step-by-step diagnostics on stderr when you need to debug a detection issue — JSON output on stdout is unaffected and stays machine-parseable.Week of June 1 – June 5
New
OpenCode support ingithits init
githits init now detects and configures OpenCode alongside the other supported AI coding tools, with a higher generated MCP timeout tuned for OpenCode’s session flow.Safer MCP package tool inputs
Package inspection tools picked up cleaner, agent-safer schemas: pkg_deps now takes max_depth, pkg_changelog takes omit_bodies, and pkg_upgrade_review takes skip_transitive_security. Defaults are no longer silently coupled to other options, so agents get more predictable behavior on every call.Improved
Better language search resultsgithits languages and the search_language MCP tool now route queries through the backend’s ranked /languages endpoint instead of local filtering. Short aliases like ts, py, js, c++, and c# now surface the right language first.Clearer authentication errors
Auth failures now distinguish missing local credentials from backend-rejected tokens, both in CLI JSON output and MCP error envelopes. Remediation guidance points you to the right next step — OAuth login, GITHITS_API_TOKEN, or support — instead of a generic “not authenticated” message.Normalized empty MCP search filters
The search tool no longer fails with INVALID_ARGUMENT when an agent passes empty docs-only filter fields. Blank filters are treated as absent, matching how other MCP inputs behave.Fixed
- Concurrent agents no longer invalidate each other’s auth tokens. Token refresh is now serialized across CLI and MCP processes sharing the same credentials, so running multiple agents in parallel won’t spend a single-use refresh token twice and log you out.
Week of May 25 – May 29
New
Project-levelgithits init
githits init now supports installing GitHits MCP configuration at the project level, alongside the existing user-level setup. Project mode covers detect, install, and uninstall flows for supported agents — including a new VS Code stdio config — so you can scope GitHits to a single repo without touching your global agent setup.githits doctor diagnostics command
A new githits doctor command prints a redacted snapshot of your runtime, environment, config path, service override, and auth file state. Text and --json output are both supported, and probes are read-only so running it never triggers auth migration or token refreshes. Use it first when filing an issue.Swift package support
Swift is now a first-class registry across search, code navigation, documentation access, and package inspection. Vulnerability and dependency lookups, v-prefixed versions, and GitHub-shaped package coordinates all work for Swift packages out of the box.Improved
Simpler search source selection Thesearch tool and githits search --source now take a single source value instead of a list. Descriptions for target and source were also rewritten to be clearer for agents. Passing --source more than once is now rejected explicitly instead of silently picking one.Request timeouts everywhere
REST, OAuth, and package metadata GraphQL calls now share a fetch timeout wrapper with timeout-specific error classification, so stalled requests fail fast with a clear reason instead of hanging.Structured auth failures
Missing-auth failures from authenticated commands now return a consistent JSON envelope (AUTH_REQUIRED), while terminal sessions still see the friendly login guidance. Easier to handle from scripts and agents.Fixed
- Empty optional MCP fields no longer break tool calls.
pkg_upgrade_review,searchtargets,pkg_changelogaddressing, andcode_*targets now treat harness-filled empty arrays and blank strings as absent instead of failing validation. - Token refresh races hardened. Concurrent refresh attempts coalesce correctly across soft and forced refreshes, rotated refresh tokens are preserved on same-lineage conflicts, and newer external sessions/logouts still take precedence.
- Windows
initno longer triggers Node DEP0190. Subprocess probes now run throughcmd.exewith safe argument escaping so shim resolution works without deprecation warnings.
Week of May 18 – May 22
New
Hermes Agent support ingithits init
githits init now detects Hermes Agent alongside the other supported AI coding tools and writes its MCP server configuration to ~/.hermes/HERMES_HOME while preserving existing YAML comments. Run githits init to set it up.Agent-safe staged onboarding
The init command now supports a staged, non-interactive flow for agents and CI. New flags on githits init:--detect-agents— scan for supported AI tools and exit without making changes.--install-agents <ids>— install only the agents you explicitly name. Idempotent for already-configured agents.--json— emit detection and install results as structured JSON.
--yes is rejected in non-interactive runs to prevent surprise side effects. See the headless CI guide for usage patterns.Copy-paste agent snippet on the init ready screen
After setup completes, githits init now prints a snippet you can drop directly into your AGENTS.md or CLAUDE.md so your agent knows when to reach for GitHits tools.Improved
Redesignedinit onboarding flow
Rewritten copy across every init screen (intro, detect, choose, sign-in, install, ready, uninstall) in a clearer, agent-focused voice. The CLI also picks up a new brand color, a gradient ASCII logo, highlighted --help section titles, and an animated spinner with rotating labels on example, search, code, and docs while requests are in flight.Target resolution feedback for code navigation
Code navigation tools (search, code_files, code_read, code_grep) now surface compact, actionable warnings when a target needs freshness or indexing attention, and stay quiet on healthy default-branch requests. Follow-up targets and default-branch intent are preserved across calls.Severity-filtered transitive upgrade advisories
pkg_upgrade_review now applies your min_severity setting to transitive vulnerability counts, so the evidence you see matches the threshold you asked for. The previous “transitive counts are unfiltered” caveat has been removed.Fixed
--no-colornow actually disables color. The flag was previously registered but never wired up. Every styled output across the CLI now respects it.githits logoutno longer reads the keychain. Logout completes cleanly without unnecessary credential prompts.- Auth is refreshed before
initlogin to avoid stale-session failures during onboarding. - Init detection messaging is clearer when no compatible agents are found, and login guidance is suppressed when an install step fails.
- Node 20 compatibility restored after a regression in the previous release.
- Stale-search warnings suppressed when the follow-up target matches the original request.