Loading...
Loading...
Persistent, portable memory for AI builders and agent teams. Use BEFORE any non-trivial work to retrieve prior decisions, patterns, and gotchas; use AFTER finishing to record what was learned. ALSO use to authenticate with ByteRover — when the user says to authenticate / auth / log in / sign in / connect / link ByteRover (or log out / sign out / disconnect), run the auth flow. Iron Law: query before you think, curate after you implement.
npx skill4agent add campfirein/skills byterover<bv-*>titlesummary<bv-topic><bv-fact>subjectcategoryseveritycategory="project"subject="visa_required"pathpath="travel/vietnam_visa"subject="visa_required" category="project"title="Yêu cầu visa Việt Nam"<bv-fact>Người Mỹ cần visa để vào Việt Nam.<bv-*>| Need | Command |
|---|---|
| Retrieve | |
| Save (rich, multi-element topics) | |
| Save (simple, single-fact topics) | |
| Save many topics in one call | |
Requiredattributes:<bv-topic>andpathMUST be present and non-empty on the topic root or the writer rejects the call. Thetitleonpathshould match the positional<bv-topic>you pass to<topic-path>. See vocabulary.md for the full attribute spec. | Read |record.mjs(usenode scripts/brv.mjs read "<topic-path>.html" [--raw]to get the on-disk HTML byte-for-byte — required when round-tripping through--raw, sincerecord --htmlflattens innerelements[].text/<ul>/<li>formatting) | | List |<strong>| | Rebuild manifest + index |node scripts/brv.mjs list| | Detect consolidation opportunities |node scripts/manifest.mjs(proposes — never executes) | | Fold one topic into another |node scripts/dream.mjs --mode merge\|link\|prune\|synthesize(usenode scripts/merge.mjs <survivor> <loser> [--title "…"] [--summary "…"] [--tags a,b] [--keywords a,b] [--reason "…"] [--related @x.html,@y.html]to give the survivor a new title that reflects the merged scope — without it, the survivor keeps its own title even when the merged content is broader) | | Remove redundant topics |--title(variadic, atomic — aborts on first failure with a partial report) | | Combine many topics into a new one |node scripts/prune.mjs <topic-path>...| | Rename / move / re-parent a topic within the current space |node scripts/synthesize.mjs <new-path> --html '<bv-topic …>…</bv-topic>' --absorb a.html,b.html,c.html(atomic — siblings'node scripts/move.mjs <topic-path> --to-path <new-path>refs are rewritten to the new path; signal sidecar carries over; covers all of rename, move-to-new-parent, deep re-parent, and combined) | | Add or remove arelated=cross-link between two topics |related=(atomic byte-preserving edit of thenode scripts/brv.mjs link "<a>" "<b>" [--bidirectional] [--remove]attribute — use this instead of hand-editing the opening tag, which is unsafe for summaries containing<bv-topic related="…">characters; idempotent — re-linking is a noop; refuses to add a ref to a topic that doesn't exist (would dangle) — but>allows missing targets so you can clean up existing dangling refs) | | Move a topic to a different space |--remove(rebuilds manifest + index in both spaces; reports any siblingnode scripts/move.mjs <topic-path> --from-space <name> --to-space <name>refs in the source that now dangle) | | Migrate legacy markdown |related=| | Migrate a self-hosted v3 VPS → v4 (full guided procedure) | follow migrate-v3-to-v4.md | | Authenticate / log in to ByteRover |node scripts/migrate.mjs [--dry-run]— returns at once; the user approves in the browser, thennode scripts/auth.mjs; see Authenticate with ByteRover | | Check whether signed in (local, no network) |auth.mjs status— printsnode scripts/auth.mjs whoami(a credential exists locally; not a server-side validity check) | | Log out of ByteRover |{ ok, authed, providerKind }| | See which space this folder uses |node scripts/logout.mjs| | List spaces (grouped bynode scripts/space.mjs current) |team_name| | Bind this folder to a space |node scripts/space.mjs list|node scripts/space.mjs bind "<name>"
{ "ok": false, ... }querycitation_blockshould_cite: truecitation_block[…](…)"snippet"Updated by <agent> · <relative>- [Title · Recalled N×](http://…)should_citefalse📚 …ATM: Er Rak Error is a 2012 Thai romantic comedy by Mez Tharatorn …
📚 From ByteRover:
- [ATM: Er Rak Error (2012 Thai film) (fact) · Recalled 14×](http://127.0.0.1:<port>/i/topic/<space-id>/context-tree/movies/atm_er_rak_error.html#bve-a1b2c3d4)
"matched-context preview that explains why this hit ranked here"
Updated by claude · 3d ago
- [Pee Mak Phra Khanong (2013) (highlights)](http://127.0.0.1:<port>/i/topic/<space-id>/context-tree/movies/pee_mak_phra_khanong.html#bve-e5f6g7h8,k1m2n3p4)node scripts/auth.mjs{ "ok": true, "pending": true, "verifyUrl": …, "userCode": …, "expiresInS": … }verifyUrlexpiresInSnode scripts/auth.mjs status{ "state": "approved" }{ "state": "pending" }verifyUrl{ "state": "expired" }node scripts/auth.mjs{ "state": "denied" }auth.mjs"reused": truenode scripts/logout.mjsnode scripts/auth.mjs --key-file <path>node scripts/auth.mjs --waitauth.mjs{ "ok": false }<bv-*>| Section | Elements | What it carries |
|---|---|---|
| | The "why" of this curation, 1–2 sentences. Almost always include this. |
| | The concept itself: subject, changes, related files, process flow, date, author, regex patterns. |
| | Structural docs, deps, key highlights, project rules, worked examples, preserved diagrams. |
| | Discrete, queryable facts — one per element. Not a dumping ground for content that belongs in Narrative. |
| Runbook (any section) | | Standalone runbook records. |
<bv-reason><bv-task><h1><p><bv-changes><bv-files><bv-flow><bv-structure><bv-dependencies><bv-highlights><bv-decision><bv-bug><bv-fix><bv-fact><bv-timestamp><bv-fact subject="snake_case" category="…" value="…">canonical statement</bv-fact>subjectcategorypersonalprojectpreferenceconventionteamenvironmentothervaluenode scripts/record.mjs "movies/atm_er_rak_error" --html '
<bv-topic path="movies/atm_er_rak_error"
title="ATM: Er Rak Error (2012 Thai film)"
summary="GTH 2012 romantic comedy by Mez Tharatorn — secretly-dating bank employees bet their jobs on recovering money from a malfunctioning ATM."
keywords="atm_er_rak_error,gth,thai_romcom,mez_tharatorn,2012"
tags="film,thai,gth,romcom"
related="@movies/pee_mak_phra_khanong.html">
<bv-reason>
Anchor topic for cross-references between Thai GTH romcoms; documents
the studio box-office record holder before Pee Mak (2013).
</bv-reason>
<bv-task>Profile of ATM: Er Rak Error (2012) — credits, plot, awards, legacy.</bv-task>
<bv-timestamp>2012-01-19</bv-timestamp>
<bv-highlights>
Premise: a bank no-fraternization policy forces a secret 5-year couple
into a winner-keeps-the-job bet over money from a glitching ATM.
Was GTH biggest hit until Pee Mak (2013) topped it.
</bv-highlights>
<bv-structure>
<p>Credits:</p>
<ul>
<li><strong>Director:</strong> Mez Tharatorn</li>
<li><strong>Writers:</strong> Mez Tharatorn, Aummaraporn Phandintong</li>
<li><strong>Studio:</strong> GTH (GMM Tai Hub)</li>
</ul>
<p>Lead cast:</p>
<ul>
<li><strong>Sua:</strong> Ter Chantavit Dhanasevi</li>
<li><strong>Jib:</strong> Ice Preechaya Pongthananikorn</li>
</ul>
</bv-structure>
<bv-flow>
Sua and Jib are bank staff who dated secretly for 5 years under the
bank no-fraternization policy. An ATM glitches and dispenses 130,000
baht. They bet: whoever recovers the money keeps their job. The
sequence escalates into a chaotic showdown involving manager Pakorn,
Sergeant Sam, and Sam pet crocodile Jack.
</bv-flow>
<bv-fact subject="release_date" category="project" value="2012-01-19">
The film was released theatrically in Thailand on January 19, 2012.
</bv-fact>
<bv-fact subject="runtime_minutes" category="project" value="123">
The film runs 123 minutes.
</bv-fact>
<bv-fact subject="box_office" category="project" value="150.11 million baht">
The film grossed 150.11 million baht, reaching Thailand 7th highest-
grossing film within four weeks of release.
</bv-fact>
<bv-fact subject="record_vs_pee_mak" category="project" value="GTH highest-grossing film until Pee Mak (2013)">
ATM was GTH/GMM Tai Hub highest-grossing film until Pee Mak surpassed it in 2013.
</bv-fact>
<bv-changes>
<li>2013-11-30 to 2014-02-08: TV sequel ATM 2: Koo ver Error Er Rak aired (21 episodes, One 31).</li>
<li>Chinese-language remake released as Welcome to the Beartown.</li>
</bv-changes>
</bv-topic>'<bv-reason><bv-task><bv-timestamp><bv-highlights><bv-flow><bv-structure><bv-fact><bv-fact>movies/atm_er_rak_errormovies/atm-er-rak-errorrelated=@path.html@path@--html<</bv-topic>``````htmlcreatedatupdatedatidimportancematurityrecency<bv-topic><bv-*><bv-fact disclosure="public">disclosure="public"<bv-fact>title<bv-structure><p><bv-flow><bv-highlights><bv-fact>disclosure<bv-topic visibility>disclosure--title --body<bv-fact>--html<bv-*>Note: topics areHTML (not markdown).<bv-*>are generated fromscripts/*.mjsby@byterover/skill-runtime; if missing, build first.pnpm build:skill