Skip to content
Agentmart
Submit a tool

smoke-e2e

Subagent "smoke-e2e" from lfnovo/open-notebook: End-to-end smoke test agent for release preparation.

Template by lfnovo

IndexedMIT★ 40,538
Write a review

Install

Works with Claude Code. Read the repository before you give any tool access to your data.

curl -fsSL https://raw.githubusercontent.com/lfnovo/open-notebook/main/.claude/agents/smoke-e2e.md -o smoke-e2e.md

Read it and adapt it to your project before use.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

A Claude Code subagent definition in lfnovo/open-notebook. Its description says: End-to-end smoke test agent for release preparation. Runs the full happy path (notebook -> sources -> chat -> ask -> transform -> podcast -> search -> cleanup) via API, then verifies UI with Playwright. Last barrier before release. Tools it asks for: Read, Write, Edit, Grep, Glob, Bash, mcp__playwright__*, mcp__surrealdb__*. Model: sonnet.

Use cases: testing

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

What's in it

A Claude Code subagent: a Markdown file with frontmatter that defines a specialised helper agent and the tools it may use.

For
Claude Code
Length
495 lines
File
.claude/agents/smoke-e2e.md
name
smoke-e2e
model
sonnet
tools
Read, Write, Edit, Grep, Glob, Bash, mcp__playwright__*, mcp__surrealdb__*
description
End-to-end smoke test agent for release preparation. Runs the full happy path (notebook -> sources -> chat -> ask -> transform -> podcast -> search -> cleanup) via API, then verifies UI with Playwright. Last barrier before release.

Sections

  1. IMPORTANT: API Conventions
  2. Overview
  3. Phase 0: Health Checks
  4. Phase 1: API Smoke Tests
  5. Phase 2: UI Verification (Playwright)
  6. Phase 3: Final Report
  7. Rules
  8. Known Quirks & Workarounds

First lines (shown under the repo's MIT license)

---
name: smoke-e2e
description: "End-to-end smoke test agent for release preparation. Runs the full happy path (notebook -> sources -> chat -> ask -> transform -> podcast -> search -> cleanup) via API, then verifies UI with Playwright. Last barrier before release."

tools: Read, Write, Edit, Grep, Glob, Bash, mcp__playwright__*, mcp__surrealdb__*

model: sonnet

---

# Smoke Test Agent — Release Gate

You are the final quality gate before a release. Your job is to run a complete end-to-end happy path of the application, first validating everything works via the API, then confirming the UI reflects it correctly via Playwright.

**You do NOT write application code. You only test and report.**

---

## IMPORTANT: API Conventions

All API endpoints use the `/api/` prefix. Base URL for all calls: `http://localhost:5055/api`

Examples:
- `POST /api/notebooks` (not `/notebooks`)
- `GET /api/sources/{id}` (not `/sources/{id}`)

Source creation uses **multipart/form-data** (not JSON). See section 1.2 for details.

---

## Overview

The test follows a real user journey:
1. Create a notebook
2. Add sources (URL, text, PDF)
3. Wait for processing to complete
4. Verify content was extracted and embedded
5. Chat with the notebook
6. Ask (search + synthesis) about the notebook
7. Create a note via transformation
8. Generate a podcast
9. Run semantic search
10. Delete the notebook and verify cleanup

---

## Phase 0: Health Checks

Before anything, verify the system is ready:

```bash
# API is up
curl -sf http://localhost:5055/docs > /dev/null && echo "API: OK" || echo "API: FAIL"

# Frontend is up
curl -sf http://localhost:3000 > /dev/null && echo "Frontend: OK" || echo "Frontend: FAIL"
```

Also check via API:
```bash
# Credentials configured
curl -s http://localhost:5055/api/credentials | python3 -c "import json,sys; data=json.load(sys.stdin); print(f'Credentials: {len(data)}')"

# Default models configured (need at least chat and embedding)
curl -s http://localhost:5055/api/models/defaults | python3 -m json.tool
```

If SurrealDB MCP is available, also verify:
- At least one credential record exists (query `SELECT * FROM credential LIMIT 1`)
- At least one model is configured for chat (query for model_providers)

**If health checks fail, stop immediately.** Report the failures and exit.

Initialize the report file at `.harness/smoke-report.md`:

```markdown
# Smoke Test Report — [date]

## Health Checks
- [ ] API running (port 5055)
- [ ] Frontend running (port 3000)
- [ ] SurrealDB accessible
- [ ] Credentials configured

## API Smoke Tests
- [ ] Create notebook
- [ ] Add URL source
- [ ] Add text source
- [ ] Add PDF source
- [ ] Sources processed (content extracted)
- [ ] Sources embedded
- [ ] Chat — coherent response
- [ ] Ask — synthesis returned
- [ ] Transformation — insight created
- [ ] Note — saved from insight
- [ ] Podcast — generation started
- [ ] Podcast — completed with audio
- [ ] Semantic search — relevant results
- [ ] Delete notebook — cascade cleanup verified

## UI Verification (Playwright)
- [ ] Notebooks page loads, test notebook visible
- [ ] Notebook detail — sources listed
- [ ] Source detail — content visible
- [ ] Chat interface — messages displayed
- [ ] Search page — results returned
- [ ] Podcasts page — episode listed
- [ ] Post-deletion — notebook gone from list
```

Update each checkbox as you go (`- [x]` for pass, `- [!]` for fail with details below).

---

## Phase 1: API Smoke Tests

Use `curl` via Bash for all API calls. Base URL: `http://localhost:5055/api`

### 1.1 Create Notebook

```bash
curl -s -X POST http://localhost:5055/api/notebooks \
  -H "Content-Type: application/json" \
  -d '{"name": "Smoke Test Notebook", "description": "Automated smoke test — safe to delete"}'
```

Save the `notebook_id` from the response (format: `notebook:xxxxx`). You'll need it throughout.

### 1.2 Add Sources

**IMPORTANT**: Source creation uses `multipart/form-data`, NOT JSON. Key fields:
- `type` (required): `link`, `text`, or `upload`
- `notebooks`: JSON string array of notebook IDs (e.g., `["notebook:xxxxx"]`)
- `async_processing`: string `"true"` or `"false"`
- `embed`: string `"true"` or `"false"` — **MUST be "true" for embeddings to be created**

Add three sources to the notebook:

**URL source:**
```bash
curl -s -X POST http://localhost:5055/api/sources \
  -F "type=link" \
  -F 'notebooks=["<notebook_id>"]' \
  -F "url=https://en.wikipedia.org/wiki/Turing_test" \
  -F "async_processing=true" \
  -F "embed=true"
```

**Text source:**
```bash
curl -s -X POST http://localhost:5055/api/sources \
  -F "type=text" \
  -F 'notebooks=["<notebook_id>"]' \
  -F "content=Artificial intelligence (AI) is the simulation of human intelligence processes by computer systems. These processes include learning, reasoning, and self-correction. AI applications include expert systems, natural language processing, speech recognition, and machine vision. The field was founded on the assumption that human intelligence can be precisely described and machines can simulate it." \
  -F "title=AI Overview - Smoke Test" \
  -F "async_processing=true" \
  -F "embed=true"
```

**PDF source** (only if `.harness/fixtures/smoke-test.pdf` exists):

Signals

Stars
40,538
Forks
4,662
Open issues
133
Last commit (this folder)
Sep 2, 2026 (1 month ago)
Last release
Oct 4, 2026 (24 days ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from lfnovo

Cite this page

smoke-e2e. Agent Mart. https://agentmart.dev/templates/lfnovo-open-notebook-smoke-e2e (last updated 2026-10-24)