# Forsvn

> Front door for the FORSVN agent stack — classifies the request, loads shared product context and prior session state, then routes to the right skill or resumes a prior initiative. Use when the right skill is unclear, to continue an in-flight initiative, or when a vague ask needs to land somewhere concrete (\"where to start\", \"resume\", \"ship this\").

- **Type:** Skill
- **Install:** `agentstack add skill-hungv47-meta-skills-forsvn`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [hungv47](https://agentstack.voostack.com/s/hungv47)
- **Installs:** 0
- **Category:** [Agent Skills](https://agentstack.voostack.com/c/agent-skills)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [hungv47](https://github.com/hungv47)
- **Source:** https://github.com/hungv47/meta-skills/tree/main/skills/meta/forsvn
- **Website:** https://skills.forsvn.com/

## Install

```sh
agentstack add skill-hungv47-meta-skills-forsvn
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# /forsvn — Front Door

Classifies the ask, loads the context, routes or resumes. Always lands on a concrete next action. Capability metadata (route triggers, prerequisites, load map, artifact contract) lives in [`routing.yaml`](routing.yaml).

## When To Use

- Vague ask: "help me launch this", "what should I work on?", "where do I start?"
- Resume: "continue", "pick up where I left off"
- New to the stack and don't know which skill to call.
- Want to see what's in flight across initiatives.

## When NOT To Use

- You already know the right skill — call it directly.
- Deep multi-perspective debate — use `/debate-agents`.
- Full scoping conversation — use `/discover`.

## Operating Contract — 5 steps

Every invocation does exactly these five steps. No skipping, no looping.

**Step 1 — State snapshot.** Prefer the `forsvn` MCP server: call `enter_workspace` to load TRUTH / OUTPUT / MEMORY + the graph-derived `next` (one act, same data the disk walk produces). When the server is unavailable (no `mcp__forsvn__*` tools), fall back to the inline disk snapshot — graceful degradation, never a hard dependency. Full procedure + shell-bang fallback in [`references/procedures/state-snapshot.md`](references/procedures/state-snapshot.md).

**Step 2 — Resume check.** If `.forsvn/routing/last-session.md` exists AND `status: awaiting-user` AND timestamp 
  Initiative: 
  Next action: 
  Open question: 

Resume? (yes / no / new)
```

Default to resume if the current ask is empty or "continue" / "resume". Otherwise classify fresh per Step 3.

**Step 3 — Classify intent.** Pick exactly one intent class. The classifier dispatches to the right leaf via the per-domain chain file ([`references/chains/.md`](references/chains/)) — read it before dispatching.

| User says | Intent class | Route |
|---|---|---|
| "audience", "ICP", "competitors", "market", "diagnose", "prioritize", "funnel", "targets" | research | leaf via `references/chains/research.md` |
| "brand", "campaign", "copy", "headline", "landing page", "LP", "ad", "SEO", "video", "TikTok", "reel", "short", "cold email", "outreach", "humanize", "humanmax", "VN tone" | marketing | leaf via `references/chains/marketing.md` |
| "user flow", "tech stack", "architecture", "schema", "API", "code", "refactor", "machine cleanup", "docs", "README" | product | leaf via `references/chains/product.md` — **forsvn-dev pkg** |
| "scope this", "clarify", "what should we build", "requirements unclear" | scope | `/discover` |
| "debate this", "multiple perspectives", "poll", "consensus" | debate | `/debate-agents` |
| "decompose", "task list", "break down", "implementation order" | decompose | `/breakdown-tasks` (**forsvn-dev pkg**) |
| "review my work", "second opinion", "did I miss anything" | review | `/review-work` |
| "improvement loop", "track metric", "experiment ledger" | loop | `/run-pipeline` |
| Empty + no resume offer | summary | print state summary, exit |
| Ambiguous, multi-domain, "launch this", "ship this" | multi | scaffold a gated `plan.md`, stop for approval |

Rules:

- Single-domain → read the matching chain file and dispatch to its leaf.
- Multi-domain → scaffold a gated `.forsvn/runs//plan.md` (`status: proposed`) via `bin/plan.ts init`, render its steps table, and **stop for human approval before step 1** (the plan-preview trust contract). No step runs until a human approves (`status: approved`). Schema + helper: [`references/plan-spec.md`](references/plan-spec.md).
- Unclear (in-scope) → at most 2 clarifying questions. Hard cap. Then hand off to `/discover`.
- Unclear AND capability-shaped AND no index match → emit the gap line per [`references/procedures/nearest-match.md`](references/procedures/nearest-match.md) (terminal state **b**, not a clarify).
- Brand-gate: marketing/launch intent with `brand/BRAND.md` missing → route through `/create-brand` first.
- forsvn-dev gate: `product` intent and the `decompose` route resolve to the separate **forsvn-dev** package (engineering skills carved out 2026-06-16). If it isn't installed, tell the user to add `forsvn-dev` rather than dispatching into a missing skill.

**Terminal-state rule.** Every `/forsvn` turn ends in exactly one of three states — never a fourth "answered it myself" path:

- **invoke** — recorded → announced → invoked ≥1 capability (Steps 4–5).
- **gap** — the ask is *capability-shaped* (an imperative to produce / evaluate / plan a marketing, research, or product job) but matches no Step-3 row, no `chains/.md` rule, and no index entry → **do not answer from general knowledge**; emit the gap line per [`references/procedures/nearest-match.md`](references/procedures/nearest-match.md).
- **clarify** — in-scope but ambiguous → ≤2 bundled questions, then `/discover`.

A pure factual question ("what's a good CTR?") is answered normally — not a miss. A capability-shaped ask answered from general knowledge, or dropped, **is** the silent miss.

**Steps 4 + 5 — Load context, then dispatch: record → announce → invoke.** Full procedure in [`references/procedures/dispatch.md`](references/procedures/dispatch.md). Loading context includes the **foundation pre-flight** (Step 4.5): for research/marketing/product intent, a **cold repo** (no `ICP.md`, no prior session, no named deliverable) triggers the **infer-and-draft First-Run flow** — read the repo and draft ONE tailored artifact with labeled assumptions, never an intake form; a *partial* (or thin-with-prior-session) foundation warns before a generic run and offers `/research-icp` first, non-blocking. Write the routing record BEFORE invoking (`status: dispatched`, `dispatched-by: forsvn`), announce in one line (`→ Dispatching / — `), then invoke the leaf via the Skill tool with args. Confident classification auto-dispatches; two close candidates → present both (counts toward the 2-question cap), never auto-fire. An explicit `/forsvn` dispatch supersedes any router-hook hint. The dispatcher owns the session execution-profile ask (`references/_shared/execution-policy.md`); dispatched leaves inherit it.

## Pre-Dispatch — the classify flow IS the cold start

Needed dimensions: **intent class** (Step 3 table), **initiative slug** (Step 2 resume check / `last-session.md`), **domain chain rule** (the matching `chains/.md` row). Unresolved after reading state → at most 2 bundled clarifying questions (the Step 3 hard cap; close-candidate presentations count toward it); still unclear → hand off to `/discover`. A capability-shaped ask that resolves to no intent class is terminal state **gap** (not a clarify) — name the nearest 1–2 caps via [`references/procedures/nearest-match.md`](references/procedures/nearest-match.md). Dispatched leaves warm-start and skip their own pre-dispatch steps 1–2.

## Quality Gate

Instantiates `references/_shared/thin-critic-rubric.md` as a per-dispatch self-check (fast tier — no sub-agent):

- [ ] **Classification** — intent matches a Step 3 row or a chain-file rule; two close candidates were presented, never coin-flipped.
- [ ] **Sequencing** — routing record written (`status: dispatched`) BEFORE the Skill invocation.
- [ ] **Announcement** — the one-line `→ Dispatching / — ` preceded the invocation.
- [ ] **Coverage** — the turn ended in invoke / gap / clarify; no capability-shaped ask was answered from general knowledge or dropped.

Auto-fail: silent dispatch (no announcement), record-after-invoke, or answering a capability-shaped ask without invoking, naming the gap, or clarifying — redo the step per `references/anti-patterns.md`.

## Worked Example

"Brief the landing page first, then build" → marketing chain → `brief-landing-page`: record → announce → invoke → warm handoff, with the gate self-check: [`references/examples/dispatch-walkthrough.md`](references/examples/dispatch-walkthrough.md) [EXAMPLE].

## Anti-Patterns

[`references/anti-patterns.md`](references/anti-patterns.md) — 11 rules covering clarifying-question cap, silent dispatch, hand-off-and-stop, coin-flip auto-fire, routing-record sequencing, chain-file read, experience grep, brand-gate bypass, the silent miss, the cold-repo intake form. Re-read before dispatch.

## Durable Rules (protected)

## Completion Status

- **DONE** — classified intent, wrote routing record, announced + invoked the leaf (or presented candidates / state summary).
- **DONE_WITH_CONCERNS** — dispatched on a thin/partial foundation (no `ICP.md` / unratified / stale product context); the Step 4.5 pre-flight warned the user and recorded `foundation:`.
- **BLOCKED** — could not read project state AND could not bootstrap `.forsvn/`.
- **NEEDS_CONTEXT** — ask was empty, no prior session, no canonical sources. Printed state summary and exited.

## Next Step

After dispatch, the routed leaf skill owns the work. Re-invoke `/forsvn` with `resume` to pick up the next action from `last-session.md`.

## References

- `.forsvn/README.md` — state root contract.
- [`references/knowledge-ledger.md`](references/knowledge-ledger.md) — the `.forsvn/memory/knowledge.json` cache of project facts (loaded at dispatch so the front door never re-asks a known fact or re-runs a known producer; `bin/knowledge.ts`).
- [`references/chains/{research,marketing,product,meta}.md`](references/chains/) — per-domain dispatch chains.
- [`references/procedures/{state-snapshot,dispatch,nearest-match}.md`](references/procedures/) — Step 1, 4, 5, bootstrap, gap line.
- [`references/anti-patterns.md`](references/anti-patterns.md).

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [hungv47](https://github.com/hungv47)
- **Source:** [hungv47/meta-skills](https://github.com/hungv47/meta-skills)
- **License:** MIT
- **Homepage:** https://skills.forsvn.com/

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-hungv47-meta-skills-forsvn
- Seller: https://agentstack.voostack.com/s/hungv47
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
