commits
Ship the using-vit skill inside the npm package with a postinstall
script that runs `npx skills add` globally. Delegate `vit learn`
to `npx skills add` via temp dir instead of direct file writes.
Remove `vit setup` command entirely — new onboarding is just
`npm install -g vit` → `vit login` → open agent.
The .agents/skills symlink is already tracked, so .agents/ ignore
rule won't affect it. No need for negation pattern magic.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
.claude/skills and .agents/skills now symlink directly to skills/
instead of holding manual copies. Updated .gitignore to track the
.agents/skills symlink while still ignoring other .agents/ contents.
New skills added to skills/ are automatically visible to all agent
harnesses.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Adds the inbound contribution channel for vit:
CLI:
- vit ship --kind request: beacon required (--beacon flag or project config),
text optional, ref auto-generated from title via slugify+hash fallback,
outputs "anyone can implement this. share the ref to build demand."
- vit vouch --kind want/endorse: want-vouches skip trusted gate and beacon
requirement; endorse keeps existing behavior; kind field written to record
- vit skim --kind <kind>: client-side filter on cap kind after beacon filter
- vit explore caps --kind <kind>: passes ?kind= to explore API
- vit inbox: new command — reads readBeaconSet(), queries explore API for
caps addressed to project beacon(s), renders with want-vouch count and age;
supports --kind, --sort want-vouches, --json; graceful degradation
Lexicons:
- org.v-it.cap: adds "request" to kind.knownValues
- org.v-it.vouch: adds optional kind field (endorse|want); omitted = endorse
Explore API:
- /api/caps: adds ?kind= filter and want_vouch_count per cap
- /api/caps: adds ?sort=want-vouches (by want_vouch_count DESC)
- jetstream: stores kind column for caps and vouches
- schema: adds kind column + index to caps and vouches tables
- migrate-cap-requests.sql: migration for existing deployed DB
Vet:
- vit vet <request-ref>: suppresses --trust for kind:request caps,
shows note to vouch --kind want instead
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Update 4 additional vit-mark instances (0 0 32 32 → 3.375 2.5 25.25 25.25)
on slides 4-7 of atmosphere-2026 that were missed in the first pass.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Update all brand SVGs from the extro master (tight viewBoxes replacing
0 0 32 32 / 0 0 56 34). Update inline SVG viewBoxes in all HTML files:
wordmarks 0 0 56 34 → 3.75 3 49 25.75, marks 0 0 32 32 → 3.375 2.5 25.25 25.25.
Reduce header wordmark height 28→24 and README wordmark height 48→40 to
compensate for ~15% visual size increase from tight viewBox.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Redundant with the new workflow contrast slide that already shows
the skim/vet/remix/ship concepts through the person-vs-agent pipeline.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add slide 2b contrasting human (person→doc→person→code via git) vs
agent (robot→doc→robot→code via vit) workflows. Update existing slides:
rename two forks to clones with inverted arrows, enlarge social loop,
clean up typography (remove periods, center text, consistent green
headers), update CTA to npm install -g, and swap explore URL for
org.v-it.cap lexicon.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Increase the upstream node size in the published ATmosphere 2026 deck and realign the wait badge and incoming connector lines so the labels no longer overlap.
decks are served from docs/decks/ via CF Workers — the top-level
copy was identical and unreferenced.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Fix undefined beacon variable in vouch.js cap vouch record (ship-blocker).
Enrich all empty-state messages with contextual guidance and next steps.
Replace "user" with "operator" in all agent-facing console output.
Only show skim hint/separator when there are actual results.
Add not-found hints with follow/explore guidance in vet, remix, vouch, learn.
Implements cpo/specs/in-flight/vit-cli-surface-polish.md — all 15 acceptance
criteria passing.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
CLAUDE.md still said GitHub Pages auto-deploys — corrected to document
the Cloudflare Workers deployment (site/ and explore/ directories).
Root Makefile now has deploy-site and deploy-explore targets that
delegate to the respective wrangler.toml configs.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Fix CTA: npx vit login now shows handle placeholder
- Fix slide 6: identity/social-graph/agent/algorithm claims
corrected for ATProto technical accuracy
- Simplify slide 2 SVG: larger labels, better contrast,
removed invisible fine detail (stale forks, capability dots)
- Boost dim text contrast across deck (#888→#AAA)
- Fix slide 5 bottom text sizes for projector readability
- Trim slide 4 density, add concrete examples, bump bridge
sentence to read as punchline not footnote
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
text: 3000/300 → 50000/15000, description: 3000/300 → 10000/1024.
Backwards-compatible constraint relaxation — matches org.v-it.skill limits.
Original limits were inherited from app.bsky.feed.post, not an intentional
product choice. Structured caps need room for intent, scope, risk assessment,
and implementation guidance.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add --app-password flag to authenticate via ATProto createSession,
bypassing browser-based OAuth. Add --local flag to store session
in .vit/login.json instead of global config, scoping identity to
the project directory.
Update requireDid() precedence: --did flag > .vit/login.json > global
config. Update restoreAgent() and checkSession() to handle both OAuth
and app-password session types transparently. Update vit doctor to
surface identity source and auth type.
Evolved from the resonant computing deck for the ATmosphere main
conference stage. Skills-first messaging for the ATProto audience,
architecture contrast visual, human+agent collaboration model,
"built on our protocol" insider framing.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Two branches independently added cap/skill detail commands and bare explore.
Kept feature branch implementations (with mergeExploreOpts for parent option
inheritance), removed duplicate HEAD versions, and deduplicated tests using
consistent nested JSON format (data.cap/data.skill) matching other explore
subcommands.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
# Conflicts:
# src/cmd/explore.js
Files changed: src/cmd/explore.js, test/explore.test.js. No new files, no new dependencies. make test already verified (302 pass, 0 fail).
Add singular explore detail commands for caps and skills, including JSON output and not-found handling.
Make bare 'vit explore' reuse the stats overview path and add regression coverage for the new detail and overview flows.
tangled.org is the canonical upstream for vit. github mirror
becomes secondary beacon — all existing caps remain discoverable
via the new secondary beacon support.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@atproto/api validate: true rejects org.v-it.cap and org.v-it.skill
because custom lexicons aren't registered with the client library.
The PDS accepts custom record types regardless. Set validate: false
for putRecord calls — the lexicon schema in lexicons/ is the source
of truth, not client-side validation.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
readBeaconSet() is the new shared abstraction for beacon matching.
All reading commands (skim, vet, remix, vouch, scan) use it instead
of inline === comparisons. init --secondary stores the upstream
beacon. explore API accepts comma-separated beacons with IN queries.
Default route now renders stats view instead of caps
Add explicit #caps hash route and update all href="#" → href="#caps"
Add did query parameter to /api/skills for publisher filtering
Beacon detail view fetches and displays skills from cap publishers
add PR template redirecting contributors to ship capabilities, issue
template config with links to CONTRIBUTING.md and explore, and a
visible contributing section in the README. disabled GitHub Projects.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add GET /api/cap (by ref or uri, with optional beacon scoping) and
GET /api/skill (by name or uri) with vouch_count subquery and handle
JOIN. Add idx_caps_ref index for efficient ref-based lookups.
"capabilities change codebases. skills teach agents. both flow through
the same trust network." — makes the relationship between the two
primitives click in one line.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Term was used twice but never defined anywhere. Every adversarial
persona flagged vocabulary overhead — removing an undefined term
reduces friction without changing meaning.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add lexicon.garden link to README links section. Add maxLength: 512 to
the unbounded cid string in skill.json defs.recapRef to satisfy AT
Protocol lexicon lint.
Caps, skills, beacons, vouches, and stats queries against explore.v-it.org.
Supports --json, --explore-url override, VIT_EXPLORE_URL env var, --beacon .
resolution, and --ref-to-URI resolution for vouches.
Switch all license declarations to MIT per founder-approved decision.
Updated: LICENSE, package.json, package-lock.json, CLAUDE.md, README.md,
CONTRIBUTING.md, and SPDX headers in all 73 source files.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add structured JSON output to init, follow, unfollow, following, ship,
remix, vet, vouch, doctor, learn, and scan. When --json is passed:
- Success: stdout is { ok: true, ...data }
- Error: stdout is { ok: false, error, hint } with exitCode 1
- No human-readable text on stdout
- Verbose messages redirect to stderr
Shared helper in src/lib/json-output.js provides jsonOk() and
jsonError() for consistent envelope formatting. Existing behavior
without --json is unchanged. skim --json is untouched.
Includes 26 new tests covering JSON error paths for all commands.
Rewrite the entire first-encounter documentation surface based on adversarial
persona review findings. A new user following the docs should now reach a
working `vit skim` without hitting undocumented prereqs or agent-gate errors.
Getting started page:
- Prerequisites section (Node.js 20+, git, Bluesky, coding agent) before any install
- Human/agent labeled steps: you run setup/login, your agent runs init/skim
- Progressive terminology: 4 core verbs (skim, vet, remix, ship) first
- Starter follows list with active publishers
- "60 seconds" claim removed, replaced with honest "15 minutes"
- Explore moved to "learn more" at bottom, not the entry point
README:
- Restructured as landing page with one-paragraph pitch and 3-step quickstart
- Command reference moved to new COMMANDS.md
- Single canonical install: `npm install -g vit`
- Agent compatibility line (Claude Code, Codex CLI, Gemini CLI)
CONTRIBUTING.md:
- Prerequisites: Node.js not Bun, `npm install -g vit` not `bun install -g @aspect/vit`
- Human/agent labels on all code examples
- Removed "caps you ship inherit this license" (AGPL claim contradicts thesis)
Homepage:
- CTA changed from "get started in 60 seconds" to "get started"
- Sub-hero replaced with concrete description of what vit does
- Added concrete example (shell completions narrative)
- Added agent compatibility line
- Progressive terminology: verbs first, then concepts
- Dropped "caps" shorthand — uses "capability" spelled out
COMMANDS.md:
- New full command reference with human/agent labels on every command
- Organized by category: setup, project, discovery, evaluation, integration, publishing
Explore:
- Stats view adds context line for early-stage network numbers
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The auto-resolved merge kept HEAD's caps-only renderStats and pulse
indicator. Restore the feature branch's improvements: recent activity
merges both caps and skills sorted by time, and the pulse indicator
checks both sources for the most recent network activity.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Resolved merge conflict between two hopper branches (bbvvcau6 squashed
commit and the hopper branch that actually ran vit ship). Kept HEAD's code
(validate: true, no duplicate starter follow) and MERGE_HEAD's .vit/ shipping
logs (8 caps, 4 skills shipped to the network).
Publish 4 skills (using-vit, semantic-commits, bun-project, atproto-records)
and 8 caps to bootstrap explore.v-it.org with real content.
- Add dogfooding section to CLAUDE.md with shipping instructions
- Create 3 seed skills under skills/ with genuine agent-useful content
- Ship all 4 skills and 8 feature/fix caps to ATProto
- Add starter follow suggestion (jeremie.com) to getting started page
- Improve explore app: pulse indicator, AT URI record links, recent
activity in stats view, better empty state copy with getting-started links
- Fix putRecord validate flag: custom org.v-it.* collections need
validate: false since the ATProto SDK doesn't have these lexicons
Add dogfooding instructions to CLAUDE.md, create three seed skills
(semantic-commits, bun-project, atproto-records), document vit scan
in the vit skill, add starter follow guidance to getting started page,
and improve the explore app with activity indicators, ATProto record
links, and descriptive empty states.
# Conflicts:
# src/cmd/firehose.js
# src/cmd/scan.js
# src/lib/constants.js
# Conflicts:
# src/cmd/learn.js
# src/cmd/remix.js
# src/cmd/ship.js
# src/cmd/skim.js
# src/cmd/vet.js
# src/cmd/vouch.js
# src/lib/pds.js
# test/pds.test.js
- listRecordsFromPds now paginates with cursor until all records are fetched
- resolvePds and resolveHandleFromDid support did:web via .well-known/did.json
- new batchQuery helper runs PDS queries concurrently in batches of 10
- all 8 sequential loops in skim, vouch, vet, remix, learn, ship replaced
- vouch.js cap search migrated from SDK direct call to listRecordsFromPds
- unit tests added for pds.js functions
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
# Conflicts:
# lexicons/org/v-it/cap.json
# lexicons/org/v-it/skill.json
# src/cmd/ship.js
# test/ship.test.js
Ship the using-vit skill inside the npm package with a postinstall
script that runs `npx skills add` globally. Delegate `vit learn`
to `npx skills add` via temp dir instead of direct file writes.
Remove `vit setup` command entirely — new onboarding is just
`npm install -g vit` → `vit login` → open agent.
.claude/skills and .agents/skills now symlink directly to skills/
instead of holding manual copies. Updated .gitignore to track the
.agents/skills symlink while still ignoring other .agents/ contents.
New skills added to skills/ are automatically visible to all agent
harnesses.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Adds the inbound contribution channel for vit:
CLI:
- vit ship --kind request: beacon required (--beacon flag or project config),
text optional, ref auto-generated from title via slugify+hash fallback,
outputs "anyone can implement this. share the ref to build demand."
- vit vouch --kind want/endorse: want-vouches skip trusted gate and beacon
requirement; endorse keeps existing behavior; kind field written to record
- vit skim --kind <kind>: client-side filter on cap kind after beacon filter
- vit explore caps --kind <kind>: passes ?kind= to explore API
- vit inbox: new command — reads readBeaconSet(), queries explore API for
caps addressed to project beacon(s), renders with want-vouch count and age;
supports --kind, --sort want-vouches, --json; graceful degradation
Lexicons:
- org.v-it.cap: adds "request" to kind.knownValues
- org.v-it.vouch: adds optional kind field (endorse|want); omitted = endorse
Explore API:
- /api/caps: adds ?kind= filter and want_vouch_count per cap
- /api/caps: adds ?sort=want-vouches (by want_vouch_count DESC)
- jetstream: stores kind column for caps and vouches
- schema: adds kind column + index to caps and vouches tables
- migrate-cap-requests.sql: migration for existing deployed DB
Vet:
- vit vet <request-ref>: suppresses --trust for kind:request caps,
shows note to vouch --kind want instead
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Update all brand SVGs from the extro master (tight viewBoxes replacing
0 0 32 32 / 0 0 56 34). Update inline SVG viewBoxes in all HTML files:
wordmarks 0 0 56 34 → 3.75 3 49 25.75, marks 0 0 32 32 → 3.375 2.5 25.25 25.25.
Reduce header wordmark height 28→24 and README wordmark height 48→40 to
compensate for ~15% visual size increase from tight viewBox.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add slide 2b contrasting human (person→doc→person→code via git) vs
agent (robot→doc→robot→code via vit) workflows. Update existing slides:
rename two forks to clones with inverted arrows, enlarge social loop,
clean up typography (remove periods, center text, consistent green
headers), update CTA to npm install -g, and swap explore URL for
org.v-it.cap lexicon.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Fix undefined beacon variable in vouch.js cap vouch record (ship-blocker).
Enrich all empty-state messages with contextual guidance and next steps.
Replace "user" with "operator" in all agent-facing console output.
Only show skim hint/separator when there are actual results.
Add not-found hints with follow/explore guidance in vet, remix, vouch, learn.
Implements cpo/specs/in-flight/vit-cli-surface-polish.md — all 15 acceptance
criteria passing.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
CLAUDE.md still said GitHub Pages auto-deploys — corrected to document
the Cloudflare Workers deployment (site/ and explore/ directories).
Root Makefile now has deploy-site and deploy-explore targets that
delegate to the respective wrangler.toml configs.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Fix CTA: npx vit login now shows handle placeholder
- Fix slide 6: identity/social-graph/agent/algorithm claims
corrected for ATProto technical accuracy
- Simplify slide 2 SVG: larger labels, better contrast,
removed invisible fine detail (stale forks, capability dots)
- Boost dim text contrast across deck (#888→#AAA)
- Fix slide 5 bottom text sizes for projector readability
- Trim slide 4 density, add concrete examples, bump bridge
sentence to read as punchline not footnote
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
text: 3000/300 → 50000/15000, description: 3000/300 → 10000/1024.
Backwards-compatible constraint relaxation — matches org.v-it.skill limits.
Original limits were inherited from app.bsky.feed.post, not an intentional
product choice. Structured caps need room for intent, scope, risk assessment,
and implementation guidance.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add --app-password flag to authenticate via ATProto createSession,
bypassing browser-based OAuth. Add --local flag to store session
in .vit/login.json instead of global config, scoping identity to
the project directory.
Update requireDid() precedence: --did flag > .vit/login.json > global
config. Update restoreAgent() and checkSession() to handle both OAuth
and app-password session types transparently. Update vit doctor to
surface identity source and auth type.
Evolved from the resonant computing deck for the ATmosphere main
conference stage. Skills-first messaging for the ATProto audience,
architecture contrast visual, human+agent collaboration model,
"built on our protocol" insider framing.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Two branches independently added cap/skill detail commands and bare explore.
Kept feature branch implementations (with mergeExploreOpts for parent option
inheritance), removed duplicate HEAD versions, and deduplicated tests using
consistent nested JSON format (data.cap/data.skill) matching other explore
subcommands.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@atproto/api validate: true rejects org.v-it.cap and org.v-it.skill
because custom lexicons aren't registered with the client library.
The PDS accepts custom record types regardless. Set validate: false
for putRecord calls — the lexicon schema in lexicons/ is the source
of truth, not client-side validation.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add structured JSON output to init, follow, unfollow, following, ship,
remix, vet, vouch, doctor, learn, and scan. When --json is passed:
- Success: stdout is { ok: true, ...data }
- Error: stdout is { ok: false, error, hint } with exitCode 1
- No human-readable text on stdout
- Verbose messages redirect to stderr
Shared helper in src/lib/json-output.js provides jsonOk() and
jsonError() for consistent envelope formatting. Existing behavior
without --json is unchanged. skim --json is untouched.
Includes 26 new tests covering JSON error paths for all commands.
Rewrite the entire first-encounter documentation surface based on adversarial
persona review findings. A new user following the docs should now reach a
working `vit skim` without hitting undocumented prereqs or agent-gate errors.
Getting started page:
- Prerequisites section (Node.js 20+, git, Bluesky, coding agent) before any install
- Human/agent labeled steps: you run setup/login, your agent runs init/skim
- Progressive terminology: 4 core verbs (skim, vet, remix, ship) first
- Starter follows list with active publishers
- "60 seconds" claim removed, replaced with honest "15 minutes"
- Explore moved to "learn more" at bottom, not the entry point
README:
- Restructured as landing page with one-paragraph pitch and 3-step quickstart
- Command reference moved to new COMMANDS.md
- Single canonical install: `npm install -g vit`
- Agent compatibility line (Claude Code, Codex CLI, Gemini CLI)
CONTRIBUTING.md:
- Prerequisites: Node.js not Bun, `npm install -g vit` not `bun install -g @aspect/vit`
- Human/agent labels on all code examples
- Removed "caps you ship inherit this license" (AGPL claim contradicts thesis)
Homepage:
- CTA changed from "get started in 60 seconds" to "get started"
- Sub-hero replaced with concrete description of what vit does
- Added concrete example (shell completions narrative)
- Added agent compatibility line
- Progressive terminology: verbs first, then concepts
- Dropped "caps" shorthand — uses "capability" spelled out
COMMANDS.md:
- New full command reference with human/agent labels on every command
- Organized by category: setup, project, discovery, evaluation, integration, publishing
Explore:
- Stats view adds context line for early-stage network numbers
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The auto-resolved merge kept HEAD's caps-only renderStats and pulse
indicator. Restore the feature branch's improvements: recent activity
merges both caps and skills sorted by time, and the pulse indicator
checks both sources for the most recent network activity.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Publish 4 skills (using-vit, semantic-commits, bun-project, atproto-records)
and 8 caps to bootstrap explore.v-it.org with real content.
- Add dogfooding section to CLAUDE.md with shipping instructions
- Create 3 seed skills under skills/ with genuine agent-useful content
- Ship all 4 skills and 8 feature/fix caps to ATProto
- Add starter follow suggestion (jeremie.com) to getting started page
- Improve explore app: pulse indicator, AT URI record links, recent
activity in stats view, better empty state copy with getting-started links
- Fix putRecord validate flag: custom org.v-it.* collections need
validate: false since the ATProto SDK doesn't have these lexicons
Add dogfooding instructions to CLAUDE.md, create three seed skills
(semantic-commits, bun-project, atproto-records), document vit scan
in the vit skill, add starter follow guidance to getting started page,
and improve the explore app with activity indicators, ATProto record
links, and descriptive empty states.
- listRecordsFromPds now paginates with cursor until all records are fetched
- resolvePds and resolveHandleFromDid support did:web via .well-known/did.json
- new batchQuery helper runs PDS queries concurrently in batches of 10
- all 8 sequential loops in skim, vouch, vet, remix, learn, ship replaced
- vouch.js cap search migrated from SDK direct call to listRecordsFromPds
- unit tests added for pds.js functions