Not in the top 1,000 by GitHub stars
Cavalry-Collective/visual-stack
A visual interface for building software with Claude Code/Codex.
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
plugins/vstack/experimental/go/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → 0f2e1a8c0f95
No earlier version was observed for comparison.
plugins/vstack/experimental/phase-build/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 0f2e1a8c0f95
No earlier version was observed for comparison.
plugins/vstack/experimental/phase-preview/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Local scripts
First observation → 0f2e1a8c0f95
No earlier version was observed for comparison.
plugins/vstack/experimental/spec/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 0f2e1a8c0f95
No earlier version was observed for comparison.
plugins/vstack/experimental/start/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 0f2e1a8c0f95
No earlier version was observed for comparison.
plugins/vstack/skills/review/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 0f2e1a8c0f95
No earlier version was observed for comparison.
plugins/vstack/skills/user-story-map/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 0f2e1a8c0f95
No earlier version was observed for comparison.
plugins/vstack/skills/wireframe/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → 0f2e1a8c0f95
No earlier version was observed for comparison.
Verified commit 0f2e1a8c0f95aa486aa88f0abae347ea16e4b809
git clone --filter=blob:none --no-checkout https://github.com/Cavalry-Collective/visual-stack.git .hotskills/cavalry-collective-visual-stack && git -C .hotskills/cavalry-collective-visual-stack checkout --detach 0f2e1a8c0f95aa486aa88f0abae347ea16e4b809
# Copy each selected skill directory from .hotskills/cavalry-collective-visual-stack into .claude/skills/<skill-name>/Heat
1.2- Star growth, last 7 daysNot available
- Star growth, last 24 hoursNot available
- Rank movement, last 7 daysNot available
- Commits, last 30 daysNot available
- Accounts asking about it through MCP, last 7 daysNot available
- Hot votes this weekNot available
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
30-day change not yet available: not enough history.
Individual skills in this repository
- go
plugins/vstack/experimental/go - phase-build
plugins/vstack/experimental/phase-build - phase-preview
plugins/vstack/experimental/phase-preview - spec
plugins/vstack/experimental/spec - start
plugins/vstack/experimental/start - review
plugins/vstack/skills/review - user-story-map
plugins/vstack/skills/user-story-map - wireframe
plugins/vstack/skills/wireframe
How it works
go
When your agent uses it
Compatibility entry for Visual Stack's former /vstack:go command. Runs the wireframe and UI review tool, now called review. Use only when the user invokes /vstack:go.
What it loads into context
Frontmatter
45 tokensAlways available to the agent
SKILL.md
144 tokensWhen the skill is activated
Reference documents
8,999 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
Files
../../../../.claude-plugin/marketplace.jsonasset1,712 bytes../../.claude-plugin/plugin.jsonasset1,201 bytesSKILL.mdcore654 bytes../../hooks/hooks.jsonasset324 bytes../../hooks/hooks.jsonasset324 bytes../../skills/review/SKILL.mddoc37,169 bytes
Read SKILL.md
Visual Stack is the wireframe and UI review tool. This legacy entry no longer inspects pipeline state
or routes to other workflow stages.
Read `../../skills/review/SKILL.md` completely, load the host adapter it requires, and follow that workflow
for the user's request. Treat this as a direct invocation of the review skill. If the request does
not yet name a screen or running UI, ask only for the minimum information that the review skill
cannot infer.View the complete source on GitHubphase-build
When your agent uses it
Build one release phase against the specs — plan it on an interactive board (endpoints, components, resources, with what already exists read from the codebase), let the user adjust, then build node by node while the board shows live progress. Use when the user wants to build a phase, implement the phase-1 slice, execute the plan from a story map or spec, or watch a build happen visually.
What it loads into context
Frontmatter
90 tokensAlways available to the agent
SKILL.md
1,793 tokensWhen the skill is activated
Reference documents
534 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 1 · Scope the phase
- 2 · Read the codebase, then draft the plan
- 3 · Serve the board, let the user adjust
- 4 · Build, reporting as you go
- 5 · Finish
- Notes
- State & handoff
Files
../../contracts/bridge-loop.mddoc2,163 bytesSKILL.mdcore6,809 bytesSKILL.mdcore6,809 bytesSKILL.mdcore6,809 bytesSKILL.mdcore6,809 bytesSKILL.mdcore6,809 bytesSKILL.mdcore6,809 bytesSKILL.mdcore6,809 bytesSKILL.mdcore6,809 bytesSKILL.mdcore6,809 bytesSKILL.mdcore6,809 bytesSKILL.mdcore6,809 bytesSKILL.mdcore6,809 bytesSKILL.mdcore6,809 bytesSKILL.mdcore6,809 bytesassets/build-board.htmlasset62,884 bytes
Read SKILL.md
One release phase, built in three passes — API, then UI, then infrastructure — against a plan the
user saw and adjusted first. The board shows three trees (Endpoints · Components · Resources), each
node coloured by what it is: **new** this phase, **changed** (exists, this phase extends it), or
**already built**. Press Start, and the same board becomes the progress view — nodes pulse while
being built and fill in as they land.
```
story map slice + specs + phase screens ──► plan JSON ──► board ──► user adjusts ──► Start
│
done ◄── infra ◄── ui ◄── api — one node at a time, each reported to the board ◄┘
```
**`have` is read from the codebase, never from a previous plan.** A plan that colours from last
phase's intentions lies the first time a phase ships partial. Read the actual routes, components,View the complete source on GitHubphase-preview
When your agent uses it
Preview a signed-off design one release phase at a time — cut it down into a series of phase screens, each showing only what exists by that phase with the layout untouched, then put them on a scrubber you drag to watch the screen fill in release by release. Use when the user wants a Phase 1 / MVP version of an existing wireframe or mockup, phased or staged screens, a design sliced by release phase or story map, or wants to see what a screen looks like before later features land.
What it loads into context
Frontmatter
111 tokensAlways available to the agent
SKILL.md
2,423 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 1 · Resolve the two inputs
- 2 · Write the phase plan before touching any HTML
- 3 · Generate the phases, one at a time, in order
- 4 · Prove each phase is a subtraction
- 5 · Review each phase
- 6 · Put them on a scrubber
- Notes
- State & handoff
Scripts executed separately
assets/check-subtraction.mjsassets/phase-view.mjs
Files
SKILL.mdcore10,032 bytesSKILL.mdcore10,032 bytesSKILL.mdcore10,032 bytesSKILL.mdcore10,032 bytesSKILL.mdcore10,032 bytesSKILL.mdcore10,032 bytesassets/check-subtraction.mjsruns8,734 bytesassets/phase-view.mjsruns4,524 bytes
Read SKILL.md
One design in, one screen per phase out. Each phase file shows everything available **by** that
phase and nothing that isn't, in exactly the positions the approved design already put them — so a
phase screen is the real build target for that release, not a redrawing of it. Nothing here is
drawn: this is the approved design with the later releases taken out, which is why it can be
checked mechanically rather than by eye.
```
base.html ──┬──► phase-1/base.html only what ships in phase 1
├──► phase-2/base.html phase 1 + phase 2
└──► phase-3/base.html phase 1 + 2 + 3 ( = the base, if phases cover it all )
```
**Subtract only.** Nothing is moved, resized, restyled or repositioned; nothing new is invented. That
is the entire discipline of this skill, and §4 proves it mechanically rather than trusting the eye.View the complete source on GitHubspec
When your agent uses it
Turn a wireframe and everything already agreed into a written spec in traditional agile shape — an initiative broken into epics, epics into user stories with acceptance criteria, and themes as the labels that span them — presented as an interactive drill-down tree the user prunes, edits and annotates in the browser, with a plain-markdown spec generated from it. Use when the user wants a spec, an initiative or epic broken into user stories, acceptance criteria, to formalise what a wireframe or mockup does, or to review and edit a spec visually.
What it loads into context
Frontmatter
119 tokensAlways available to the agent
SKILL.md
2,554 tokensWhen the skill is activated
Reference documents
534 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 1 · Draft the tree
- 2 · Serve it
- 3 · The round
- 4 · Generate the markdown, every round
- Notes
- State & handoff
Files
../../contracts/bridge-loop.mddoc2,163 bytesSKILL.mdcore10,420 bytesSKILL.mdcore10,420 bytesSKILL.mdcore10,420 bytesSKILL.mdcore10,420 bytesSKILL.mdcore10,420 bytesassets/spec-tree.htmlasset84,671 bytes
Read SKILL.md
A spec in traditional agile shape — the full Atlassian ladder, **initiative → epics → user
stories**, with **themes as the labels that span them** — that opens **collapsed to headlines**:
the initiative's goal, its epics, their story titles; one screen, no scrolling. Click a story for
its acceptance criteria; click a criterion for how it will be verified. Themes are *"large focus
areas that span the organization"* — **tags, not work items**: a catalog shown on the initiative,
toggled onto the stories they span (auditability, performance, compliance). The complaint this
fixes: a spec today is a long document nobody reads.
```
wireframe + product.md + the conversation ──► tree JSON ──► drill-down page ──► edits & notes ──┐
▲ │
└────────── you apply it, reply in notes, regenerate ◄────────────────┘
│
specs/YYYY-MM-DD-<feature>.md ← generated every roundView the complete source on GitHubstart
When your agent uses it
Start a project on the Visual Stack — a multi-step setup form captures what's being built, recommends a stack, and either instantiates the vstack-template-base template, sets up a specs-and-design-only workspace, or records an existing codebase without touching it. Use when the user wants to start a new project, scaffold a repo, set up a codebase from the Cavalry template, pick a stack or add-ons, run Day-1 setup, or bring an existing app onto the visual stack.
What it loads into context
Frontmatter
107 tokensAlways available to the agent
SKILL.md
2,939 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 1 · Pick the mode
- 2 · Serve the form
- 3 · Act on the choice
- 4 · Write `specs/product.md`
- 5 · Hand back the repo-level steps *(full setup only)*
- Notes
- State & handoff
Scripts executed separately
assets/chooser-server.mjs
Files
SKILL.mdcore11,360 bytesSKILL.mdcore11,360 bytesSKILL.mdcore11,360 bytesSKILL.mdcore11,360 bytesSKILL.mdcore11,360 bytesSKILL.mdcore11,360 bytesSKILL.mdcore11,360 bytesSKILL.mdcore11,360 bytesSKILL.mdcore11,360 bytesassets/chooser-server.mjsruns14,294 bytesassets/chooser.htmlasset80,808 bytes
Read SKILL.md
Turns an idea — or an existing repo — into *this* project. One multi-step form, then whichever of three
paths its answers call for.
```
┌─ skip dev ──► specs/ + design/ only (no clone)
idea ──► setup form ──► choice ──┤
└─ full ─────► clone ──► delete the rest ──► toolchain ──► ready
existing code ──► infer ──► confirm screen ──► recorded (nothing touched)
```
Every path ends with two files the rest of the chain reads: **`specs/product.md`** — what this product
is — and **`.vstack/pipeline.json`** — where the pipeline stands.
## 1 · Pick the modeView the complete source on GitHubreview
When your agent uses it
Visual Stack's primary tool. Build a UI wireframe and open it in an interactive review workspace where the user comments directly on the page, turning those comments into the next iteration — or point the same workspace at an app that is already running and review the real thing. Use when the user wants a wireframe, UI mockup, screen design or prototype built; wants to review, annotate, mark up or comment on a page, a design, an existing UI, a running app or a website; wants to iterate on a UI; asks to use Visual Stack; or invokes $vstack:review, /vstack:review, or the older /vstack:wireframe.
What it loads into context
Frontmatter
144 tokensAlways available to the agent
SKILL.md
8,999 tokensWhen the skill is activated
Reference documents
9,040 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 0 · Host (do this first)
- 1 · If you are generating the page
- 2 · Resolve the design source
- 3 · Publish and serve
- 4 · What the user gets
- 5 · Catch the review, and hold up your end of the conversation
- 6 · Publish the wireframe as a shareable link
- 7 · Reviewing a UI that already exists
- Notes
- State & handoff
Scripts executed separately
assets/bundle-artifact.mjsassets/harvest-reference.jsassets/review-server.mjstests/design-tokens.mjstests/host-profiles.mjstests/review-lifecycle.mjstests/round-gate.mjstests/update-check.mjstests/workdir.mjs
Files
SKILL.mdcore37,169 bytesSKILL.mdcore37,169 bytesSKILL.mdcore37,169 bytesSKILL.mdcore37,169 bytesSKILL.mdcore37,169 bytesSKILL.mdcore37,169 bytesSKILL.mdcore37,169 bytesSKILL.mdcore37,169 bytesSKILL.mdcore37,169 bytesSKILL.mdcore37,169 bytesSKILL.mdcore37,169 bytesSKILL.mdcore37,169 bytesSKILL.mdcore37,169 bytesSKILL.mdcore37,169 bytesSKILL.mdcore37,169 bytesSKILL.mdcore37,169 bytesSKILL.mdcore37,169 bytesSKILL.mdcore37,169 bytesSKILL.mdcore37,169 bytesSKILL.mdcore37,169 bytesSKILL.mdcore37,169 bytesassets/bundle-artifact.mjsruns5,352 bytesassets/harvest-reference.jsruns5,880 bytesassets/review-server.mjsruns109,885 bytesassets/screen-template.htmlasset2,171 bytesassets/workspace.htmlasset278,608 byteshosts/claude.mddoc3,976 byteshosts/codex.mddoc5,601 byteshosts/grok.mddoc5,078 bytesreferences/design-sources.mddoc4,386 bytesreferences/workflow.mddoc17,553 bytestests/design-tokens.mjsruns6,003 bytestests/host-profiles.mjsruns2,796 bytestests/review-lifecycle.mjsruns22,695 bytestests/round-gate.mjsruns9,524 bytestests/update-check.mjsruns3,919 bytestests/workdir.mjsruns3,298 bytes
Read SKILL.md
## 0 · Host (do this first)
This skill is **tool-agnostic**. The loop is defined in
`plugins/vstack/contracts/review-loop.md` and the ops you need in
`plugins/vstack/contracts/host.md`. **Never invent host-specific tool names in
this file** — they live only in the Host adapter.
| You are running under… | Load adapter | Set |
| --- | --- | --- |
| **Codex** | `skills/review/hosts/codex.md` | `VSTACK_HOST=codex` (or `--host codex` on `serve`) |
| **Grok** Build / Grok CLI | `skills/review/hosts/grok.md` | `VSTACK_HOST=grok` (or `--host grok` on `serve`) |
| **Claude Code** | `skills/review/hosts/claude.md` | `VSTACK_HOST=claude` (default if unset) |
Adapters live in the `hosts/` directory beside this SKILL.md. Do not readView the complete source on GitHubuser-story-map
When your agent uses it
Build an interactive, drag-and-drop user story map so the user can re-slice work across release phases. Use when the user wants a story map, a phased roadmap, release slicing, a backbone/activities journey map, or to decide "which stories go in which phase" and move them around.
What it loads into context
Frontmatter
69 tokensAlways available to the agent
SKILL.md
2,694 tokensWhen the skill is activated
Reference documents
534 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- The three axes (get these right)
- Build steps
- Live link (bridge)
- Notes
- State & handoff
Files
../../contracts/bridge-loop.mddoc2,163 bytesSKILL.mdcore10,950 bytesSKILL.mdcore10,950 bytesSKILL.mdcore10,950 bytesSKILL.mdcore10,950 bytesSKILL.mdcore10,950 bytesSKILL.mdcore10,950 bytesSKILL.mdcore10,950 bytesassets/story-map-template.htmlasset98,503 bytes
Read SKILL.md
Produce a **self-contained, interactive** user story map the user can operate: drag story cards between cells to re-slice which phase (and activity) each belongs to, reorder phases/activities/stories by dragging, edit inline, add/remove cards, phases, activities and tags, and export the result. It runs in a real browser — served live from this session by default, published as an Artifact when it needs to travel.
## The three axes (get these right)
A story map has exactly three dimensions — clarify or infer all three before building:
1. **Activities (backbone)** — the columns, left→right, the user's journey / the sequence of high-level things they do (e.g. *Set up the role → Bring in candidates → Screen → …*). Order carries meaning; the user can re-drag it.
2. **Phases (swimlanes)** — the rows, top→bottom = release order (Phase 1 = first / MVP). Each has a name and a one-line goal. The user can re-drag the order.
3. **Stories** — the cards. Each belongs to exactly **one activity + one phase**; order within a cell is its rank (top = first). Each has a `status` — `open` (default) / `progress` / `review` / `done` — and the card's left border accent is coloured by status (cells are tinted by phase; a legend above the grid explains the colours — status never renders as a pill, pills are for tags). Omit `status` unless the context clearly says work has started. Keep the text short and recognizable to a user (what they can do), not implementation detail.
**Tags are cross-cutting themes**, not a card property to colour by. A story may carry any number of tags (e.g. `"AI"`, `"compliance"`); they render as small pills on the card, and the user can add/remove them per card or delete a tag everywhere via the ⌗ menu. Cards are always coloured by phase — never invent per-card colours. Seed tags only for genuine cross-cutting concerns you can identify (AI/automation is the common one).
Derive these from whatever context exists — a spec, a plan, a `tasks.md`, a development plan, the conversation. If the subject or its journey is unclear, ask briefly: what's the product, what are the ~5–9 journey steps, and how many release phases.
View the complete source on GitHubwireframe
When your agent uses it
Alias for Visual Stack's review tool, which used to be called wireframe. Builds a UI wireframe and opens it in an interactive review workspace, or reviews an app that is already running. Use only when the user invokes /vstack:wireframe or $vstack:wireframe.
What it loads into context
Frontmatter
66 tokensAlways available to the agent
SKILL.md
146 tokensWhen the skill is activated
Reference documents
8,999 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
Files
../review/SKILL.mddoc37,169 bytesSKILL.mdcore638 bytes
Read SKILL.md
The wireframe tool is now `/vstack:review`. Nothing else changed — same workspace, same loop,
same on-disk state.
Read `../review/SKILL.md` completely, load the host adapter it requires, and follow that workflow
for the user's request. Treat this as a direct invocation of the review skill. Do not mention the
rename unless the user asks.View the complete source on GitHubSkills included
- go
- phase-build
- phase-preview
- spec
- start
- review
- user-story-map
- wireframe
Repository facts
- License
- MIT
- Created
- Jul 27, 2026
- Last pushed
- Oct 15, 2026
- Forks
- 0
- Open issues
- 0
- Project activity
- Active
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 6, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 58 notes
plugins/vstack/hooks/hooks.json:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/vstack/experimental/phase-build/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/vstack/experimental/phase-build/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/vstack/experimental/phase-build/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/vstack/experimental/phase-build/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/vstack/experimental/phase-build/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/vstack/experimental/phase-build/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/vstack/experimental/phase-build/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/vstack/experimental/phase-build/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/vstack/experimental/phase-build/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/vstack/experimental/phase-build/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/vstack/experimental/phase-build/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/vstack/experimental/phase-build/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/vstack/experimental/phase-build/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/vstack/experimental/phase-preview/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/vstack/experimental/phase-preview/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/vstack/experimental/phase-preview/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/vstack/experimental/phase-preview/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/vstack/experimental/phase-preview/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/vstack/experimental/spec/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- No broad tool permissions
- 3 dangerous shell commandsin 1 file: start/SKILL.md:111
- 197 network referencesin 17 files: review/assets/workspace.html:1030 plugins/vstack/skills/review/SKILL.md:112 spec/assets/spec-tree.html:507 and 14 more
- No hidden or obfuscated text
- No instruction overrides
- 12 executable scriptsin 12 files: phase-preview/assets/check-subtraction.mjs:1 phase-preview/assets/phase-view.mjs:1 start/assets/chooser-server.mjs:1 and 9 more
- No access to secrets
- No requests to vote in Hot
Show all 212 signals by file
.claude-plugin/marketplace.json
- Network accessline 4
"name": "Cavalry Collective", "email": "adam@cavalry.sg", "url": "https://cavalry.sg" - Network accessline 5
"email": "adam@cavalry.sg", "url": "https://cavalry.sg" }, - Network accessline 6
"url": "https://cavalry.sg" - Network accessline 16
"name": "Cavalry Collective", "email": "adam@cavalry.sg", "url": "https://cavalry.sg" - Network accessline 17
"email": "adam@cavalry.sg", "url": "https://cavalry.sg" }, - Network accessline 18
"url": "https://cavalry.sg" - Network accessline 19
}, "homepage": "https://www.cavalry.sg/visual-stack", "repository": "https://github.com/Cavalry-Collective/visual-stack", - Network accessline 20
"homepage": "https://www.cavalry.sg/visual-stack", - Network accessline 21
"repository": "https://github.com/Cavalry-Collective/visual-stack",
plugins/vstack/.claude-plugin/plugin.json
- Network accessline 7
"name": "Cavalry Collective", "email": "adam@cavalry.sg", "url": "https://cavalry.sg" - Network accessline 8
"email": "adam@cavalry.sg", "url": "https://cavalry.sg" }, - Network accessline 9
"url": "https://cavalry.sg" - Network accessline 10
}, "homepage": "https://www.cavalry.sg/visual-stack", "repository": "https://github.com/Cavalry-Collective/visual-stack", - Network accessline 11
"homepage": "https://www.cavalry.sg/visual-stack", - Network accessline 12
"repository": "https://github.com/Cavalry-Collective/visual-stack",
plugins/vstack/experimental/phase-build/assets/build-board.html
- Network accessline 389
<!-- The repo, not the marketing page: someone clicking the mark inside the tool wants the source, the issues, or the install command. --> <a class="vslink" href="https://github.com/Cavalry-Collective/visual-stack" target="_bla - Network accessline 390
tool wants the source, the issues, or the install command. --> <a class="vslink" href="https://github.com/Cavalry-Collective/visual-stack" target="_blank" rel="noopener" title="Visual Stack"> - Network accessline 391
<a class="vslink" href="https://github.com/Cavalry-Collective/visual-stack" target="_blank" rel="noopener" - Network accessline 687
if (opts.poll) { const tick = async () => { try { const r = await fetch(opts.poll, { cache: 'no-store' }); say(r.ok) } - Network accessline 688
const tick = async () => { try { const r = await fetch(opts.poll, { cache: 'no-store' }); say(r.ok) } catch { say(false) } - Network accessline 689
try { const r = await fetch(opts.poll, { cache: 'no-store' }); say(r.ok) } - Network accessline 809
if (info.dismiss) { try { fetch(info.dismiss, { - Network accessline 810
try { fetch(info.dismiss, { method: 'POST', - Network accessline 811
fetch(info.dismiss, { - Network accessline 1220
const body = { ...doc, ...(extra || {}) }; try { const r = await fetch(BRIDGE.save, { - Network accessline 1221
try { const r = await fetch(BRIDGE.save, { method: 'POST', - Network accessline 1222
const r = await fetch(BRIDGE.save, { - Network accessline 1248
$('#reset').addEventListener('click', async () => { if (BRIDGE) { try { doc = await (await fetch(`${BRIDGE.doc}?t=${BRIDGE.token}`)).json() } catch {} - Network accessline 1249
if (BRIDGE) { try { doc = await (await fetch(`${BRIDGE.doc}?t=${BRIDGE.token}`)).json() } catch {} } else { - Network accessline 1250
try { doc = await (await fetch(`${BRIDGE.doc}?t=${BRIDGE.token}`)).json() } catch {} - Network accessline 1280
if (BRIDGE) VSShell.setLink(false, null, BRIDGE.watching); else VSShell.hideLink(); if (BRIDGE) { try { doc = await (await fetch(`${BRIDGE.doc}?t=${BRIDGE.token}`)).json() } - Network accessline 1281
if (BRIDGE) { try { doc = await (await fetch(`${BRIDGE.doc}?t=${BRIDGE.token}`)).json() } catch { doc = JSON.parse($('#fallback').textContent); } - Network accessline 1282
try { doc = await (await fetch(`${BRIDGE.doc}?t=${BRIDGE.token}`)).json() }
plugins/vstack/experimental/phase-preview/assets/check-subtraction.mjs
- Executable scriptline 1
#!/usr/bin/env node
plugins/vstack/experimental/phase-preview/assets/phase-view.mjs
- Executable scriptline 1
#!/usr/bin/env node
plugins/vstack/experimental/spec/assets/spec-tree.html
- Network accessline 507
<!-- The repo, not the marketing page: someone clicking the mark inside the tool wants the source, the issues, or the install command. --> <a class="vslink" href="https://github.com/Cavalry-Collective/visual-stack" target="_bla - Network accessline 508
tool wants the source, the issues, or the install command. --> <a class="vslink" href="https://github.com/Cavalry-Collective/visual-stack" target="_blank" rel="noopener" title="Visual Stack"> - Network accessline 509
<a class="vslink" href="https://github.com/Cavalry-Collective/visual-stack" target="_blank" rel="noopener" - Network accessline 916
if (opts.poll) { const tick = async () => { try { const r = await fetch(opts.poll, { cache: 'no-store' }); say(r.ok) } - Network accessline 917
const tick = async () => { try { const r = await fetch(opts.poll, { cache: 'no-store' }); say(r.ok) } catch { say(false) } - Network accessline 918
try { const r = await fetch(opts.poll, { cache: 'no-store' }); say(r.ok) } - Network accessline 1038
if (info.dismiss) { try { fetch(info.dismiss, { - Network accessline 1039
try { fetch(info.dismiss, { method: 'POST', - Network accessline 1040
fetch(info.dismiss, { - Network accessline 1314
if (!BRIDGE) return; try { const idx = await (await fetch(`${BRIDGE.history}?t=${BRIDGE.token}`)).json(); - Network accessline 1315
try { const idx = await (await fetch(`${BRIDGE.history}?t=${BRIDGE.token}`)).json(); if (!Array.isArray(idx) || !idx.length) return; - Network accessline 1316
const idx = await (await fetch(`${BRIDGE.history}?t=${BRIDGE.token}`)).json(); - Network accessline 1686
if (!v.json && BRIDGE) { try { v.json = JSON.stringify(await (await fetch(`${BRIDGE.history}/${n}?t=${BRIDGE.token}`)).json()); - Network accessline 1687
try { v.json = JSON.stringify(await (await fetch(`${BRIDGE.history}/${n}?t=${BRIDGE.token}`)).json()); v.fetched = true; - Network accessline 1688
v.json = JSON.stringify(await (await fetch(`${BRIDGE.history}/${n}?t=${BRIDGE.token}`)).json()); - Network accessline 1732
$('#send').disabled = true; try { const r = await fetch(BRIDGE.save, { - Network accessline 1733
try { const r = await fetch(BRIDGE.save, { method: 'POST', - Network accessline 1734
const r = await fetch(BRIDGE.save, { - Network accessline 1751
if (BRIDGE) { try { doc = migrate(await (await fetch(`${BRIDGE.doc}?t=${BRIDGE.token}`)).json()); - Network accessline 1752
try { doc = migrate(await (await fetch(`${BRIDGE.doc}?t=${BRIDGE.token}`)).json()); } catch { doc = migrate(JSON.parse($('#fallback').textContent)); } - Network accessline 1753
doc = migrate(await (await fetch(`${BRIDGE.doc}?t=${BRIDGE.token}`)).json());
plugins/vstack/experimental/start/SKILL.md
- Network accessline 39
Start it with **`run_in_background: true`**, then tell the user to open **http://localhost:7799/**. - Network accessline 110
git clone --depth 1 https://github.com/Cavalry-Collective/vstack-template-base.git <name> - Dangerous shell operationline 111
rm -rf <name>/.git && git -C <name> init && git -C <name> add -A - Dangerous shell operationline 122
for p in $(jq -r '.deleting.packs[]' .vstack/choice.json); do rm -rf "stacks/$p"; done - Dangerous shell operationline 123
for a in $(jq -r '.deleting.addons[]' .vstack/choice.json); do rm -rf "add-ons/$a"; done
plugins/vstack/experimental/start/assets/chooser-server.mjs
- Executable scriptline 1
#!/usr/bin/env node - Network accessline 170
const t = setTimeout(() => ctrl.abort(), 3500) try { const r = await fetch(`https://api.github.com/repos/${TEMPLATE_REPO}/contents/${dir}`, { - Network accessline 171
try { const r = await fetch(`https://api.github.com/repos/${TEMPLATE_REPO}/contents/${dir}`, { headers: { 'User-Agent': 'vstack-start', 'Accept': 'application/vnd.github+json' }, - Network accessline 172
const r = await fetch(`https://api.github.com/repos/${TEMPLATE_REPO}/contents/${dir}`, { - Network accessline 233
const server = http.createServer((req, res) => { const url = new URL(req.url, 'http://127.0.0.1') - Network accessline 234
const url = new URL(req.url, 'http://127.0.0.1') - Network accessline 320
console.log(`setup form for ${inventory.project} — mode ${MODE}, inventory ${source}`) if (MODE !== 'existing') console.log(` ${inventory.packs.length} pack(s) · ${inventory.addons.length} add-on(s)`) console.log(` open http://localho - Network accessline 321
if (MODE !== 'existing') console.log(` ${inventory.packs.length} pack(s) · ${inventory.addons.length} add-on(s)`) console.log(` open http://localhost:${PORT}/`) }) - Network accessline 322
console.log(` open http://localhost:${PORT}/`)
plugins/vstack/experimental/start/assets/chooser.html
- Network accessline 436
<!-- The repo, not the marketing page: someone clicking the mark inside the tool wants the source, the issues, or the install command. --> <a class="vslink" href="https://github.com/Cavalry-Collective/visual-stack" target="_bla - Network accessline 437
tool wants the source, the issues, or the install command. --> <a class="vslink" href="https://github.com/Cavalry-Collective/visual-stack" target="_blank" rel="noopener" title="Visual Stack"> - Network accessline 438
<a class="vslink" href="https://github.com/Cavalry-Collective/visual-stack" target="_blank" rel="noopener" - Network accessline 788
if (opts.poll) { const tick = async () => { try { const r = await fetch(opts.poll, { cache: 'no-store' }); say(r.ok) } - Network accessline 789
const tick = async () => { try { const r = await fetch(opts.poll, { cache: 'no-store' }); say(r.ok) } catch { say(false) } - Network accessline 790
try { const r = await fetch(opts.poll, { cache: 'no-store' }); say(r.ok) } - Network accessline 910
if (info.dismiss) { try { fetch(info.dismiss, { - Network accessline 911
try { fetch(info.dismiss, { method: 'POST', - Network accessline 912
fetch(info.dismiss, { - Network accessline 1562
for (let attempt = 0; attempt < 3; attempt++) { try { const r = await fetch('/choose', { - Network accessline 1563
try { const r = await fetch('/choose', { method: 'POST', headers: { 'Content-Type': 'application/json' }, - Network accessline 1564
const r = await fetch('/choose', {
plugins/vstack/skills/review/SKILL.md
- Network accessline 112
The server opens the workspace in the browser itself, as soon as it is up. Say it is open and name the URL — **http://localhost:7788/** — so a machine that - Network accessline 112
The server opens the workspace in the browser itself, as soon as it is up. Say it is open and name the URL — **http://localhost:7788/** — so a machine that - Network accessline 112
The server opens the workspace in the browser itself, as soon as it is up. Say it is open and name the URL — **http://localhost:7788/** — so a machine that - Network accessline 113
it is open and name the URL — **http://localhost:7788/** — so a machine that - Network accessline 113
it is open and name the URL — **http://localhost:7788/** — so a machine that - Network accessline 113
it is open and name the URL — **http://localhost:7788/** — so a machine that - Network accessline 393
node "$SKILL/assets/review-server.mjs" serve \ --app http://localhost:5173 --name lora-ui --port 7788 # a dev server - Network accessline 393
node "$SKILL/assets/review-server.mjs" serve \ --app http://localhost:5173 --name lora-ui --port 7788 # a dev server - Network accessline 393
node "$SKILL/assets/review-server.mjs" serve \ --app http://localhost:5173 --name lora-ui --port 7788 # a dev server - Network accessline 394
--app http://localhost:5173 --name lora-ui --port 7788 # a dev server - Network accessline 394
--app http://localhost:5173 --name lora-ui --port 7788 # a dev server - Network accessline 394
--app http://localhost:5173 --name lora-ui --port 7788 # a dev server - Network accessline 395
node "$SKILL/assets/review-server.mjs" serve --app https://example.com --name marketing --port 7788 # a site on the internet - Network accessline 395
node "$SKILL/assets/review-server.mjs" serve --app https://example.com --name marketing --port 7788 # a site on the internet - Network accessline 395
node "$SKILL/assets/review-server.mjs" serve --app https://example.com --name marketing --port 7788 # a site on the internet - Network accessline 396
--app https://example.com --name marketing --port 7788 # a site on the internet - Network accessline 396
--app https://example.com --name marketing --port 7788 # a site on the internet - Network accessline 396
--app https://example.com --name marketing --port 7788 # a site on the internet - Network accessline 399
The server reverse-proxies the app, so the workspace and the app share an origin — which is the only reason a comment can attach to an element rather than to a coordinate. The workspace moves to **http://localhost:7788/__review/**; every - Network accessline 399
The server reverse-proxies the app, so the workspace and the app share an origin — which is the only reason a comment can attach to an element rather than to a coordinate. The workspace moves to **http://localhost:7788/__review/**; every - Network accessline 399
The server reverse-proxies the app, so the workspace and the app share an origin — which is the only reason a comment can attach to an element rather than to a coordinate. The workspace moves to **http://localhost:7788/__review/**; every - Network accessline 400
— which is the only reason a comment can attach to an element rather than to a coordinate. The workspace moves to **http://localhost:7788/__review/**; every other path belongs to the app. Sockets are proxied too, so hot reload keeps - Network accessline 400
— which is the only reason a comment can attach to an element rather than to a coordinate. The workspace moves to **http://localhost:7788/__review/**; every other path belongs to the app. Sockets are proxied too, so hot reload keeps - Network accessline 400
— which is the only reason a comment can attach to an element rather than to a coordinate. The workspace moves to **http://localhost:7788/__review/**; every other path belongs to the app. Sockets are proxied too, so hot reload keeps - Network accessline 401
coordinate. The workspace moves to **http://localhost:7788/__review/**; every - Network accessline 401
coordinate. The workspace moves to **http://localhost:7788/__review/**; every - Network accessline 401
coordinate. The workspace moves to **http://localhost:7788/__review/**; every - Network accessline 462
node "$SKILL/assets/review-server.mjs" serve --app https://example.com --name marketing --port 7788 - Network accessline 462
node "$SKILL/assets/review-server.mjs" serve --app https://example.com --name marketing --port 7788 - Network accessline 462
node "$SKILL/assets/review-server.mjs" serve --app https://example.com --name marketing --port 7788
plugins/vstack/skills/review/assets/bundle-artifact.mjs
- Executable scriptline 1
#!/usr/bin/env node
plugins/vstack/skills/review/assets/harvest-reference.js
- Executable scriptline 1
Executable file
plugins/vstack/skills/review/assets/review-server.mjs
- Executable scriptline 1
#!/usr/bin/env node - Network accessline 146
function targetURL (raw) { let s = String(raw).trim() if (/^:\d+$/.test(s)) s = 'http://localhost' + s - Network accessline 147
let s = String(raw).trim() if (/^:\d+$/.test(s)) s = 'http://localhost' + s if (!/^https?:\/\//i.test(s)) s = 'http://' + s - Network accessline 148
if (/^:\d+$/.test(s)) s = 'http://localhost' + s - Network accessline 1691
A public site needs more than a dev server does. It writes its own origin into its markup in absolute form — one click on `https://site.com/pricing` and the - Network accessline 1692
its markup in absolute form — one click on `https://site.com/pricing` and the - Network accessline 1828
async function handle (req, res) { const url = new URL(req.url, 'http://localhost') - Network accessline 1829
const url = new URL(req.url, 'http://localhost') - Network accessline 2160
throw e }) const url = `http://localhost:${port}${BASE}/` - Network accessline 2162
const url = `http://localhost:${port}${BASE}/`
plugins/vstack/skills/review/assets/workspace.html
- Network accessline 1030
<!-- The repo, not the marketing page: someone clicking the mark inside the tool wants the source, the issues, or the install command. --> <a class="vslink" href="https://github.com/Cavalry-Collective/visual-stack" target="_bla - Network accessline 1031
tool wants the source, the issues, or the install command. --> <a class="vslink" href="https://github.com/Cavalry-Collective/visual-stack" target="_blank" rel="noopener" title="Visual Stack"> - Network accessline 1032
<a class="vslink" href="https://github.com/Cavalry-Collective/visual-stack" target="_blank" rel="noopener" - Network accessline 1502
if (opts.poll) { const tick = async () => { try { const r = await fetch(opts.poll, { cache: 'no-store' }); say(r.ok) } - Network accessline 1503
const tick = async () => { try { const r = await fetch(opts.poll, { cache: 'no-store' }); say(r.ok) } catch { say(false) } - Network accessline 1504
try { const r = await fetch(opts.poll, { cache: 'no-store' }); say(r.ok) } - Network accessline 1624
if (info.dismiss) { try { fetch(info.dismiss, { - Network accessline 1625
try { fetch(info.dismiss, { method: 'POST', - Network accessline 1626
fetch(info.dismiss, { - Network accessline 2222
let data = inline; if (!data) { try { data = await (await fetch(API + '/project')).json() } - Network accessline 2223
if (!data) { try { data = await (await fetch(API + '/project')).json() } catch { - Network accessline 2224
try { data = await (await fetch(API + '/project')).json() } - Network accessline 2322
// The server keeps what this tab is not allowed to change: a comment // already sent keeps its words, and only the thread grows on it. await fetch(API + '/comments', { - Network accessline 2323
// already sent keeps its words, and only the thread grows on it. await fetch(API + '/comments', { method: 'POST', headers: { 'Content-Type': 'application/json' }, - Network accessline 2324
await fetch(API + '/comments', { - Network accessline 2354
async function onReloadEvent () { let data; try { data = await (await fetch(API + '/project')).json() } catch { return } - Network accessline 2355
let data; try { data = await (await fetch(API + '/project')).json() } catch { return } // The link can land on its own, without the page or the review moving. - Network accessline 2356
try { data = await (await fetch(API + '/project')).json() } catch { return } - Network accessline 2508
again.disabled = true; try { const response = await fetch(API + '/comments/requeue', { method: 'POST' }); - Network accessline 2509
try { const response = await fetch(API + '/comments/requeue', { method: 'POST' }); // The agent came back while the button was on screen. It holds them after - Network accessline 2510
const response = await fetch(API + '/comments/requeue', { method: 'POST' }); - Network accessline 3814
if (S.runtime === 'artifact') return true; try { const response = await fetch(API + '/comments/dismiss', { - Network accessline 3815
try { const response = await fetch(API + '/comments/dismiss', { method: 'POST', headers: { 'Content-Type': 'application/json' }, - Network accessline 3816
const response = await fetch(API + '/comments/dismiss', { - Network accessline 4000
render(); try { const response = await fetch(API + '/comments/delegate', { - Network accessline 4001
try { const response = await fetch(API + '/comments/delegate', { method: 'POST', headers: { 'Content-Type': 'application/json' }, - Network accessline 4002
const response = await fetch(API + '/comments/delegate', { - Network accessline 4060
if (S.runtime === 'artifact') return; try { const response = await fetch(API + '/comments/unreply', { - Network accessline 4061
try { const response = await fetch(API + '/comments/unreply', { method: 'POST', headers: { 'Content-Type': 'application/json' }, - Network accessline 4062
const response = await fetch(API + '/comments/unreply', { - Network accessline 5008
renderReset(); renderResetDialog(); try { const response = await fetch(API + '/reset', { method: 'POST' }); - Network accessline 5009
try { const response = await fetch(API + '/reset', { method: 'POST' }); if (response.status === 404) throw new Error('old'); - Network accessline 5010
const response = await fetch(API + '/reset', { method: 'POST' }); - Network accessline 5066
renderHistoryButton(); try { const res = await fetch(API + '/history/clear', { method: 'POST' }); - Network accessline 5067
try { const res = await fetch(API + '/history/clear', { method: 'POST' }); const type = res.headers.get('content-type') || ''; - Network accessline 5068
const res = await fetch(API + '/history/clear', { method: 'POST' }); - Network accessline 5349
whenever each of them was written. */ for (const a of going2) a.sentAt = at; const response = await fetch(API + '/comments', { - Network accessline 5350
for (const a of going2) a.sentAt = at; const response = await fetch(API + '/comments', { method: 'POST', headers: { 'Content-Type': 'application/json' }, - Network accessline 5351
const response = await fetch(API + '/comments', { - Network accessline 5458
S.share.pending = true; renderShare(); try { await fetch(API + '/share', { - Network accessline 5459
try { await fetch(API + '/share', { method: 'POST', headers: { 'Content-Type': 'application/json' }, - Network accessline 5460
await fetch(API + '/share', { - Network accessline 5474
if (S.runtime === 'artifact') { showDone(); return } try { const response = await fetch(API + '/approve', { - Network accessline 5475
try { const response = await fetch(API + '/approve', { method: 'POST', headers: { 'Content-Type': 'application/json' }, - Network accessline 5476
const response = await fetch(API + '/approve', {
plugins/vstack/skills/review/hosts/claude.md
- Network accessline 54
Tell the user **http://localhost:7788/**.
plugins/vstack/skills/review/hosts/codex.md
- Network accessline 45
Tell the user **http://localhost:7788/** (or `/__review/` for live `--app`).
plugins/vstack/skills/review/hosts/grok.md
- Network accessline 52
Tell the user **http://localhost:7788/** (or `/__review/` for live `--app`).
plugins/vstack/skills/review/references/workflow.md
- Network accessline 76
# hand back a public URL when Host capabilities.share is artifact node "$SKILL/assets/review-server.mjs" share --file "$FILE" --url "https://example.com/…" - Network accessline 77
node "$SKILL/assets/review-server.mjs" share --file "$FILE" --url "https://example.com/…" - Network accessline 89
# proxy the app and serve the workspace at /__review/ (run_in_background: true) node "$SKILL/assets/review-server.mjs" serve --app http://localhost:5173 --name lora-ui --port 7788 - Network accessline 90
node "$SKILL/assets/review-server.mjs" serve --app http://localhost:5173 --name lora-ui --port 7788
plugins/vstack/skills/review/tests/design-tokens.mjs
- Executable scriptline 1
Executable file
plugins/vstack/skills/review/tests/host-profiles.mjs
- Executable scriptline 1
#!/usr/bin/env node
plugins/vstack/skills/review/tests/review-lifecycle.mjs
- Executable scriptline 1
#!/usr/bin/env node - Network accessline 16
const store = path.join(temp, '.vstack', 'local', 'review', 'page') const port = 18000 + (process.pid % 1000) const origin = `http://127.0.0.1:${port}` - Network accessline 18
const origin = `http://127.0.0.1:${port}` - Network accessline 24
async function request (pathname, options) { const response = await fetch(origin + pathname, options) - Network accessline 25
const response = await fetch(origin + pathname, options) - Network accessline 53
const workspace = await fetch(origin + '/')
plugins/vstack/skills/review/tests/round-gate.mjs
- Executable scriptline 1
#!/usr/bin/env node - Network accessline 21
const page = path.join(temp, 'page.html') const port = 19000 + (process.pid % 1000) const origin = `http://127.0.0.1:${port}` - Network accessline 22
const port = 19000 + (process.pid % 1000) const origin = `http://127.0.0.1:${port}` let server = null - Network accessline 23
const origin = `http://127.0.0.1:${port}` - Network accessline 40
const post = (pathname, body) => fetch(origin + pathname, { - Network accessline 52
async function waitForServer () { for (let attempt = 0; attempt < 60; attempt++) { try { if ((await fetch(origin + '/api/project')).ok) return } catch {} - Network accessline 53
for (let attempt = 0; attempt < 60; attempt++) { try { if ((await fetch(origin + '/api/project')).ok) return } catch {} await new Promise(resolve => setTimeout(resolve, 100)) - Network accessline 54
try { if ((await fetch(origin + '/api/project')).ok) return } catch {}
plugins/vstack/skills/review/tests/update-check.mjs
- Executable scriptline 1
#!/usr/bin/env node
plugins/vstack/skills/review/tests/workdir.mjs
- Executable scriptline 1
#!/usr/bin/env node
plugins/vstack/skills/user-story-map/assets/story-map-template.html
- Network accessline 468
<!-- The repo, not the marketing page: someone clicking the mark inside the tool wants the source, the issues, or the install command. --> <a class="vslink" href="https://github.com/Cavalry-Collective/visual-stack" target="_bla - Network accessline 469
tool wants the source, the issues, or the install command. --> <a class="vslink" href="https://github.com/Cavalry-Collective/visual-stack" target="_blank" rel="noopener" title="Visual Stack"> - Network accessline 470
<a class="vslink" href="https://github.com/Cavalry-Collective/visual-stack" target="_blank" rel="noopener" - Network accessline 803
if (opts.poll) { const tick = async () => { try { const r = await fetch(opts.poll, { cache: 'no-store' }); say(r.ok) } - Network accessline 804
const tick = async () => { try { const r = await fetch(opts.poll, { cache: 'no-store' }); say(r.ok) } catch { say(false) } - Network accessline 805
try { const r = await fetch(opts.poll, { cache: 'no-store' }); say(r.ok) } - Network accessline 925
if (info.dismiss) { try { fetch(info.dismiss, { - Network accessline 926
try { fetch(info.dismiss, { method: 'POST', - Network accessline 927
fetch(info.dismiss, { - Network accessline 1651
[Credential-related source omitted] - Network accessline 1652
[Credential-related source omitted] - Network accessline 1653
[Credential-related source omitted] - Network accessline 1662
[Credential-related source omitted] - Network accessline 1663
[Credential-related source omitted] - Network accessline 1664
[Credential-related source omitted] - Network accessline 1697
if(BRIDGE){ try{ const r = await fetch(BRIDGE.doc+"?t="+encodeURIComponent(BRIDGE.token)); - Network accessline 1698
try{ const r = await fetch(BRIDGE.doc+"?t="+encodeURIComponent(BRIDGE.token)); const o = await r.json(); - Network accessline 1699
const r = await fetch(BRIDGE.doc+"?t="+encodeURIComponent(BRIDGE.token));
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Some files could not be read; the facts below still hold.
Declared and executed: 1 fact
- Contacts site.com, which SKILL.md, the README and the plugin manifest do not mentionreview/assets/review-server.mjs:1692High confidence
Signal confidence: 83 facts
- Executable script in code of a file that runsphase-preview/assets/check-subtraction.mjs:1High confidence
- Executable script in code of a file that runsphase-preview/assets/phase-view.mjs:1High confidence
- Network access in prose of the SKILL.mdstart/SKILL.md:39Low confidence
- Network access in code of the SKILL.mdstart/SKILL.md:110High confidence
- Dangerous shell operation in code of the SKILL.mdstart/SKILL.md:111High confidence
- Dangerous shell operation in code of the SKILL.mdstart/SKILL.md:122High confidence
- Dangerous shell operation in code of the SKILL.mdstart/SKILL.md:123High confidence
- Executable script in code of a file that runsstart/assets/chooser-server.mjs:1High confidence
- Network access in code of a file that runsstart/assets/chooser-server.mjs:170High confidence
- Network access in code of a file that runsstart/assets/chooser-server.mjs:171High confidence
- Network access in code of a file that runsstart/assets/chooser-server.mjs:172High confidence
- Network access in code of a file that runsstart/assets/chooser-server.mjs:233High confidence
- Network access in code of a file that runsstart/assets/chooser-server.mjs:234High confidence
- Network access in code of a file that runsstart/assets/chooser-server.mjs:320High confidence
- Network access in code of a file that runsstart/assets/chooser-server.mjs:321High confidence
- Network access in code of a file that runsstart/assets/chooser-server.mjs:322High confidence
- Network access in prose of the SKILL.mdplugins/vstack/skills/review/SKILL.md:112Low confidence
- Network access in prose of the SKILL.mdreview/SKILL.md:112Low confidence
- Network access in prose of the SKILL.mdplugins/vstack/skills/review/SKILL.md:112Low confidence
- Network access in prose of the SKILL.mdplugins/vstack/skills/review/SKILL.md:113Low confidence
- Network access in prose of the SKILL.mdreview/SKILL.md:113Low confidence
- Network access in prose of the SKILL.mdplugins/vstack/skills/review/SKILL.md:113Low confidence
- Network access in code of the SKILL.mdplugins/vstack/skills/review/SKILL.md:393High confidence
- Network access in code of the SKILL.mdreview/SKILL.md:393High confidence
- Network access in code of the SKILL.mdplugins/vstack/skills/review/SKILL.md:393High confidence
- Network access in code of the SKILL.mdplugins/vstack/skills/review/SKILL.md:394High confidence
- Network access in code of the SKILL.mdreview/SKILL.md:394High confidence
- Network access in code of the SKILL.mdplugins/vstack/skills/review/SKILL.md:394High confidence
- Network access in code of the SKILL.mdplugins/vstack/skills/review/SKILL.md:395High confidence
- Network access in code of the SKILL.mdreview/SKILL.md:395High confidence
- Network access in code of the SKILL.mdplugins/vstack/skills/review/SKILL.md:395High confidence
- Network access in code of the SKILL.mdplugins/vstack/skills/review/SKILL.md:396High confidence
- Network access in code of the SKILL.mdreview/SKILL.md:396High confidence
- Network access in code of the SKILL.mdplugins/vstack/skills/review/SKILL.md:396High confidence
- Network access in prose of the SKILL.mdplugins/vstack/skills/review/SKILL.md:399Low confidence
- Network access in prose of the SKILL.mdreview/SKILL.md:399Low confidence
- Network access in prose of the SKILL.mdplugins/vstack/skills/review/SKILL.md:399Low confidence
- Network access in prose of the SKILL.mdplugins/vstack/skills/review/SKILL.md:400Low confidence
- Network access in prose of the SKILL.mdreview/SKILL.md:400Low confidence
- Network access in prose of the SKILL.mdplugins/vstack/skills/review/SKILL.md:400Low confidence
- Network access in prose of the SKILL.mdplugins/vstack/skills/review/SKILL.md:401Low confidence
- Network access in prose of the SKILL.mdreview/SKILL.md:401Low confidence
- Network access in prose of the SKILL.mdplugins/vstack/skills/review/SKILL.md:401Low confidence
- Network access in code of the SKILL.mdplugins/vstack/skills/review/SKILL.md:462High confidence
- Network access in code of the SKILL.mdreview/SKILL.md:462High confidence
- Network access in code of the SKILL.mdplugins/vstack/skills/review/SKILL.md:462High confidence
- Executable script in code of a file that runsreview/assets/bundle-artifact.mjs:1High confidence
- Executable script in a comment of a file that runsreview/assets/harvest-reference.js:1Low confidence
- Executable script in code of a file that runsreview/assets/review-server.mjs:1High confidence
- Network access in code of a file that runsreview/assets/review-server.mjs:146High confidence
and 33 more
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Native | Manifest .claude-plugin/marketplace.json | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md plugins/vstack/experimental/go/SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md plugins/vstack/experimental/go/SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md plugins/vstack/experimental/go/SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md plugins/vstack/experimental/go/SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md plugins/vstack/experimental/go/SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.