instatic-user-e2e

A procedure for testing the Instatic app through a real browser as a user, using temporary local data and keeping records of findings.

In plain words
What is it for?
It covers fresh installation, owner login, page editing, content styling, save and reload checks, publishing, and visiting the public page.
Why use it?
It catches problems that automated code and API tests may miss, such as setup, editing, saving, publishing, and public-page issues.

Skill for Claude CodeCodex

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add skills/corebunch/instatic/instatic-user-e2e
Any agent
npx skills add CoreBunch/Instatic --skill instatic-user-e2e
Clone the repo
git clone --depth 1 https://github.com/CoreBunch/Instatic

Made for: Claude Code, Codex.

Per session 83 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 1,099 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5 $0.00083 $0.01099
Opus 5 $0.00042 $0.00549
Sonnet 5 $0.00017 $0.00220
Haiku 4.5 $0.00008 $0.00110

Measured 2d ago against content hash 3397bf7f04e4, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

instatic-user-e2e scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

.agents/skills/instatic-user-e2e/SKILL.md · 130 lines

How it starts

The opening of the file, as written. The whole thing — 130 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Instatic User E2E

Overview

Use this skill to operate Instatic like a real user through the browser, record product-quality findings, and keep durable run logs. This is not a replacement for bun test; it covers the gaps that unit, API, architecture, and happy-dom tests cannot see.

Core Rule

Treat browser-observed behavior as primary evidence. Use code, database, API, or localStorage inspection only to reset the environment, unblock the run, or triage an issue already observed through the UI.

Required References

  • Read docs/e2e/protocol.md before running or changing the protocol.
  • Read docs/e2e/feature-matrix.md before choosing scenarios.
  • Use docs/e2e/run-log-template.md when writing a new run log.
  • Use the project-local agent-browser skill or the available in-app Browser tooling for browser control.

Default Scope

If the user does not name a scope, run the Core Owner Lifecycle:

  1. Fresh install setup.
  2. Owner login/logout.
  3. Open the editor.
  4. Create or edit a page.
  5. Add and style basic content.
  6. Save/reload persistence check.
  7. Publish.
  8. Visit the public page as a non-admin user.

Environment Setup

Prefer an isolated SQLite database and upload directory for each run:

DATABASE_URL=sqlite:./.tmp/e2e-agent.db \
UPLOADS_DIR=./.tmp/e2e-uploads \
bun run dev

Before deleting data, verify the target is disposable:

  • Safe: .tmp/e2e-*, .tmp/dev.db, temporary uploads under .tmp/.
  • Unsafe without explicit user instruction: production-looking Postgres URLs, non-temporary upload directories, checked-in fixtures.

If ports are busy, inspect them and avoid killing processes you did not start unless the user explicitly gave control of the running app. When possible, use the already-running local app and log the DB/reset limitation.

Run Workflow

  1. Record repo state: current branch, HEAD SHA, and whether the worktree is dirty.
  2. Select scenario rows from docs/e2e/feature-matrix.md.
  3. Reset only disposable data for the run.
  4. Start or identify the local app URL, usually http://localhost:5173/admin.
  5. Use the browser as a user. Prefer visible labels and accessible names over test IDs or internal selectors.
  6. Capture screenshots at the required proof points in docs/e2e/protocol.md, plus any time a visual issue or confusing state appears.
  7. Log every scenario result in docs/e2e/runs/YYYY-MM-DD-<scope>.md.
  8. File issues inside the run log before investigating implementation details.
  9. Summarize blockers, top issues, and recommended next fixes.

Read the full file on GitHub · 130 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 2d ago First seen · 130 lines · 83 tokens per session scan A 3397bf7f04e4

Subscribe to this mod's changes

instatic-user-e2e is a skill published in the GitHub repository CoreBunch/Instatic (8,362 stars, last pushed yesterday), licensed MIT. It adds 83 tokens to every session and 1,099 once invoked, about $0.0004 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.