neuron-explorer
Qwen3.5‑4B 전용 조향형 뉴런 탐색기, 모든 MLP 뉴런을 밀어 결과를 보관·탐색
변경을 적용하기 전 파싱·임포트·타입 체크·프리뷰·테스트를 모두 검증합니다
Every staged change is checked before you apply it: it parses, its imports resolve, a light type check passes, the preview renders, and the tests pass. The tests run free in your browser tab.
개발 도구TypeScript · JavaScriptGitHub @Hankaws온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기An AI code editor that checks its own work.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
An AI code editor that checks its own work. Composer plans a change and
stages it as a diff. Every staged change is then checked before you apply it:
it parses, its imports resolve, the TypeScript compiler passes, the page
renders, and the tests pass. The tests run in your browser tab, free, in about a second.
▶ Watch the 30-second demo on YouTube
Demo: aperturesais.grok.me. It plays recorded runs. It does not call Grok, so it does not spend anyone's API quota. A key you add in Settings is yours alone.
Try it in a minute, no API key needed
Needs Node 22.6 or newer.README 전문 보기 ↗An AI code editor that checks its own work. Composer plans a change and stages it as a diff. Every staged change is then checked before you apply it: it parses, its imports resolve, the TypeScript compiler passes, the page renders, and the tests pass. The tests run in your browser tab, free, in about a second.
▶ Watch the 30-second demo on YouTube
Demo: aperturesais.grok.me. It plays recorded runs. It does not call Grok, so it does not spend anyone's API quota. A key you add in Settings is yours alone.
Needs Node 22.6 or newer.
git clone https://github.com/Hankaws/aperture.git
cd aperture
npm ci
APERTURE_MODEL=replay VITE_AUTH_ENABLED=false npm run dev
Open http://localhost:8080/app and click Fix the off-by-one in listTasks, then Build it. Watch the plan, the staged diff and the checks. The demo project ships with three known bugs and one failing test for each. The fix makes its own test pass, and the other two still fail, so the Tests check is amber: "already failing before this change", not blamed on the edit. Click the chip to see the run. The other two suggested tasks fix the other two bugs the same way.
APERTURE_MODEL=replay plays back recorded agent runs on the built-in demo
project (harbor-api) instead of calling a model. It exercises the whole
product and costs nothing. VITE_AUTH_ENABLED=false skips sign-in and uses a
local in-process database (PGlite), so nothing else needs setting up.
Plan, then build. Composer reads the code, posts a plan, and waits for Build it. You can reword, reorder, remove or add steps first. Edits arrive as staged diffs you keep or skip file by file. Nothing touches your files until you apply. Turn off Plan first to have Composer edit straight away; either way, nothing is applied until you Apply.
An agent board. Every run (its plan, Build it, the test runs and automatic fix that answer it) is one card: working, needs you, review or done, with background jobs alongside. Two runs with staged changes can be compared side by side, file by file (Ctrl/Cmd+J).
Background runs. Send a task with the clock button (or Ctrl/Cmd+Shift+Enter) and keep working; up to three run at once, beside whatever Composer is doing on screen. Each works on a copy of your files as they were when it started, in this tab, with any model, including the replay demo and a model on your own computer. When the agent finishes, the change goes through the same checks as any other: parse, imports, tsc, the tests and your stage hooks. A red check goes back to the agent once. Then the run waits on the agent board under Review.
Check results on every change. Five checks, each computed from the staged change itself:
tsconfig.json, so a
change that breaks a caller in another file is caught. An error the files already had
is shown amber, not blamed on the change. The editor has no
node_modules, so packages are typed any (their types are not there to
check against), and so are Node's and a test runner's globals; implicit
any is not reported for the same reason. The compiler (about 1.3 MB
compressed) loads the first time a Composer turn starts in a TypeScript
project and is reused after that. If it cannot run (a project over 600
TypeScript files, say), a lighter check that reads each file on its own
stands in, and the row says so. A repository that size, or an older one
with years of files, belongs on Agent Check rather than in the browser
tab: it reads up to 5,000 files (50 MB) and typechecks up to 3,000 (30 MB)
on your runner, with the installed packages' real types.
publishes both limits, including a 601-file project the editor refuses
and Agent Check still accepts. Counted the same way, nestjs/nest at
(13 Oct 2026) is 2,111 TypeScript files: the editor refuses it and Agent
Check still reads it. has the count.Leave out APERTURE_MODEL=replay. Sign in and add your own key under Settings → Models.
Everything is optional for local use. Set these in your shell or your host's environment settings, never in a committed file.
| Variable | What it does |
|---|---|
APERTURE_MODEL=replay | Recorded runs instead of a model; no key, no cost |
VITE_AUTH_ENABLED=false | No sign-in. Each browser gets its own anonymous workspace, settings and keys; the plan and usage limits are shared by all anonymous visitors |
DATABASE_URL | Postgres for accounts and saved work. Without it, an in-process PGlite database |
BETTER_AUTH_SECRET, BETTER_AUTH_URL | Session signing and the public URL when sign-in is on |
APERTURE_SECRETS_KEY | Encrypts saved API keys and tokens: any string of 32 or more characters, kept somewhere safe. Without it they are encrypted under BETTER_AUTH_SECRET, and changing that secret makes them unreadable. Set it in every environment that shares the database |
APERTURE_SECRETS_KEY_PREVIOUS | The old value while you rotate APERTURE_SECRETS_KEY: still read, and saved secrets move to the new key |
GROK_AUTH_ISSUER, GROK_AUTH_CLIENT_ID, GROK_AUTH_CLIENT_SECRET | "Sign in with Grok". Only apps hosted by Grok App Builder have these; email and password sign-in works without them |
APERTURE_LOCAL_ENDPOINTS | 1 lets a custom model endpoint on http://127.0.0.1 (Ollama, LM Studio) be called from a production server you run yourself. On by default in local dev, off when deployed: there, loopback is the server itself, not your machine |
APERTURE_SANDBOX=vercel-oidc | Lets the agent run projects in Vercel Sandbox, when deployed on Vercel |
VERCEL_SANDBOX_TOKEN, VERCEL_TEAM_ID, VERCEL_PROJECT_ID | Vercel Sandbox from any other host |
PADDLE_ENVIRONMENT | sandbox (Paddle's test mode) or production. Paid plans stay off unless it is one of the two |
PADDLE_API_KEY, PADDLE_WEBHOOK_SECRET | Paddle's API key and the webhook destination's secret. Server only |
PADDLE_CLIENT_TOKEN | Paddle's client-side token, which loads the checkout. Paddle makes it to be public |
Don't set VITE_AUTH_ENABLED=false together with DATABASE_URL. The app
refuses that combination on purpose, so a shared database is never opened
without sign-in.
Pro and Team sell server sandbox runs (300 and 1,000 a month), so they can be bought only when both Paddle and the sandbox are configured. Until then the pricing page shows them as coming soon. Paddle is the seller of record and handles payment and sales tax.
https://<your site>/billing/pay.
Paddle reviews the site before approving it for live payments.https://<your site>/api/billing/webhook,
with the subscription.* events. Its secret is PADDLE_WEBHOOK_SECRET.PADDLE_ENVIRONMENT=sandbox and Paddle's test cards,
then switch to production keys.A plan changes only when a signed webhook confirms the payment. A failed renewal keeps the plan for 7 days, a cancellation keeps it to the end of the period paid for, and both then move the account to Hobby without deleting anything.
npm run dev # the app on http://localhost:8080
npm test # every *.test.ts / *.test.mjs, no build step
npm run typecheck
npm run lint
npm run build # production build
CI also runs the replay demo end to end in Chromium against a production
build (scripts/e2e-demo.mjs; how to run it locally is in
AGENTS.project.md), and the signed-in visitor path with npm run build && npm run smoke (scripts/smoke-visitor.mjs).
Read AGENTS.project.md before changing things. It lists
the traps in this codebase that type-check cleanly and then fail at runtime,
and how each one is verified.
| Path | What lives there |
|---|---|
src/components/ide/ | The editor UI: panels, review strip, checks, Composer |
src/lib/agent/ | The agent loop, tools, plan/build phases and the replay model |
src/lib/runner/ | The in-browser test runner |
src/lib/workspace/ | Files, staged edits, checks, preview rendering |
src/lib/sandbox/ | Verify runs in Vercel Sandbox |
src/lib/indexer/ | Code search that the agent uses |
See CONTRIBUTING.md to send a change.
Aperture's code is under the MIT License. Some scaffolding comes from the Grok App Builder template and is not covered by it. See THIRD_PARTY_NOTICES.md.
/benchmark/benchmarkA check that could not run says why. It never shows as a pass.
A fix starts from the evidence. When a check is red, the fix turn (the automatic one, Send back, a background run's fix) gets what the editor saw, not only one line:
A second try that is still red is not applied. The replay demo shows it:
ask Composer to make listTasks return a number, Send back, and the change
stops. A clip of that is
public/caught-a-bad-change.webm.
The live preview's script errors are shown at the line of your script file that threw, and every Composer turn is told about them.
How well they work is measured on the /benchmark page: 48 staged
edits, 33 with a mistake and 15 correct, across four small projects in
TypeScript and plain JavaScript, put through these checks. Every case is
listed there, misses and false alarms included, and npm run bench
reproduces it.
Tests in the browser. npm run test runs in a sandboxed Worker in your
tab. This covers node, node --test and tsx scripts, with node:test
and node:assert. It also covers Vitest and Jest: describe, it,
expect, mock functions, vi.mock and jest.mock, and fake timers. A
Vitest or Jest config is honoured when it only picks test files or turns
on globals. A DOM environment, plugins, aliases, setup files and snapshots
need a real Node. The sandbox blocks all network access, so code the agent
just wrote cannot reach the app or anything else.
run_script for a script the
browser can run, the tests run in your tab after its turn, and the
output goes straight back to it as the next turn. It can check a fix,
see a failure and try again, at no cost, up to three runs per task.registry.npmjs.org,
*.npmjs.org, registry.yarnpkg.com) and codeload.github.com for
tarballs an install downloads. It is given no secrets. A run that asks
for any other host, or for a token or key in its environment, does not
start until that run is explicitly approved.Hooks. .aperture/hooks.json names project scripts that run by
themselves, in the same sandboxed browser runner as the tests:
{ "hooks": [{ "run": "check:store", "files": ["src/**"], "on": ["save", "stage"] }] }
save, Ctrl/Cmd+S on a matching file runs the script, and the status
bar shows the result. If it fails, Fix with Composer is offered.stage, the script is one more row in the check strip for any staged
change to a matching file. Red holds Apply like any other check, and a
script that needs a real Node is shown as not run.Rules for some files. A Markdown file in .aperture/rules/ with
files: tests/** in its front matter is given to Composer only when a turn
touches a matching file: the open file, an @ mention, or a file the agent
reads or edits. Test conventions stay out of a CSS change, and the message
lists the rules it followed. globs: (as in Cursor) works too. A rule with
no files applies to every turn. The command palette has Add a rule for
some files and Edit hooks. The demo project ships with one hook and
two rules.
Design mode. Click an element in the preview to work on it. No model needed for the first two tabs:
:root { --accent: … }) and
has one-click themes.Composer's lessons stay yours. What Composer learns in a project
(.aperture/lessons.md) is left out of what is sent to GitHub unless you
tick it in, so a shared repository does not fill with one person's notes.
Pull requests driven to green. After Open PR, the status bar shows the pull request's CI. When a check fails, the dialog lists where GitHub pinned it and the end of the job's log. Fix with Composer sends all of that to Composer; you review and apply the fix as usual, then push it to the same pull request and the checks are watched again. Each step is a click.
Your layout. Every panel resizes and moves. The preview can dock right, below or full-screen, and the sidebars can swap sides.
Any model. Your own key for Grok, OpenAI, Anthropic, Gemini or DeepSeek (Settings → Models). The app does not spend a shared Grok key.
A model on your own computer, even on the hosted site. Settings →
Models → This computer points Composer at Ollama or LM Studio on
localhost. The agent loop then runs in your browser tab and calls the
model directly, so a turn never passes through Aperture's server and costs
nothing. Ollama has to allow the page first:
OLLAMA_ORIGINS=https://your-aperture-address ollama serve (on a Mac with
the Ollama app, launchctl setenv OLLAMA_ORIGINS "…", then restart it). Pick
a model that can call tools, such as qwen2.5-coder or llama3.1. A crew
and the sandbox's script runs stay on the server, so a local turn builds
alone and checks with the browser test runner. Its TypeScript tools
(references, renames) use the compiler in your tab.
The checks, for any agent. Aperture is also an MCP server. Make a token
under Settings → Agents → Connect an agent and point Grok Bot, Claude
Code, Cursor or any MCP client at /api/mcp. Its one tool, check_change,
takes the project and a change and answers with Parses, Imports resolve,
Types (the real compiler, new errors only) and whether the change tampers
with the tests, the same verdicts the editor gives. Nothing is run or kept,
so the agent runs its own tests. Free on every plan. /agents has the
setup for each agent and a real answer.
Aperture Agent Check, for every pull request. The same checks as a
GitHub Action (packages/agent-check): add one step, and every pull
request, an agent's or yours, gets Parses, Imports resolve, Types with
your installed packages' real types, and your own tests, with red lines
on the files it changed. It runs on your runner; nothing leaves it.
PADDLE_PRICE_PRO_MONTHLY, PADDLE_PRICE_PRO_YEARLY, PADDLE_PRICE_TEAM_MONTHLY, PADDLE_PRICE_TEAM_YEARLY | The Paddle price IDs (pri_…) for each plan and period |