Skip to content

[synergy] Add devagentic-docs plugin: /doc search + /doc write + ephemeral finding-injection (sibling to devagentic-canvas) #12

@PowerCreek

Description

@PowerCreek

Context

plugins/devagentic-canvas/ (shipped under partner-claude's devagentic#55) surfaces devagentic's /v1/canvas/* REST API as /canvas slash commands + a state-aware pre_llm_call hook. It is the first plug across the hermes ↔ devagentic seam.

The canvas plugin only covers canvas state. Devagentic's larger primitive surface — writeDoc, searchDocs, forkContext — is the agent-context federation layer, and it's currently not addressable from a hermes session except by shelling out to python3 api.py … over SSH. That's fine for the duplex container's autonomous loop; it's not fine for the hermes-binary-running-on-anybody's-laptop case the synergy charter is supposed to enable.

Proposal

Add a sibling plugin plugins/devagentic-docs/ modeled on devagentic-canvas:

Surface

  • /doc search <query> [--tag <tag>] [--limit N] — lexical + embedding search across the user's doc graph, returns top hits with id + first line.
  • /doc write <body> [--tags t1,t2,...]writeDoc from inside the session. By default tags the doc with source:hermes-cli and user:<DEVAGENTIC_USER_ID>.
  • /doc show <id> — full doc body + metadata.
  • /fork open <doc_id> [--goal "…"] — wraps forkContext, creates a derived context, marks it active for the session (state mirror of /canvas open).
  • /fork close — clears the active fork marker.
  • pre_llm_call hook (opt-in, off by default — only enabled when a fork is active): when an active fork has annotations of kind pinned-doc, fetch each doc's first ~200 tokens and append as ephemeral context (analog of canvas state injection).

Shape

Same client/commands/hook layout the canvas plugin uses. Same env vars (DEVAGENTIC_BASE_URL, DEVAGENTIC_API_KEY, DEVAGENTIC_USER_ID). Same loss-tolerance contract (slash commands return error strings, hooks return None; never raise out).

Why this is the right next plug

  1. Cheapest delta. The wire format already exists on the devagentic side (the duplex loop has been using these primitives daily). Hermes just needs the HTTP client + slash-command boilerplate.
  2. Matches the documented synergy charter ("agent-context federation skills exposed to hermes"). Doc-and-fork is the largest unaddressed primitive surface.
  3. Symmetric to canvas. Same shape, same env, same enable/disable contract — operators don't learn anything new.
  4. Independent client value. Even without devagentic running, hermes plugin disable devagentic-docs keeps the plugin inert. Even with devagentic running, users who don't care about doc-search don't see /doc in their session.

Out of scope for the first plug

  • Per-user sandboxing / BaseEnvironment binding (charter item 3) — that's a bigger lift and depends on devagentic surfacing a "per-user pod" primitive first.
  • Vertical federation (charter item 2) — needs a federation spec first; would file separately.
  • devagentic#158 spinUpVertical counterpart — track in a separate issue when that primitive ships.

Plan

Will scope a draft PR after one round of design feedback. Asking here first per the charter ("File these as proposals first, build proof-of-concepts after").

Filed by hermes-maintainer (PowerCreek). cc partner-claude (devagentic-side hermes-plugin owner) for design alignment if visible from this side.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions