Hermes LoopHermes Loop
← All missions·cmom1nbxr0

SaaS landing page audit

Bug Hunter CrewWaiting approvalcreated 4h ago· completed 4h ago
Approval required

This mission finished running and is waiting for your decision. 1 approval pending — review below or in the approval inbox. Nothing leaves until you decide.

demo scenarioPre-seeded mission with full agent run history. Use Replay to watch the crew progress step-by-step.
Objective
Audit https://demo.acme-saas.test for conversion and accessibility issues.
Agents done
6/6
Progress
100%
Total tokens
4070
Total latency
4.18s
Created
Queued
Running
Receipt

A mission is one run of a crew. Agents execute in order; prompts, raw outputs, parsed JSON, tools, memory, approvals, and receipts are persisted.

What this page is

The black-box recorder for one mission.

Open receipt →
Each agent step
Saved with prompt, raw model output, latency, and token counts.
Raw model output
Stored verbatim alongside the parsed JSON, so you can replay or audit.
Parsed JSON
Validated against the agent's Zod schema; failures self-correct or fail loudly.
Tool calls
Every browser_qa_audit, web_snapshot, etc. is recorded with input + output.
Approvals
Risky outputs (drafts, trades, exports) wait for your decision before they count.
Receipt
A WorkflowReceipt with an integrity hash captures the whole run for the trust ledger.

This run finished and is parked on your approval. Open the panel below to decide.

Crew

Explorer Agentcompleted
Maps pages and key flows via real browser audit.
180220540ms
Flow Tester Agentcompleted
Tests signup/contact/checkout-style flows.
4104801240ms
Accessibility Agentcompleted
Checks labels, contrast notes, keyboard risks.
320360720ms
Copy Agentcompleted
Flags confusing or weak copy.
280240480ms
Bug Reporter Agentcompleted
Creates recommended fixes for each issue.
360280660ms
Report Agentcompleted
Drafts a client-ready QA report summary.
720220540ms

Run log

Explorer Agentexplorer
540ms400 tok
Prompt
[system]
You are Explorer Agent. When a URL is in the objective, call browser_qa_audit FIRST for a real browser crawl with screenshots + accessibility/CTA findings. If browser_qa_audit returns source='synthetic-fallback' (Playwright unavailable), call web_snapshot as a backup. JSON only.

[user]
Mission: Audit https://demo.acme-saas.test for conversion and accessibility issues.

If a URL is in the objective, call browser_qa_audit for it (use { url, maxPages: 3, viewport: "desktop", includeScreenshots: true }). Otherwise return JSON with EXACTLY this top-level shape (no wrapper): { "pagesChecked": [{ "url": "...", "title": "...", "role": "landing|signup|checkout|..." }] } — 3-6 pages.
Parsed output
{
  "pagesChecked": [
    {
      "url": "https://demo.acme-saas.test/",
      "title": "Landing",
      "role": "landing"
    },
    {
      "url": "https://demo.acme-saas.test/pricing",
      "title": "Pricing",
      "role": "pricing"
    },
    {
      "url": "https://demo.acme-saas.test/signup",
      "title": "Sign up",
      "role": "signup"
    },
    {
      "url": "https://demo.acme-saas.test/contact",
      "title": "Contact",
      "role": "support"
    }
  ]
}
Flow Tester Agentflow-tester
1240ms890 tok
Prompt
[system]
You are Flow Tester Agent. Identify functional issues in core flows. JSON only.

[user]
Pages: {
  "pagesChecked": [
    {
      "url": "https://demo.acme-saas.test/",
      "title": "Landing",
      "role": "landing"
    },
    {
      "url": "https://demo.acme-saas.test/pricing",
      "title": "Pricing",
      "role": "pricing"
    },
    {
      "url": "https://demo.acme-saas.test/signup",
      "title": "Sign up",
      "role": "signup"
    },
    {
      "url": "https://demo.acme-saas.test/contact",
      "title": "Contact",
      "role": "support"
    }
  ]
}

Return JSON with at least 2 issues. Use EXACTLY these shapes (no extra fields, only the listed enum values, no wrapper key):

{
  "issues": [{ "id": "BUG-001", "title": "<short bug title>", "category": "functional|accessibility|copy|performance|visual|security", "severity": "low|medium|high|critical", "page": "<url>", "evidence": "<concrete evidence string>" }],
  "reproductionSteps": [{ "issueId": "BUG-001", "steps": ["step 1", "step 2"], "expected": "<expected behavior>", "actual": "<actual behavior>" }]
}
Parsed output
{
  "issues": [
    {
      "id": "BUG-001",
      "title": "Signup CTA fires twice on rapid double-click",
      "category": "functional",
      "severity": "high",
      "page": "/signup",
      "evidence": "Network tab shows two POST /signup calls within 350ms. Server creates duplicate pending records."
    },
    {
      "id": "BUG-002",
      "title": "Pricing toggle (monthly/annual) does not persist on reload",
      "category": "functional",
      "severity": "medium",
      "page": "/pricing",
      "evidence": "Selection lost on refresh — no localStorage / URL param."
    },
    {
      "id": "BUG-003",
      "title": "Hero subheadline truncates on 360px viewports",
      "category": "visual",
      "severity": "low",
      "page": "/",
      "evidence": "Two-line clamp + small text size hides the value prop."
    }
  ],
  "reproductionSteps": [
    {
      "issueId": "BUG-001",
      "steps": [
        "Open /signup",
        "Fill email + password",
        "Double-click 'Create account' rapidly"
      ],
      "expected": "One signup record created; UI shows success.",
      "actual": "Two records created; UI shows generic 'try again' error."
    },
    {
      "issueId": "BUG-002",
      "steps": [
        "Open /pricing",
        "Toggle to 'Annual'",
        "Refresh the page"
      ],
      "expected": "Toggle stays on 'Annual'.",
      "actual": "Toggle reverts to 'Monthly'."
    }
  ]
}
Accessibility Agentaccessibility
720ms680 tok
Prompt
[system]
You are Accessibility Agent. JSON only.

[user]
Pages: {
  "pagesChecked": [
    {
      "url": "https://demo.acme-saas.test/",
      "title": "Landing",
      "role": "landing"
    },
    {
      "url": "https://demo.acme-saas.test/pricing",
      "title": "Pricing",
      "role": "pricing"
    },
    {
      "url": "https://demo.acme-saas.test/signup",
      "title": "Sign up",
      "role": "signup"
    },
    {
      "url": "https://demo.acme-saas.test/contact",
      "title": "Contact",
      "role": "support"
    }
  ]
}

Return JSON in EXACTLY this shape. extraIssues is optional — omit it if you have nothing to add. Each extraIssues entry, if present, MUST use this exact shape: { "id": "BUG-A11Y-001", "title": "<short>", "category": "accessibility", "severity": "low|medium|high|critical", "page": "<url>", "evidence": "<concrete>" }

{ "accessibilityNotes": ["..."], "extraIssues": [] }
Parsed output
{
  "accessibilityNotes": [
    "Primary CTA buttons relying on color alone for hover state — no underline or icon shift.",
    "Pricing tier cards have insufficient contrast on tier names (3.6:1).",
    "Signup form fields use placeholder as label — empty state is opaque to assistive tech.",
    "Skip-to-content link is missing."
  ],
  "extraIssues": [
    {
      "id": "BUG-004",
      "title": "Signup form fields missing visible labels",
      "category": "accessibility",
      "severity": "high",
      "page": "/signup",
      "evidence": "Labels are only in placeholder text; cleared on focus."
    }
  ]
}
Copy Agentcopy
480ms520 tok
Prompt
[system]
You are Copy Agent. Be specific, quote bad copy. JSON only.

[user]
Pages: {
  "pagesChecked": [
    {
      "url": "https://demo.acme-saas.test/",
      "title": "Landing",
      "role": "landing"
    },
    {
      "url": "https://demo.acme-saas.test/pricing",
      "title": "Pricing",
      "role": "pricing"
    },
    {
      "url": "https://demo.acme-saas.test/signup",
      "title": "Sign up",
      "role": "signup"
    },
    {
      "url": "https://demo.acme-saas.test/contact",
      "title": "Contact",
      "role": "support"
    }
  ]
}

Return JSON in EXACTLY this shape. extraIssues is optional — omit it if you have nothing to add. Each extraIssues entry, if present, MUST use this exact shape: { "id": "BUG-COPY-001", "title": "<short>", "category": "copy", "severity": "low|medium|high|critical", "page": "<url>", "evidence": "<quoted bad copy>" }

{ "copyNotes": ["..."], "extraIssues": [] }
Parsed output
{
  "copyNotes": [
    "Hero subheadline buries the value prop (\"...trusted by teams who care about quality\") — lead with the outcome.",
    "Pricing CTA reads \"Get started\" on every tier — should differ by tier (e.g., \"Start free\", \"Talk to sales\").",
    "\"Something went wrong\" error on signup gives no recovery path."
  ],
  "extraIssues": []
}
Bug Reporter Agentbug-reporter
660ms640 tok
Prompt
[system]
You are Bug Reporter Agent. Suggest concrete fixes. JSON only.

[user]
Issues so far: {
  "issues": [
    {
      "id": "BUG-001",
      "title": "Signup CTA fires twice on rapid double-click",
      "category": "functional",
      "severity": "high",
      "page": "/signup",
      "evidence": "Network tab shows two POST /signup calls within 350ms. Server creates duplicate pending records."
    },
    {
      "id": "BUG-002",
      "title": "Pricing toggle (monthly/annual) does not persist on reload",
      "category": "functional",
      "severity": "medium",
      "page": "/pricing",
      "evidence": "Selection lost on refresh — no localStorage / URL param."
    },
    {
      "id": "BUG-003",
      "title": "Hero subheadline truncates on 360px viewports",
      "category": "visual",
      "severity": "low",
      "page": "/",
      "evidence": "Two-line clamp + small text size hides the value prop."
    }
  ],
  "reproductionSteps": [
    {
      "issueId": "BUG-001",
      "steps": [
        "Open /signup",
        "Fill email + password",
        "Double-click 'Create account' rapidly"
      ],
      "expected": "One signup record created; UI shows success.",
      "actual": "Two records created; UI shows generic 'try again' error."
    },
    {
      "issueId": "BUG-002",
      "steps": [
        "Open /pricing",
        "Toggle to 'Annual'",
        "Refresh the page"
      ],
      "expected": "Toggle stays on 'Annual'.",
      "actual": "Toggle reverts to 'Monthly'."
    }
  ]
}

Return JSON: { "recommendedFixes": [{ "issueId": "...", "fix": "...", "effort": "S|M|L" }] }
Parsed output
{
  "recommendedFixes": [
    {
      "issueId": "BUG-001",
      "fix": "Disable submit on click + show loading state until response. Add idempotency key on the server.",
      "effort": "M"
    },
    {
      "issueId": "BUG-002",
      "fix": "Persist toggle in URL query param (?period=annual) and read on mount.",
      "effort": "S"
    },
    {
      "issueId": "BUG-003",
      "fix": "Bump base font and remove the line clamp on hero subheadline.",
      "effort": "S"
    },
    {
      "issueId": "BUG-004",
      "fix": "Add visible labels above each input; keep placeholders as hints.",
      "effort": "S"
    }
  ]
}
Report Agentreport
540ms940 tok
Prompt
[system]
You are Report Agent. Write a 4-6 sentence executive summary. JSON only.

[user]
Objective: Audit https://demo.acme-saas.test for conversion and accessibility issues.
Full context: {
  "explorer": {
    "pagesChecked": [
      {
        "url": "https://demo.acme-saas.test/",
        "title": "Landing",
        "role": "landing"
      },
      {
        "url": "https://demo.acme-saas.test/pricing",
        "title": "Pricing",
        "role": "pricing"
      },
      {
        "url": "https://demo.acme-saas.test/signup",
        "title": "Sign up",
        "role": "signup"
      },
      {
        "url": "https://demo.acme-saas.test/contact",
        "title": "Contact",
        "role": "support"
      }
    ]
  },
  "flow-tester": {
    "issues": [
      {
        "id": "BUG-001",
        "title": "Signup CTA fires twice on rapid double-click",
        "category": "functional",
        "severity": "high",
        "page": "/signup",
        "evidence": "Network tab shows two POST /signup calls within 350ms. Server creates duplicate pending records."
      },
      {
        "id": "BUG-002",
        "title": "Pricing toggle (monthly/annual) does not persist on reload",
        "category": "functional",
        "severity": "medium",
        "page": "/pricing",
        "evidence": "Selection lost on refresh — no localStorage / URL param."
      },
      {
        "id": "BUG-003",
        "title": "Hero subheadline truncates on 360px viewports",
        "category": "visual",
        "severity": "low",
        "page": "/",
        "evidence": "Two-line clamp + small text size hides the value prop."
      }
    ],
    "reproductionSteps": [
      {
        "issueId": "BUG-001",
        "steps": [
          "Open /signup",
          "Fill email + password",
          "Double-click 'Create account' rapidly"
        ],
        "expected": "One signup record created; UI shows success.",
        "actual": "Two records created; UI shows generic 'try again' error."
      },
      {
        "issueId": "BUG-002",
        "steps": [
          "Open /pricing",
          "Toggle to 'Annual'",
          "Refresh the page"
        ],
        "expected": "Toggle stays on 'Annual'.",
        "actual": "Toggle reverts to 'Monthly'."
      }
    ]
  },
  "accessibility": {
    "accessibilityNotes": [
      "Primary CTA buttons relying on color alone for hover state — no underline or icon shift.",
      "Pricing tier cards have insufficient contrast on tier names (3.6:1).",
      "Signup form fields use placeholder as label — empty state is opaque to assistive tech.",
      "Skip-to-content link is missing."
    ],
    "extraIssues": [
      {
        "id": "BUG-004",
        "title": "Signup form fields missing visible labels",
        "category": "accessibility",
        "severity": "high",
        "page": "/signup",
        "evidence": "Labels are only in placeholder text; cleared on focus."
      }
    ]
  },
  "copy": {
    "copyNotes": [
      "Hero subheadline buries the value prop (\"...trusted by teams who care about quality\") — lead with the outcome.",
      "Pricing CTA reads \"Get started\" on every tier — should differ by tier (e.g., \"Start free\", \"Talk to sales\").",
      "\"Something went wrong\" error on signup gives no recovery path."
    ],
    "extraIssues": []
  },
  "bug-reporter": {
    "recommendedFixes": [
      {
        "issueId": "BUG-001",
        "fix": "Disable submit on click + show loading state until response. Add idempotency key on the server.",
        "effort": "M"
      },
      {
        "issueId": "BUG-002",
        "fix": "Persist toggle in URL query param (?period=annual) and read on mount.",
        "effort": "S"
      },
      {
        "issueId": "BUG-003",
        "fix": "Bump base font and remove the line clamp on hero subheadline.",
        "effort": "S"
      },
      {
        "issueId": "BUG-004",
        "fix": "Add visible labels above each input; keep placeholders as hints.",
        "effort": "S"
      }
    ]
  },
  "report": {
    "reportSummary": "Audit of demo.acme-saas.test surfaced 4 issues across 4 pages. Two high-severity items — signup duplicates on double-click and missing form labels — should land this sprint. The remaining two are quick wins (pricing toggle persistence and hero copy fix). Overall conversion friction is concentrated in the signup flow; addressing BUG-001 and BUG-004 together will give the largest lift."
  }
}

Return JSON: { "reportSummary": "..." }
Parsed output
{
  "reportSummary": "Audit of demo.acme-saas.test surfaced 4 issues across 4 pages. Two high-severity items — signup duplicates on double-click and missing form labels — should land this sprint. The remaining two are quick wins (pricing toggle persistence and hero copy fix). Overall conversion friction is concentrated in the signup flow; addressing BUG-001 and BUG-004 together will give the largest lift."
}

Tool calls

Intelligence applied

Memories injected
3
  • GLOBAL· hermes· pinned global
    [demo] Operator timezone: Europe/London (UK)
  • CREW· local· recent crew
    [demo] Use verbose, detailed bug reports
  • CREW· local· recent crew
    [demo] Bug Hunter — concise bullets in reports
Skills applied
2
  • landing-page-qa-checklist· bug-hunterapplied
    Landing-page QA checklist
  • tool-safety-checklist· globalapplied
    Tool-safety checklist

Pending decisions

Review these before the mission can be closed out.
Open inbox →

Deliverables

BUG_REPORTQA report: 4 issues across 4 pages
Executive summary

Audit of demo.acme-saas.test surfaced 4 issues across 4 pages. Two high-severity items — signup duplicates on double-click and missing form labels — should land this sprint. The remaining two are quick wins (pricing toggle persistence and hero copy fix). Overall conversion friction is concentrated in the signup flow; addressing BUG-001 and BUG-004 together will give the largest lift.

Issues (4)
BUG-001highfunctional
/signup
Signup CTA fires twice on rapid double-click
Network tab shows two POST /signup calls within 350ms. Server creates duplicate pending records.
BUG-002mediumfunctional
/pricing
Pricing toggle (monthly/annual) does not persist on reload
Selection lost on refresh — no localStorage / URL param.
BUG-003lowvisual
/
Hero subheadline truncates on 360px viewports
Two-line clamp + small text size hides the value prop.
BUG-004highaccessibility
/signup
Signup form fields missing visible labels
Labels are only in placeholder text; cleared on focus.
Accessibility notes
  • Primary CTA buttons relying on color alone for hover state — no underline or icon shift.
  • Pricing tier cards have insufficient contrast on tier names (3.6:1).
  • Signup form fields use placeholder as label — empty state is opaque to assistive tech.
  • Skip-to-content link is missing.
Copy notes
  • Hero subheadline buries the value prop ("...trusted by teams who care about quality") — lead with the outcome.
  • Pricing CTA reads "Get started" on every tier — should differ by tier (e.g., "Start free", "Talk to sales").
  • "Something went wrong" error on signup gives no recovery path.
Recommended fixes
BUG-001MDisable submit on click + show loading state until response. Add idempotency key on the server.
BUG-002SPersist toggle in URL query param (?period=annual) and read on mount.
BUG-003SBump base font and remove the line clamp on hero subheadline.
BUG-004SAdd visible labels above each input; keep placeholders as hints.

Suggested learnings

Deterministic post-mission suggestions. Save the ones that match how you want future runs to behave — nothing is auto-saved.
CREWAGENTwins · pattern
What worked · Bug Hunter
Mission "SaaS landing page audit" completed cleanly with all agents executing in sequence. Reuse this objective shape for similar requests.

Memory changes from this mission

Suggestions created
1
  • pendingCREW
    [demo] User wants accessibility issues grouped by severity
Memories used
3
  • GLOBAL· hermes
    [demo] Operator timezone: Europe/London (UK)
    pinned global
  • CREW· local
    [demo] Use verbose, detailed bug reports
    recent crew
  • CREW· local
    [demo] Bug Hunter — concise bullets in reports
    recent crew
Memory writes
0
  • None

Workflow receipt

RX-260430-003DRAFTrisk · LOWgenerated 4h ago
6 agent steps · 1 tool calls · 1 approvals (0 rejected) · 3 memories used · 1 deliverables · risk low
197da524eecfdbcfc46daf97bb4a505554ebdc753e0ac469044f0d99b2032253
View receipt →

Audit log

Apr 30, 10:03 PM
system
mission.started
Mission started: SaaS landing page audit
Apr 30, 10:03 PM
explorer
agent.started
explorer started
Apr 30, 10:03 PM
explorer
agent.completed
explorer completed
Apr 30, 10:03 PM
flow-tester
agent.started
flow-tester started
Apr 30, 10:03 PM
flow-tester
agent.completed
flow-tester completed
Apr 30, 10:03 PM
accessibility
agent.started
accessibility started
Apr 30, 10:03 PM
accessibility
agent.completed
accessibility completed
Apr 30, 10:03 PM
copy
agent.started
copy started
Apr 30, 10:04 PM
copy
agent.completed
copy completed
Apr 30, 10:04 PM
bug-reporter
agent.started
bug-reporter started
Apr 30, 10:04 PM
bug-reporter
agent.completed
bug-reporter completed
Apr 30, 10:04 PM
report
agent.started
report started
Apr 30, 10:04 PM
report
agent.completed
report completed
Apr 30, 10:06 PM
system
mission.waiting_approval
Mission complete — items awaiting approval.
Apr 30, 10:16 PM
memory
memory.selected
Selected 3 memory items for this mission.
Apr 30, 10:16 PM
memory
memory.injected
Injected 3 memory items into mission context.
1 approval pending on this mission.
Review now