Skip to content

feat(claude-code,codex): tell existing users about the Coding Agents plugin - #3205

Closed
nicoloboschi wants to merge 4 commits into
mainfrom
feat/supersede-notice-old-plugins
Closed

feat(claude-code,codex): tell existing users about the Coding Agents plugin#3205
nicoloboschi wants to merge 4 commits into
mainfrom
feat/supersede-notice-old-plugins

Conversation

@nicoloboschi

@nicoloboschi nicoloboschi commented Aug 6, 2026

Copy link
Copy Markdown
Collaborator

Draft — the notice states that the server and token carry over, which is true for Codex only once #3203 merges, and none of it is on npm yet: 0.0.4 predates daemon mode and the endpoint carry-over. This should not merge before a release makes the claims real.

Both plugins keep working, but they are deprecated: development has moved to @vectorize-io/hindsight-coding-agents. Someone who installed one a year ago has no way to learn that — a changelog entry reaches nobody — so the session says it.

What it says

The current Hindsight Claude Code plugin is DEPRECATED, replaced by the Coding Agents plugin.

One install now covers Claude Code, Codex, Cursor, Copilot, opencode, Kilo, Grok, Antigravity,
Devin and Cline, and they all share a single memory per repository, leveraging the Hindsight Knowledge Page (v0.9.x and onwards).

See the migration guide: https://hindsight.vectorize.io/sdks/integrations/coding-agents#migrating-from-the-per-agent-plugins
Your Hindsight server and token carry over automatically; past conversations are re-imported from
local transcripts. Silence this with "upgradeNotice": false in ~/.hindsight/claude-code.json

Codex gets the same text with its own plugin name and config path.

Both the page (HTTP 200) and the #migrating-from-the-per-agent-plugins anchor are verified live, so the one link a reader is given actually lands on the steps.

How

The SessionStart hook emits systemMessage, the channel Claude Code shows to the user (additionalContext would only reach the model). Codex accepts Claude Code's hook output shape, so one design serves both — verified by running each hook and reading its JSON.

Emitted before the existing early returns: neither the memory settings nor whether the server is reachable changes the fact that the plugin is deprecated.

Frequency

Every session start. A notice shown once is a notice that gets missed. What makes that acceptable is the opt-out: "upgradeNotice": false in ~/.hindsight/claude-code.json / codex.json turns it off permanently, and the message's last line says so.

With no rate limit there is no state file, no timestamp parsing and none of their failure modes — what remains is a config check. The never-raise guarantee stays: a promotional message must never be why a session breaks.

Tests

7 per plugin: shown on five consecutive calls, names which plugin is deprecated (both can be installed side by side), the migration deep-link, that it says DEPRECATED, the opt-out, that the opt-out is discoverable from the message, and that a hostile config object cannot make it raise.

Suites: 204 passed (claude-code), 98 passed (codex). LINT_ALL_INTEGRATIONS=1 ./scripts/hooks/lint.sh clean. Verified end to end that the hook emits it and that the opt-out silences it.

The module is duplicated rather than shared — these ship as independent packages with no common module path.

…plugin

Both plugins still work but development has moved to
@vectorize-io/hindsight-coding-agents. Someone who installed one of these a year
ago has no way to learn that — a changelog entry reaches nobody — so the session
itself says it, once, via the SessionStart hook's systemMessage (the channel the
USER sees; additionalContext would only reach the model). Codex accepts Claude
Code's hook output shape, so one design serves both.

Restraint is the point:

- capped at 3 showings total, never more often than every 7 days, so it cannot
  become a recurring interruption
- `"upgradeNotice": false` in the user config silences it permanently, and the
  message says so
- every failure path returns None instead of raising: unreadable state, an
  unwritable state dir, a corrupt timestamp. A promotional message must never be
  the reason a session breaks

Emitted before the existing early returns, since neither the memory settings nor
whether the server is reachable changes the fact that the plugin is superseded.

The module is duplicated rather than shared — these ship as independent packages
with no common module path, and ~40 lines is cheaper than inventing one.
Shown once every session instead of three times a week apart: a notice that
appears once is a notice that gets missed, and this one has a concrete action
attached. `"upgradeNotice": false` is what keeps that acceptable — it turns the
notice off permanently and the message says so.

Also links https://hindsight.vectorize.io/sdks/integrations/coding-agents, so
the message no longer has to carry the whole story itself.

Dropping the rate limit removes the state file, the timestamp parsing and their
failure modes with it; what remains is a config check. The never-raise guarantee
stays: a promotional message must not be why a session breaks.
…on guide

"Superseded by" is jargon that reads as a footnote. The notice now opens by
saying the plugin is DEPRECATED and replaced, so a user reads one word and knows
to act.

It also says WHY the replacement is better rather than only that it exists: one
install across ten agents, one memory per repo they all share (context from any
agent is there for the next), knowledge pages kept current from git history,
automatic seeding, and a daemon mode needing no account.

The link now deep-links the migration section rather than the page — someone who
has just been told to move wants the steps, not the pitch. Verified the anchor
resolves on the live site.
Drops the install commands and the feature list: the migration guide carries
both, and a shorter message is likelier to be read. Adds the Knowledge Page
capability and its v0.9.x server requirement, which the earlier text left out —
that is the part someone on an older server needs to know before switching.

Tests follow the text: the install-command and package-name assertions are gone
(neither appears in the message any more), replaced by one that the message
names WHICH plugin is deprecated, since both can be installed side by side.
nicoloboschi added a commit that referenced this pull request Aug 7, 2026
Folded in from #3205 so the launch lands as one change: the docs that announce
the Coding Agents plugin and the in-session notice that points existing users at
them ship together, rather than one arriving without the other.

Both plugins keep working, but they are deprecated — development has moved to
@vectorize-io/hindsight-coding-agents. A changelog entry reaches nobody who
installed a year ago, so the SessionStart hook says it, via systemMessage (the
channel Claude Code shows the USER; additionalContext would only reach the
model). Codex accepts the same hook output shape, so one design serves both.

Emitted before the existing early returns: neither the memory settings nor
whether the server is reachable changes the fact that the plugin is deprecated.

Shown every session, with `"upgradeNotice": false` as the permanent opt-out —
stated in the message itself, which is what makes that frequency acceptable.
With no rate limit there is no state file and none of its failure modes; what
remains is a config check that returns None rather than raising, because a
promotional message must never be why a session breaks.
@nicoloboschi

Copy link
Copy Markdown
Collaborator Author

Folded into #3162 (commit 36e1f51) so the launch ships as one change — the docs announcing the Coding Agents plugin and the in-session notice pointing existing users at them land together rather than one arriving without the other.

The four wording-iteration commits were squashed into one; the code is identical, and both suites pass on the target branch (204 claude-code, 98 codex). Closing in favour of #3162.

nicoloboschi added a commit that referenced this pull request Aug 7, 2026
…3162)

* docs: launch the Coding Agents page and mark the per-agent plugins superseded

Hold until the Coding Agents plugin is announced — merging this makes the page
public and tells existing users their plugin is legacy, so it should land with
the announcement rather than before it.

Two halves:

- Launch. Undoes the deliberate hide: the page drops `unlisted`, its entry
  returns to integrations.json (which drives both the gallery and the sidebar),
  and coding-agents leaves the EXCLUDED set in check-integrations.mjs, so the
  released-tag check guards it like every other integration.

- Supersede. The six overlapping integrations — claude-code, codex, opencode,
  cursor-cli, cline, copilot-cli — get an admonition in the style already used
  on the Hermes page: what replaces them, the install command for their harness,
  and a link to the migration section. Pages and packages keep working; nothing
  is deleted and no registry deprecation is published, so existing links and
  installs are unaffected.

Each notice states plainly that memory does not move — the old plugins scope a
bank per agent per project where this one uses a bank per repo — and points at
`--import-conversations` for Claude Code and Codex, the two whose transcripts
record enough to attribute a session to a repo. The other four say so instead of
implying an import exists.

* docs: group the integrations sidebars into coding agents / frameworks / apps

Both sidebars driven by integrations.json rendered one flat run of 59 entries.
Split them into three groups so a coding agent is distinguishable from an SDK.

The existing `category` field couldn't drive this on its own: its `tool` bucket
mixed CLI agents and editors with chat apps, note-taking and voice platforms.
The 19 coding agents move to a new `coding-agent` category; `framework` is
unchanged, and `tool`/`mcp` become the catch-all group.

Grouping lives in src/lib/integration-groups.ts, kept free of the @site alias and
of any JSON import so both consumers can use it — the theme swizzle (webpack) and
sidebars-integrations.ts (evaluated at config load). An unrecognised category
falls into the last group rather than disappearing from the sidebar.

* docs: regenerate the docs-skill mirror for the supersede admonitions

scripts/generate-docs-skill.sh mirrors docs-integrations/ into skills/; the
launch commit edited seven pages without re-running it, so the mirror still
described the per-agent plugins as current.

* docs: spell out the migration path for Claude Code and Codex

Both pages said memory "does not move automatically", which is now only half
true: the server endpoint IS carried over (~/.hindsight/claude-code.json and
~/.hindsight/codex.json, same keys), so nobody is silently switched to Cloud.

Each page now states what moves — the endpoint automatically, conversations via
--import-conversations — and what does not: the recall/retain settings, missions
and bank-naming options. It also says why conversations come from local
transcripts rather than the old bank: that bank defaulted to a single static
bank shared by every project, whose documents record only a session id, so
attributing them to a repo requires the local transcripts regardless.

These are the only two superseded plugins with an endpoint to carry; the other
four pages already say their history can't be imported and are unchanged.

* feat(claude-code,codex): deprecation notice in the old plugins' sessions

Folded in from #3205 so the launch lands as one change: the docs that announce
the Coding Agents plugin and the in-session notice that points existing users at
them ship together, rather than one arriving without the other.

Both plugins keep working, but they are deprecated — development has moved to
@vectorize-io/hindsight-coding-agents. A changelog entry reaches nobody who
installed a year ago, so the SessionStart hook says it, via systemMessage (the
channel Claude Code shows the USER; additionalContext would only reach the
model). Codex accepts the same hook output shape, so one design serves both.

Emitted before the existing early returns: neither the memory settings nor
whether the server is reachable changes the fact that the plugin is deprecated.

Shown every session, with `"upgradeNotice": false` as the permanent opt-out —
stated in the message itself, which is what makes that frequency acceptable.
With no rate limit there is no state file and none of its failure modes; what
remains is a config check that returns None rather than raising, because a
promotional message must never be why a session breaks.

* docs: per-harness install sections, featured hub cards, browsable sidebar

Page
- One subsection per harness with its logo and a copyable install command,
  replacing the table: the command is what a reader came for, and a table cell
  is not copyable.
- Title is just "Coding Agents"; the old keyword-stuffed title read as spam in
  the sidebar and breadcrumbs.
- "Ingestion internals (no CLI)" is dropped from the docs page via the existing
  DROP_SECTIONS mechanism, staying in the README where the contributor-facing
  audience is.

Integrations Hub
- A Featured grid pins Coding Agents, Vercel AI SDK and OpenClaw above the
  rest, and only on the unfiltered view — pinned cards above non-matching
  search results would read as noise.
- The Coding Agents card draws all ten supported harness logos. "One install,
  every agent" is the whole pitch and a single icon cannot carry it.
- Logos come from the control plane's harness set, which is already keyed by the
  exact harness ids the plugin uses, so the two stay consistent by construction.

Sidebar
- Groups are open but show six entries each, with the tail behind a nested
  "Show all N". Fully expanded, 59 entries were a wall; fully collapsed hid that
  the list was worth opening.
- The umbrella Coding Agents entry leads its group instead of sorting under "C",
  since it is the entry point to every other agent in that list.

* fix(docs): point the page's harness logos at this build, not production

The README must use absolute URLs so the logos render on npm and GitHub, but the
docs page inherited them verbatim — pinning every image to hindsight.vectorize.io,
where /img/harness/* does not exist yet. Logos were broken locally and in
previews, and would only start working after a deploy.

The sync script now rewrites our own absolute asset URLs to site-relative, next
to the repo-relative-link rewrite it already does for the same reason: two
audiences needing different URLs from one source.

* docs: curate the sidebar previews, harness logos for coding agents

The coding-agent group now previews HARNESSES, not pages: ten logos that all
link to the Coding Agents page. Listing ten integration pages there presented
one plugin as ten separate integrations, which is the opposite of its pitch —
and the logos make the group recognisable at a glance. Every individual page
moves behind "Show all", which is also what keeps it associated with the
sidebar.

The other groups get hand-picked previews instead of the first six
alphabetically — the first names in a sorted list are an accident of spelling,
not a description of the group:
  Frameworks & SDKs — LangGraph/LangChain, Vercel AI SDK, Vercel Chat, Eve, CrewAI
  Apps & tools      — ChatGPT, Hermes, OpenClaw, Obsidian

Hermes, NemoClaw, OpenClaw and Paperclip move from framework to tool.

The overflow label counts what opening it actually reveals: "Show 21 more" where
some entries are already previewed above, "Show all 19" for coding agents, whose
overflow really is every page.

* docs: inline sidebar preview, full list on the integration pages

The two sidebars do different jobs, so they now show different things.

Main docs sidebar — a preview: three groups rendered INLINE and
non-collapsible, nothing behind a disclosure. Ten harness logos for coding
agents, five frameworks, four apps, then an "All integrations" link to the
gallery, which offers search and filters a sidebar cannot.

Integration pages — the full list again: flat, alphabetical, every entry. Once
you are on one of these pages you are comparing and hopping between them, so
hiding two thirds behind "Show N more" worked against the reader. Listing each
page directly is also what associates it with this sidebar.

* docs: promote the sidebar groups, separate Featured, brand the umbrella card

Sidebar: the "Integrations" placeholder is replaced BY its contents instead of
filled, so the three groups sit at the same level as the rest of the navigation.
The wrapper was two levels of nesting to say one thing, and it indented every
entry beneath it.

Hub: a divider and an "All integrations" heading separate the pinned Featured
cards from the full list, which otherwise read as one uninterrupted run.

The Coding Agents card carries the Hindsight mark rather than the GitHub logo —
it is our own package, and the GitHub icon said nothing about it.

* docs: install with npx, no global install

Every example across the README, the seven integration pages, the companion
skill and the generated docs now runs the installer with npx. Nothing here asks
anyone to keep a package installed whose only job is to wire other tools up.

The paragraph telling people to install globally — and warning that npx was
refused — is replaced by what actually happens: install copies what it needs
into ~/.hindsight/coding-agents and points each agent's wiring there, so it does
not matter where it ran from, and updating is the same command again.

Depends on #3241, which makes that staging real; until it ships in 0.0.6 the
published installer still refuses to run from an npx cache.

* docs: move the superseded pages into a Legacy section, out of the gallery

The six per-agent pages the Coding Agents plugin replaces — Claude Code, Codex,
Cursor CLI, Copilot CLI, opencode, Cline — move to a `legacy` category.

They keep their pages and their migration banners: people still run these
plugins and still arrive from old links, so removing the pages would break both.
What changes is where they are offered. The gallery is where someone comes to
CHOOSE an integration, and offering one we are actively migrating them off
points them at a dead end — so legacy entries are filtered out of it, including
the hero banner, whose hardcoded list still advertised Claude Code and now
advertises the plugin that replaced it.

In the sidebar they sit in a collapsed "Legacy" section at the end instead of
mixed in alphabetically, so the main list is only what we would recommend today.
Docusaurus expands that section automatically when you are on one of the pages.

Grouping keys off an explicit `harnessPreview` flag now: "no previewIds" used to
imply the coding-agent group, which the Legacy group would also have matched.
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