gitwand_status
List conflicted files in the current Git repo with their complexity and auto-resolvability. Returns a structured JSON report with conflict counts, types, and confidence scores.
cwdregeneratemin_confidence_score
io.github.devlint由 GitHub 账号 devlint 发布v3.12.5更新于 Nov 3, 2026
自动解决 Git 合并冲突,让代理只需处理复杂的冲突块。
AI 翻译由 AI 模型根据下方的原文描述翻译,可能有误。
Auto-resolves Git merge conflicts so agents only touch the complex hunks.
Gitwand 的本地 MCP 服务;无需登录;STDIO;7 个工具。
暂无 AI 概览:以下信息来自注册中心条目和服务本身。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
参照 仓库 中的启动说明。
A fast, native Git client with built-in smart conflict resolution
Desktop • Conflict engine • CLI • MCP Server • Architecture • Roadmap • Code signing
[License] [TypeScript] [Version]
---GitWand is a lightweight, native Git client built with Tauri 2 and Vue 3. It covers the full daily workflow — changes, history, branches, push/pull — and goes further with automatic resolution of trivial merge conflicts, integrated PR code review with inline comments, and a Git Tree as the primary history view. Since v1.3, AI assists every step of the workflow — branch naming, PR writing, hunk-level review, semantic squash, and natural-language commit search. v2.7+ adds multi-repo Workspaces and Worktrees; v2.8 adds Agent Sessions (MCP); v2.9 adds a cross-repo Launchpad; v2.10 brings multi-forge pull requests across GitHub, GitLab, Bitbucket and Azure DevOps; v2.13 adds inline AI code review; v2.18 overlays CI check annotations directly on the diff; v2.19 adds OAuth device-flow sign-in for GitHub and Azure DevOps (no gh CLI required) plus cross-fork pull requests. The 3.x line makes GitWand a daily driver for AI-assisted work: v3.0 turns the cross-repo dashboard into Today, a triaged action inbox, and publishes the VS Code extension on the Marketplace; v3.2 adds an integrated terminal with AI agent tabs — including one-click AI tasks in isolated worktrees — and a dockable File Explorer / Editor panel.
The Git Tree is the primary history view — a full-resolution DAG that renders the branch topology as an SVG with trunk-pinning, lane cooldowns, WIP node, and ref badges. Click any commit to see its diff; right-click to checkout, reset, branch, tag, or cherry-pick. Branches, stashes, and tags are all managed from here without a separate panel. A filter mode (v3.2) recalculates the DAG to show only matching commits, with quick branch/author toggles, date-bucket separators, branch-name autocomplete, and #<PR number> lookup that resolves straight to the PR's branch.
Staged, unstaged, untracked, and conflicted files in a sidebar with inline diffs in the main area. Stage, unstage, discard, and commit without leaving the interface. Partial staging at the line or hunk level.
Summary + description fields, optional commit signature, Ctrl+Enter shortcut. Unpushed commits can be amended directly from the Git Tree — a pencil icon appears on hover, opening an overlay pre-filled with the existing message.
Click the branch name in the header to search, switch, create, or delete branches. Merge any branch from the dedicated merge button. Each non-current branch shows a merge preview button that simulates the merge result before committing.
Before merging a branch, GitWand predicts the outcome without touching the working tree — using git merge-base, git show, and git merge-file -p --diff3. The result shows a per-file breakdown:
A badge summarises the overall result: Clean merge, 100% auto-resolvable, or N conflicts to review.
One-click push and pull with badge counters showing ahead/behind commits. Auto-fetch runs in the background every 30 seconds.
Side-by-side or inline toggle, persisted across sessions. Syntax highlighting for 30+ languages, word-level diff using LCS, collapsible unchanged regions, canvas minimap, hunk navigation (prev/next), double-column line numbers.
Full file history with git log --follow, blame view grouped by commit, time-travel diff between any two versions of a file.
The current repo name in the header opens a dropdown showing recently opened repositories. Pin favourites, switch instantly — no file picker needed. Workspaces (v2.7) group multiple repos into a single dashboard with cross-repo status, coordinated push/pull, and quick-create worktrees (⌘⇧N). Each project tab carries a worktree submenu (v3.2) listing main plus every worktree — select one to switch that project's checkout in place, no extra tab.
Today (⌘L; introduced as Launchpad in v2.9, reworked in v3.0) is a cross-repo triaged action inbox: everything in flight — WIP, PRs, Issues, Team — sorted into urgency tiers, each row carrying a state-aware primary action (Merge · Review · Resolve · Reply · See failure). Pin or snooze any item; the Team tab loads lazily for performance on large workspaces.
Browse, create, checkout, and merge pull/merge requests across GitHub, GitLab, Bitbucket and Azure DevOps without leaving the app. GitWand auto-detects the forge from the remote and routes to the right provider; accounts are managed once in Settings. The PR list sits in the sidebar and the full detail — diff, CI checks, comments, inline review — fills the main area.
gh CLI required (the CLI path still works when no token is configured)origin is a fork, open a PR straight against the upstream parent (default), and see the PRs you opened upstream listed alongside your fork's own```suggestion ``` blocks applicable in one click)git merge-tree before merging), hotspot analysis, review scope, static AI suggestions, file review historyThe Agents panel (v2.8) shows active MCP sessions and lets you launch Claude Code directly from GitWand — the agent's changes appear live in the diff viewer. The MCP catalog (Settings > MCP) lets you install any MCP server in one click.
The terminal panel (v3.2) renders through WebGL with inline search (Ctrl+F), clickable links, and typed tabs — shell, claude, codex — each with its own icon and an unread-output dot. "Launch Claude Code" / "Launch Codex" open a real PTY tab, and "New AI task" creates a scratch git worktree and opens a Claude Code tab in it in one click — the agent works in isolation, and when it's done you either merge the work back or delete the worktree from the project tab's submenu. Hardened with a shell-executable whitelist, safe_repo_path() on all filesystem operations, and PTY orphan prevention.
A dockable Files panel (v3.2, drag/resize/fullscreen) lists the full repo tree — gitignore-aware, via git ls-files — and opens files in a lazy-loaded CodeMirror 6 editor with syntax highlighting, per-tab undo history, and a lock/undo/save toolbar. Reachable from the Files tile in the AppDock, with per-repo layout settings.
Language (English, French, Spanish, Brazilian Portuguese, Simplified Chinese — OS auto-detected), theme (dark/light/system), commit signature, diff mode, external editor, Git binary path, and switch behavior (stash/ask/refuse). AI providers cover API backends (Claude / OpenAI-compatible / Ollama) and local CLI agents (Claude Code, Codex, opencode, GitHub Copilot CLI), each with its own model picker. Accounts manages forge sign-in — OAuth device flow for GitHub and Azure DevOps, App Passwords / CLI for the others. All persisted in app settings.
Download the latest build for your platform from GitHub Releases:
.dmg (Universal: Apple Silicon + Intel, Developer ID signed + Apple-notarized).AppImage or .deb.msi or .exeOn Windows, you can also install via winget:
GitWand's core engine (@gitwand/core) automatically resolves trivial Git merge conflicts. It never touches complex or ambiguous hunks.
GitWand uses a pattern registry — the classifier evaluates patterns in priority order, each declaring whether it requires diff3 (base available), diff2, or works on both.
The registry holds 12 patterns, of which 8 auto-apply. The other four either propose a resolution you confirm, are opt-in, or hand the hunk back untouched.
The confidence column is indicative: every hunk carries a computed ConfidenceScore (see below), not a fixed label. value_only_change, for instance, scores on the ratio of volatile tokens to total tokens and rejects the hunk outright below its threshold.
Not a registry pattern: generated_file is a separate reclassification pass that runs after classification. When a hunk's path matches a generated-file glob (lockfiles, bundles, dist/, plus anything in generatedFiles), the resolver rewrites it to generated_file and, by default, declines with an actionable reason rather than guessing — measured on 1,662 real merges, auto-merging generated files diverged from what teams actually shipped in almost every case. GitWand tells you to resolve the source file and re-run the installer/build instead. Opt back into the old accept-theirs/semantic-merge behavior with .gitwandrc's resolveGeneratedFiles: true or gitwand resolve --resolve-generated. generated_file appears in ConflictType but never in the classifier registry.
Every resolution carries a ConfidenceScore object rather than a simple label:
(Shape shown for a generated_file hunk with resolveGeneratedFiles: true — the default is to decline generated files rather than score and apply them; see the pattern table above.)
Score formula: score = typeClassification − dataRisk×0.4 − scopeImpact×0.15
For structured files, GitWand uses semantic resolvers before falling back to text matching:
JSON.parse/JSON.stringify. Handles nested objects, detects unresolvable scalar conflicts, strips comments in .jsonc.Create a .gitwandrc file at the project root to define resolution strategies:
Available policies: prefer-ours, prefer-theirs, prefer-safety, prefer-merge, strict.
Every classification step is logged in a DecisionTrace for auditing and debugging:
The --ci / --json flag returns a full structured report with composite confidence scores, decision traces, and pending hunks for LLM-assisted resolution:
The pendingHunks array gives AI agents and CI scripts everything they need to handle the conflicts that GitWand can't auto-resolve — the ours/theirs/base content, the classification trace, and the confidence breakdown.
GitWand ships an MCP (Model Context Protocol) server that exposes its conflict resolution engine to AI agents — Claude Code, Claude Desktop, Cursor, Windsurf, and any MCP-compatible client.
Add this to your MCP client configuration (e.g. claude_desktop_config.json or .claude/settings.json):
The server defaults to the working directory of the client. To pin it to a specific repo, add "--cwd", "/absolute/path/to/repo" to the args array. With Claude Code, install in one line:
The MCP server enables a powerful workflow where GitWand handles the trivial conflicts automatically and the LLM tackles the complex ones:
gitwand_preview_merge — sees how many conflicts exist and how many GitWand can handlegitwand_resolve_conflicts — GitWand auto-resolves the easy ones, returns pendingHunks for the restpendingHunks — each one contains ours/theirs/base content and a full decision tracegitwand_apply_resolution for each pending hunk — writes its resolution directlyGitWand also ships .claude/commands/ for Claude Code:
The core engine is framework-agnostic and usable as a library:
Baseline results on Apple M-series:
GitWand uses a zero-dependency type-safe i18n system across five languages — English (en, default), French (fr), Spanish (es), Brazilian Portuguese (pt-BR), and Simplified Chinese (zh-CN). en.ts is the canonical reference, defined with as const; the Locale and LocaleKey types are derived from it, so every other locale must match its structure — TypeScript enforces it. The useI18n() composable provides t(key, ...args) with dotted key resolution and positional interpolation. OS language is auto-detected; users can override in Settings.
See ROADMAP.md for the full phased plan — upcoming features, competitive analysis, and shipped version history.
Windows builds of GitWand are code-signed. Free code signing provided by SignPath.io, certificate by SignPath Foundation.
This program will not transfer any information to other networked systems unless specifically requested by the user.
MIT — Laurent Guitton
来源:README.md,提交 52cd52d
List conflicted files in the current Git repo with their complexity and auto-resolvability. Returns a structured JSON report with conflict counts, types, and confidence scores.
cwdregeneratemin_confidence_scoreAuto-resolve trivial Git merge conflicts using GitWand's pattern-based engine. Returns resolved files, DecisionTrace for each hunk, and pendingHunks for conflicts that need human/LLM review. Writes resolved files to disk unless dry_run is true.
cwdfilespolicydry_runregeneratemin_confidence_scoreSide-effect-free Conflict Predictor. Simulates a merge, rebase, or cherry-pick and reports how many conflicts GitWand can auto-resolve vs. how many need manual/LLM attention, plus an overall risk level (low/medium/high). Does NOT modify the working tree, index, or HEAD. - operation 'merge' (default): analyzes conflicts already materialized in the working tree (files with conflict markers). - operation 'rebase': simulates rebasing HEAD onto `onto` (3-way against merge-base(HEAD, onto); HEAD's work is replayed on top of `onto`). - operation 'cherry-pick': simulates cherry-picking `commit` onto HEAD (3-way with `commit^` as ancestor, HEAD as ours, `commit` as theirs).
cwdontocommitoperationregeneratemin_confidence_scoreExplain why a specific conflict hunk was classified as its type. Returns the DecisionTrace with each evaluation step and the ours/theirs/base content for context.
cwdfile必填line必填Apply a custom resolution (provided by the LLM or user) to a specific conflict hunk. Replaces the conflict markers at the given line range with the provided content. Use this for 'complex' hunks that GitWand couldn't auto-resolve.
cwdfile必填line必填content必填Ask the connected AI agent (the caller of this MCP server) to propose a resolution for a single Git merge conflict hunk. Returns a fully-formed prompt with the base/ours/theirs versions and asks the agent to reply with a JSON object { "resolution": "<merged code>", "reasoning": "<short explanation>" }. This tool does NOT call any external LLM — the agent that called the tool IS the LLM. Use it when GitWand (desktop/cli) wants to delegate the resolution of a `complex` hunk to the agent driving the session, instead of calling Anthropic/OpenAI directly. Pair the agent's answer with `gitwand_apply_resolution` to write it to disk.
base必填ours必填theirs必填contextfilePath必填languageValidate and apply an LLM-proposed resolution for a specific conflict hunk. Reads the hunk at the given file+line, replaces it with the proposed resolution, validates the result (no residual markers, syntax check for JSON/YAML), and writes the file if the validation score meets the threshold. Returns the full audit trail (validation score, accepted/rejected, reason). Workflow: (1) call gitwand_status or gitwand_explain_hunk to see pending complex hunks, (2) propose a resolution, (3) call this tool to validate + apply it.
cwdfile必填line必填dry_runmin_scoreresolution必填已满足适用检查项的 90%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
winget install Devlint.GitWandgit clone https://github.com/devlint/GitWand.gitcd GitWandpnpm install
# Browser dev mode — no Rust neededcd apps/desktop && pnpm dev:web
# Tauri desktop mode — requires Rust toolchain# Install Rust: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | shsource "$HOME/.cargo/env"
# Desktop Dev Build (In the apps/desktop/ folder)pnpm --filter desktop tauri dev
# On linux you may have to runWEBKIT_DISABLE_COMPOSITING_MODE=1 pnpm --filter desktop tauri dev{ score: 84, // 0–100 composite score label: "high", // "certain" | "high" | "medium" | "low" dimensions: { typeClassification: 90, // certainty of the detected pattern dataRisk: 20, // risk of data loss if auto-resolved scopeImpact: 10, // impact of change size }, boosters: ["Path matches generated-file pattern: lockfile"], penalties: ["Content will be regenerated — theirs assumed more recent"],}{ "policy": "prefer-merge", "patternOverrides": { "*.lock": "prefer-theirs", "src/generated/**": "prefer-theirs", "CHANGELOG.md": "prefer-ours" }}✓ src/config.ts — 3/3 resolved L12 [one_side_change] certain — Only the incoming branch modified this block. L25 [same_change] certain — Both branches made the exact same edit. L41 [value_only_change:json] high — Scalar value updated on one side (version field).# Use directly with npxnpx @gitwand/cli resolve
# Or install globallynpm install -g @gitwand/cligitwand resolve # Resolve all conflicted files in the repogitwand resolve --dry-run # Preview without writinggitwand resolve --verbose # Detailed decision tracegitwand status # Show conflict status per filegitwand resolve --ci # CI mode: JSON output + semantic exit codes{ "version": "0.1.0", "timestamp": "2026-04-14T12:00:00.000Z", "summary": { "files": 2, "totalConflicts": 5, "autoResolved": 4, "remaining": 1, "allResolved": false }, "files": [ { "path": "src/config.ts", "totalConflicts": 3, "autoResolved": 3, "remaining": 0, "validation": { "isValid": true, "hasResidualMarkers": false, "syntaxError": null }, "resolutions": [ { "line": 15, "type": "one_side_change", "resolved": true, "explanation": "Only one side modified this block", "confidence": { "score": 95, "label": "certain", "typeClassification": 100, "dataRisk": 5, "scopeImpact": 10 }, "trace": { "selected": "theirs", "hasBase": true, "summary": "One-side change detected — incoming accepted.", "steps": ["..."] } } ], "pendingHunks": [] } ]}{ "mcpServers": { "gitwand": { "command": "npx", "args": ["-y", "@gitwand/mcp"] } }}claude mcp add gitwand -- npx -y @gitwand/mcp/resolve # Full conflict resolution workflow/preview # Merge preview and risk assessmentgitwand/├── packages/│ ├── core/ @gitwand/core — Resolution engine (TypeScript, browser-safe)│ │ parser, resolver, classifier, format resolvers,│ │ confidence scoring, tree-sitter structural dispatch│ ├── cli/ @gitwand/cli — Command-line interface│ ├── mcp/ @gitwand/mcp — MCP server (stdio transport)│ │ tools (7), resources (3), Claude Code commands│ └── vscode/ VS Code extension — CodeLens, diagnostics, status bar├── apps/│ └── desktop/ Tauri 2 + Vue 3 desktop app│ src-tauri/ Rust backend (git commands, IPC, libgit2)│ src/ Vue frontend (stores, composables, panels)└── .claude/ └── commands/ Claude Code slash commands (/resolve, /preview)import { resolve } from "@gitwand/core";
const result = resolve(conflictedContent, "src/app.ts");console.log(`${result.stats.autoResolved}/${result.stats.totalConflicts} resolved`);
// With optionsconst result = resolve(content, "package.json", { policy: "prefer-merge", minConfidence: "medium", patternOverrides: { "*.lock": "prefer-theirs" },});git clone https://github.com/devlint/GitWand.gitcd GitWandpnpm installpnpm build # Build all packagespnpm test # Tests across all workspacescd packages/corepnpm test:bench # vitest bench — ops/s per fixture size