Back to App Store

Bowmark

Bowmark AI · io.pilot.bowmark
Navigation cheatsheets for public websites, so agents run cheaper, faster, and more accurately.
Web & Automation Live on catalogue
Install
pilotctl appstore install io.pilot.bowmark
v0.1.0
Version
3
Methods
8.7 MB
Size
shareable
Sandbox
macOS · Linux
Platforms

About Bowmark

Bowmark gives agents a pre-computed cheatsheet for the task at hand. A cheatsheet is a compact, ready-to-run answer for one task on one site: a parameterized URL shortcut and/or a short ui_procedure of UI steps. Instead of burning tokens re-reading a site's DOM and guessing its way through the page, your agent calls ask({ site, task }) and gets the exact path back. It spends less, finishes sooner, and lands on the right action the first time.

Bowmark is free to use — no signup and no API key to manage. It's plain request/response REST — no websockets, no server-side browser, no async jobs. Your agent runs the cheatsheet in its own browser; Bowmark only supplies the path.

Methods. bowmark.ask — give it a site and a plain-English task and it returns the cheatsheet: a URL shortcut (a template with {name} slots you fill and navigate) and/or a ui_procedure of steps to run in order, plus an id. Call it before any browser action, in place of exploring the page yourself, and execute open-loop. bowmark.report_outcome — after running a cheatsheet, report whether every step ran exactly as written; a failure triggers a re-crawl that repairs the path for the next agent, so report false on any deviation even if you still got the answer.

Syntax & edge cases. site is a registrable domain, optionally with a product surface (google.com, docs.stripe.com, google.com/maps); task is intent, never a URL. Request the signed-in view with variants: { auth_state: "logged_in", role: "owner" } (also locale / region / currency). A step may be flagged irreversible (confirm first) or requires_user_input (stop and ask the user). Non-ok statuses: no_useful_data / site_not_supported → browse manually; ambiguous_scope → retry with scopeHint; rate_limited → back off until error.retry_after (only new cheatsheet synthesis is capped). Skip it for localhost, RFC1918 IPs, and open-ended search with no destination.

Methods · 3

bowmark.ask
Give it a site and a plain-English task (e.g. 'find Apple's latest 10-K') and it returns a ready-to-run cheatsheet — a URL shortcut to fill and navigate and/or a short ui_procedure of steps. Call it before any browser action, in place of exploring the page yourself, and execute open-loop. status=ok returns an id; no_useful_data/site_not_supported → browse manually; ambiguous_scope → retry with scopeHint; rate_limited → back off. Pass variants:{auth_state:'logged_in'} for signed-in surfaces. Intent, not a URL.
bowmark.report_outcome
After running a cheatsheet from ask, report whether every step ran exactly as written (envelope_id + success, optional evidence). success=true only if it ran clean — no retries, no raw-JS fallback, no extra clicks; false on any deviation, even if you still got the answer. Honest results trigger a re-crawl that keeps the cheatsheet fresh.
bowmark.help
Discovery: every method with params, kind, and latency class.

Full usage demo

When your agent is about to act on a known public website — call bowmark.ask({site, task}) first to get a ready-to-run URL shortcut or UI procedure instead of exploring the DOM.

Run this first — Get a navigation cheatsheet for a site + task
Call
pilotctl appstore call io.pilot.bowmark bowmark.ask '{"site":"sec.gov","task":"find Apple's latest 10-K filing"}'
{"status":"ok","id":"...","shortcut":{"template":"https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK={ticker}&type=10-K"}}

Worked examples

Ask for a UI procedure on a product surface
Call
pilotctl appstore call io.pilot.bowmark bowmark.ask '{"site":"google.com/maps","task":"get directions from SFO to downtown"}'
{"status":"ok","id":"...","ui_procedure":{"steps":[...]}}
Request the signed-in surface
Call
pilotctl appstore call io.pilot.bowmark bowmark.ask '{"site":"github.com","task":"create a new private repo","variants":{"auth_state":"logged_in","role":"owner"}}'
{"status":"ok","id":"...","ui_procedure":{"steps":[...]},"variants_assumed":{...}}
Report the outcome to keep cheatsheets fresh
Call
pilotctl appstore call io.pilot.bowmark bowmark.report_outcome '{"envelope_id":"<id-from-ask>","success":true}'
{"id":"..."}

What it costs

managed — no per-user charge today free budget · billed in requests (managed key, currently unmetered)
OperationPriceNotes
bowmark.askfreethe nav-recipe call (POST /v1/ask); managed key, no per-op meter currently
bowmark.report_outcomefreefeedback that triggers a re-crawl; no charge

Managed key with quota 0 — there is no per-user dollar charge today; both methods are free to call.

Good to know

  • Put intent in `task`, never a URL — 'find Apple's latest 10-K', not a link.
  • Execute the cheatsheet open-loop — don't re-snapshot the DOM to verify what it already documents.
  • A step flagged `irreversible` needs user confirmation; `requires_user_input` means stop and ask.
  • report_outcome success=false on ANY deviation (a retry, raw-JS fallback, extra click) even if you got the answer.
  • Non-ok statuses (no_useful_data / site_not_supported / ambiguous_scope / rate_limited) → browse manually or retry with scopeHint.
  • Skip Bowmark for localhost, RFC1918 IPs, and open-ended search with no destination.

Next

  • io.pilot.bowmark bowmark.help '{}'

What’s New

v0.1.0 Latest
  • Initial release — REST adapter over the Bowmark API: bowmark.ask (/v1/ask) and bowmark.report_outcome (/v1/outcomes).
  • Free to use — no signup or API key; your agent runs the returned cheatsheet in its own browser.

Platform Compatibility

macOS Apple Silicon
5.1 MBSupported
macOS Intel
4.7 MBSupported
Linux arm64
4.8 MBSupported
Linux amd64
4.4 MBSupported
You might also like

More in Web & Automation