commits
Both postinstall.js (npm install hook) and cmd/learn.js (vit learn)
spawn `npx skills add` via spawnSync. The trailing -y goes to the
skills CLI, not to npx, so on a fresh machine without cached
skills@X.Y.Z, npx halts with an interactive "Ok to proceed?" —
blocking npm install and any coding-agent-driven skill learn.
Pass --yes to npx directly (suppresses the prompt) and set CI=true in
env as belt-and-suspenders against any other TTY-gated checks in the
npm lifecycle. Matches the pattern applied in solstone Makefile.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Replace the generic five-bullet list with four Alex-oriented bullets
covering the concrete failure modes we actually see: Bluesky's "data is
invalid" page (browser session conflict), "Failed to resolve identity"
(DoH blocked, fall back to --app-password), CLI hang on a remote
machine (--remote), and DID-vs-handle guidance. Point to verbose mode
for cause chains.
Add a shared error formatter that unwraps cause chains for both text and
JSON output, route the CLI command catches through it, tighten the login
failure path with a SIGINT cancel helper and common-issues footer, make
network errors name the exact URL they failed against, replace the
approved hidden catches with warnings, and document login troubleshooting
in the getting-started guide.
Files touched:
- helpers: src/lib/error-format.js, src/lib/json-output.js
- commands: src/cmd/adopt.js, src/cmd/beacon.js, src/cmd/config.js,
src/cmd/doctor.js, src/cmd/explore.js, src/cmd/firehose.js,
src/cmd/follow.js, src/cmd/hack.js, src/cmd/inbox.js,
src/cmd/init.js, src/cmd/learn.js, src/cmd/link.js,
src/cmd/login.js, src/cmd/remix.js, src/cmd/scan.js,
src/cmd/ship.js, src/cmd/skim.js, src/cmd/vet.js,
src/cmd/vouch.js
- libs: src/lib/config.js, src/lib/oauth.js, src/lib/pds.js,
src/lib/vit-dir.js
- docs/tests: docs/start/index.html, test/error-format.test.js,
test/explore.test.js, test/json-output.test.js,
test/login.test.js, test/pds.test.js
Silent-catch ledger:
- src/lib/config.js: warn on unreadable vit.json; warn on unreadable
local .vit/login.json.
- src/lib/vit-dir.js: warn on unreadable .vit/config.json; warn on
malformed JSONL lines; warn on unreadable JSONL logs; warn on
unreadable following.json.
- src/lib/oauth.js: warn on unreadable session.json in the session
store, checkSession, and restoreAgent paths; warn on unreadable local
app-password sessions in checkSession and restoreAgent.
- src/lib/pds.js: warn when DID-document handle resolution fails, then
fall back to the DID.
- src/cmd/doctor.js: warn on unreadable SKILL.md files, unreadable
skill directories, install-path inspect failure, unreadable
local/global session files, and unexpected Bluesky session validation
failures.
- src/cmd/beacon.js: warn on invalid target .vit/config.json content.
- src/cmd/hack.js: warn when git remote add upstream fails.
- src/cmd/learn.js: warn when temp-dir cleanup fails.
- src/cmd/login.js: keep the .gitignore probe silent; warn on
unreadable local/global session files during login probes.
- src/cmd/firehose.js: warn and skip malformed JSON messages.
- src/cmd/scan.js: warn and skip malformed Jetstream events.
- src/cmd/init.js: keep the git work-tree probe and optional remote URL
probe chain silent; warn on git remote failure and unreadable remote
URLs.
- src/lib/compat.js: keep the executable lookup probe silent.
Test changes:
- added test/error-format.test.js for flat errors, nested causes,
non-Error throwables, non-Error causes, circular causes, the 10-level
cap, and verbose stack indentation
- added login coverage for cancelLogin() and printLoginFailure()
- added json-output throwable-input coverage for nested and flat errors
- updated explore and pds expectations for URL-specific error messages
Not done / founder steps:
- make ship BUMP=patch (-> 0.4.3): founder's step.
- make deploy-site: founder's step. Required because
docs/start/index.html changed.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- link: override HOME to temp dir instead of writing to ~/.local/bin
- beacon: mock isomorphic-git in-process instead of live GitHub clones
- explore: route 12 tests through local Bun.serve() mock server
- doctor: isolate with HOME + XDG_CONFIG_HOME env overrides
- trust-gate, vit-dir: add optional dir param to vitDir() and
dependents, eliminating process.chdir() from tests
- CLAUDE.md: add Testing Standards section (5 rules)
342/342 tests pass. No external HTTP, no real home access,
no process.chdir() in tests.
Restructures the getting started page so users who only want skills
can follow steps 1-3, hit a path fork, and jump straight to a
self-contained skills section — no git repo or beacon needed.
Three edits:
- Prerequisites now note git is only needed for caps
- Path fork after step 3 routes skills-only users to #skills
- Skills section rewritten as standalone entry point (browse → vet → learn)
Note: run `make deploy-site` to publish these changes.
Global WebSocket (used by vit scan and vit firehose) is only available
in Node 20.10+. Raise the engine floor so npm/bun enforce the
requirement at install time rather than failing at runtime.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
CLAUDE.md is now the primary file with all dev guidelines.
AGENTS.md is a symlink to CLAUDE.md so both filenames work.
Incorporated the vocabulary alignment rule from AGENTS.md into
CLAUDE.md's Development Principles section.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
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>
Both postinstall.js (npm install hook) and cmd/learn.js (vit learn)
spawn `npx skills add` via spawnSync. The trailing -y goes to the
skills CLI, not to npx, so on a fresh machine without cached
skills@X.Y.Z, npx halts with an interactive "Ok to proceed?" —
blocking npm install and any coding-agent-driven skill learn.
Pass --yes to npx directly (suppresses the prompt) and set CI=true in
env as belt-and-suspenders against any other TTY-gated checks in the
npm lifecycle. Matches the pattern applied in solstone Makefile.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Replace the generic five-bullet list with four Alex-oriented bullets
covering the concrete failure modes we actually see: Bluesky's "data is
invalid" page (browser session conflict), "Failed to resolve identity"
(DoH blocked, fall back to --app-password), CLI hang on a remote
machine (--remote), and DID-vs-handle guidance. Point to verbose mode
for cause chains.
Add a shared error formatter that unwraps cause chains for both text and
JSON output, route the CLI command catches through it, tighten the login
failure path with a SIGINT cancel helper and common-issues footer, make
network errors name the exact URL they failed against, replace the
approved hidden catches with warnings, and document login troubleshooting
in the getting-started guide.
Files touched:
- helpers: src/lib/error-format.js, src/lib/json-output.js
- commands: src/cmd/adopt.js, src/cmd/beacon.js, src/cmd/config.js,
src/cmd/doctor.js, src/cmd/explore.js, src/cmd/firehose.js,
src/cmd/follow.js, src/cmd/hack.js, src/cmd/inbox.js,
src/cmd/init.js, src/cmd/learn.js, src/cmd/link.js,
src/cmd/login.js, src/cmd/remix.js, src/cmd/scan.js,
src/cmd/ship.js, src/cmd/skim.js, src/cmd/vet.js,
src/cmd/vouch.js
- libs: src/lib/config.js, src/lib/oauth.js, src/lib/pds.js,
src/lib/vit-dir.js
- docs/tests: docs/start/index.html, test/error-format.test.js,
test/explore.test.js, test/json-output.test.js,
test/login.test.js, test/pds.test.js
Silent-catch ledger:
- src/lib/config.js: warn on unreadable vit.json; warn on unreadable
local .vit/login.json.
- src/lib/vit-dir.js: warn on unreadable .vit/config.json; warn on
malformed JSONL lines; warn on unreadable JSONL logs; warn on
unreadable following.json.
- src/lib/oauth.js: warn on unreadable session.json in the session
store, checkSession, and restoreAgent paths; warn on unreadable local
app-password sessions in checkSession and restoreAgent.
- src/lib/pds.js: warn when DID-document handle resolution fails, then
fall back to the DID.
- src/cmd/doctor.js: warn on unreadable SKILL.md files, unreadable
skill directories, install-path inspect failure, unreadable
local/global session files, and unexpected Bluesky session validation
failures.
- src/cmd/beacon.js: warn on invalid target .vit/config.json content.
- src/cmd/hack.js: warn when git remote add upstream fails.
- src/cmd/learn.js: warn when temp-dir cleanup fails.
- src/cmd/login.js: keep the .gitignore probe silent; warn on
unreadable local/global session files during login probes.
- src/cmd/firehose.js: warn and skip malformed JSON messages.
- src/cmd/scan.js: warn and skip malformed Jetstream events.
- src/cmd/init.js: keep the git work-tree probe and optional remote URL
probe chain silent; warn on git remote failure and unreadable remote
URLs.
- src/lib/compat.js: keep the executable lookup probe silent.
Test changes:
- added test/error-format.test.js for flat errors, nested causes,
non-Error throwables, non-Error causes, circular causes, the 10-level
cap, and verbose stack indentation
- added login coverage for cancelLogin() and printLoginFailure()
- added json-output throwable-input coverage for nested and flat errors
- updated explore and pds expectations for URL-specific error messages
Not done / founder steps:
- make ship BUMP=patch (-> 0.4.3): founder's step.
- make deploy-site: founder's step. Required because
docs/start/index.html changed.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- link: override HOME to temp dir instead of writing to ~/.local/bin
- beacon: mock isomorphic-git in-process instead of live GitHub clones
- explore: route 12 tests through local Bun.serve() mock server
- doctor: isolate with HOME + XDG_CONFIG_HOME env overrides
- trust-gate, vit-dir: add optional dir param to vitDir() and
dependents, eliminating process.chdir() from tests
- CLAUDE.md: add Testing Standards section (5 rules)
342/342 tests pass. No external HTTP, no real home access,
no process.chdir() in tests.
Restructures the getting started page so users who only want skills
can follow steps 1-3, hit a path fork, and jump straight to a
self-contained skills section — no git repo or beacon needed.
Three edits:
- Prerequisites now note git is only needed for caps
- Path fork after step 3 routes skills-only users to #skills
- Skills section rewritten as standalone entry point (browse → vet → learn)
Note: run `make deploy-site` to publish these changes.
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>