Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
99 commits
Select commit Hold shift + click to select a range
7bf3a04
feat(daemon): Jev action space, questions and per-field fill heads
karngyan Sep 26, 2026
ed23cb7
feat(daemon): reins do stop rules (risky labels, same site, no progress)
karngyan Sep 26, 2026
9f2270c
fix(daemon): reins do risky check matches the goal whole-word, clicks…
karngyan Sep 26, 2026
4375dbb
fix(daemon): reins do goal allowance uses Unicode word boundaries
karngyan Sep 26, 2026
9ab8f57
feat(daemon): per-tab run memory for reins do --continue
karngyan Sep 26, 2026
6a62a86
feat(daemon): the reins do loop
karngyan Sep 26, 2026
e26d460
fix(daemon): reins do loop breaker only overrides its own stop rules
karngyan Sep 26, 2026
d2ab050
feat(cli): reins do output and next-command hints
karngyan Sep 26, 2026
9b878ad
fix(cli): single-quote reins do next commands so page labels never ex…
karngyan Sep 26, 2026
1cd6676
feat(daemon): reins do behind /rpc, audited, aborted on hang-up and r…
karngyan Sep 26, 2026
ae2da9b
fix(daemon): reins do rejects bad params as a 400 line, checks abort …
karngyan Sep 26, 2026
b7a7742
feat(cli): reins do
karngyan Sep 26, 2026
39eb018
fix(cli): route the reins do verify hint and list --browser/--json in…
karngyan Sep 26, 2026
28e39a0
docs: reins do in the skill and command reference
karngyan Sep 26, 2026
d79ea24
chore: reins do benchmark script
karngyan Sep 26, 2026
1d26ab6
fix(bench): close tabs on interrupt, lock the manual arm to UI steps,…
karngyan Sep 27, 2026
a8622c2
fix(bench): async runner with killable children, allowlisted manual a…
karngyan Sep 27, 2026
61aa640
fix(cli): wire --timeout into the reins do loop signal; widen the CLI…
karngyan Sep 27, 2026
eac5511
fix(cli): keep dialog reads out of run state, pin the start host, tid…
karngyan Sep 27, 2026
de0103d
fix(cli): make the dialog next line runnable; skill notes on fills an…
karngyan Sep 27, 2026
a5a381d
fix(extension): tab url/title under a dialog, live connectivity in th…
karngyan Sep 27, 2026
8419bb5
fix(bench): a timed-out row is never verified
karngyan Sep 27, 2026
8d3e430
ci: run the extension real-browser suite with Chrome
karngyan Sep 27, 2026
2ac0ad6
chore: bump @reins/extension in the reins key and reins do changesets
karngyan Sep 27, 2026
92728b2
docs: scroll delta 560, DOM-can-change clause, and the plan's as-buil…
karngyan Sep 27, 2026
7a33a86
fix(bench): flights task searches a future date
karngyan Sep 27, 2026
adce1d1
fix(bench): flights checker accepts any currency sign
karngyan Sep 27, 2026
22b4ee5
fix(do): a hang-up during the first observation ends the run
karngyan Sep 27, 2026
9f11248
fix(cli): --help/-h on any tool command prints its usage and exits 0
karngyan Sep 27, 2026
2a02134
fix(cli): rpcFailure back below helpText's JSDoc, with generic wording
karngyan Sep 27, 2026
af13aa2
fix(do): a goal's underscore no longer waives a risky label
karngyan Sep 27, 2026
4acdbd1
fix(do): shell-quote the --browser id in next: lines
karngyan Sep 27, 2026
d6ec994
fix(do): a click that opens a dialog counts as a page change
karngyan Sep 27, 2026
aca41a8
fix(do): a bad fill name never breaks the 400 across lines
karngyan Sep 27, 2026
1afd4a6
fix(extension): popup disables Cancel and Remove while a key save is …
karngyan Sep 27, 2026
adc7f3d
fix(extension): offscreen reins:call rejects a missing method
karngyan Sep 27, 2026
df0ba43
fix(cli): hidden key prompt takes backspace and Ctrl-D
karngyan Sep 27, 2026
4123e73
fix(cli): credentials file errors are surfaced, never read as "not set"
karngyan Sep 27, 2026
d22f955
fix(do): validateChoice checks own probabilities with Object.hasOwn
karngyan Sep 27, 2026
8744e2d
fix(bench): Ctrl-C during reins open exits 130; interrupted rows say so
karngyan Sep 27, 2026
c8203a5
docs(skill): reins do — goal-word pre-approval, and which next: lines…
karngyan Sep 27, 2026
e2abdca
docs(web): commands page description mentions reins do
karngyan Sep 27, 2026
71defe3
feat(do): SUBMIT_SEARCH — press Enter in a search field that holds th…
karngyan Sep 27, 2026
f878362
docs(do): SUBMIT_SEARCH in the spec's operations and the plan's as-bu…
karngyan Sep 27, 2026
9353afc
feat(extension): jev_act submit presses Enter in a search-like field
karngyan Sep 27, 2026
e8f9f97
fix(extension): settle only on real frames, never on a timer between …
karngyan Sep 27, 2026
ad9397d
fix(do): three stale acts in a row are stuck, and Jev is told why
karngyan Sep 27, 2026
ecf319a
feat(do): follow a link that opens a new tab
karngyan Sep 27, 2026
d4c2902
feat(do): report Jev input tokens per invocation
karngyan Sep 27, 2026
4600f39
chore: reins do changeset covers SUBMIT_SEARCH, new-tab follow, stale…
karngyan Sep 27, 2026
f5d854d
fix(do): after submit, wait for the search to take effect before the …
karngyan Sep 27, 2026
04e987f
chore(bench): record Jev input tokens per do run
karngyan Sep 27, 2026
caf953d
docs(bench): write up reins do vs. step-by-step benchmark
karngyan Sep 27, 2026
cfcb092
fix(extension): hand an opened tab over only once its page has loaded
karngyan Sep 27, 2026
559348f
fix(do): a stale act is never an outcome for the dialog stop or the -…
karngyan Sep 27, 2026
5a5649f
fix(do): the first read after a retarget never counts as the tab bein…
karngyan Sep 27, 2026
3fe6b55
fix(do): a retarget onto a busy tab keeps the run's own lock
karngyan Sep 27, 2026
2fd7498
fix(cli): rpcFailure no longer sits under the Daemon JSDoc
karngyan Sep 27, 2026
19c20d9
fix(cli): reins key clear removes a corrupt credentials file
karngyan Sep 27, 2026
41b9b57
fix(do): token counts past a million print as M
karngyan Sep 27, 2026
e892f3e
docs(do): the opened tab is activated before its host is policy-checked
karngyan Sep 27, 2026
39b3133
fix(do): singular step and jev call in the summary line
karngyan Sep 27, 2026
654e892
fix(ci): run the real-browser suite against the Chrome CI installs, a…
karngyan Sep 27, 2026
731a919
fix(extension): emulate page focus on every debugger attach
karngyan Sep 27, 2026
115e488
fix(do): submit the search just typed when Jev is unsure what to do next
karngyan Sep 27, 2026
085f7ed
fix(do): a press that landed elsewhere is stale, not an error
karngyan Sep 27, 2026
4a9b757
revert: drop the submit-when-unsure-after-typing guard
karngyan Sep 27, 2026
79392e2
docs(bench): report run 3 on the shipped build and what the live roun…
karngyan Sep 27, 2026
8804595
feat(bench): v2 suite — 7 fixtures, 15 live tasks, dev/holdout split,…
karngyan Sep 27, 2026
57948a4
feat(do): "Accept" inside a cookie/consent banner is not a risky click
karngyan Sep 27, 2026
09e679f
fix(do): observe waits for a navigating tab and re-attaches after a drop
karngyan Sep 27, 2026
e6a922c
fix(do): a stop verdict right after typing a search query submits it …
karngyan Sep 27, 2026
3b6c27d
fix(do): after a click or typed value, wait for the page's reaction t…
karngyan Sep 27, 2026
9bcb430
fix(do): type a value key by key, and resume after a dropped debugger…
karngyan Sep 27, 2026
a6393ae
fix(do): name an unlabelled control by its row or group, never by its…
karngyan Sep 27, 2026
47d2c0b
feat(do): self-check every DONE with a yes/no question, and report it…
karngyan Sep 27, 2026
3d82d73
fix(bench): cambridge goal no longer names the consent button
karngyan Sep 27, 2026
45584e0
fix(do): a rounded-probability tie is not an unusable answer
karngyan Sep 27, 2026
2eaa6e1
feat(do): the DONE self-check reports its probability, never refuses
karngyan Sep 27, 2026
444d475
feat(bench): fresh holdout2 set, holdout v1 folded into dev
karngyan Sep 27, 2026
cfca091
feat(do): the snapshot reads through open shadow roots
karngyan Sep 27, 2026
7d1e41a
feat(do): a stuck run is self-checked, and done when its page is the …
karngyan Sep 27, 2026
c3eaa8f
feat(bench): holdout2 folded into dev after its first run
karngyan Sep 27, 2026
193f949
feat(do): a control is named by what its shadow root or slot renders
karngyan Sep 27, 2026
10f418c
fix(click): a link to a new tab is opened by the extension, not by Ch…
karngyan Sep 27, 2026
f72c204
feat(do): off-screen pagers and goal-named controls are in the observ…
karngyan Sep 27, 2026
3925732
feat(do): the observation waits for in-flight data requests
karngyan Sep 27, 2026
a6e96a5
feat(do): no refocus click on the field just typed into; clicks reach…
karngyan Sep 28, 2026
6bc4fff
bench(do): holdout3, a fresh unseen holdout set (2 fixture + 6 live t…
karngyan Sep 28, 2026
08f5d39
fix(bench): pin xe's start pair so an earlier run can't pre-solve it
karngyan Sep 28, 2026
a7dd08b
fix(bench): xe supplies the currency codes it asks reins do to pick
karngyan Sep 28, 2026
03db3ee
feat(do): a leading www. never makes a different site
karngyan Sep 28, 2026
e0c4a98
feat(do): a NONE fill head retargets to the field whose head names a …
karngyan Sep 28, 2026
b65c466
docs(skill): reins do — when to use it, how to call it, what each out…
karngyan Sep 28, 2026
e2974d1
fix(bench): an expected stop is scored on reins do only; the manual a…
karngyan Sep 28, 2026
92040a0
docs(bench): reins do v2 benchmark, 38 tasks, dev and unseen holdout,…
karngyan Sep 28, 2026
a5dc1d3
feat(extension): popup redesign pass, calm Jev section, dark mode
karngyan Sep 28, 2026
4177ed8
fix(extension): no reins do pitch while replacing a key that is alrea…
karngyan Sep 28, 2026
9ce8041
chore: keep planning notes and raw benchmark runs out of the repo
karngyan Sep 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .changeset/reins-do.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
"@karnstack/reins": minor
"@reins/extension": minor
---

`reins do '<goal>'` hands a small browser task to TypeSafe's Jev model: it reads the page, picks each click, field and dropdown in about 0.2 s, and types only the values the agent passed with `--fill`. It stops and prints the exact next command for risky clicks (buy, send, delete, ...), missing values, dialogs, leaving the site, or no progress. `--continue` resumes the run, and `--confirm '<label>'` pre-approves a click. Exit codes: 0 done, 2 stopped for input, 1 error. On the extension side: the `jev_observe` / `jev_act` handlers (site tier `full`), per-tab JS dialog tracking, and a pre-action re-check of each chosen element. Jev can also submit a search field with Enter (`SUBMIT_SEARCH`, search-like fields only), a click that opens a new tab moves the run to that tab, three stale acts in a row stop the run as `stuck`, and the summary line reports the Jev input tokens used. A click on a link that opens a new tab (`target="_blank"`) — from `reins click` or `reins do` — no longer lets Chrome raise its window over the app you are working in: the extension opens the tab itself, next to the current one and active; `reins click` reports it as `ok — opened tab <id> (now active)` (`openedTabId` in `--json`).
7 changes: 7 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,17 @@ jobs:
steps:
- uses: actions/checkout@v7.0.0
- uses: jdx/mise-action@v4.2.0
# The extension's real-browser suite (pointer/keys/dialogs, and the
# test that password and hidden values never reach a jev_observe
# result) is skipped without a Chrome binary; give the runner one.
- uses: browser-actions/setup-chrome@v2.2.0
id: chrome
- run: pnpm install --frozen-lockfile
- run: pnpm lint
- run: pnpm typecheck
- run: pnpm test
env:
REINS_TEST_CHROME: ${{ steps.chrome.outputs.chrome-path }}
- run: pnpm build
- run: pnpm zip
- uses: actions/upload-artifact@v4
Expand Down
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,9 @@ packages/cli/extension/
coverage/
*.log
.DS_Store
bench-out/

# Planning notes (specs, plans, fix-loop ledgers) stay local; the code is the record.
docs/superpowers/
# bench-do.mjs summary output
bench-do*.json
10 changes: 9 additions & 1 deletion biome.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,15 @@
"$schema": "https://biomejs.dev/schemas/2.5.1/schema.json",
"vcs": { "enabled": true, "clientKind": "git", "useIgnoreFile": true },
"files": {
"includes": ["**", "!**/dist", "!**/.turbo", "!**/*.svg", "!.claude", "!**/routeTree.gen.ts"]
"includes": [
"**",
"!**/dist",
"!**/.turbo",
"!**/*.svg",
"!.claude",
"!**/routeTree.gen.ts",
"!packages/cli/scripts/bench/fixtures"
]
},
"css": { "parser": { "tailwindDirectives": true } },
"formatter": { "enabled": true, "indentStyle": "space", "indentWidth": 2, "lineWidth": 100 },
Expand Down
491 changes: 491 additions & 0 deletions docs/benchmarks/2026-09-reins-do.md

Large diffs are not rendered by default.

Loading
Loading