seeflow-lookup
Look up registered SeeFlow flows and consult them as architectural ground truth. Read-only counterpart to
— that skill
creates and edits flows; this one
queries them when an agent is writing code or making decisions.
Routing gate — run before deciding
Inspection phrasing
always lands here first, even when no flow is yet registered — the auto-handoff below covers the empty case. The trigger words are:
,
,
,
,
,
,
,
,
,
,
, plus any reference to a flow by slug or title without an explicit creation verb (
,
,
,
). When in doubt, route here — a no-match handoff to
is cheap; a duplicate creation run from skipping the gate is not.
When NOT to invoke
- Editing flows → use or the canvas.
- Creating flows from scratch when the user explicitly said "create / scaffold / generate / add a flow" → call directly. (This skill auto-hands off to if it discovers no match for an inspection prompt; skip the hop only when the user's verb is unambiguously creation.)
- Reading → use directly (that file is 's territory).
- Mutating anything — this skill is read-only. The auto-handoff above invokes ; it does not mutate state itself.
Consent — silent check, top of every invocation
Before anything else, read
silently. If missing, run the first-run prompt and write the file before continuing. If present +
, no feedback logging this session; otherwise log qualifying failures (
,
,
,
) to
. The skill only writes locally — a
hook handles transfer.
Format, prompt wording, kinds, and redaction rules live in — same cross-skill pattern this skill already uses for
../seeflow/references/schema.md
.
Discover the CLI
Run
to list the available subcommands and their flags. If
is not on
, fall back to
npx -y @tuongaz/seeflow@latest help
.
The CLI's help output is the source of truth for what you can call — do not assume command names or flags from memory.
Cache the resolved binary (
vs
npx -y @tuongaz/seeflow@latest
) for the rest of the conversation and reuse it for every subsequent call.
First step — does a matching flow exist?
Before any deeper lookup, list the registered flows (use the catalog subcommand surfaced by
) and match the user's topic against it. Match generously: exact slug, fuzzy name, or topic keyword (e.g. "the cart" matches a flow named
).
- Match found → surface the canvas URL first () so the user can open it, then continue with the cost ladder below for whatever deeper question they asked. Never re-scaffold an existing flow — is the wrong tool here even if the existing flow looks stale; editing belongs on the canvas or .
- No match → auto-switch to the skill to scaffold one. Print a one-line handoff (
No flow registered for "<topic>" — invoking /seeflow to scaffold it.
), then invoke the skill via the tool with the user's original topic as the prompt. Do not stop and ask first; do not answer by grepping the codebase yourself (that is 's job — it dispatches the code-analyzer + system-analyzer sub-agents). Hand off and let take over the rest of the turn.
- Ambiguous match (multiple plausible flows) → list them with their canvas URLs and ask the user which one.
Output contract
- Every response is JSON on stdout, passed through unchanged from the CLI. No markdown wrappers, no synthetic fields.
- Errors are the CLI's structured errors (e.g. , , , ). Surface them as-is.
Vocabulary (read the JSON intelligently)
For node / connector / action field shapes, run
(then
,
,
as needed). Don't infer field names, enum values, or required-lists from memory — re-fetch them. The schema covers what each variant looks like on disk and which values are legal.
What the schema can't tell you — runtime behavior the CLI assumes you know:
- Decorative node types — , , , , with empty content, and geometric shapes (, , , , , ) carrying no capabilities — are visual only. Skip them for architectural reasoning. Treat any node as architectural when its or is set, regardless of .
- Semantics live on the nodes, not the connectors. Read the source / target node's (and from the brief) to understand what an edge means.
- content fields (e.g. , ) are auto-externalised on write. Whether they come back inlined depends on the subcommand — check for the variant that returns full content.
- Action values are relative under . Read those files directly with if you need the script source.
Deeper reference:
../seeflow/references/schema.md
in this plugin (conventions only — no field shapes).
Usage pattern (cost ladder)
Start with the cheapest lookup the CLI offers (a summary across flows), pick a flow, then ask for that flow's structure, and only fetch individual nodes when you need their content. Reserve any "full inline" variant for small flows or when you genuinely need every detail. Reading
/
directly is reserved for cases where the script source itself drives the decision.
Common mistakes
- Assuming subcommand names from memory — always confirm with first.
- Reaching for the "full" variant first on a large flow — burns context. Climb the ladder.
- Treating decorative nodes as architecture — geometric shapes without capabilities, plus / / / / empty , are visual only.
- Re-emitting JSON as prose — pass the CLI output through unchanged. Don't rewrite it as markdown.
- Reading refs as filesystem paths — let the CLI inline them; only fall back to direct for .