Skip to content

Feat/eng 2697#733

Closed
DatPham-6996 wants to merge 4 commits into
mainfrom
feat/ENG-2697
Closed

Feat/eng 2697#733
DatPham-6996 wants to merge 4 commits into
mainfrom
feat/ENG-2697

Conversation

@DatPham-6996
Copy link
Copy Markdown
Collaborator

Summary

  • Problem: On a successful brv curate, the skill instructed the in-daemon agent to report only data.filePath. It never pointed users at the ByteRover dashboard where the saved topic is actually viewable, so users had no obvious way to see what was just curated.
  • Why it matters: The dashboard already exists and the daemon serves it on http://localhost:7700 by default — but the skill never surfaced it, leaving a working capability undiscovered and the curate loop ending at "a file path" instead of "here's your knowledge, rendered."
  • What changed: Updated the skill templates the curate agent reads at runtime. On done, the agent now hands the user the clickable dashboard URL (Contexts page) alongside filePath. Added brv webui to SKILL.md's Quick Reference + command list, an "Example Session Responses" JSON walkthrough and a "View What You Saved" section to curate.md, plus a new Common Mistakes row. Tightened the connector test to guard the new content.
  • What did NOT change (scope boundary): No runtime, CLI, or transport code. The brv webui command, the webui server, the curate engine, and port handling are untouched — this is documentation/behavioral-contract text plus a test assertion. The 7700 default is referenced, not introduced.

Type of change

  • Bug fix
  • New feature
  • Refactor (no behavior change)
  • Documentation
  • Test
  • Chore (build, dependencies, CI)

Scope (select all touched areas)

  • TUI / REPL
  • Agent / Tools
  • LLM Providers
  • Server / Daemon
  • Shared (constants, types, transport events)
  • CLI Commands (oclif)
  • Hub / Connectors
  • Cloud Sync
  • CI/CD / Infra

(Skill templates live under src/server/templates/skill/ and are deployed/read via the SkillConnector in server/infra/connectors/skill/.)

Linked issues

  • Closes #N/A (tracker is Linear, no GitHub issue)
  • Related: Linear ENG-2697 — "Rewrite ByteRover skill based on Superpowers skill" (https://linear.app/byterover/issue/ENG-2697). This is an enhancement layered on that rewrite.

Root cause (bug fixes only, otherwise write N/A)

  • Root cause: N/A
  • Why this was not caught earlier: N/A

Test plan

  • Coverage added:
    • Unit test
    • Integration test
    • Manual verification only
  • Test file(s): test/unit/infra/connectors/skill/skill-connector.test.ts
  • Key scenario(s) covered:
    • Installed SKILL.md includes brv webui.
    • Installed curate.md includes localhost:7700 and the ## Example Session Responses section.

User-visible changes

  • After a successful brv curate, the agent now gives the user the dashboard URL http://localhost:7700 (Contexts page) alongside the saved filePath, instead of reporting only the path.
  • SKILL.md Quick Reference and command list now document brv webui.
  • No brv CLI flags, defaults, or command output changed.

Evidence

Attach at least one:

  • Failing test/log before + passing after
  • Trace/log snippets
  • Screenshot/recording

Before (old templates against the new assertions):

37 passing
2 failing
AssertionError: expected '---\nname: byterover...' to include 'brv webui'
AssertionError: expected '---\nname: byterover-curate...' to include 'localhost:7700'

After (npx mocha "test/unit/infra/connectors/skill/skill-connector.test.ts"):
39 passing (62ms)

Checklist

  • Tests added or updated and passing (ran the touched suite — 39 passing; full npm test not run locally)
  • Lint passes (npm run lint) — not run
  • Type check passes (npm run typecheck) — not run
  • Build succeeds (npm run build) — not run
  • Commits follow Conventional Commits format (docs(skill): point users to the webui dashboard after curate)
  • Documentation updated (this PR is the documentation)
  • No breaking changes
  • Branch is up to date with main (origin/main is an ancestor of HEAD)

Risks and mitigations

  • Risk: The dashboard URL is hardcoded to http://localhost:7700; if the user changed the webui port (BRV_WEBUI_PORT or a persisted port), the URL the agent surfaces will be wrong.
    • Mitigation: 7700 is the documented first-run default and the most common case; the docs also tell the agent that brv webui opens the same dashboard. Templating the actual port into the message is a reasonable follow-up.
  • Risk: The agent may surface the URL even when the daemon/webui isn't reachable.
    • Mitigation: The daemon serves the dashboard by default whenever brv is running, so a curate succeeding implies the daemon is up; worst case is a stale link, no functional impact.

Guide the in-daemon curate agent to surface the ByteRover dashboard
(http://localhost:7700, Contexts page) once a topic is saved, so users
can actually see what was curated.

- SKILL.md: add `brv webui` to the Quick Reference and command list,
  noting the daemon already serves the dashboard on port 7700
- curate.md: on `data.status: "done"`, hand the user the clickable
  dashboard URL alongside `filePath`; add a "View What You Saved"
  section and a "Example Session Responses" walkthrough (kickoff →
  correction → completion JSON envelopes); add a Common Mistakes row
  for reporting a save without showing where to view it
- skill-connector tests: assert SKILL.md mentions `brv webui` and
  curate.md mentions `localhost:7700` + the new examples section
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 29, 2026

Claude finished @DatPham-6996's task in 2m 37s —— View job


Review Summary — Score: 4 / 5

  • Read the three changed files
  • Check PR diff against origin/main
  • Review SKILL.md changes
  • Review curate.md changes
  • Review test changes
  • Post inline comments for any issues found
  • Post overall review summary with score

A focused, well-scoped documentation PR. The behavioral contract change ("after done, point the user at the dashboard") is sensible and matches the daemon's actual runtime — WEBUI_DEFAULT_PORT = 7700 in src/server/constants.ts:63 is served by webui-server.ts by default. The JSON envelopes added to curate.md are accurate to the codebase (json-response.ts:5 for {command,data,success,timestamp}; html-writer.ts:230 for the unknown-bv-element shape), and the test pins on substring assertions rather than wording, which keeps it robust without overfitting.

What's strong

  • praise: JSON examples reflect real runtime — success correctly mirrors data.ok, error kind matches the actual writer, and the needs-llm-step / done branching is faithful to curate-session.ts.
  • praise: Test additions are minimal and pin the right things (brv webui, localhost:7700, ## Example Session Responses).
  • praise: Risk section in the PR description already self-discloses the hardcoded port — that level of honesty is appreciated.

What's worth addressing

  • suggestion: SKILL.md's Quick Reference (L123) and Command Map (L177) lead with brv webui as the action. onboarding.md:138 in the same template set explicitly tells the agent not to do that ("Do NOT tell the user to 'run brv webui' — the daemon auto-starts the web server"). curate.md itself handles this well by leading with the URL; the SKILL.md entries should mirror that ordering so the three docs agree.
  • issue (acknowledged): 7700 is hardcoded in 6 spots in curate.md and 2 in SKILL.md. BRV_WEBUI_PORT / persisted port overrides will make every one of those URLs wrong. The daemon already exposes webui:getPort and curate's done envelope is a natural place to attach a real dashboardUrl field. Worth the small follow-up; docs alone can't keep this honest.
  • question: The new Common Mistakes row promotes "surface the URL after done" to mandatory. For silent / chained curates (mid-task agent curates, brv dream flows) this becomes noise. Consider scoping to user-initiated curates.
  • nit: curate.md:31 comment lands next to brv review pending and reads like a comment about review, not curate. Hoist it next to the curate examples.

Untouched but worth a quick second look

  • lint / typecheck / build were not run by the author; for a docs-only change that's low risk but the templates are loaded at runtime via the SkillConnector, so a npm run lint over the test file is cheap insurance.

5 inline comments queued (1 praise on the test, 1 suggestion on SKILL.md, 1 nit + 1 issue + 1 question on curate.md).
· Branch feat/ENG-2697

Comment thread src/server/templates/skill/SKILL.md Outdated
Comment thread src/server/templates/skill/curate.md Outdated
Comment thread src/server/templates/skill/curate.md Outdated
Comment thread src/server/templates/skill/curate.md Outdated
Comment thread test/unit/infra/connectors/skill/skill-connector.test.ts
Update ByteRover skill docs to avoid hardcoded localhost:7700 links now that brv webui resolves the active port.

- point post-curate and onboarding guidance to the URL printed by brv webui
- document brv webui --port <port> for port conflicts or custom ports
- add skill connector regression coverage to reject fixed Web UI localhost URLs
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 31, 2026

Claude finished @DatPham-6996's task in 4m 45s —— View job


Review Summary — Score: 4 / 5

  • Read all four changed files
  • Diff against origin/main
  • Cross-check against runtime (webui.ts, json-response.ts, curate-session.ts, webui-server.ts)
  • Post inline comments for issues found
  • Post overall summary with score

The latest commit (47771b6) directly addresses the previous review's main complaint — every http://localhost:7700 literal is gone from the installed skill bundle, replaced by an instruction to read the URL printed by brv webui. That's a real fix and the test now pins the absence of the literal port across every installed skill file, which keeps the fix from drifting.

The JSON envelope examples in curate.md are accurate to runtime (json-response.ts:5 for the {command, data, success, timestamp} wrapper; html-writer.ts:230 for unknown-bv-element; curate/index.ts:151 confirms success = envelope.ok). The removal of --response-file documentation is also correct — that flag does not exist on the current curate command (src/oclif/commands/curate/index.ts:41-67 only declares --format, --overwrite, --response, --session).

What's strong

  • praise: Hardcoded port fully removed; agents now read the URL the daemon actually serves on.
  • praise: Test uses a negative not.to.include('http://localhost:7700') over SKILL_FILE_NAMES, so any future template that reintroduces the literal port fails one test instead of slipping into agent guidance.
  • praise: onboarding.md and curate.md no longer contradict each other on whether to run brv webui.

What's worth addressing

  • issue (blocking, behavioral regression): The new guidance asks the agent to spawn brv webui after every successful curate, but webui.ts:49 unconditionally calls open(url). That means every done curate auto-opens a browser tab. Combined with the new mandatory Common Mistakes row, agents in mid-implementation curates / brv dream chains / autonomous loops will flood the user with browser pops. Either add a brv webui --print-url flag (skip open()), or — cleaner — have the curate done envelope already include data.dashboardUrl from webui:getPort, removing the subprocess hop entirely.
  • suggestion: "If brv webui reports a port conflict, run brv webui --port <port>…" — bare brv webui cannot conflict; it just reads the daemon's persisted port via webui:getPort (webui.ts:30-41). Only the --port path hits EADDRINUSE (webui-server.ts:38-39). The fallback is really for "user wants a different port," not conflict recovery. Repeated in 4 spots across curate.md + 1 in SKILL.md.
  • question (carry-over from previous review, still applies): The Common Mistakes entry promotes "surface the URL after done" to mandatory. Silent / chained curates (mid-task agent curates, dream flows) inherit that rule and the auto-open behavior. Worth scoping to user-initiated curates.
  • nit (carry-over): curate.md:31-32 comments still land after brv review pending, ambiguously associated with review rather than curate. One-line hoist would fix it.

Untouched but worth a quick second look

  • The new 'should avoid fixed Web UI localhost ports…' test only exercises the Claude Code agent. The same templates feed every agent in SKILL_CONNECTOR_CONFIGS, so a small for-of over supported agents would guard agent-specific overrides for free.
  • Author flagged that lint / typecheck / build weren't run locally. For a docs-only change that's low risk, but the templates are loaded at runtime via the SkillConnector, so running npm run lint -- --max-warnings=0 over the test file is cheap insurance.

6 inline comments queued (2 praises, 1 issue, 2 suggestions, 1 question, 1 nit — plus the carry-overs from the prior round that the latest commit did not address).

· Branch feat/ENG-2697 ·

Comment thread src/server/templates/skill/curate.md Outdated
Comment thread src/server/templates/skill/curate.md Outdated
Comment thread src/server/templates/skill/curate.md Outdated
Comment thread src/server/templates/skill/curate.md Outdated
Comment thread test/unit/infra/connectors/skill/skill-connector.test.ts
Comment thread src/server/templates/skill/onboarding.md Outdated
Update ByteRover skill docs to avoid hardcoded localhost:7700 links now that brv webui resolves the active port.

- point post-curate and onboarding guidance to the URL printed by brv webui
- document brv webui --port <port> for port conflicts or custom ports
- add skill connector regression coverage to reject fixed Web UI localhost URLs
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 1, 2026

Claude finished @DatPham-6996's task in 4m 37s —— View job


Review Summary — Score: 3 / 5

  • Read all four changed files
  • Diff against origin/main
  • Cross-check against runtime (webui.ts:49, curate-session.ts:111-145, webui-server.ts:38-39, constants.ts:63)
  • Post inline comments for issues found
  • Post overall summary

The latest commit (cc8a15a) walks back the auto-execute-brv webui direction from the May 31 round and replaces every localhost:7700 hardcode with localhost:<served-port> plus a "default 7700" fallback. That's a real step toward port-correctness — but it traded one drift problem (hardcoded port) for two new ones (placeholder leak + the same auto-open browser issue, just one stack frame removed). The previous two rounds' core nits also carry over unchanged.

What's strong

  • praise: onboarding.md and curate.md no longer contradict each other on whether to run brv webui. The internal consistency rewrite is clean.
  • praise: The JSON envelopes in curate.md are accurate to runtime — curate-session.ts:111-145 confirms the done shape, json-response.ts:5 confirms the outer {command, data, success, timestamp} wrapper, html-writer.ts:230 confirms unknown-bv-element. The --response-file removal is also correct — that flag is genuinely not on src/oclif/commands/curate/index.ts.
  • praise: New test assertion (not.to.include('run \brv webui` after every successful curate')) iterated across SKILL_FILE_NAMES` is the right shape — it pins the absence of a regressive instruction across the whole installed bundle.

What's worth addressing

  • issue (the central one): <served-port> is a literal placeholder, and the curate done envelope (src/oclif/lib/curate-session.ts:111-145) does not include any port or dashboardUrl. So the agent has no way to substitute it — it will either echo the placeholder verbatim, fall back to 7700 (wrong on BRV_WEBUI_PORT overrides), or shell out to brv webui, which still unconditionally calls open(url) (src/oclif/commands/webui.ts:49). The clean closure remains: add data.dashboardUrl to the done envelope, then have the templates report data.dashboardUrl instead of carrying a placeholder through to user-visible text.
  • issue (onboarding): The same placeholder lands inside the user-visible artifact block on onboarding.md:130 — the trust-opener line reads http://localhost:<served-port> literally during the tour. That contradicts the "verifiable trust proof" promise immediately below it.
  • suggestion (carry-over from both prior rounds): Bare brv webui cannot hit a port conflict — only --port <X> triggers EADDRINUSE in webui-server.ts:38-39. The "if the command reports a port conflict" framing is still imprecise; the fallback is for user preference, not conflict recovery. Repeated across curate.md:50, :112, :197, the Quick Reference block, SKILL.md:177, and onboarding.md:138.
  • question (carry-over from both prior rounds, still applies): The Common Mistakes row promotes "surface the URL after done" to mandatory across every curate — including ones the agent runs silently inside a larger task. Worth scoping to user-initiated curates so chained/mid-task curates don't become noise.
  • nit (carry-over from both prior rounds): Quick Reference comments on curate.md:31-33 still land after brv review pending, ambiguously associated with review rather than curate. One-line hoist would fix it.
  • nit (carry-over from May 31 review): The new positive/negative assertions in the test still only exercise Claude Code. Since the SkillConnector ships the same templates to every agent in EXPECTED_SUPPORTED_AGENTS, a small for-of would guard agent-specific overrides for free.

Untouched but worth a quick look

  • The author flagged that lint / typecheck / build weren't run locally. Docs-only is low risk, but the templates are loaded at runtime via the SkillConnector, so a npm run lint over the touched test file is cheap insurance.

7 inline comments queued (3 praises, 2 issues, 2 suggestions, 1 question, 1 nit — including the carry-overs the latest commit did not address).

· Branch feat/ENG-2697 ·

```
4. Branch on `data.status`:
- `done` - report `data.filePath`.
- `done` - report `data.filePath`, then give the user the served Web UI link, such as `http://localhost:<served-port>`, so they can see the saved topic in the Contexts page. Use default `http://localhost:7700` unless a custom port is already serving. If that link does not open, tell the user they can run `brv webui` to open the dashboard; use `brv webui --port <port>` only when the user asks to open/change the dashboard port or the current port has a conflict.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue (the central one — still not fixed by templates alone): http://localhost:<served-port> is a literal placeholder. The agent has no signal that lets it substitute <served-port> — the curate done envelope (src/oclif/lib/curate-session.ts:111-145) only carries filePath, ok, status, and optional warnings. There is no dashboardUrl, no port, no daemon hint. So the agent is left with three bad options:

  1. Echo <served-port> verbatim. The user sees a broken-looking URL with angle brackets — not clickable, not informative.
  2. Default to http://localhost:7700 (what this paragraph says to do "unless a custom port is already serving"). The agent can't know whether a custom port is serving from the envelope, so it falls back to 7700 in every case. For users who set BRV_WEBUI_PORT or persisted a different port, that URL is wrong — same drift the previous round set out to fix.
  3. Run brv webui to discover the port. That command unconditionally calls open(url) (src/oclif/commands/webui.ts:49) — every curate spawns a browser tab.

The previous round's fix (delete the literal 7700 from templates) was right in spirit, but the templates can't actually surface the real port without help from the runtime. The clean closure is the one previously proposed: add dashboardUrl to the curate done envelope by resolving the persisted port via webui:getPort, then have the docs say data.filePath and data.dashboardUrl — no placeholder, no brv webui shell-out, no port drift.

This is the same point made on curate.md and webui.ts in earlier rounds. It is the only fix that makes "tell the user where to see what was saved" honest across BRV_WEBUI_PORT overrides, persisted custom ports, and silent/chained curates.

Fix this →

Comment on lines +31 to +33
# After a successful curate, share the served Web UI link: http://localhost:<served-port>
# default http://localhost:7700 unless a custom Web UI port is already serving
# If that link does not open, tell the user they can run brv webui
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit (carry-over from previous rounds, still applies): These three comments sit directly under brv review pending --format json, so on a first read the "after a successful curate" lines associate with the review command rather than the two brv curate examples above. Hoisting them up to immediately after brv curate view --detail (line 29) keeps the topical grouping tight: curate examples → "and here's how to show the user what was saved" → unrelated review command. This was flagged in both prior reviews.

Suggested change
# After a successful curate, share the served Web UI link: http://localhost:<served-port>
# default http://localhost:7700 unless a custom Web UI port is already serving
# If that link does not open, tell the user they can run brv webui
brv curate view --detail
# After a successful curate, share the served Web UI link: http://localhost:<served-port>
# default http://localhost:7700 unless a custom Web UI port is already serving
# If that link does not open, tell the user they can run brv webui
brv review pending --format json

| Omitting `keywords` when retrieval terms are obvious | Add comma-separated `keywords` on `<bv-topic>` |
| Reporting completion before a session reaches `data.status: "done"` | Wait for `done` before telling the user the topic is saved |
| Overwriting an existing path without preserving prior facts | Merge existing content unless the user explicitly wants replacement |
| Saying the topic is saved without showing the user where to see it | After `done`, give the user `data.filePath` and the served Web UI link, such as `http://localhost:<served-port>` |
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

question (carry-over, third round): This row still mandates "give the user data.filePath and the served Web UI link" on every done. For curates that the agent runs silently as part of a larger task (mid-implementation curates during a long Claude Code session, brv dream chains, autonomous loops), surfacing a URL on every successful save becomes noise — and per the issue on curate.md:50, the agent's only way to actually obtain a valid URL is to spawn brv webui, which opens a browser tab.

Consider scoping the rule to user-initiated curates, e.g.:

"When the user explicitly asked to curate, give them data.filePath and the dashboard URL. For curates the agent initiates inside a larger task, just record data.filePath for the run summary."

This was raised in both the May 29 and May 31 reviews and is still relevant after the latest commit.

}
```

→ Only now is the topic saved. Report `data.filePath` and hand the user the served Web UI link, such as `http://localhost:<served-port>`, so they can open the Contexts page and see it. Use default `http://localhost:7700` unless a custom port is already serving. If that link does not open, tell the user they can run `brv webui` to open the dashboard; use `brv webui --port <port>` only when the user asks to open/change the dashboard port or the current port has a conflict.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion (still relevant after the rewrite): Same "port conflict" phrasing here as in the previous round. Bare brv webui cannot conflict — it just reads the daemon's persisted port via webui:getPort (src/oclif/commands/webui.ts:30-41). EADDRINUSE only fires when the user explicitly passes --port (src/server/infra/webui/webui-server.ts:38-39). So the --port <port> fallback is really for user preference ("I want to move the dashboard"), not conflict recovery.

The same wording is repeated on curate.md:50, curate.md:197, in the Quick Reference block (L31-33), in the SKILL.md command map (L177), and on onboarding.md:138. Worth tightening to something like "if the user wants a different port, run brv webui --port <port>" so the agent doesn't go searching for a conflict that won't appear from bare brv webui.

- `brv swarm <query|curate|status>` — cross-source memory federation. See `swarm.md`.
- `brv vc <init|status|add|commit|...>` — git-style version control of the context tree. See `vc.md`.
- `brv dream <scan|finalize|undo>` — three-phase context-tree cleanup (link / merge / prune / synthesize). See `dream.md`.
- `brv webui [--port <n>]` — open or reconfigure the ByteRover dashboard when needed. For routine curate and onboarding closeouts, share the served Web UI link directly: `http://localhost:<served-port>`; default `http://localhost:7700` unless a custom port is already serving. The **Contexts page** renders everything saved under `.brv/context-tree/`. If that link does not open, tell the user they can run `brv webui` to open the dashboard; use `brv webui --port <port>` only when the user asks to open/change the dashboard port or the current port has a conflict. See `curate.md`.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion (non-blocking): This command-map row is long and leads with brv webui as the action. The line tries to balance "share the URL" vs "run the command," but at this scale (3 sentences in one bullet) the agent will likely zero in on "open or reconfigure the ByteRover dashboard when needed" as the lead intent. The other detail files (onboarding.md:138, curate.md:50/112/197) all lead with the URL and demote brv webui to the fallback. Mirroring that order here keeps the three documents internally consistent — the agent reads one ordering rule across the whole bundle.

Same <served-port> placeholder issue applies as raised on curate.md:50 — the agent has no signal to fill in the port, so this line will resolve to either a literal localhost:<served-port> echo or a literal localhost:7700 regardless of the user's actual config. Templating data.dashboardUrl from the curate envelope is the durable fix.

Comment on lines +200 to +203
for (const content of contents) {
expect(content).not.to.include('printed Web UI URL')
expect(content).not.to.include('run `brv webui` after every successful curate')
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

praise: This negative-assertion-over-every-file pattern is exactly the right guardrail for template drift. Pinning the absence of printed Web UI URL and run \brv webui` after every successful curateacross the wholeSKILL_FILE_NAMES` set means a future template tweak that reintroduces either phrase fails one test instead of leaking into agent guidance. Cheap, durable, and the right granularity.

nit (carry-over from May 31 review): This test still exercises only the Claude Code agent. The SkillConnector ships the same template bundle to every agent in AGENT_CONNECTOR_CONFIG that supports 'skill' (see the EXPECTED_SUPPORTED_AGENTS list at the top of this file — Cursor, Codex, Github Copilot, Hermes, OpenClaw). A tiny for (const agent of EXPECTED_SUPPORTED_AGENTS) wrapper would catch any agent-specific override that reintroduces the literal port for free — same logic that drove EXPECTED_SUPPORTED_AGENTS in the first place.

The browser URL is the **verifiable** trust proof — the user can click it in 2 seconds and see their memory in a real local dashboard. Stronger than any worded assurance.

Do NOT tell the user to "run `brv webui`" — the daemon auto-starts the web server on the persisted port (default 7700). The URL works as soon as the daemon is alive, which it already is.
Use the served Web UI link, such as `http://localhost:<served-port>`; default `http://localhost:7700` unless a custom port is already serving. Do NOT run `brv webui` as part of every tour closeout just to produce this link. If that link does not open, tell the user they can run `brv webui` to open the dashboard. Use `brv webui --port <port>` only when the user asks to open/change the dashboard port or the current port has a conflict.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

praise: Replacing the old "Do NOT tell the user to run brv webui" line — which directly contradicted the new curate guidance — with a single coherent rule is the right reconciliation. SKILL.md, curate.md, and onboarding.md now agree on "share the URL first, fall back to the command if the link doesn't open."

issue (same root cause as the comment on curate.md:50): The <served-port> literal still appears on onboarding.md:103 ("http://localhost:<served-port> — or run brv webui if that link doesn't open.") and again on onboarding.md:130 (inside the example artifact block). In the artifact block specifically, the user sees that text rendered during the tour — the trust opener message tells the user "see it in your browser: http://localhost:&lt;served-port>". If the agent doesn't substitute the port (and it has no clean way to), the trust-proof URL the onboarding tour shows is literally broken with angle brackets. That's the opposite of what the "verifiable trust proof" line one paragraph below promises.

The most robust fix is the same one raised on curate.md:50: have the daemon hand the agent a real port (via webui:getPort exposed in the curate/onboarding flow), and have the docs say "use the port the daemon returned" instead of carrying a placeholder through to user-visible text.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant