README.md

September 21, 2026 · View on GitHub

English | 한국어

Aside Jev — a concept illustration of the observe, decide, and act loop

Your browser's next move. Chosen by Jev.

Aside observes the page and executes.
Jev picks the next action from your defined candidates.

Python 3.11 or later MCP stdio Manifest V3 extension MIT license

Quick start · How it works · Speed duel · Latency · Install the extension · Validation


Aside Jev connects the Aside REPL with TypeSafe Jev. A toolbar toggle, a persistent REPL session, and bounded action selection work together in one browser workflow.

Current status: 0.2.0 source preview · not yet released
ON applies to new task instructions and the extension-specific MCP for the selected Aside account. jev_browser_run delegates action selection to Jev. The extension does not intercept all built-in Aside tools.

Same Jev. Two strategies. One race.

New SDK client per request vs connection reuse. Watch both lanes on the same time scale, then compare p50, p95, and TCP connections.

Jev local transport overhead race: new client per request p50 1.157ms versus connection reuse 0.540ms. A 20-second visualization using the same expanded time scale, excluding model inference.

20-second video · 1080p MP4 · Still image · 한국어 영상 · Remotion source & reproduction

What this measures: both methods use the same Jev SDK in a localhost transport benchmark. Actual browser task speed with the default Aside model versus Jev has not been measured. This animation expands measured p50 values; it is not a screen recording. Method and limitations

The dashboard and extension popup default to English. Choose Korean in the English / 한국어 menu; each surface remembers your selection. Localization guide

Small candidate sets. Clear execution.

Bounded decisionsGrounded actionsVisible state
Compact the relevant observation and send only allowed candidates to Jev.Use targets observed on the current page and check again before execution.Inspect ON/OFF, connectivity, confidence, and timing.
The model does not invent code, selectors, or input values.Stop on repetition, no progress, or stale observations.Errors never silently switch to another model.

See the decision

Aside Jev local workspace showing action candidates, the selected result, confidence, and timing

Actual local UI in demo mode. It displays candidate selection and timing; this screen does not automatically execute browser actions.

Keep the goal and candidates in the main workspace, with longer observations and model settings in a separate panel. Results show candidate probabilities, decision time, round-trip time, and the latest 20 records from the current session.

One connection. A continuous decision loop.

flowchart LR
    A["Aside REPL<br/>Observe current page"] --> B["Compact context<br/>Build allowed candidates"]
    B --> C["Jev<br/>Choose a candidate ID"]
    C --> D{"Check confidence<br/>and current state"}
    D -->|Allowed| E["Aside<br/>Execute selected action"]
    E --> A
    D -->|Completion verified| F["Complete"]
    D -->|Stop condition| G["Stop · Resume manually"]
    classDef surface fill:#F4F5EE,stroke:#9AA991,color:#193326
    classDef decision fill:#203D2F,stroke:#203D2F,color:#F4F5EE
    classDef result fill:#DCE8C8,stroke:#A9BC8D,color:#193326
    class A,B,E surface
    class C,D decision
    class F,G result

One Aside MCP/REPL session stays open throughout a task. Refresh observations and candidates when the page changes, and execute only the valid candidate selected by Jev. Completion text and an optional URL condition are checked locally; the page is checked again after Jev selects finish.

ConditionBehavior
Repeated page/action or a page cycleStop the loop
No observable change after executionStop with no_progress
Page changes after the decisionDo not execute stale candidates
Low confidence, unknown ID, or Jev errorStop without an automatic fallback
Step or time budget exhaustedReturn state for manual resumption
OFF or a higher confidence threshold during selectionRecheck policy before execution

Install in a few steps

Windows and macOS · no Git, Python, or uv setup required. Install and sign in to Aside first.

  1. Download ZIP and extract it.
  2. Run Install.cmd on Windows or Install.command on macOS. Choose your Aside account and enter your Jev key when prompted. Review the changes and confirm.
  3. Reopen Aside → Extensions → Developer mode → Load unpacked, select the folder printed by setup, pin Aside Jev, and turn ON. Start a new task.

The installer prepares a private Python environment, copies the extension to a stable folder, and adds the Jev MCP connection while preserving your other settings. The extension ID is fixed across computers. Quit Aside before confirming setup so it cannot overwrite the account settings during installation.

Windows Native Messaging needs the registration key used by your Aside build. Setup proposes an existing Aside NativeMessagingHosts location when found; otherwise it asks for a verified key. We have not verified that final browser connection on a Windows PC. Windows details and troubleshooting →

If macOS does not open the downloaded .command, run bash scripts/install.sh in the extracted folder. Do not disable OS security checks. English is the default; use .\Install.cmd --lang ko or bash scripts/install.sh --lang ko for Korean prompts.

Installation details, update & removal →

Developer quick start / try without an API key
uv sync
uv run aside-jev setup --dry-run
uv run aside-jev dashboard --open

The local demo uses http://127.0.0.1:8766. Add --port 0 for an available port. Existing Python/uv users can run uv run aside-jev setup for guided connection setup.

On macOS, setup stores the API key in macOS Keychain, not in a plaintext file. Hidden terminal input and --env-file imports are supported; Windows retains its local environment-file storage. Keys never enter the popup. Key presence is not authentication proof. See Keychain migration, rotation, and deletion.

Use MCP without the popup

Start the general decision tools over stdio:

uv run aside-jev serve

To enforce the popup's ON/OFF state and Live-only policy, use the installed wrapper or the following command after configuring the extension connection:

uv run aside-jev serve --extension

./scripts/install.sh only installs the Python package. Account instructions, Native Messaging, and MCP registration are part of the separate installation process.

Browser loop example

Find the targetId of an already-open Aside tab and pass it to jev_browser_run:

{
  "goal": "Follow Continue until the Journey complete page",
  "target_id": "targetId-of-the-current-Aside-tab",
  "action_rules": [
    {"role": "link", "name": "Continue", "action": "click"}
  ],
  "completion_text": "Journey complete",
  "max_steps": 12,
  "total_timeout_s": 90,
  "min_confidence": 0.7
}
  • Supported actions: click, focus, fill. fill uses only the specified value.
  • Rules: provide exact accessible names within the user's authorized scope. Missing or ambiguous targets stop execution.
  • Completion: use distinctive completion_text. Add completion_url to require an exact URL match.
  • Default budget: 12 steps and 90 seconds total. Actions requiring separate approval must be approved before being added as candidates.

Reuse connections. Reduce overhead.

Reuse the SDK client and HTTP connection, and process MCP decision requests outside the event loop. Automatic retries are disabled; requests and tasks have explicit limits.

Local SDK transport benchmark · 30 requests per method · 2026-09-20

MetricNew client per requestConnection reuse
p501.157ms0.540ms
p951.695ms0.747ms
TCP connections301

Transport-path p50 overhead fell by approximately 53.3% in this environment. This measures localhost SDK transport, not actual Jev inference speed. The default HTTP timeout of 15 seconds applies separately to connect, read, write, and pool waits.

Measurement method and boundaries →

A small toolset

ToolPurpose
jev_browser_runObserve → Jev selection → execute → verify in a persistent REPL session
jev_extension_statusInspect ON/OFF state and connection readiness
jev_system_oneGeneral Jev questions using Choice / Score / Noul
jev_chooseSelect one ID from app-owned candidates
jev_stepSelect, check confidence, and return the execution payload
jev_validateLocally verify that an ID belongs to the candidate set

The general MCP/CLI jev_choose and jev_step support mock for testing. The extension-specific MCP and jev_browser_run are Live-only.

What has been verified

Verified locallyNot yet verified
Recorded Python and JavaScript regression checksLive Jev authentication, decision quality, and inference latency
Six local page transitions and completion in actual Aside — decisions supplied by a fixture stubSuccess rates across general websites
Native Messaging, ON/OFF, and backup/recovery in temporary profilesExtension installation and MCP registration in a real user account
Local demo UI, input errors, and narrow-screen layoutForced routing of all built-in Aside tools

See validation records for exact check counts and localization evidence.

Execution boundaries
  • OFF removes the managed instruction block from the selected profile. The status-check skill file remains.
  • OFF and timeouts do not undo browser actions already sent. If execution_state: unconfirmed, inspect the page before resuming manually.
  • Completion conditions and action rules are task-specific. This has not been validated as a universal browser agent.
  • Context sanitization limits size and masks credential patterns. It does not identify every possible personal or secret value.
  • The hero is generated concept artwork. Actual UI and execution evidence are identified in the validation record.

Development

uv sync --extra dev
uv run pytest -q
node --test tests/test_extension_controller.mjs
uv run python scripts/benchmark_latency.py --samples 30

# Verify six localhost transitions in actual Aside.
# This exercises browser execution without calling the Jev API.
uv run python scripts/verify_browser_runtime.py
Read moreContents
Extension setupLocal connection, account setup, ON/OFF, disabling
Feature mapEntry points, source files, checks
ValidationTests, runtime evidence, measurements, limits
LocalizationEnglish defaults, Korean dictionaries, localized media
ChangelogChanges by version

Aside developer interface · TypeSafe SDK · MIT License
Defined candidates. Inspectable decisions. Controlled execution.