Inspiration
Most assistants wait for a prompt. Yet the browser already holds the context: a search that never reached an answer, a product page you came back to twice, a service you signed up for yesterday, a project that went quiet. While planning this entry, one of those signals alone (first visits to new sites) was enough to reconstruct every service the maker had signed up for in the previous two days. That made the question concrete: can an assistant start from what you already did, propose the next step, and still never act without your rules?
The second spark was cross-border shopping. People keep revisiting Korean products they cannot easily buy, and nobody tells them what the item would cost delivered, or whether buying locally is simply cheaper.
What it does
Beforehand turns past browsing actions into follow-ups you can approve.
- Detects four kinds of signals from local history: an unresolved search, repeated visits to the same host, a first signup or onboarding visit, and a task that went quiet. Repeated views of a Korean product are a fifth, commerce-specific signal.
- Nemotron judges usefulness. Nemotron 3 Ultra triages each signal (ACT or SKIP) against a kind-specific evidence rubric.
- Your rules decide. A deterministic mandate file allows, holds or blocks each action. The model never overrides it. Checkout is always blocked: the agent stops at a quote.
- Act or stop. Allowed actions run a skill: a Tavily-backed research brief for an unresolved search, a setup check for a new signup, a short synthesis for a recurring site, a gentle resume note for a dropped task, or a Korea delivered-price quote from Korea Concierge, an external quote service.
- Proves what happened. Every decision is written to a local JSONL trace with the mandate digest, reason and outcome.
The hosted demo runs on a fictional persona's browsing history and shows the same 9 signals under three rule profiles. In the saved LIVE run (Oct 9, 2026, 03:02 UTC):
| Profile | Acted | Skipped by model | Blocked by rules | Held for your OK |
|---|---|---|---|---|
| Allow research and quotes | 6 | 3 | 0 | 0 |
| Block research and quotes | 2 | 3 | 4 | 0 |
| Hold research and quotes | 2 | 3 | 0 | 4 |
Same signals, different outcomes, decided by your rules rather than the model.
One LIVE quote shows why the agent is worth trusting: for a toner the persona kept revisiting, the Korea quote came back at an estimated USD 76.70 delivered (USD 70.88 paid at checkout plus USD 5.82 duty estimated on delivery), against a local reference price of USD 17.85. Beforehand told the user to buy locally.
The Chrome extension brings the same backend to the page you are viewing: on 22 supported shops in the US, UK, Japan, Taiwan and Hong Kong it shows the item's Korea delivered price or up to two Korean alternatives. It sends only the product name, brand and delivery country. No history permission, no AI key needed.
How we built it
- Agent loop: LangGraph graph
triage -> mandate -> act, in Python 3.12 (browsing/agent.py). - Nebius Token Factory + NVIDIA Nemotron 3: Ultra for triage (the judgment step, 8,192-token ceiling), Nano for the skill text. Model IDs are resolved at runtime from the Token Factory
/v1/modelscatalog by tier name, not hard-coded (browsing/providers.py). Nano calls carry/no_thinkin the system message, and an empty or truncated answer raises an error instead of passing as success. - Tavily: a functional runtime call to the Tavily Search API powers the research skill. It fires only when triage says ACT and the mandate permits research; SKIP, hold and block deliberately avoid the call. Tavily is the default search provider; other providers can be swapped in through one interface.
- Korea Concierge: an external quote API called with only a scrubbed product name and destination. Quotes come back with a duty breakdown and sources; the agent summarises them with Nano and never creates an order.
- Nebius AI Cloud: the demo is a container image on a Nebius Serverless Endpoint (CPU, one replica) with provider keys held in a secret store. A daily run budget (default 20 attempted runs per UTC day) and a spend guard cap public cost.
- Token Factory as a build tool: the first browsing modules (URL scrubbing, ingest, classification) were generated by Nemotron under test-first development, with our own run-verify-fix loop around each generation.
- Privacy by construction: raw history stays on the device; only scrubbed minimal fragments reach a model. The public demo uses entirely synthetic history, and the persona generator refuses to emit a dataset unless every planted signal is detected.
- Extension: Chrome MV3, plain JavaScript modules, no build dependencies.
- Tests: 589 tests pass in the browsing suite and 150 in the extension suite (fake network fixtures), both run from the public repository.
Challenges we ran into
- Nemotron's answer was not where we expected it. With a default OpenAI-compatible call, the model spent its budget reasoning and returned an empty
content. We had to treat an empty answer as an error, add/no_think, and size token ceilings for reasoning plus output. - Usefulness and permission kept blurring. Early prompts let the model refuse actions it thought were not allowed. We separated the two: the model judges only usefulness, and a deterministic mandate decides permission.
- Honest labels in a demo. A cached walkthrough can look like live output. Every result carries a LIVE or CACHED label, and a visitor's live run never replaces the reviewed LIVE result on the shared page.
- Shipping a public repo from a private workspace. We extracted only the agent and extension with history, then ran a gate over every tracked file and every commit for personal identifiers, keys and real browsing domains.
Accomplishments that we're proud of
- The rules, not the model, decide what runs, and the demo makes that visible in one comparison.
- The agent will tell you not to buy: its first LIVE Korea quote recommended buying locally.
- Zero account permissions: no OAuth, passwords or email access.
- One codebase serves the self-hosted agent, the public demo and the extension's backend.
What we learned
- Reasoning models need explicit contracts at the API boundary. Silence (empty content with a clean
stop) is the dangerous failure, not an exception. - One-shot code generation is not reliable even from a strong model; a generate, run, verify, fix loop that we own is what made Nemotron-written modules trustworthy.
- Splitting Ultra for judgment and Nano for everyday text matches cost to difficulty, but only once Nano's reasoning is suppressed.
What's next
- Get the extension through Chrome Web Store review (submitted Oct 11, 2026; until then it loads unpacked).
- Let users approve held actions in place instead of editing the rules and re-running.
- Topic clustering for recurring visits (today they group by host).
- Verify local Nemotron execution for a fully on-device setup.
Built With
- chrome
- docker
- javascript
- jsonl
- langgraph
- nebius-ai-cloud
- nebius-serverless
- nebius-token-factory
- nemotron-3-nano
- nemotron-3-ultra
- nvidia-nemotron
- python
- sqlite
- tavily
Log in or sign up for Devpost to join the conversation.