* chore(deps): update npm dependencies in the root lockfile
Raise the override floors for next, svgo, sharp, js-yaml, colord and joi,
and bump the vitest devDependency across the three workspaces that declare
it, so the root workspace tree resolves to current versions.
Resolved versions: next 16.3.4, svgo 4.1.0, sharp 0.35.4, js-yaml 4.3.2
(3.15.2 for the two v3-scoped consumers), colord 2.10.0, joi 17.13.7,
vitest and @vitest/mocker 4.1.11. Every bump stays inside the existing
major line.
The lockfile was regenerated with npm 11. npm 10.9.2 has an
overrides-plus-workspaces bug that applies an override at the hoisted root
while de-hoisting fresh copies of the old version into hindsight-all-npm
and hindsight-clients/typescript, which leaves the tree worse than before.
npm 11 resolves each package to a single hoisted copy. It also prunes a
handful of optional peerDependency entries that npm 10 records, which
accounts for most of the deletions in the lockfile diff; npm ci under
npm 10.9.2 still installs from the result cleanly.
* chore(deps): regenerate the agent-sdk standalone lockfile to match its manifest
hindsight-tools/hindsight-agent-sdk is both a root workspace and carries
its own standalone package-lock.json. The previous commit raised its
vitest devDependency to ^4.1.11 but regenerated only the root lockfile,
which left the standalone one recording ^4.1.2 / 4.1.5 and out of sync
with its own manifest.
test-hindsight-agent-sdk installs from the root lockfile, so CI would not
have caught the drift, but a standalone npm ci in that directory would
have failed. Regenerated with npm 11; vitest and @vitest/mocker now
resolve to 4.1.11 there too.
* chore(deps): sweep open medium/high Dependabot alerts across all lockfiles
* chore(deps): bump @hey-api/openapi-ts to 0.97.3 and regenerate the TS client
* docs(scripts): note that the Deno client patch anchor tracks the generator version
The recall API already supports `include: {chunks}`, and the TypeScript
client already exposes it as `includeChunks`/`maxChunkTokens`, but the
agent tool forwarded only `{maxTokens, types}` — so an agent had no way
to reach the raw source text a fact was extracted from, which is exactly
what "what did we actually say" questions need.
Add optional `include_chunks` / `max_chunk_tokens` parameters and pass
them through. Both are additive and off by default, so recall responses
are unchanged unless an agent asks for chunks.
Fixes#2949
* fix(openclaw): apply configured defaults to dynamic banks
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(openclaw): route knowledge tools through identity resolution for user-scoped banks
Knowledge tool factories now use resolveAndCacheIdentity before deriving bank IDs,
matching auto-recall/retain so PluginToolContext sessions hit the correct per-user
bank. Unresolved user identity returns a clear tool error instead of querying
anonymous/openclaw fallbacks, and bank defaults are applied before execution.
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(agent-sdk): stop mapping max_results to recall max_tokens
NemoClaw passed max_results=25 expecting a result-count cap, but the SDK
used it as max_tokens=25 and starved recall. max_tokens now defaults to
1024 from max_tokens only; max_results slices the results array (1-50).
Co-authored-by: Cursor <cursoragent@cursor.com>
* refactor(openclaw): drop dead alias exports + tighten entityLabels shape
- Remove unused @deprecated hasConfiguredMissions/applyConfiguredMissions
aliases (new exports nothing imports).
- normalizeEntityLabels now only accepts the server's shapes (a list, or a
{ attributes: [...] } object); a plain keyed object is dropped client-side
instead of being sent and silently ignored by parse_entity_labels.
- Update docs (types.ts, plugin.json, README) and tests to match.
* fix(agent-sdk): drop unsupported max_results from recall tool
The recall tool's max_results was previously aliased to the recall token
budget (a no-op for result count). Rather than make it a real cap, remove
it entirely — the tool accepts only max_tokens; use recallTopK for an
auto-recall count cap.
Also document the new per-user dynamic bank defaults (retainExtractionMode,
enableObservations, enableAutoConsolidation, dispositions, entityLabels) on
the docs-site OpenClaw page and fix its stale max_results guidance.
---------
Co-authored-by: DK09876 <Dikshant.pradhan@vectorize.io>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Nicolò Boschi <boschi1997@gmail.com>
* fix(agent-sdk): agent_knowledge_get_page request detail=content (sister of #1543)
* fix(agent-sdk): flatten throw to single line for prettier (printWidth 100)
The CLI source, tests, and CI have been moved to
https://github.com/vectorize-io/self-driving-agents and published
as @vectorize-io/self-driving-agents@0.0.7 from that repo.
Removed:
- hindsight-tools/self-driving-agents/ (source + tests)
- CI job test-self-driving-agents from test.yml
- Workspace entry from root package.json
- Tool entry from release-tool.sh
* refactor(claude-code): simplify subagent — no hardcoded bank_id, no Stop hook
The subagent no longer hardcodes bank_id or has its own Stop hook.
Instead:
- inject_bank_id.py PreToolUse hook derives bank_id at runtime from
the plugin config (supports dynamicBankId, per-repo via cwd, etc.)
- The main plugin's Stop hook retains the full conversation (including
user input) to the derived bank
This means:
- Multiple subagents share the same bank (derived from plugin config)
- Per-repo isolation works via dynamicBankGranularity: ["agent", "project"]
- User input from the main thread is retained (not lost in subagent context)
- Subagent template is simpler — just tool instructions, no bank plumbing
* fix(self-driving-agents): don't overwrite plugin config on subsequent installs
If ~/.hindsight/claude-code.json already has a Hindsight connection
configured, use it as-is. Only prompt for Cloud/Self-hosted setup on
first install. This prevents installing a second agent from clobbering
the shared config (agentName, bankId, etc.) that the plugin uses at
runtime.
* feat(self-driving-agents): auto-approve hindsight MCP tools in user settings
* fix(self-driving-agents): use plugin bank derivation for content ingestion
* fix(self-driving-agents): resolve bank with project dimension from cwd
resolveFromClaudeCode now includes all dimensions (agent, project,
session, channel, user) matching the plugin's bank.py logic. The
project dimension uses basename(process.cwd()), so running the
installer from a repo directory ingests content into the correct
per-project bank that the plugin will use at runtime.
* fix(self-driving-agents): use plugin's agentName for bank derivation, not CLI agentId
* fix(self-driving-agents): fail if subagent already exists in claude-code
* feat(claude-code): add /create-agent skill for in-session agent creation
* refactor(claude-code): remove agent-knowledge skill — subagent body is self-contained
* refactor(self-driving-agents): simplify claude-code harness — just save content + print prompt
The CLI no longer writes subagent files, resolves banks, or patches
permissions for --harness claude-code. Instead it:
1. Fetches content from GitHub
2. Saves it to ~/.self-driving-agents/claude-code/<agent-id>/
3. Prints the exact prompt to give Claude Code
Claude handles everything via /hindsight-memory:create-agent skill:
- Creates the subagent
- Ingests the seed docs
- Creates initial knowledge pages based on the content
This eliminates all bank derivation issues (bank resolved at runtime
by the plugin) and keeps one code path for agent creation (the skill).
* feat(claude-code): auto-approve bash for .self-driving-agents dir in create-agent skill
* docs(claude-code): clarify ingest steps in create-agent skill
* feat(claude-code): add ingest_file tool + auto-approve MCP tools in skill
- Add agent_knowledge_ingest_file(file_path) — reads file server-side,
no need to pass content inline. Avoids permission prompts for large
content and keeps tool calls clean.
- Add mcp__hindsight__* to create-agent skill's allowed-tools
- Update skill instructions to prefer ingest_file for disk files
* feat(self-driving-agents): auto-approve MCP tools, skill, and bash for claude-code
* refactor(claude-code): remove bank_id from MCP tool params
bank_id is no longer exposed as a parameter on any MCP tool. The
server resolves it once at startup from plugin config (derive_bank_id).
This prevents Claude from trying to override it or getting confused
about which bank to use.
Removed inject_bank_id.py PreToolUse hook — no longer needed since
bank resolution is server-side only.
* feat(self-driving-agents): copy bank-template.json and instruct Claude to create mental models from it
* feat(claude-code): add get_current_bank tool so Claude can tell user which bank is active
* chore: regenerate docs skill
* chore: trigger CI
- Add --harness hermes to the CLI
- Creates a Hermes profile per agent for isolation
- Installs standalone Python tool plugin (hindsight-sda) that registers
7 agent_knowledge_* tools via ctx.register_tool
- Plugin coexists with bundled hindsight memory provider: bundled handles
auto-retain/recall, our plugin adds knowledge page management
- Both read from the same hindsight/config.json in the profile — single
source of truth, static bank_id with empty bank_id_template
- Prompts for Hindsight credentials (pre-fills from hermes/openclaw config)
- Prompts for agent name (pre-fills from path)
- Adds plugin to plugins.enabled in profile config.yaml
- 43 tests (5 new for hermes)
* feat(self-driving-agents): add Claude Chat/Cowork harness
Add --harness claude support to the self-driving-agents CLI. Generates
a self-contained skill zip that can be uploaded to Claude Chat or Cowork
via Customize → Skills → Upload.
The generated skill:
- Has the agent's Hindsight API URL, bank ID, and token baked in
- Uses curl to call the Hindsight REST API (no external deps)
- Instructs Claude to load knowledge pages at startup
- Includes commands for creating pages, searching memories, ingesting docs
- Tells Claude to self-retain user preferences/feedback (no hooks in Chat/Cowork)
Setup flow prompts for Cloud vs Self-hosted, warns about public
accessibility for self-hosted servers, and includes allowlist
instructions in the next steps.
* test(self-driving-agents): add unit tests for claude harness
Tests cover skill generation (frontmatter, API URL/bank/token baking,
zip structure), config validation (localhost rejection, cloud URL),
harness validation, and all API operations in the generated skill.
* feat(typescript-client): add AbortSignal support to all HindsightClient methods (#1198)
* Add signal?: AbortSignal to every public method's options bag so callers
can cancel in-flight requests without dropping down to the raw SDK.
* Methods with optional options (retain, recall, reflect, listMemories,
createDirective, listDirectives, createMentalModel, listMentalModels,
listDocuments): signal is an optional field inside the existing options.
* Methods with required options (createBank, updateBankConfig,
updateDirective, updateMentalModel, updateDocument): signal added as
an optional field alongside the required fields.
* Methods that previously took no options (getBankProfile, getBankConfig,
resetBankConfig, deleteBank, getDirective, deleteDirective, getMentalModel,
refreshMentalModel, deleteMentalModel, getMentalModelHistory, getDocument,
deleteDocument): accept an optional options?: { signal?: AbortSignal }.
* Add TestAbortSignal suite with 3 unit tests that mock the generated SDK
and verify signal is passed through on retain, recall, and getBankProfile.
* chore(skills): regenerate hindsight-docs skill files
* chore(self-driving-agents): apply prettier formatting
* feat(self-driving-agents): add nemoclaw harness support
NemoClaw runs OpenClaw inside an OpenShell sandbox. The CLI:
- Checks nemoclaw is installed and sandbox exists
- Runs hindsight-nemoclaw setup for plugin + network policy config
- Installs skill into sandbox via `nemoclaw <sandbox> skill install`
- Uses the same bank resolution from openclaw plugin config
- Adds --sandbox flag (required for nemoclaw harness)
* fix(self-driving-agents): pass skill dir (not parent) to nemoclaw skill install
* test(self-driving-agents): add tests for nemoclaw support, version checks, arg parsing
* feat(self-driving-agents): auto-detect nemoclaw sandbox, prompt if multiple
* fix(self-driving-agents): always run nemoclaw setup + rebuild sandbox for network policy
- openclaw now depends on @vectorize-io/hindsight-agent-sdk@^0.1.0 from npm
(file: refs don't resolve when installed from npm registry)
- CLI removes old plugin extension dir before reinstalling (openclaw doesn't
support in-place upgrade)
The enableKnowledgeTools config flag is only recognized by plugin v0.7.0+.
Older versions reject unknown properties, breaking all openclaw commands.
Now the CLI checks the installed plugin version and auto-upgrades if needed
before writing the flag.
* feat(claude-code): add wiki script + agent-knowledge skill
wiki.py: CLI for knowledge pages, recall, ingest, documents.
Uses the existing plugin lib/ for bank resolution and API calls.
No separate config — reads from the same settings.json as retain/recall hooks.
agent-knowledge skill: teaches the agent to use wiki.py commands.
Bank resolution is automatic (same as retain hooks).
Pages default to: delta mode, observation-only, exclude mental models.
* feat: hindsight-agent-sdk (Python + TypeScript) + Claude Code wiki integration
* refactor: move skill to SDK, remove harness-specific skill from claude-code
* feat: add trigger params to MCP create_mental_model + MCP-based skill
- MCP create_mental_model now accepts trigger_mode, trigger_exclude_mental_models,
trigger_fact_types params (both multi-bank and single-bank modes)
- Skill uses mcp__hindsight__* tools directly — no CLI, no scripts
- Bank scoped via MCP URL: /mcp/banks/{bank_id}/
* feat(openclaw): register wiki tools via registerTool API
* feat: standalone hindsight-agent-setup (npx-able) for all harnesses
* fix(openclaw): static import for wiki-tools (ESM compat)
* rename: agent_knowledge_* tools + cleaner skill (no hindsight/wiki/mental_model confusion)
* fix(openclaw): set tools optional=false so they're not filtered by allowlist
* refactor: setup reads directory layout (bank-template.json + content/), agent name from dir
* rename: @vectorize-io/self-driving-agents, setup→install
* cleanup: remove setup backwards compat
* fix: list_pages uses detail=metadata to avoid blowing up context
* chore: publish-ready package.json, README, .gitignore for self-driving-agents
* rename: hindsight-agent-setup → self-driving-agents
* cleanup: remove MCP tool changes, Python/TS SDKs, Claude Code wiki — keep only openclaw tools + skill + CLI
* cleanup: remove Rust CLI + Python CLI (superseded by self-driving-agents TS CLI)
* cleanup: rename wiki→knowledge, add release-tool.sh, interactive cloud setup, remove SDKs
* refactor: CLI does zero API calls, plugin bootstraps template+content on first session
* feat: CLI checks plugin install+config, runs wizard if needed
* feat(self-driving-agents): TUI wizard, TS client, GitHub agent sources
- Replace raw HTTP with @vectorize-io/hindsight-client SDK
- Add @clack/prompts for polished terminal UI (spinners, confirms, notes)
- Support GitHub agent sources: bare name defaults to vectorize-io/self-driving-agents,
org/repo/path fetches from any public repo, local paths still work
- Remove bootstrap code from openclaw plugin (CLI handles all API calls)
- Fix ANSI-polluted JSON parsing for openclaw agents list
- Run setup wizard inline when user declines current config
* feat(self-driving-agents): recursive content discovery, drop content/ convention
Content files (.md, .txt, etc.) are now found recursively from the
agent directory root. No special content/ subdirectory needed.
This enables nested agent repos where pointing at any level ingests
all files below it:
- install marketing → all 30 files + root bank-template.json
- install marketing/seo → only SEO files + seo/bank-template.json
* cleanup: remove unrelated files (screenshots, PDF, pretext-poc)
* refactor(self-driving-agents): bundle SKILL.md as file, read at runtime
Move the skill from a hardcoded string to a bundled file at skill/SKILL.md.
Each CLI version ships its own skill — re-running install upgrades it.
* cleanup: remove hindsight-agent-sdk/skill, now bundled in self-driving-agents
* feat: knowledge tools opt-in via enableKnowledgeTools config flag
Plugin: agent_knowledge_* tools only register when enableKnowledgeTools
is true in the plugin config (default: false).
CLI: automatically sets enableKnowledgeTools=true in openclaw.json
during install.
* feat: create hindsight-agent-sdk, move tools under hindsight-tools/
- New @vectorize-io/hindsight-agent-sdk package with harness-agnostic
knowledge tools using @vectorize-io/hindsight-client (no raw HTTP)
- OpenClaw plugin now imports from the SDK instead of inline knowledge-tools.ts
- Move self-driving-agents and hindsight-agent-sdk under hindsight-tools/
- Update release-tool.sh for new paths
* test: add tests for hindsight-agent-sdk and self-driving-agents
Agent SDK (11 tests): tool creation, endpoint routing, request bodies,
auth headers, page defaults (delta mode, observation facts).
Self-driving-agents CLI (23 tests): recursive content discovery,
local/GitHub path detection, ANSI JSON parsing, bank ID resolution
from plugin config.
CI: add test-hindsight-agent-sdk and test-self-driving-agents jobs
with detect-changes filtering.
* refactor: move tests to tests/ dirs, add prettier for hindsight-tools
- Move tests from src/ to tests/ matching repo conventions
- Add hindsight-tools/ prettier block to lint.sh
- Format all files with prettier
* fix(ci): add hindsight-tools to npm workspaces, build agent-sdk before openclaw
- Add hindsight-tools/* to root workspaces so npm resolves the agent-sdk
- Build agent-sdk before openclaw in all 3 openclaw CI jobs
- Use root npm ci + workspace builds for tool CI jobs
- Regenerate lockfiles
* fix(ci): use file: dep for agent-sdk in openclaw, whitelist in lockfile checker
- openclaw depends on @vectorize-io/hindsight-agent-sdk via file: ref
(matching how control-plane depends on hindsight-client)
- Lockfile checker whitelists hindsight-tools/* workspace deps
- Regenerate openclaw lockfile