neuron-explorer
Qwen3.5‑4B 전용 조향형 뉴런 탐색기, 모든 MLP 뉴런을 밀어 결과를 보관·탐색
GitLocal은 AI 에이전트가 만든 코드를 로컬에서 GitHub처럼 확인·읽기·변경 검토·터미널로 전달할 수 있는 뷰어입니다
GitLocal is a local, GitHub-style viewer for the code your AI agent wrote. Browse, read Markdown, review changes, and hand off to your terminal, without opening a full IDE.
개발 도구TypeScript · ShellGitHub @ehud-am온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
A GitHub-like local viewer for the AI coding era — browse code, read Markdown, review changes, and preview PDF, SVG, CSV, Excel, and PowerPoint files, with an integrated terminal and no full IDE.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A GitHub-like local viewer for the AI coding era — browse, read, and review the code your agents wrote, without opening a full IDE.
Website: gitlocal.dev — screenshots, feature overview, and one-line install.
Community: got an idea, a question, or a rough edge? Start a discussion or open an issue. GitLocal is built in the open, and your input shapes it.README 전문 보기 ↗Website: gitlocal.dev — screenshots, feature overview, and one-line install.
Community: got an idea, a question, or a rough edge? Start a discussion or open an issue. GitLocal is built in the open, and your input shapes it.
When AI agents do most of the code generation, direct hand-editing of source files becomes the exception rather than the default. A full IDE can be overkill for that. GitLocal focuses on the work humans still need to do constantly: browse the codebase, understand structure, read Markdown documents clearly, inspect changes, and make small edits when needed. Editing remains possible, but the product is optimized first for navigation, reading, review, and lightweight intervention — plus an integrated terminal for when you need to hand something back to an agent.
Everything runs locally, there are no accounts or telemetry, and any clone, fetch, pull, or push action goes through your installed git only when you choose it.
| Dependency | npm package | macOS app |
|---|---|---|
| Node.js | 22+ | Bundled in the app |
| git | 2.22+ | 2.22+ |
Choose the npm package for any OS, or the native macOS app if you'd rather skip the terminal. Both run the same GitLocal server and React viewer — the Mac app is a native wrapper around the same code, not a separate fork.
| Option | Best for | What you get | Tradeoff |
|---|---|---|---|
| npm package | macOS, Windows, and Linux users who are comfortable with a terminal | One-command install, opens in your browser, mature distribution | The terminal process must stay open while GitLocal is running |
| macOS app beta | Mac users who want GitLocal to behave like an app | Homebrew install, opens as GitLocal.app, no terminal needed after install | Unsigned beta app — one extra command is required or macOS Gatekeeper blocks it from opening |
npm install -g gitlocal
Open a folder or repository:
gitlocal .
GitLocal starts a local server, opens your default browser, and prints the local URL:
gitlocal listening on http://localhost:54321
Keep that terminal window open while you use GitLocal. Press Ctrl+C when you want to stop it.
You can also run GitLocal without installing it globally:
npx gitlocal
Install with Homebrew:
brew tap ehud-am/gitlocal
brew install --cask gitlocal
Then open GitLocal.app from your Applications folder.
The macOS app starts the same local GitLocal service in the background for the app session, shows the viewer in an embedded WebKit window, and stops the service when the app quits. You do not need to keep a terminal open.
On first launch, the app asks before setting GitLocal as the default Markdown reader. If you accept, double-clicking .md and .markdown files in Finder opens GitLocal, activates the file's local folder or repository, and selects the Markdown file in the preview. If you decline, GitLocal leaves your current Markdown default unchanged. You can also choose GitLocal > Set as Default Markdown Reader later from the macOS app menu.
Unsigned beta notice: the current Mac app is not signed or notarized with an Apple Developer ID. Without the command below, macOS Gatekeeper blocks it from opening at all — this isn't just a dismissible warning. After installing, run:
xattr -dr com.apple.quarantine /Applications/GitLocal.app
Then open GitLocal.app normally. Future signed releases should remove this extra step.
Upgrade the app:
brew update
brew upgrade --cask gitlocal
Uninstall the app:
brew uninstall --cask gitlocal
Use the npm package if you want the most mature and portable install path, especially on Windows or Linux.
Use the macOS app beta if you are on a Mac and want a normal app experience without a running terminal. It is aligned with the npm version, but the one-time xattr step above is required until the app is signed and notarized.
.xlsx/.xls), PowerPoint (.pptx), and HTML viewers alongside Markdown, JSON, and images — files GitHub's web UI often can't render inline and falls back to a raw download for.user.name, user.email, and optional SSH key settings.Ctrl+\`` shortcut (matching VS Code), with drag/keyboard-resizable size and cross-page session persistence. Every tab is a plain shell, so run claude, codex`, or anything else you like. Copy and paste with Cmd+C / Cmd+V on macOS or Ctrl+Shift+C / Ctrl+Shift+V on Windows and Linux; the terminal reconnects on its own after the computer sleeps.GitLocal supports light and dark themes. The macOS app also supports native menu and keyboard shortcuts for standard editing commands, preview-scoped Find, panel-scoped Select All, and Refresh.
GitLocal is built in the open for people working with AI coding tools, and it gets better when those people tell us what they need. You don't have to write code to take part:
help wanted and good first issue issues. Using an AI coding tool to write your change is welcome.Taking part happens on GitHub and needs a free GitHub account. GitLocal itself still has no accounts and no telemetry. See CONTRIBUTING.md for the details.
brew is not found, install Homebrew first from the official Homebrew site.brew update and retry. Do not bypass checksum verification.xattr -dr com.apple.quarantine /Applications/GitLocal.app, then launch it again.git clone https://github.com/ehud-am/gitlocal.git
cd gitlocal
npm ci
npm --prefix ui ci
npm run build
Run the built CLI from the repository root:
# Open the current repository
node dist/cli.js .
# Open a specific repository
node dist/cli.js ~/projects/my-app
# Open the folder picker
node dist/cli.js
# Terminal 1: backend with auto-restart on changes
npm run dev:server
# Terminal 2: Vite dev server for the frontend
npm run dev:ui
Use both commands together during development:
npm run dev:server starts the backend in watch modenpm run dev:ui starts the Vite frontend with hot reloadnpm test
Runs backend tests (Vitest + coverage) and frontend tests. All source files must maintain ≥90% branch coverage per file. Frontend component tests also include automated accessibility checks for key browsing surfaces.
npm run test:server
npm run build
Builds the React frontend and compiles the Node.js CLI into dist/cli.js.
On macOS with Xcode installed, build the shared GitLocal app and the native wrapper:
packaging/macos/release/package-app.sh
This runs the normal npm build, builds GitLocal.app, bundles the server/UI assets, copies the local Node runtime into the app bundle, and creates a local unsigned artifact in packaging/macos/release/artifacts/.
List the generated artifacts:
ls packaging/macos/release/artifacts/
Or open the artifact folder in Finder:
open packaging/macos/release/artifacts/
Launch the locally built app:
open native/macos/build/Build/Products/Release/GitLocal.app
Validate the local app bundle:
packaging/macos/release/test-package.sh
Validate the local Homebrew cask against the generated artifact:
packaging/macos/cask/test-install-cask.sh \
packaging/macos/cask/gitlocal.rb \
packaging/macos/release/artifacts/GitLocal-$(node -p "require('./package.json').version")-macos.zip
The local app is unsigned unless you run the signing/notarization release flow. It is intended for development validation, not public distribution.
npm run verify
Runs tests, builds, and dependency audits for both the root package and the UI package.
GitLocal is a Node.js CLI that serves a React SPA:
gitlocal/
├── src/
│ ├── cli.ts — entry point: arg parsing, server start, browser/app-mode launch
│ ├── server.ts — Hono app, route registration, static serving + SPA fallback
│ ├── git/
│ │ ├── repo.ts — repo metadata, branch helpers, deferred git context, README lookup, repository-local identity, and file sync state
│ │ ├── identity-settings.ts — SSH private key path expansion, discovery, and validation
│ │ └── tree.ts — listDir (git ls-tree wrapper, sorted dirs-first)
│ ├── services/
│ │ └── repo-watch.ts — working-tree revision and sync status snapshots for the UI
│ └── handlers/
│ ├── repo.ts — /api/info, /api/readme, /api/branches, /api/commits, /api/repo/open, and git-specific repo actions
│ ├── file.ts — /api/tree and /api/file
│ ├── folder.ts — /api/folder browsing, setup, create, and delete actions
│ ├── sync.ts — /api/sync
│ └── search.ts — /api/search
└── ui/src/
├── App.tsx — layout, repo sync polling, deferred git context, dialogs, README auto-load, picker mode
├── components/
│ ├── FileTree/ — lazy expand/collapse tree
│ ├── Breadcrumb/ — path navigation
│ ├── ContentPanel/ — Markdown, code, image, binary rendering, and local file editing
│ ├── ContentTabs/ — file tab strip above the content panel
│ ├── RepoContext/ — branch switcher, sync summary, repo metadata, and identity editing
│ └── Picker/ — PickerPage table browser with setup actions
└── services/api.ts — typed fetch wrappers for all endpoints
Optional macOS native app distribution:
native/macos/ — Swift/AppKit/WebKit wrapper for GitLocal.app
packaging/macos/ — Homebrew cask, package, checksum, and release helpers
Key design decisions:
git binary via child_process.spawnSyncnpm; macOS app packaging adds scoped Swift and shell/Ruby release helpers outside the npm packageHashRouter means the server only needs to serve index.html for all non-asset routesAll endpoints are served under /api/:
| Endpoint | Description |
|---|---|
GET /api/info | Active root metadata (name, branch, isGitRepo, pickerMode) |
GET /api/git/context | Deferred git identity and selected remote context for the active repository |
GET /api/readme | Detects and returns the README filename for the current repo |
GET /api/branches | List of branches with isCurrent flag |
POST /api/branches/switch | Switch branches with dirty-tree confirmation flows |
POST /api/git/commit | Compatibility route for creating a local commit; not exposed in the current repository UI |
POST /api/git/sync | Compatibility route for remote sync; not exposed in the current repository UI |
PUT /api/git/identity | Save repository-local user.name, user.email, and optional SSH command behavior in local git config |
GET /api/git/identity/ssh-keys | List valid SSH private keys from the user's conventional SSH folder |
POST /api/git/identity/ssh-key/validate | Validate an arbitrary SSH private key path before saving it |
GET /api/tree?path=&branch= | Directory listing (dirs first, alphabetical) |
GET /api/file?path=&branch= | File content with type and language detection |
GET /api/repo/summary?branch= | Plain-language repository status, key documents, and local/generated visibility context |
GET /api/repo/changes?branch=&includeGeneratedLocal= | Changed-file review items with status, availability, and local/generated labels |
GET /api/repo/navigation-hints?branch=&includeRecent=&includeGeneratedLocal= | Key documents and navigation shortcuts for the root dashboard |
GET /api/search?query=&branch=&mode=&caseSensitive=&rootPath=&contentKinds=&trackedMode=&limit=&cursor= | Scoped repository search across file names, contents, Markdown, current folder, and generated/local modes |
POST /api/file | Create a new file in the current folder root or repository working tree |
MIT — see LICENSE.
Ideas, questions, bug reports, and pull requests are all welcome. See Help Shape GitLocal for where to start, and CONTRIBUTING.md for how to make a code change. Please follow the Code of Conduct, and report security problems privately per SECURITY.md. Code changes follow the GitLocal constitution, including ≥90% branch coverage per file, which CI checks for you.
git; there are no accounts or telemetry.PUT /api/file | Update an existing file using its revision token, returning a conflict if the file changed on disk |
DELETE /api/file | Delete an existing file using its revision token |
POST /api/folder | Create a direct child folder in the current folder root or repository working tree |
GET /api/folder/delete-preview?path= | Preview recursive folder deletion impact before confirmation |
DELETE /api/folder | Delete a subfolder after exact typed-name confirmation and preview-impact validation |
GET /api/commits?branch=&limit= | Recent commits (default 10, max 100) |
GET /api/sync?path=&branch= | Working-tree and upstream sync summary for the current path and branch |
GET /api/folder/browse?path= | Folder-picker directory listing with files, folders, and git-repo detection |
POST /api/repo/open | Open a local folder or repository root from the picker UI (body: {"path":"..."}) |
POST /api/folder/create-child | Create a child folder from the picker setup flow |
POST /api/folder/init-repository | Initialize git in the selected picker folder |
POST /api/folder/clone-repository | Clone a repository into a child folder from the picker |
POST /api/repo/parent-folder | Leave the current repository view and browse its parent folder |