Agent skill

Beacon Lens Create

by Asymptote-Labs in Asymptote-Labs/agent-beacon

Create, revise, debug or validate a Beacon lens, a single HTML file that renders one agent trace as a purpose-built view (a per-file review, a cost breakdown, a timeline of risky commands, a map of…

MITAuto-check passed

Install Beacon Lens Create

skills CLI
$ npx skills add Asymptote-Labs/agent-beacon --skill beacon-lens-create -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install Asymptote-Labs/agent-beacon beacon-lens-create --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/Asymptote-Labs/agent-beacon.git skills-src && mkdir -p .claude/skills && cp -r skills-src/agent-skills/skills/beacon-lens-create .claude/skills/beacon-lens-create && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
beacon-lens-create
GitHub stars
1.8k
Token cost
~3.3k tokens
SKILL.md length
1,750 words
Files
1
Skills in repo
5
Repo updated
First seen
Licence
MIT

At a glance

Create, revise, debug or validate a Beacon lens, a single HTML file that renders one agent trace as a purpose-built view (a per-file review, a cost breakdown, a timeline of risky commands, a map of…

  • Works in 7 steps: check that Beacon is available → decide what the lens shows → read the spec and the real data → …
  • The user asks to make a lens
  • SKILL.md covers Step 1: check that Beacon is…, Step 2: decide what the lens…, Step 3: read the spec and the… and Step 4: write the file, plus 4 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Beacon Lens Create is an agent skill from Asymptote-Labs/agent-beacon. Create, revise, debug or validate a Beacon lens, a single HTML file that renders one agent trace as a purpose-built view (a per-file review, a cost breakdown, a timeline of risky commands, a map of tool use) in a sandboxed tab of the local Beacon dashboard, fed once through window.beacon.getTrace(). Use when the user asks to "make a lens", "build a view of my traces", "visualize this session", wants a custom tab next to the full session in the Beacon dashboard, or when a lens fails to load, renders wrong, or…

Its SKILL.md is about 3.3k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts. Compatibility notes: Requires the Beacon CLI (beacon) on PATH with endpoint capture installed, so there are traces to render. Reads only local state and makes no network calls.

The repository describes itself as: The cross-harness, self-improving memory layer for AI agents. Join our community: https://discord.com/invite/zdNChS2fBu. The licence is MIT.

When your agent uses it

  • The user asks to make a lens
  • Build a view of my traces
  • Visualize this session
  • Wants a custom tab next to the full session in the Beacon dashboard

Example prompts

  • “make a lens”
  • “build a view of my traces”
  • “visualize this session”
  • “/beacon-lens-create”

Requirements

  • Compatibility (from SKILL.md): Requires the Beacon CLI (beacon) on PATH with endpoint capture installed, so there are traces to render. Reads only local state and makes no network calls.

Workflow steps

7 steps, taken from the step headings in SKILL.md.

  1. check that Beacon is available
  2. decide what the lens shows
  3. read the spec and the real data
  4. write the file
  5. lint until clean
  6. preview it against real sessions
  7. install it

What it can do on your machine

Read from SKILL.md and the folder at commit 2462839. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are bash and javascript).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • docs.beacon.sh

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

  • Compatibility

    Requires the Beacon CLI (beacon) on PATH with endpoint capture installed, so there are traces to render. Reads only local state and makes no network calls.

    From compatibility in the SKILL.md frontmatter.

Context cost

Beacon Lens Create loads about 3.3k tokens when it runs. Until then it costs about 141 tokens; SKILL.md has 1,750 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~141
When it runs · the whole SKILL.md, loaded when a task matches
~3.3k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from Asymptote-Labs/agent-beacon at commit 2462839, republished under its MIT licence (© Asymptote-Labs). 1,750 words, ~3,250 tokens.

Download SKILL.mdSave it as .claude/skills/beacon-lens-create/SKILL.md (or your agent's skills folder).
name
beacon-lens-create
description
Create, revise, debug or validate a Beacon lens, a single HTML file that renders one agent trace as a purpose-built view (a per-file review, a cost breakdown, a timeline of risky commands, a map of tool use) in a sandboxed tab of the local Beacon dashboard, fed once through window.beacon.getTrace(). Use when the user asks to "make a lens", "build a view of my traces", "visualize this session", wants a custom tab next to the full session in the Beacon dashboard, or when a lens fails to load, renders wrong, or needs checking before install.
compatibility
Requires the Beacon CLI (beacon) on PATH with endpoint capture installed, so there are traces to render. Reads only local state and makes no network calls.
license
MIT
metadata.author
asymptote-labs
metadata.homepage
https://docs.beacon.sh/concepts/lenses
metadata.version
0.1.0

Beacon lens create

A lens is one self-contained HTML file that renders one agent trace: the prompts, agent messages, tool calls, commands, file edits, approvals, token usage and threat-rule findings Beacon recorded for a session. The local dashboard (beacon endpoint dashboard) shows lenses as tabs on a session's page, next to Full session, and runs each one in a locked-down frame.

You write the file, check it against the user's real sessions, and install it. Nothing is published anywhere: lenses live on this machine.

Step 1: check that Beacon is available

bash
beacon version

If beacon is not found, tell the user that lenses need the Beacon CLI, point them to https://docs.beacon.sh/get-started/overview, and stop. Do not install it yourself.

Step 2: decide what the lens shows

Start from the user's description. If it is missing, or leaves a choice open that changes what the numbers mean (what counts as a "turn", a "failure", a "risky" command, which cost total), ask one focused question before building. Define each unit from this request, not from another lens, and label anything derived or estimated as such.

Step 3: read the spec and the real data

bash
beacon lenses spec              # the format, the data, the sandbox, the style tokens
beacon lenses spec --example    # a complete working lens to start from
beacon lenses list              # lens ids already in use
beacon lenses data              # exactly what getTrace() returns for the latest session
beacon lenses data --session <session-id>

Read the whole spec before writing anything. Then look at real data rather than guessing its shape from the spec: note which event types the user's sessions carry, whether file.diff, command.output or usage is present, and whether findings exists. Design for those, and for sessions that lack them. The output contains whatever content the log retained (prompts, command output, diffs), so read it locally and do not paste large amounts back to the user.

Step 4: write the file

One HTML file. No build step, bundler or package.json. Write it in the user's project or a scratch directory, never directly in the lens store.

Hard limits

The dashboard enforces these; a lens that breaks them fails to install or fails to run.

  • One file, at most 16 MiB, with every script, style, image and font inline (data: URIs for images and fonts). Inlining a library is allowed but counts against the size and costs parse time on every open; prefer a few lines of your own.
  • A manifest, in exactly one element whose opening tag is spelled exactly <script type="application/beacon-lens+json">, holding id, title, version and "api": "beacon.lens.v1" (optionally description, icon, author; unknown keys are an error). The id is lowercase letters, digits and hyphens, and cannot be a built-in lens's id.
  • No network and nothing loaded by URL. The frame's Content Security Policy blocks fetch, XHR, WebSockets, EventSource, sendBeacon, remote scripts, stylesheets, fonts and images, @import, workers, nested frames, eval and new Function.
  • No dashboard access. The frame is sandbox="allow-scripts" with an opaque origin: no cookies, localStorage, sessionStorage or IndexedDB, no access to the parent page, no popups or forms. Keep state in memory.
  • Never navigate the frame. The dashboard closes a lens that loads a second document.
The data

The host defines window.beacon before your scripts run. Its one call is the whole data API:

js
const data = await window.beacon.getTrace();

It resolves once with everything you get and never refreshes. Calling it again returns the same promise. It rejects with an Error if the trace does not arrive within 10 seconds; show that message instead of a blank tab.

The result is LensDataV1; beacon lenses spec has the full shape. The parts you will use most:

  • trace.summary: title, started_at/ended_at, event_count, harness.name, session, repository, model, token_usage.
  • trace.events[], in order, each with id, number, timestamp, type, action and optional title, summary, fidelity, content, tool, command, file, mcp, approval, policy, error, model, usage, tool_call_id. error.type is set when the runtime reported the action as failed, even on an event whose type is not error. type is one of user_message, agent_message, agent_reasoning, tool_call, tool_result, command, file, mcp, approval, token_usage, session, error, other, and the list can grow.
  • findings: threat-rule matches, each pointing at its evidence by event_ids.
  • token_usage and token_coverage: the trace's counted usage, and whether this runtime reports usage at all.
  • truncated: the trace was cut to fit the size cap.

Things that are easy to get wrong:

  • Retained text is an object, not a string. Prompts, messages, command.output and file.diff arrive as {text?, included, retention, redacted?, truncated?, hash?, bytes?}. When included is false the text was not kept or was redacted; show the hash and bytes instead of an empty box, and say why.
  • Missing is not empty. An absent findings means the trace was not scanned; an empty findings.items means it was scanned and nothing matched. Say which. The same goes for token_usage.
  • Do not sum usage across events for a total. Some runtimes report the same tokens on two channels or as cumulative counters. token_usage.totals is the deduplicated count; if you also show per-event figures, say they can add up to more. cost_usd is only ever what the runtime reported. Lens data carries no estimate (Beacon's list-price estimates live in beacon token-usage and the Tokens page), and a lens must not compute one.
  • fidelity: "inferred" marks an action Beacon derived rather than observed (for example an approval built from a pre-tool notification). Show the difference when it matters.
  • Pair calls with results on tool_call_id, not on adjacency, and order by number or timestamp, not array position.
  • Be honest about truncation. When truncated is true, or trace.events.length is less than trace.summary.event_count, say "over the first N of M events" instead of presenting a partial total as the whole trace. A finding's evidence may point at an event that is not in the bundle.
Rules for the code
  • Only these fields are guaranteed: api_version, trace.schema_version, trace.id, trace.summary.id, trace.events (possibly empty), each event's id, number, timestamp, type and action, and truncated. Everything else can be missing. Show a placeholder, never undefined or NaN, and never throw on a missing field.
  • Skip what you do not recognise: new event types, enum values and fields appear without a version bump.
  • Treat every string as untrusted. Trace content is whatever the agent and its tools produced, often HTML, code and markup. Build nodes with textContent or document.createTextNode; never innerHTML, outerHTML, insertAdjacentHTML or document.write, and never use trace content as a URL.
  • Render immediately: a loading line first, then the content when getTrace() resolves, an error line if it rejects, and an empty state for a trace with nothing to show. Keep the states mutually exclusive; if you use the hidden attribute, add [hidden] { display: none !important; } so your own display rules cannot reveal two states at once.
  • Expect thousands of events. Build the DOM once; summarise, collapse or paginate long lists instead of rendering every row.
  • No settings and no persistence; there is nowhere to save anything.
Show full SKILL.md (654 more words)Show less
Look like the dashboard

The lens renders inside a session page, under the page's own heading and tab bar, so it should read as that tab's content rather than an embedded widget.

  • No page chrome. Do not open with a title, <h1> or eyebrow text; the tab label is the heading. Add an <h2> only where a later section needs one. Leave html and body transparent, with no background, no outer padding or margin (body { margin: 0 }), and no outer border.
  • Full width. Do not cap the content with a centred max-width.
  • Let it grow. The dashboard sizes the frame to your document's height as it changes. Never size the root to 100vh or height: 100%, and do not build an inner scrolling container.
  • Use the dashboard's tokens, each with a fallback so the file also renders on its own: --beacon-text, --beacon-muted, --beacon-line (hairlines), --beacon-panel-soft (recessed fills), --beacon-accent and --beacon-accent-soft (links, selection, focus, one emphasis), --beacon-danger, --beacon-warn, --beacon-ok (only where they mean something), --beacon-font-sans and --beacon-font-mono. Take colours from these tokens rather than inventing a palette, so the lens follows the dashboard if its theme changes.
  • Type. Body 13–14px. Monospace at about 13px for commands, paths, tool names, hashes, IDs and number columns. Two weights only, 400 and 500; headings are 400 and get their hierarchy from size. Use as few sizes, colours and spacing values as you can.
  • Dense and flat. Compact tables and tight rows over padded cards; one hairline between rows rather than a box around each; no shadows or gradients; a light fill on hover. Right-align numbers and format them with Intl.NumberFormat; format times as short dates or relative times.
  • Motion. Almost none: under 150 ms, and off under prefers-reduced-motion: reduce.
  • Check it at a narrow and a wide width; the frame is as wide as the session page.

Step 5: lint until clean

bash
beacon lenses lint --strict path/to/my-lens.lens.html

Errors (size, a missing or invalid manifest) stop the lens from running. Warnings name the line where the lens does something the sandbox blocks or the spec forbids: HTML parsing of content, network calls, resources loaded by URL, browser storage, navigation, viewport-height layouts, or never calling getTrace(). Fix both.

Step 6: preview it against real sessions

bash
beacon lenses preview path/to/my-lens.lens.html --session <session-id>

This serves the dashboard with the lens added and prints the session page to open (--open opens a browser). It runs until interrupted, so start it in the background if your harness blocks on long-running commands. The file is read again on every page load: edit, reload, repeat. Nothing is installed.

Ask the user to look at it, and check at least one session that lacks the data the lens is about (no diffs, no usage, no findings) to see the empty state. If the dashboard shows "The … lens could not be shown" and falls back to the full session, the notice gives the reason:

  • it raised an error: an exception before the lens settled, usually a missing field. Guard it.
  • it did not render within 10 seconds: the lens never called getTrace(), or blocked the main thread on a large trace.
  • it navigated away from itself: something set location, submitted a form or followed a link inside the frame.

Step 7: install it

Only after the user has seen it in preview and is happy with it:

bash
beacon lenses add path/to/my-lens.lens.html

It now appears in the + menu on every session page. To change it later, edit the source file, bump version in its manifest, and run beacon lenses add again; an equal or lower version is refused unless the user asks for --force. beacon lenses remove <id> uninstalls it.

Rules

  • Never weaken the sandbox or ask the user to. A lens that needs the network is the wrong design; everything it can have is in getTrace().
  • Never put trace content into the lens file. The file holds only code; it renders data at view time.
  • Never install a lens the user has not seen in preview, and never use a built-in lens's id.

© Asymptote-Labs, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in agent-skills/skills/beacon-lens-create of Asymptote-Labs/agent-beacon.

Open the folder on GitHubat commit 2462839

Compare with similar skills

Beacon Lens Create next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Beacon Lens Create compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Beacon Lens Create this skillAsymptote-Labs/agent-beacon1.8k—~3.3kAutomated safety check: PassMIT
Debugasgeirtj/system_prompts_leaks69k—~439Automated safety check: PassCC0-1.0
Openclaw Debuggingopenclaw/openclaw392k—~1.9kAutomated safety check: PassMIT
Debugging Executionsn8n-io/n8n207k—~2.6kAutomated safety check: PassCustom licence
DebuggingJetBrains/intellij-community21k—~422Automated safety check: PassCustom licence
Debugging Toolkitsickn33/agentic-awesome-skills47k1 repos~344Automated safety check: PassMIT

Similar skills

  • Debug

    asgeirtj/system_prompts_leaks

    Enable debug logging for this session and help diagnose issues

    69k GitHub stars~439 tokensUpdated yesterday
    Auto-check passed
  • Openclaw Debugging

    openclaw/openclaw

    Debug OpenClaw model, provider, tool-surface, code-mode, streaming, and live/Crabbox behavior by choosing the right logs, probes, and proof path before changing code, including fetching stored…

    392k GitHub stars~1.9k tokensUpdated today
    DevelopmentAuto-check passed
  • Official

    Debug failed or wrong-output workflow executions using executions tools.

    207k GitHub stars~2.6k tokensUpdated today
    DevelopmentAuto-check passed
  • Debugging

    JetBrains/intellij-community

    Official

    Debug IntelliJ IDE failures with repository-specific techniques.

    21k GitHub stars~422 tokensUpdated today
    DevelopmentAuto-check passed
  • Debugging Toolkit

    sickn33/agentic-awesome-skills

    A skill your agent uses when working with debugging toolkit smart debug (Alias for debugging-toolkit-smart-debug)

    47k GitHub starsUsed in 1 repo~344 tokens
    DevelopmentAuto-check passed
  • Runtime Debug

    vercel/next.js

    Official

    Debug and verification workflow for runtime-bundle and module-resolution regressions.

    143k GitHub starsUsed in 1 repo~618 tokens
    DevelopmentAuto-check passed

More from Asymptote-Labs/agent-beacon

  • Beacon Memory Distill

    Asymptote-Labs/agent-beacon

    Turn recorded agent sessions (Beacon traces from Claude Code, Cursor, Codex, OpenCode, and other harnesses) into reviewed, reusable project memory.

    1.8k GitHub stars~3k tokensUpdated today
    Auto-check passed
  • Beacon Memory Promote

    Asymptote-Labs/agent-beacon

    Install approved Beacon project memory as an Agent Skill in the repository (.agents/skills/<slug/SKILL.md), so every skill-capable harness loads the lesson automatically without a memory lookup.

    1.8k GitHub stars~927 tokensUpdated today
    Auto-check passed
  • Beacon Memory Recall

    Asymptote-Labs/agent-beacon

    Retrieve reviewed project memory that Beacon distilled from earlier agent sessions in any harness (Claude Code, Cursor, Codex, OpenCode, and others) before starting work.

    1.8k GitHub stars~1.2k tokensUpdated today
    Auto-check passed
  • Self Verify Beacon In Sandbox

    Asymptote-Labs/agent-beacon

    Verify a Beacon change end to end by running a real Claude Code session inside a disposable Linux cloud sandbox and checking that Beacon captured what the agent actually did.

    1.8k GitHub stars~1.2k tokensUpdated today
    Auto-check passed

Questions about Beacon Lens Create

What does Beacon Lens Create do?

Create, revise, debug or validate a Beacon lens, a single HTML file that renders one agent trace as a purpose-built view (a per-file review, a cost breakdown, a timeline of risky commands, a map of…. Beacon Lens Create is an agent skill from Asymptote-Labs/agent-beacon.getTrace().

When should I use Beacon Lens Create?

Beacon Lens Create fits situations like: the user asks to make a lens; build a view of my traces; visualize this session; wants a custom tab next to the full session in the Beacon dashboard.

How do I install Beacon Lens Create in Claude Code?

Run `npx skills add Asymptote-Labs/agent-beacon --skill beacon-lens-create -a claude-code`. Or copy the skill folder (agent-skills/skills/beacon-lens-create in Asymptote-Labs/agent-beacon) into .claude/skills/beacon-lens-create in your project. Claude Code loads it when a task matches its description.

How do I install Beacon Lens Create in Codex?

Run `npx skills add Asymptote-Labs/agent-beacon --skill beacon-lens-create -a codex`. Or copy the skill folder (agent-skills/skills/beacon-lens-create in Asymptote-Labs/agent-beacon) into .agents/skills/beacon-lens-create in your project. Codex loads it when a task matches its description.

Can I use Beacon Lens Create in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Asymptote-Labs/agent-beacon --skill beacon-lens-create -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/beacon-lens-create, .gemini/skills/beacon-lens-create, .github/skills/beacon-lens-create and .opencode/skills/beacon-lens-create in your project.

What does Beacon Lens Create need to run?

SKILL.md names no scripts, command-line tools or credentials: Beacon Lens Create is instructions for the agent only. Compatibility (from SKILL.md): Requires the Beacon CLI (beacon) on PATH with endpoint capture installed, so there are traces to render. Reads only local state and makes no network calls..

Does Beacon Lens Create access the network?

SKILL.md names 1 domain. As links in the text: docs.beacon.sh. This is read from the text; nothing was executed.

Is Beacon Lens Create safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Beacon Lens Create use?

Beacon Lens Create is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Beacon Lens Create use?

About 3.3k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Beacon Lens Create?

Skills that share tags, products or a category with Beacon Lens Create: Debug (asgeirtj/system_prompts_leaks, 69k stars), Openclaw Debugging (openclaw/openclaw, 392k stars), Debugging Executions (n8n-io/n8n, 207k stars) and Debugging (JetBrains/intellij-community, 21k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Beacon Lens Create?

Asymptote-Labs (a GitHub organization) maintains it in Asymptote-Labs/agent-beacon, which has 1,810 GitHub stars. The repository holds 5 skills in this directory. The repository was last updated on October 11, 2026.

Source: Asymptote-Labs/agent-beacon on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.