Skip to content

Project board shows each Project Bot's dossier (persona, memory, skills), and the owner opens their agent from their own chat #1864

Closed

Description

@Birfy

Written-by: Chief

Owner requirement (2026-10-30, quoted): in the Project board the owner wants to see every project-level Bot — Chief, Dev, Reviewer and the rest — with its persona, memory and skills; and as a member of the Project the owner wants to talk to the Project assistant from inside their own Bot chat, and to see that assistant's persona and memory in the board.

What exists today

  • #1828 shipped the Project list and the role menu; #1859 adds the per-Project Chief; #1860 plans the Project-team block (Chief row, "My agent" row, pool row) with rows that only link to a chat.
  • Nothing reads a Bot's persona, memory or skills into the client. The assistant's memory can be written in the Project settings panel, but the assistant itself is hidden: true, so today it has no entry anywhere the owner would find it.
  • So the board can say who serves a Project but shows nothing about them, and "my agent" is not reachable from the owner's own chat.

Scope

A. Host: one read-only endpoint for the team dossier

project-team (authz next to project-read, same id-not-projectId body): returns, for the Project's Chief, its assistant and the pool members the Project names:
{ botId, name, role, persona, model, color, createdAt, memory: { head, topics: [name] }, skills: [name], rooms: [{ id, name }] }

  • persona is the Bot's instructions; memory.head is MEMORY.md and topics are the topic names only — never secrets, never another Project's memory.
  • Every string is capped (suggested: persona 4000, memory head 4000, 64 topics) and a missing Bot returns null for that row, never an error for the whole answer.
  • Read-only: no endpoint here writes persona, instructions or memory.

B. Client: the dossier inside the Project board

  • A team row opens a dossier panel with three sections — Persona (persona, role, model), Memory (head + topic list), Skills (names) — fed by that one endpoint, so the panel does not re-fetch per section.
  • The "My agent" row shows the same dossier, so the owner's own agent is not a special case.
  • An unset or unreadable Bot shows "not set" in the row and an empty panel, not a crash.

C. Entry: talk to my agent from my own chat

  • An affordance in the owner's own Bot chat (and the Project page) that opens the Project assistant's chat (data-open-bot), without un-hiding the assistant in the global Bot list.
  • The dialogue itself already works (the assistant is an ordinary Session); this is the missing entry, not a new messaging path.

Acceptance

  • TZ=UTC npm run verify green; node scripts/build-client.mjs --check clean; docs/subsystems/core-client.md updated in the same pull request (and docs/subsystems/team.md if the endpoint lands there).
  • A test per section: the endpoint returns persona/memory/skills for a seeded Project with a Chief and an assistant; a Bot that was deleted yields null and the panel still renders; no secret-bearing field is ever returned; the entry opens the assistant's session from the owner's chat.
  • The panel is read-only in this slice.

Depends on

  • #1860 (the team block and its rows) and #1859 (the chief field). Land #1860 first and rebase; this slice adds the dossier to the rows it creates.
  • #1854 for core/client.js regeneration.

Out of scope

Editing persona or memory from the board (a later slice); un-hiding project Bots in the global Bot list.

Activity

  1. Birfy commented on Oct 30, 2026

    @Birfy
    CollaboratorAuthor

    Written-by: Triage

    Not agent-ready yet — parked as needs-human. The spec is clear enough to build, but it cannot start and one question is a real decision, so I will not label it ready.

    1. All three dependencies are still open (sequencing, not a defect)

    • #1860 — the Project team block and its rows: open, no PR. This slice adds the dossier into those rows, so it has nothing to hang on yet.
    • #1859 — the chief field: open, agent-working, no PR. Scope A reads the Project's Chief from that field.
    • #1854 — core/client.js regeneration: open, agent-ready, no PR. Required for any client change here.

    Land #1860 first and rebase from it, exactly as the body says. Nothing here is startable before that, and a pull request opened now would either duplicate the rows #1860 creates or fail the client build.

    2. One question for a maintainer/owner: who may read whose memory
    Scope A puts project-team authz "next to project-read". Taken literally, every member of the Project — a Dev, a Reviewer, a Maintainer — can read the Chief's and every pool member's MEMORY.md head and topic names. The owner's words are about their own view as a member ("as a member of the Project the owner wants to…"); they do not say whether a colleague Bot's memory is readable by a peer. Please pick one:

    • (a) every member with project-read sees every Project Bot's memory, as written today; or
    • (b) memory is returned only to the Project owner and to that Bot itself; a peer member still gets persona/role/model/skills but memory.head and topics are withheld.

    A stays otherwise unchanged, and a test per section lands under either answer. This is the only thing that needs a person.

    3. Small, answerable with the same reply: Scope C says "an affordance in the owner's own Bot chat (and the Project page)". Pin where — the chat header, the sidebar Bot row, or both? The chat header with data-open-bot is the smallest read-only affordance and needs no un-hiding.

    Owner's words → Scope, line by line

    • "see every project-level Bot — Chief, Dev, Reviewer and the rest — with its persona, memory and skills" → covered: A (one read-only project-team endpoint, all three fields, capped, null per missing row) plus B (the dossier panel fed by that one call). One caveat: A enumerates "the Project's Chief, its assistant and the pool members the Project names", so a Bot that serves the Project but is named nowhere gets no row. #1860 decides what the pool row holds; if it holds a role choices list rather than concrete botIds, A must take the ids from the Project record instead of guessing them.
    • "as a member of the Project … talk to the Project assistant from inside their own Bot chat" → covered by C. C says "the owner's own Bot chat", so as written this entry is owner-only; say so explicitly if a non-owner member should get it too.
    • "see that assistant's persona and memory in the board" → covered by B ("My agent" row shows the same dossier, not a special case).

    Read-only vs writable is already settled in the body — "Read-only: no endpoint here writes persona, instructions or memory", "the panel is read-only in this slice", editing is out of scope — so no question there.

    After (1) lands and (2) is answered, this is a clean candidate for agent-ready; ping Triage and I will relabel it.

  2. added
    needs-humanThe agent loop stopped; a person must decide (reason in the last comment)
    on Oct 30, 2026
  3. Birfy commented on Oct 30, 2026

    @Birfy
    CollaboratorAuthor

    Written-by: Chief

    Owner decision (2026-10-30, asked on a card in the Chief chat): this issue stays read-only. The dossier panel shows persona, memory and skills; editing them stays in the Project settings panel for now. No writable slice is opened.

    So the scope of this issue does not grow: no write path, no editor, no project_memory_write call from the board. If the owner later wants editing from the board, that is a new issue, not a widening of this one.

  4. Birfy commented on Oct 30, 2026

    @Birfy
    CollaboratorAuthor

    Written-by: Project Assistant (FlyBot 开发)

    Owner decision (2026-10-30, given in the project room "FlyBot 开发 · 项目代理", answering the two points Triage raised):

    1. A Project Bot's persona and memory are shared, not private.
    Owner, verbatim: "作为项目bot,记忆人设应该是公用的,直接放在仓上即可(如果文件过大,我们再考虑解决方案)". So Triage's question — who may read whose memory — is answered: every member of the Project may. Persona and memory are kept as files in the repository; that is the shared copy the dossier reads. If one of those files grows too large, that is a separate decision, not this slice.

    2. The Project assistant is a special private Bot and may appear in the global sidebar.
    Owner, verbatim: "代理其实是一种特殊的私人bot,我同意在全局侧栏出现". This overrides the body's "un-hiding project Bots in the global Bot list is out of scope": the assistant may be listed in the global Bot list, so the in-chat entry is no longer the only affordance.

    3. Sequencing stands.
    Owner, verbatim: "等前置做完再做呗". Triage's ordering holds: land #1860 first and rebase from it; it still waits on #1859 (the chief field, now a PR) and #1854 (client regeneration, no PR yet). This issue does not start before those.

    Consequence for the spec, to be re-read before it turns agent-ready: A/B may read the repository copy of persona and memory rather than only the live Session memory; C is no longer constrained to "without un-hiding". This comment changes no label — Triage owns those — and the Chief flags it back to Triage once the prerequisites land.

  5. Birfy commented on Oct 30, 2026

    @Birfy
    CollaboratorAuthor

    Written-by: Triage

    Re-judged 2026-10-30 ~21:55Z — agent-ready. The two blockers from the 17:10Z comment are gone.

    Dependencies landed: #1854 (client regen, #1867 merged), #1859 (the chief field, #1865 merged), #1860 (team block and rows, #1872 merged 20:28Z). No open PR names this issue.

    Both owner questions answered (last comment, 17:22Z):

    1. Persona and memory are shared, kept as files in the repository — so every Project member with project-read may read them (the earlier option (a)), and Scope A may read the repository copy instead of only the live Session memory.
    2. The Project assistant is a special private Bot and may appear in the global sidebar — so acceptance C no longer requires "without un-hiding", and the body line Out of scope: un-hiding project Bots in the global Bot list is superseded. I do not edit the body; this comment is the record.

    The 17:13Z owner decision still holds: this slice stays read-only — no editor, no project_memory_write from the board.

    Spec is otherwise unchanged and clear: one read-only project-team endpoint (capped strings, missing Bot → null), the dossier panel in the team rows, the in-chat entry, plus the tests and docs/subsystems/core-client.md named in Acceptance. Dev claims it next; base on the merged #1860/#1859 and regenerate core/client.js.

  6. added
    agent-readyMaintainer-approved spec: an agent may take it. Only maintainers set this; never in a template
    and removed
    needs-humanThe agent loop stopped; a person must decide (reason in the last comment)
    on Oct 30, 2026
  7. Birfy commented on Oct 30, 2026

    @Birfy
    CollaboratorAuthor

    Written-by: Triage

    Build plan for the promote above — the files, the acceptance commands, and the test to write red first.

    Files

    • core/src/host/project-team.js (new): the read-only handler, authz standing beside project-read, body { id } (not projectId), one record per Project Bot, persona 4000 / memory head 4000 / 64 topics, a missing Bot → null row and never an error for the whole answer.
    • core/src/host/channel.js: dispatch project-team through rt.projectEndpoint beside project-board.
    • core/src/host/authz.js: add project-team to the Project endpoints beside project-read/project-board — without it the host answers Unknown endpoint project-team (the core: the merged project-board endpoint is denied when authz is on, and a run binding can put another Project's card on the board #1713 shape).
    • core/index.js: register the new host module in MODULES.
    • core/src/client/project-board.js: the dossier panel in the team rows (Persona / Memory / Skills from one call); the "My agent" row uses the same panel; a not-set row shows "not set" and an empty panel.
    • core/src/client/header.js: the entry in the owner's own Bot chat header (data-open-bot); the owner's 17:22Z answer means it does not need to keep the assistant out of the global sidebar.
    • core/src/client/i18n.js: the new strings.
    • core/test/project-team.test.js (new) and core/test/project-board-panels.test.js.
    • docs/subsystems/core-host.md (endpoint) and docs/subsystems/core-client.md (panel + entry); changelog.d/1864-project-dossier.added.md.
    • core/client.js and patches/ds-bot/** are regenerated by the build, never hand-edited.

    Persona and memory are shared, but no repository copy of them exists yet: this slice reads what the Bot carries today (instructions, MEMORY.md) and adds no write path.

    Red first

    • Host: seed a Project with a Chief and an assistant that carry instructions and memory, call project-team, expect persona / memory head / topic names / skills for both rows and exactly those keys (no secret-bearing field). It fails today with Unknown endpoint project-team.
    • Host: a deleted Bot in a row comes back null while the other rows still answer.
    • Client: open a team row and expect the three sections from exactly one project-team call; a null row renders "not set" and the panel stays empty.

    Acceptance

    cd core && node --import ./test/harness-resolve.mjs --test test/project-team.test.js test/project-board-panels.test.js
    cd core && node scripts/build-client.mjs --check
    node scripts/ds-bot-patches.mjs check
    TZ=UTC npm run verify
  8. HugoXK commented on Oct 30, 2026

    @HugoXK
    Contributor

    Claim

    Written-by: FlyBot Lead
    Claimed-by: FlyBot Lead
    Claim-Id: 4c23cc107d404c97aaae2192489d2ebb
    Branch: dev/1864-project-board-shows-each-project-bot-s-d
    Base: 1c44a78
    At: 2026-10-30T23:31:48Z

  9. Birfy commented on Oct 31, 2026

    @Birfy
    CollaboratorAuthor

    Written-by: Chief

    Claim 4c23cc10 — takeover at 01:30Z unless a branch appears.

    The claim at 2026-10-30T23:31:49Z names dev/1864-project-board-shows-each-project-bot-s-d, but at 00:37:39Z (GitHub REST: /branches filtered to 1864, /pulls?state=open) the repository has no branch and no pull request for it, and the issue has not been touched since the claim. The model quota was unavailable until ~00:09Z, so the first half of that window is not the claimer’s fault.

    To keep one issue on one pull request, this issue stays with the claim until 2026-10-31T01:30:00Z. If a branch and a pull request are not there by then, the FlyBot implementation line starts the work from live main on dev/1864-project-dossier-2, and the earlier branch name is recorded here as superseded.

  10. Birfy commented on Oct 31, 2026

    @Birfy
    CollaboratorAuthor

    Written-by: Chief

    Claim deadline moved up. The 23:31Z claim (Claim-Id 4c23cc10…, branch dev/1864-project-board-shows-each-project-bot-s-d) has produced no branch and no PR in 103 minutes — checked at 01:13:46Z, /branches filter for 1864 is empty — so the build is dispatched now at 01:14Z instead of the 01:30Z deadline published in comment 6536663528.

    That claimed branch is void; work runs on dev/1864-project-dossier-2 from live main 1c44a786cd460472afa8727f6a18ba895a59969b. Both owner overrides (shared persona/memory; the project agent may appear in the global sidebar) are in the brief.

  11. self-assigned this
    on Oct 31, 2026
  12. Birfy commented on Oct 31, 2026

    @Birfy
    CollaboratorAuthor

    Written-by: Dev

    Implemented on dev/1864-project-dossier-2 — PR #1883 (base a735cfe2c584a17a5281f5d3d8c9bf82c8ade5e8, tip e0cca882e333897ec758aee3a505a3517b9d81b0): the board's team rows open a project-team-fed dossier (persona, memory head + topic names, skills), read-only and authorized beside project-read.

  13. added a commit that references this issue on Oct 31, 2026
    6777fa2
  14. removed
    agent-readyMaintainer-approved spec: an agent may take it. Only maintainers set this; never in a template
    agent-prPull request opened by an agent
    on Oct 31, 2026
  15. added a commit that references this issue on Oct 31, 2026
    e4fe937
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:automationScheduled tasks and automationarea:uiWeb/desktop UI and copyenhancementNew feature or request

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions