AGENTS.md
+65 −20
https://raw.githubusercontent.com/chriswu727/argus/HEAD/AGENTS.md
− argus-mcp --doctor # macOS Screen Recording + Accessibility check− The default profile is `core`. Use `--tool-profile screen` for native− macOS review and `--tool-profile full` only when the broader network,− storage, tabs, crawl, and coordinate surface is needed. The− | `observe()` | URL + interactive elements (description-keyed) + visible feedback + counts + ARIA + viewport state. Read this first, after every action. |− | `coverage_update(goal, status, evidence)` | Mark a goal `in_progress` before its journey to open a precise evidence window. `exercised` and `blocked` require an explanation and automatically link URLs, value-redacted actions, screenshots, checks, and findings; Argus never guesses semantic completion. |− | `click_what(description)` | Click the element matching `description`. Returns the top candidates if ambiguous — rephrase rather than guess. |− | `verify_persistence(expect, target_text, after_url)` | Forces a fresh GET; reports whether `target_text` is `present` / `absent`. The "Saved!" toast is not proof — this is. |− | `capsule_save(name, liveness_marker)` / `capsule_restore(name)` | Snapshot the logged-in/seeded state (cookies+storage) after minting it through the UI, then restore it later (with a mandatory live/stale re-check). Restore is a CLEAN replace, so save→branch A→restore→branch B runs two journeys from a byte-identical state for differential testing. |− | `end_session()` | Close session; write HTML, JSON, JUnit, and SARIF reports with separate tool-call and recorded-step counts. |− coverage_update(goal, "in_progress") # opens this goal's evidence window− observe() # OBSERVE — what changed?− record_bug(..., verify={...}) # RECORD — verify clause attaches a receipt− coverage_update(goal, "exercised", # COVER — preserve the observed evidence− evidence)− ... repeat ...− end_session() # reports completed + unfinished coverage− - `argus-mcp --doctor` — macOS permission probes for screen mode.− - `argus-mcp --tool-profile core|screen|full` — control discovery size.− - `python -m argus.bench --target all` — reproduce the 34 / 34 matrix.+ Use Python 3.11 or newer. With an older default interpreter, launch with+ `uvx --python 3.12 --from argus-testing argus-mcp`.+ argus-mcp --doctor # Chromium, report dir; on macOS also screen grants+ The default `web` profile has 29 tools covering the complete testing loop,+ including `regression_check`. For structured-result-aware hosts, add+ `--response-mode compact`. Earlier `agent` and `core` names select `web`.+ `--response-mode delta` is opt-in for snapshot-aware clients. Only observation+ fields listed in the protocol may be inherited from an exact `base_id`; action+ and verification results are current-call-only. If context or a base is missing,+ call `observe` for full state. Never infer a passing check from unchanged fields.+ Use `python -m argus.install_check` to verify installed versions and stdio without+ a browser or model. From a source checkout, `python -m argus_lab.evaluation.overhead`+ gives deterministic byte measurements. Bytes are not model tokens. Monitoring retains numeric+ overhead only; do not add page content or arguments to metrics.+ Use `--tool-profile screen` for native+ macOS review and `--tool-profile advanced` only when network mocks,+ cookies/storage, tabs, coordinates, crawling or link/performance probes are+ needed. `full` adds every screen tool as well. The+ ## Structured results (0.8)+ Read `structuredContent.data`+ for operation-specific evidence where available; text and images remain for+ compatibility. `status: completed` means the tool ran, not that the application+ passed. Inspect expectation matches, finding verdicts and export warnings.+ Progress notifications describe actual phases, not percentages or proof of+ coverage. Missing live notifications do not mean execution stopped; the final+ result includes captured stages. See [the protocol](docs/agent-protocol.md).+ | `observe()` | URL, targets, feedback, counts, coverage and next-check hints. Reuse post-action observations; call again only for missing or stale evidence. |+ | `coverage_update(goal, status, evidence)` | Accepts one goal or a list of related goals. Mark `in_progress` before the shared journey. `exercised` and `blocked` require observed evidence and link URLs, value-redacted actions, screenshots, checks and findings. Invalid batches make no changes. |+ | `click_what(description)` | Click the element matching `description`; a target description from `observe` can be passed as-is. Returns the top candidates if ambiguous — rephrase rather than guess. |+ | `verify_persistence(expect, target_text, after_url)` | Forces a fresh GET; returns target presence and the page observation. Check persistence once, repeat only to resolve uncertainty. A matching symptom is not proof of a semantic defect. |+ | `capsule_save(name, liveness_marker)` / `capsule_restore(name)` | Snapshot cookies and page storage after establishing state through the UI. Restore replaces the captured client state and checks a saved liveness marker when provided; without one, validity remains unverified. It does not reset backend data or guarantee identical application state across journeys. |+ | `export_test(finding_id, run=False)` | Turn a finding verified by a fresh-load text check into a standalone Playwright test that fails while the bug is present and passes once fixed. Steps it cannot translate are marked TODO; sensitive inputs come from environment variables. `run=true` repeats the journey's writes, so use it only with the user's authority. |+ | `end_session(coverage_updates=...)` | Optionally submit explicit final exercised/blocked goals with evidence, then close and export reports. The entire batch validates before shutdown; invalid updates keep the session open. |+ coverage_update([goal_a, goal_b], "in_progress")+ # read returned observation; observe only if needed+ record_bug(..., verify={...}) # RECORD — use suggested_verify for persistence+ ... repeat; use coverage_update for mid-session milestones ...+ end_session(coverage_updates=[ # final coverage + reports in one call+ {"goal": [goal_a, goal_b], "status": "exercised", "evidence": evidence}+ ]) # preserves unfinished goals
Showing the first 40 of each.