neuron-explorer
Qwen3.5‑4B 전용 조향형 뉴런 탐색기, 모든 MLP 뉴런을 밀어 결과를 보관·탐색
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기A macOS app that shows which of your AI agent sessions need you — Claude Code, Grok CLI, Codex, CLI in tools like VSCode, etc...
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Mission control for every AI agent you're running — and one click to jump to it.
The desktop this is for those with...
Any number of terminals, each running something, scattered across more than one
Desktop. One of them is waiting on your approval. You don't know which one.
"I waste time checking whether my session is done, or waiting on me."
You start an agent so you can go do something else. Then it needs a decision,
and you're caught between two ways of losing:README 전문 보기 ↗Any number of terminals, each running something, scattered across more than one Desktop. One of them is waiting on your approval. You don't know which one.
"I waste time checking whether my session is done, or waiting on me."
You start an agent so you can go do something else. Then it needs a decision, and you're caught between two ways of losing:
The cost was never the waiting. It was the checking.
Ground Control floats above all of it — one row per agent, on every Desktop at once. See an update, tap the row, land in the terminal that wants you.
And this is the panel itself, up close:
That's the default look. The whole thing is a theme, though — a drop-in folder of images and JSON — so it can look like this instead:
https://github.com/user-attachments/assets/adfacf3a-ce9b-4c9b-a915-0e2d8dc0865f
Click a row, land on its terminal — the exact tab, or the owning app for editors that can't be scripted.
https://github.com/user-attachments/assets/357f529c-eca2-4884-b8e6-a7bdfc86a880
Swap the entire look. Themes are drop-in folders of images and JSON — even the title-bar analyser's motion is a theme's to change.
https://github.com/user-attachments/assets/a87cbf31-a39c-42ff-90a2-5e7d01f4cc72
Make your own without writing JSON. Answer a handful of rough questions — character, mood, style — and Create a Theme writes the prompt. Paste it into any image-capable LLM; it draws the four faces and the frame, and you drop the folder in.
More video — the analyser, resizing, the whole theme flow — is on the SpacyApps page.
Running a dozen agents should feel like mission control, not inbox triage — and it's allowed to be fun.
.dmg
from the latest release, open it, and drag Ground Control into
Applications. That's it..dmg on your Mac? The same release has a .zip — unzip
it and drag the app into Applications instead.The panel stays empty until an agent reports in. Either run:
/Applications/GroundControl.app/Contents/Resources/install-hooks.sh
…or click the menu-bar icon and open Hooks — a switch per agent, and a line under each saying whether anything has arrived from it yet.
~/.claude/settings.json — hooks you already have keep
working — and backs the file up first.~/.cursor/hooks.json — restart Cursor
afterwards. Nothing else needs restarting.~/.codex/config.toml too, and Codex is
the one CLI that asks permission to run hooks at all: start codex once
and accept the trust prompt. Until you do it runs none of them, and no
Codex row will ever appear. The prompt only shows in interactive codex,
never in codex exec.A small meter under a Claude row's text that fills as that session's context window fills, and turns red near the top. It needs a Claude Code that supports mods, and it works for Claude Code only — no hook carries the figure, so a small mod reports it.
Add one line to the env block of ~/.claude/settings.json, then restart
Claude Code:
"env": { "CLAUDE_CODE_PLUGIN_DIRS": "/Applications/GroundControl.app/Contents/Resources/Mods/context-meter" }
If you already have an env block, add just that key to it. Details and the
design are in docs/CONTEXT-METER.md.
cc-notify fails silently
by design. docs/LIMITATIONS.md covers what that can hide.Everything below is for building from source and the technical detail.
0.8.0 — the app is built and notarised, and the hook side is verified against
live payloads from Claude Code, Grok CLI, Cursor, opencode and Codex.
docs/SPEC.md is the event contract, docs/STRUCTURE.md the code layout,
docs/LIMITATIONS.md what is proven versus merely believed.
swift build
swift run GroundControl
Requires macOS 13+ and Swift 5.9+. No third-party dependencies — the app
imports only AppKit, AVFoundation, Foundation and os. Linting uses the
standalone swiftlint binary (brew install swiftlint).
Works fine — but the .dmg
is faster, and more fun :)
Every row below was tested on a real session, not inferred. Last tested is
the date and the version it was tested against; docs/LIMITATIONS.md says how,
and what is still unknown.
| Agent | Rows | Turns red | Last tested | What we found |
|---|---|---|---|---|
| Claude Code | yes, subagents grouped | yes | 2026-10-15 · 2.1.301 | • 2.1.301 rechecked (2026-10-15): hook payloads, SessionEnd clearing the row, background sessions and Terminal.app rendering all unchanged, and the red alarm still fires• red end to end: a blocked session went red, the click landed on its tab, the alarm cleared (2026-08-12); a question turns it red even in auto mode (2026-09-30)• subagents nest under their parent while they run, showing their own tool calls — SubagentStart fires as of 2.1.286; up to 2.1.277 only the finish did• its own internal agents fire that event too and are hidden by a heuristic (empty agent_type); defaults write com.spacyapps.groundcontrol showsInternalAgents -bool YES shows them |
| Grok CLI | yes, subagents grouped | yes — input prompts only | 2026-10-02 · 1.0.46 | • elicitation_dialog turns a row red carrying the question itself, e.g. a user-controlled selection list (2026-08-19)• a question asked in prose still reads "done" — no event tells the two apart• reads ~/.claude/settings.json by design, so one install covers Claude Code and Grok• spawn_subagent fires no hook; subagents are grouped by reading a file Grok writes for itself |
| Grok Bot | yes, bots grouped and named | yes again, for approvals | 2026-09-23 · 0.58.0 | • one collapsible group, one row per bot, plus the bots another bot wakes• the alarm works again as of 0.58.0. awaitingUserResponse was null through every test from August on, then started carrying a real block: a local-command approval, with the command written out. The row turns red, says which command wants approving, and clears the instant you answer · 2026-09-23• a decision card still does not show. v4 dropped the field that one lived in, so a card — or a question typed in prose — remains invisible. An approval is not• working is readable: a bot owes you a reply, or spoke in the last minute. Its name brightens, so the state reads without hunting for the dot• runs in xAI's cloud and fires no local hooks — all of this comes from an undocumented cache, which is why a format change could silence it |
| OpenAI Codex CLI |
Any agent running in a terminal is covered by that agent's row — the terminal needs no integration of its own. Clicking a row jumps to the exact tab where the terminal can be scripted, and raises the app otherwise.
| Terminal | Jump lands on | How we know |
|---|---|---|
| Terminal.app | the exact tab | clicked a row, landed on the right tab · 2026-08-10 |
| iTerm2 | the exact tab | tty resolved across three sessions in two panes · 2026-08-12 |
| VS Code | the app | session with no tty at all; clicking raised the editor · 2026-08-12 |
| Cursor (its terminal) | the app | row appeared, went red for a permission prompt, click raised Cursor · 2026-08-14 |
| Warp · Ghostty · WezTerm | the app | same path as VS Code — outermost .app from the process tree |
The pattern, for anything not listed. An agent that runs a command on its own events can be supported; one that does not, cannot. An editor's built-in chat is usually the second kind — Composer and Xcode's agent both are, in different ways.
See docs/SPEC.md §3 for the event contract, docs/HOOK-PAYLOADS.md for the
measured payloads it is built on, docs/ARCHITECTURE.md for how a hook event
becomes a row, and docs/LIMITATIONS.md for what is proven
versus merely believed.
Fun is a feature. Every other menu-bar utility assumes you want it to look
like everything else; this one is WinAmp-skinnable instead — copy
Themes/default/ and edit theme.json. Everything is optional — the app
fills in defaults.
Themes/spacyAppsLunarAvatar/ is a complete example: per-state avatars, a
shaped window whose antennae extend past the panel edge, and its own matrix
messages. Full guide: docs/THEMING.md.
A skin can go behind the rows or in front of them (window.overlay),
which is how a picture frame overlaps its own contents. Artwork arrives from
image models without usable alpha, so removeBackground chroma-keys it at load
and suppresses the rim the key leaves behind. The ✕ and ↔ marks always draw
above the skin, so no theme can hide the only ways to close and resize the
panel.
The title-bar analyser can run a theme's own bar-height formula
(matrix.shape). Preview one in the terminal without launching the app:
swift run matrix-preview "0.5 + 0.5*sin(pos*7 - phase*2)"
Claude Code hooks call a small script (Scripts/cc-notify) that writes one
.jsonl file per session into a temp folder, named by the session's id. The
app watches that folder — file exists ⇔ row exists — and shows the last
line of each file as that session's current state. Files untouched for 24h are
purged automatically.
Rows show what Claude actually said, not a generic status: the Stop hook
hands over the full assistant message, and Notification carries the real
"waiting for you" text.
./Scripts/install-hooks.sh # installs cc-notify + merges into ~/.claude/settings.json
It merges — existing hooks on the same events keep working — and backs up your settings first. Hooks take effect immediately; no restart.
The obvious next step was answering an agent from your phone. Approve or deny is the easy half. But approve and deny aren't what you actually need to send — you need words: use Postgres, not SQLite. The only route to words was scripting your terminal directly.
We built that. It works.
Which is exactly where it stops. Anything that can type into your terminal is a remote-execution capability, and a relay in that path turns one compromised server into every Mac connected to it. A yes tapped on a lock screen isn't the same yes — you can't see the working directory, the diff, or what the last three approvals already unlocked, and approvals chain.
No relay was ever built. The app's TerminalFocuser only ever navigates —
it brings a window forward. It cannot type, run a command, or do damage if it
misfires. If you want remote answering, Claude Code ships it natively now, with a
better security model than we could have justified building.
Finding out you can do something is not the same as finding a reason to.
Click the menu-bar icon, open Hooks, and turn the agents off — or run
~/.groundcontrol/bin/uninstall-hooks.sh, which is kept there so it still works
after the app is gone. It takes the cc-notify entries out of
~/.claude/settings.json (a dated backup sits beside it). The emitter and
uninstaller live in ~/.groundcontrol/bin/; session files sit in a temp folder
and clear themselves. Themes are in
~/Library/Application Support/GroundControl/Themes/.
AGPL-3.0-or-later — see LICENSE.
TRADEMARK.md.| yes, sub-agents grouped |
| yes |
| 2026-09-11 · 0.154.0 |
• PermissionRequest turned a row red carrying Codex's own sentence — "May I enable network access to fetch headers from…" — and PostToolUse cleared it on reply• its hooks speak Claude's dialect, so one emitter covers both• sub-agents fire SubagentStart before they run, and are named from their own transcripts• needs a one-time trust prompt: start codex once after installing and accept it, or no hooks run at all |
| opencode | yes | yes | 2026-09-11 · 1.18.27 | • permission.asked carried "List files with details in current directory"; the row went red and cleared on reply (2026-08-19)• a plugin rather than hooks — opencode runs no script on an event• prose questions read "done", the same gap Grok CLI has• tested against a fully local model (Qwen3.5 via mlx_lm.server), no cloud in the loop |
| Cursor's own agent (Composer) | yes | no | 2026-08-14 | • fires no hook while waiting for approval, so a blocked chat looks busy• Cursor's docs list no waiting-or-blocked event; it is an open feature request |
| Claude for Desktop — Code tab | yes | yes | 2026-09-20 | • bundles its own Claude Code and spawns it as a child, so hooks run normally• a click opens that conversation, not just the app — it answers a claude:// link, and the id is read from a file it writes for itself (2026-09-20)• falls back to raising the app whenever that id cannot be found |
| Claude for Desktop — cloud session | no | no | 2026-09-23 | • a "cloud session" (their term, run by Claude Code Remote) clones your repo into a container Anthropic manages — nothing executes on your Mac, so no hooks run• the desktop app keeps no local record of it either: its session store held only local sessions, and nothing on disk named the cloud one• unlike Grok Bot, there is no cache to read. Seeing it would mean asking claude.ai over the network, and this app has no network code |
| Claude for Desktop — Home tab | no | no | 2026-08-22 | • ordinary chat in Electron; no process is spawned, so there is nothing to hook• nothing to miss either — a chat cannot block you unnoticed |
| Xcode's Claude Agent | no | no | 2026-08-19 · Xcode 26 | • it is Claude Code, and can see both the config and the emitter• it runs as sdk-cli, and that entrypoint does not execute hooks. Nothing on this side can change that |