neuron-explorer
Steering-first neuron explorer for Qwen3.5-4B: push every MLP neuron, keep every rollout, browse the results
Wayford sends an AI agent through your web app toward one goal, under five sets of limits enforced in code, and shows who gets across, and the assumption behind every no.
Developer toolsTypeScript · HTMLGitHub @CShark-HubOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Who does your interface work for? Wayford runs an agent through your web app within capability limits enforced in code, and shows where each persona gets stuck.
Taken from the repository README
Loading the full README.
Read the full README ↗Wayford walks a web application within the limits of a declared capability profile, and shows where that profile got stuck.
The question is not "does it work". The question is who does it work for.
The persona is a filter, not a prompt. The Actor must be our own loop. Claim less than you'd like to.
Quick start · Usage · What next · How it works · Development · Documentation
Give Wayford an application URL, a goal in one sentence ("you want to see what you ordered three months ago") and one or more capability profiles. It runs an agent on that goal once per persona and seed, and reports at what capability level the goal stops being reachable, with evidence a developer can reproduce.
| Wayford is | Wayford is not |
|---|---|
| A boundary measurement: the threshold from which fewer than half of a persona's runs get through | A prediction of how real people behave |
| A hypothesis generator about wayfinding, with every finding linked to its evidence | A replacement for user research |
| A filter in code between the browser and the model, the same for every run with the same seed | A prompt that asks a model to pretend |
| A tool for product teams, UX designers and accessibility specialists | A pass/fail regression suite, a CI gate or an API tester |
Out of scope: pass/fail regression, a CI gate, API testing and MCP as the foundation. Not planned: accounts, export, native mobile apps (Milo is a phone viewport in Chromium), more than one project, a profile builder, running in a CI pipeline and a thin MCP layer on top.
Five personas ship with Wayford. Each one is a bundle of thresholds, not a character to play, and its initial names the dimension it is defined by.
| Persona | In one line | |
|---|---|---|
| AdaAll clear, the control | Sees everything, knows every pattern, nothing capped. If Ada fails a goal, the Actor or the app is broken, not the filter. | |
| KaiKnowledge | Sees the page clearly on a desktop, but does not know several common interface patterns or shop jargon, takes in a handful of things at a time and keeps only the last couple of steps in mind. | |
| MiloMobile and motor | Proficient and in a hurry, on a phone. Controls smaller than 44 px are cut from what Milo is shown. | |
| VeraVision | Weak sight and little practice with interfaces, on a desktop. Faint text, small print and small targets reach Vera partly masked or not at all. | |
| ZoyaThe far end | Every dimension at once: strict sight, no interface vocabulary, five things of attention and two steps of memory. |
Each avatar is drawn from its profile: glasses for a contrast threshold, a phone for a mobile device, an hourglass for the time budget.
Their full bundles, the loop and the claim Wayford makes are in How it works.
Wayford runs on your own machine, and nothing is hosted. One command starts three local processes: the web UI you work in; io, the API behind it, which drives the browser and calls the models; and Quillmere, a small demo shop for the personas to try.
node -v.npm install -g pnpm.git clone https://github.com/CShark-Hub/wayford.git
cd wayford
pnpm install
pnpm --filter @wayford/agent exec playwright install --only-shell chromium
cp .env.example .env
The fourth command downloads the Chromium that the personas browse with. The last one creates .env, your local settings file.
pnpm seed:demo --fake
This fills the local database with the demo's runs, reports and sweeps, using a fake model, in about a minute. While it runs it serves the demo shop on port 5174, so run it while Wayford is stopped. Add --reset to start over.
Open .env and set LLM_API_KEY. Use your key, or any placeholder such as demo if you only want to browse the demo data: io does not start without a value. Then run:
pnpm dev
Keep this terminal open. Ctrl+C stops all three processes.
| Process | Address | What it is |
|---|---|---|
| web | http://localhost:5173 | The UI. Open this one. |
| io | http://localhost:3000 | The API behind the UI. It drives Chromium and calls the models. |
| Quillmere | http://localhost:5174 | The demo shop the personas try to use. |
Open http://localhost:5173:
/deliveries with Vera.The Target screen and the Race call a model, so they need a real key.
Put your key in .env as LLM_API_KEY, restart pnpm dev, and follow Usage from the Target screen. Every live run is billed, so check the key's balance first. Every setting .env takes is in Configuration.
To redo the demo data on a real model, stop pnpm dev first, then run:
pnpm --filter @wayford/agent scout
pnpm seed:demo --reset
| You see | Do this |
|---|---|
LLM_API_KEY: missing | Set LLM_API_KEY in .env. Any value works for the demo data. |
the target app could not be served on 5174 | Stop pnpm dev, then run seed:demo again. |
Chromium did not launch | Run the playwright install command from step 1. |
EADDRINUSE or "port already in use" | Another program holds 5173, 3000 or 5174. Stop it. |
Checking a goal, Scout, the runs and the report call a model, so this needs a real key in .env. Start with pnpm dev and open http://localhost:5173/target.
Describe the target on the Target screen:
**/orders/*) or an element on the page (a CSS selector such as #order-history). You write it; the model never does.Check the goal. io's Extractor takes screen names and clicks out of the sentence, shows what it took out, and stores the goal under an id. Code, not the model, refuses words such as "click", "menu", "go to" and "then", and on the target app the names of the controls on the three routes to its hard goal. The model alone finds every other screen name, on the target app too, so read the goal it kept. From then on the nav carries the target: Lens, Race and Report open on it, and the nav shows its host.
Look before you run. Open in the Lens shows the start page as each persona's filter leaves it. Race on this goal runs three to five personas live, with their screenshots and narration.
Run Scout. Scout walks the goal three times with every element in view. Run it before the run set, so the report can tell a broken goal from one a persona did not find.
Run and report. Pick the cast and 3 or 10 seeds, the same for every persona, and start the set. Keep the page open: when every run has ended, the Analyst writes the report, and Open the report leads to it.
Find the boundary from the command line, since the UI starts no sweep. Use the goal id the Target screen shows; the Boundary screen opens the stored sweep by its id.
pnpm --filter @wayford/io sweep -- --task <id> --persona prof_vera --axis contrast --from 1.5 --to 4.5 --step 0.5 --seeds 1-3
Off the target app, every run is on the LLM (io refuses Jev there), the report shows no route-open number, and a run set of three seeds is the default. Logins, goals that write (a form that saves, a purchase), cookie banners, bot challenges, iframes and shadow DOM are out of scope: a site that needs any of them is swapped for another (ADR 0003).
On the target app, pnpm seed:demo stores the demo's two goals with their runs, reports and sweeps, so the Report, the Boundary and Runs open with data and no form to fill. Every other command is in Commands.
None of this is built yet. What next holds every idea, with its source and its limits.
wayford CLI that AI agents and people can drive: JSON output, stable exit codes, no prompts.| Guide | What it holds |
|---|---|
| How it works | The claim, the loop, the filter pipeline, the personas and their provenance, the screens |
| Development | Configuration, every command, the packages, checks, CI and the determinism rules |
| Contributing | How work is organised, and how a change gets from an issue to main |
| Security | Where to run Wayford, what a run touches, and how to report a vulnerability |
| What next | Ideas for after the hackathon, each with its source and its limits |
| About | Project status, the name, prior art and acknowledgements |
The plan, the rules, the design system and every decision behind them are indexed in docs/. Start with AGENTS.md, whether you are a person or an agent.
Wayford is a hackathon project, built in September and October 2026 by a team of four; AI coding agents write most of the code, and humans direct and review it. Every change starts from an issue and lands as one reviewed pull request. CONTRIBUTING.md has the steps.
| Name | GitHub |
|---|---|
| Marcin Kotas | @marcinkotas |
| Tomasz Nowakowski | @tnowakowski-cshark |
| Grzegorz Stysiak | @gstysiak-cshark |
| Dawid Trznadel | @dawidtheshark |
Copyright (c) 2026 CSHARK Commit Hackathon Contributors
The contributors are the team above: Marcin Kotas, Tomasz Nowakowski, Grzegorz Stysiak and Dawid Trznadel.
Wayford is licensed under the Apache License, Version 2.0. The licence covers the whole project from the repository's first commit (e5b08aa, 2026-09-17), including every commit made before the LICENSE file was added. The copyright notice and the team are also in NOTICE, which a redistribution must carry, as section 4 of the licence asks.
Third-party files keep their own licences: the Inter typeface in packages/target-app/public/fonts/ is under the SIL Open Font License 1.1, with its licence beside it, and every dependency installed by pnpm is under its own.