Skip to main content

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 Discovery search 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_read and code_grep now return FILE_PATH_EXCLUDED for excluded files and SOURCE_FILE_INVENTORY_UNKNOWN when the index cannot verify a path, with actionable path and resolution details, instead of a generic NOT_FOUND. See code navigation.
  • Waited searches no longer suggest an older ref. After a waited search or 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_ARGUMENT errors from shared code-read and grep request builders name CLI commands, positionals, and flags for the githits CLI 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, making githits 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-side INVALID_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_FOUND responses from code_read and code_grep now name code_files, code_grep, and code_read (or their githits code … CLI equivalents) in path-discovery guidance. Extensionless exact files use their containing directory for the follow-up listing, and generic NOT_FOUND errors 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 canonical githits 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 new githits 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 for search 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 login no longer blocks waiting for the temporary callback server to shut down. See authentication for the full flow.
  • githits init sandbox and --no-browser logins 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 the init command reference for --no-browser and --port.
  • undici security patches. The bundled HTTP client was upgraded to undici 7.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 at https://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 init installs 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 githits CLI 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 the code_grep tool, clarifies docs_read output limits, and surfaces documentation crawl coverage warnings on unified search.

Improved

  • Clearer code_grep context limits. The context_lines, context_lines_before, and context_lines_after parameters on code_grep are 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 / _after override the shared context_lines for their side.
  • Precise docs_read text output description. The docs_read tool 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 plus totalLines for follow-up slices, and JSON output remains uncapped when end_line is omitted.
  • Partial documentation coverage is surfaced on search. When a hosted documentation site is still being crawled or its crawl was capped, unified search responses 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 into auth.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 stray AUTH_REQUIRED prompts when a valid refresh token is on disk.

Fixed

  • Expired access tokens refresh silently again. Once an access token expired, authenticated githits CLI and MCP calls could incorrectly raise an AUTH_REQUIRED prompt 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 init supports --no-browser and --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 example ssh -N -L 8765:127.0.0.1:8765 user@remote-host alongside npx githits@latest init --port 8765. See the init command 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 the githits 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 explicit readOnlyHint, 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, and diagnostics.json are capped at 0600; existing more-restrictive modes (like 0400) 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 on main 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 The githits 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 status and githits logout no 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 when HTTP_PROXY is set to an unparseable value.
  • Missing GitHub repositories now return NOT_FOUND from code navigation. A backend REPOSITORY_NOT_FOUND used to surface as a generic error; it’s now classified as a clean, non-retryable NOT_FOUND, with repoUrl and requestedRef echoed 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-friendly githits 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.
Published to the official MCP registry GitHits is now listed in the official MCP registry as 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 during githits 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 recommended githits 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 path githits 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.
Interactive setup, --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:
  • Zedcontext_servers in ~/.config/zed/settings.json (user) or .zed/settings.json (project).
  • JuniemcpServers in ~/.junie/mcp/mcp.json or .junie/mcp/mcp.json.
  • Qwen CodemcpServers in ~/.qwen/settings.json or .qwen/settings.json.
  • KiromcpServers in ~/.kiro/settings/mcp.json or .kiro/settings/mcp.json.
  • Kilo Codemcp in ~/.config/kilo/kilo.jsonc or .kilo/kilo.jsonc, using the local command shape.
  • Factory DroidmcpServers in ~/.factory/mcp.json or .factory/mcp.json.
  • Amazon Q CLI — command-driven user install via detected q mcp / qchat mcp; no direct file editing.
Each target participates in the same install, uninstall, rerun, and --install-agents --json flows as existing tools.

Fixed

  • Headless-friendly githits init sign-in. Release 0.6.1 adds a --no-browser flag to githits init that 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 as githits 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 for pkg_upgrade_review.

New

Canonical github: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

Cleaner githits 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 clearer init 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 in githits 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 across search, 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_client and 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.storage between modes now requires an explicit githits 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 logout still clears every backend.
  • Auth lock acquisition retries on write races. Concurrent token refreshes no longer fail with ENOENT when another contender removes the lock directory between create and owner-file write.

Week of June 8 – June 12

New

GitHits onboarding skill A new githits-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 resilient githits 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 in githits 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 results githits 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-level githits 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 The search 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, search targets, pkg_changelog addressing, and code_* 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 init no longer triggers Node DEP0190. Subprocess probes now run through cmd.exe with safe argument escaping so shim resolution works without deprecation warnings.

Week of May 18 – May 22

New

Hermes Agent support in githits 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

Redesigned init 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-color now actually disables color. The flag was previously registered but never wired up. Every styled output across the CLI now respects it.
  • githits logout no longer reads the keychain. Logout completes cleanly without unnecessary credential prompts.
  • Auth is refreshed before init login 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.