neuron-explorer
Qwen3.5‑4B 전용 조향형 뉴런 탐색기, 모든 MLP 뉴런을 밀어 결과를 보관·탐색
키보드 중심 다중창 터미널 IDE, Windows·WSL·Claude Code·Codex CLI·Grok·CJK/IME·Android 원격 지원
Keyboard-first multi-pane terminal IDE for Windows + WSL, Claude Code, Codex CLI, Grok, CJK/IME, and Android remote.
개발 도구TypeScript · RustGitHub @kochul2000온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
Terminal multiplexer for Agentic coding
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A keyboard-first multi-pane terminal IDE built for
Windows + WSL, Claude Code, Codex CLI, and CJK/IME users.
Modern terminal workflows on Windows increasingly run through WSL shells, AI coding agents (Claude Code, Codex CLI), and CJK input methods — but most terminal UIs treat these as afterthoughts. Laymux is designed around them from the start:README 전문 보기 ↗Modern terminal workflows on Windows increasingly run through WSL shells, AI coding agents (Claude Code, Codex CLI), and CJK input methods — but most terminal UIs treat these as afterthoughts. Laymux is designed around them from the start:
Ratio-based free-form grid, WSL-distro-aware profiles, and per-terminal session restore (CWD + scrollback). OSC 9;9 is parsed in Rust to extract the distro name; OSC 7 propagates the CWD across synced terminals. Settings accept Windows Terminal–style color schemes and profile blocks.
Activity detection via title-prefix matching (Claude Code, Braille spinner glyphs) plus buffer-scan fallback. Working→idle transitions raise a task-completion notification. A claude.syncCwd profile option lets you choose whether CWD propagation sends ! cd … into Claude when idle — or stays silent.
Codex is registered in the interactive-app pattern list alongside Claude, so the same activity pipeline (shell / interactiveApp / outputActive) lights up its state. The IME composition overlay is gated to show only while Codex-style TUIs are active, keeping native shells clean.
A shadow-cursor layer mirrors xterm.js's real cursor position so that the OS IME candidate window never lags or jumps during TUI redraws. DECSET 2026 synchronized-output handling and targeted xterm.js cursor-repaint fixes eliminate the flicker that plagues most electron-based terminals. Design notes live in docs/terminal/.
portable-pty with xterm.js 6 rendering.syncCwd, restoreCwd, restoreOutput options.shell / interactiveApp / outputActive) computed from OSC 133, DEC mode 2026h bursts, and title spinner animation.known_claude_terminals O(1) cache for instant recognition, with buffer-scan fallback.docs/terminal/fix-flicker.md, xterm-shadow-cursor-architecture.md, xterm-cursor-repaint-analysis.md.none to opt out).sync-cwd (OSC 7), set-wsl-distro (OSC 9;9), sync-branch, set-title-cwd, notify-on-fail / notify-on-complete (OSC 133;D), track-command / track-command-result / track-command-start (OSC 133;C/D/E), notify-osc9 / notify-osc99 / notify-osc777.19280, dev 19281 (separate so they never collide).lx CLIThe lx binary must be on the shell's PATH (Laymux does not modify PATH); inside a Laymux terminal it is configured through LX_ENDPOINT_FILE / LX_TERMINAL_ID / LX_GROUP_ID environment variables. It exposes 10 commands:
lx sync-cwd [path] # sync CWD to group (or --all)
lx sync-branch [branch]
lx notify "msg" [--level info|warning|error|success]
lx set-tab-title "title"
lx set-command-status --command "cmd" | --exit-code N
lx open-file <path>
lx send-command "cmd" --group <name>
lx get-cwd
lx get-branch
lx get-terminal-id
WorkspaceSelectorView with per-workspace branch, CWD, listening ports, last command + exit icon, newest unread notification, and a pane minimap.error / warning / success / info, rendered as unread badges plus OS-native toasts.| Layer | Technology |
|---|---|
| Framework | Tauri v2 (Rust + WebView2 on Windows / WebKitGTK on Linux) |
| Frontend | React 19, TypeScript, Tailwind CSS 4 |
| State | Zustand |
| Terminal | xterm.js 6 + portable-pty |
| Automation | axum HTTP + rmcp Streamable-HTTP MCP |
| Platforms | Windows, Linux |
cargo install tauri-clilibwebkit2gtk-4.1-dev, libgtk-3-dev, libayatana-appindicator3-dev
(libgtk-3-dev also backs the native crash dialog; no XDG portal backend is required.)# Install frontend dependencies
cd ui && npm install && cd ..
# Run in development mode (frontend dev server + Tauri app)
cargo tauri dev
The frontend dev server starts on http://localhost:1420; Tauri connects with hot reload. Dev builds listen on Automation-API port 19281, so they never collide with a release install on 19280.
cargo tauri build
Platform installers land in src-tauri/target/release/bundle/.
The Android remote client is a standalone Gradle project (JDK 17 and Android SDK 36 required).
cd apps/android
.\gradlew.bat :app:assembleDebug
The Android app and desktop Remote Access modal provide the QR and Keystore/keyring pairing
foundation. Strong biometric authentication is enabled by default with an explicit Keystore-only
opt-out, but existing remote traffic is not yet E2E-encrypted. See
apps/android/README.md for the exact scope.
cd ui && npm test # frontend unit tests
cd ui && npm run test:watch # watch mode
cd ui && npm run test:e2e # end-to-end
cd src-tauri && cargo test # Rust tests
curl http://localhost:19280/api/v1/health
curl http://localhost:19280/api/v1/workspaces
curl -X POST http://localhost:19280/api/v1/terminals/{id}/write \
-H "Content-Type: application/json" \
-d '{"input": "ls -la\n"}'
curl -X POST http://localhost:19280/api/v1/screenshot
curl http://localhost:19280/api/v1/docs
Port discovery file:
%APPDATA%\laymux\automation.json~/.config/laymux/automation.jsonStreamable-HTTP MCP endpoint at /mcp exposes 33 tools (terminals, workspaces, grid/panes, screenshot, notifications, output search, file/image viewer).
// Claude Code ~/.claude.json
{
"mcpServers": {
"laymux": {
"type": "url",
"url": "http://localhost:19280/mcp"
}
}
}
See docs/architecture/api-contracts.md §12.7 for the full tool list.
laymux/
├── apps/android/ # QR/Keystore/biometric Android hybrid remote client
├── src-tauri/ # Rust backend
│ ├── src/
│ │ ├── lib.rs # Tauri app setup
│ │ ├── automation_server/ # HTTP REST + MCP server
│ │ ├── pty.rs # Terminal PTY management
│ │ ├── osc.rs # OSC parser
│ │ ├── osc_hooks.rs # 12 built-in OSC hook presets
│ │ ├── state.rs # Application state
│ │ ├── commands/ # Tauri IPC commands
│ │ ├── terminal/ # Terminal module
│ │ └── bin/lx.rs # `lx` CLI binary
│ └── Cargo.toml
├── ui/ # React frontend
│ ├── src/
│ │ ├── components/
│ │ │ ├── layout/ # AppLayout, Dock, WorkspaceArea, Grid
│ │ │ └── views/ # 8 view types
│ │ ├── stores/ # Zustand stores
│ │ ├── hooks/ # React hooks
│ │ └── lib/ # OSC, colors, IME, etc.
│ └── package.json
├── docs/
│ ├── architecture/ # Living architecture docs (overview / data-flow / api-contracts)
│ ├── adr/ # Architecture Decision Records (append-only)
│ ├── roadmap.md # Progress tracker
│ ├── screenshots/ # README images
│ └── terminal/ # Cursor / IME / flicker reference docs
├── AGENTS.md # Coding-agent entry point (CLAUDE.md → AGENTS.md)
└── CLAUDE.md # Pointer to AGENTS.md
IDE shortcuts avoid Ctrl+<single-key> so they never shadow shell/readline bindings.
| Shortcut | Action |
|---|---|
Ctrl+Alt+↓/↑ | Next / previous workspace |
Ctrl+Alt+←/→ | Navigate between notifications |
Alt+Arrow | Move pane focus |
Ctrl+Alt+1-8, 9 | Switch to workspace 1–9 |
Ctrl+Shift+I | Toggle notification panel |
Ctrl+Shift+U | Jump to unread notification |
Ctrl+Alt+W | Close workspace |
Ctrl+Alt+R | Rename workspace |
Ctrl+Shift+B | Toggle sidebar |
Delete (edit mode) | Remove focused pane |
Ctrl+, | Settings |
docs/architecture/ — living architecture docs (overview · data-flow · api-contracts).docs/adr/ — architecture decision records ("why we decided", append-only).docs/terminal/ — cursor, IME, and flicker research notes (reference-only).AGENTS.md — coding-agent entry point and development guidelines.Companion tools by the same author that pair well with Laymux's audience:
MIT