/profile command: top-level alias for
/memory profile <list|show|edit|use|rename> — profile
management without the /memory prefix--resume flag: resumes the most recent session in
agents/sessions/ automatically at startup (no path needed);
prints a notice if no sessions are foundStatusReporter interface added to
tool_executor.go so the spinner can be wired to the
executorassay --llamafile PATH: evaluate a llamafile binary
directly; assay starts and stops the process automatically and derives
the model name from the binary pathtemplates/profiles/web-developer.fountain)HARVEY.md: documented native file-reading capabilities
— PDF (via poppler) and image (vision routes) — so models know to call
read_file directly without asking the user to convert
filesMostRecentSession helper added to
sessions_files.go; --resume reliably selects
the newest .spmd/.fountain file by delegating
to ListSessionFiles (already sorted newest-first)scanLlamafileModels now discovers binaries
by directory scan, fixing cases where auto-discovery missed models not
registered via /llamafile addkind field to memory documents
classifying why knowledge matters
(pitfall/workaround/recommendation/pattern)action field — the imperative
step a future agent should take; included in embedding text for better
semantic retrievalconfidence field (default
0.5); retrieval scores are weighted multiplicatively
(score = cosine × confidence)/memory flag <id>: new command reduces confidence
by 0.1 per call; auto-archives when confidence falls to or below
0.2/memory list: new --kind filter; output
now shows kind and confidence columns alongside typekind and
action for each extracted memory; all five memory types now
listedWriteDigest(): MemoryStore auto-writes
agents/memories/DIGEST.md on every Save, Archive, and
MineAuto — plain Markdown readable by any LLM without a SQLite
clientagents/skills/harvey-memory/SKILL.md: new cross-agent
skill teaching Vibe and Claude Code when and how to use the memory
digestmemories.db
files gain kind, action,
confidence columns on first open; FTS5 table rebuilt with
new columnscreate_dir built-in tool so models can create
directories without run_command mkdir/safe and /safe_mode as aliases for
/safemodeRunToolLoop before each new LLM turn, keeping context
bounded during multi-step tasks/plan command: generate a GFM checklist plan, execute
each step with fresh bounded context, track progress in
agents/plan.mdmulti-file skill: auto-detects multi-file creation
requests and generates a plan via the compiled script pathHARVEY_API_BASE env var added to
compiled script environment/bin/sh)--server flag for headless mode
(llamafile v0.10.3 API change)-ngl GPU layer offload support with
gpu_layers config option (default 99, maximises
Metal/CUDA)startup_timeout config option (default
120s); fast-fail on process exit with stderr surfaced in error/llamafile use model switch/pattern/flags format
(trailing flag suffix no longer breaks regex mode)scholarly_identifiers.go and
github.com/caltechlibrary/metadatatoolscodemeta.json/CITATION.cff for identifiers
(e.g. author ORCID iDs, release DOIs) and records them in the project’s
project_fact memory metadatasyntax_highlight in harvey.yamlwrite_file: built-in
formatters for Pascal, Oberon, Basic; external pipe-mode formatters for
Go (gofmt), C/C++ (clang-format), Python (black), Rust (rustfmt),
JavaScript/TypeScript (prettier); configurable via
auto_format in harvey.yaml/format FILE [FILE...] command to manually format
workspace source files in-placeAdded /loop command
Initial profile template system
/profile use command for workspace profile
management/status profile displayassay evaluation harness — a new
bin/assay tool for running a prompt corpus against one or
more Ollama models and producing a Markdown report plus JSON results for
human review and automated checking.
agents/assay/corpus.yaml); each
prompt specifies category, language, automated checks
(contains, not_contains,
compiles, go_vet), and human-review
questions--rag-db PATH — opens a RAG store and injects retrieved
context before each prompt, enabling RAG-assisted evaluation--rag-compare — runs each prompt twice (base + RAG) and
writes a per-check delta table alongside the main report--category NAME — run only one category of prompts
(e.g. go-crosswalk)File attachment commands
/attach FILE — route-aware file injection: native image
(JPEG, PNG, GIF, WebP) for vision-capable routes, text extraction for
PDFs, plain-text for source files; not restricted to the workspace/read-pdf FILE [PAGES] — extract text from a PDF using
poppler utilities (pdfinfo, pdftotext,
pdfimages) and inject into context; accepts a page range
(e.g. 40-55); cap of 20 pages per call; diagram-only pages
are flagged; not restricted to the workspaceKnowledge discoverability
/hint — on-demand improvement suggestions: flags
unmined sessions, empty or disabled RAG stores, and empty knowledge
base/recall QUERY — alias for /memory recall;
searches all three knowledge silos (RAG, memory store, knowledge base)
in one call/help learn — new unified help topic explaining the
three-silo architecture and the single decision rule for where to put
each type of content/status — now includes a Memory/RAG summary
block (active memories injected, unmined session count, active RAG
store, chunk count, RAG on/off)Persistent command history — the REPL input history
is saved to agents/harvey_history on exit (capped at 1000
entries, most recent kept) and reloaded on the next startup; history is
per-workspace to avoid leaking commands and paths between projects.
cmdRunCtx,
extractRunSuggestions) that was missing the safe-mode
allowlist check and would have bypassed it had it ever been wired into
an execution path/help) was missing entries for
/attach, /read-pdf, /hint,
/memory, /recall, and /pipeline;
all are now listed under their appropriate sectionsharvey --help attach, --help read-pdf, and
--help learn now work correctly; topic was silently falling
through to the unknown-topic errorRemote protocol integration — Harvey can now read
files from remote storage over s3://, http://,
https://, sftp://, and scp://
URIs anywhere a local path was accepted (/read,
/attach, RAG ingest).
RemoteReader interface with URI-scheme factory
(NewRemoteReader)net/http); HTTPS→HTTP
downgrade protectiongolang.org/x/crypto/ssh); strict
host-key fingerprint verification required — anonymous connections are
refused/rag add s3://bucket/prefix/ ingests
objects as RAG docsUnified memory system
MemoryConfig is now the single canonical owner of all
RAG and knowledge-base configuration; memory.rag: and
memory.knowledge_base: replace top-level rag:
in harvey.yaml (old format still loaded for backward
compatibility)memory.budget_pct (default 25 %) of the model context
window, Harvey compresses all but the last six turns into a ~150-token
summary with a warningRecent() fallback
replaced by relevance rankingmemory_stats table in
memories.db tracks token budget, injected tokens,
compression events, and average tokens/sec per session/memory status now shows budget utilisation and, after
ten sessions, prints evidence-based advice to increase or reduce
budget_pct/memory recall QUERY — on-demand semantic search across
all memory typesworkspace_profile memory document;
no longer asks for workspace name (derived from the directory)Pipeline support
/pipeline command and implementation for multi-step
prompt pipelinessftpReadPacket
now rejects packets larger than 4 MB; sftpReadStr rejects
strings larger than 256 KB. A malicious or misconfigured SFTP server
could previously trigger a ~4 GB allocation.Get caps
the response body at 256 MB via io.LimitReader; responses
that hit the cap return an error instead of exhausting process
memory.http.Client.Timeout is now 5 minutes, preventing indefinite
hangs when a server stalls after accepting the connection.filterCommandEnvironment extended to strip
AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY,
AWS_SESSION_TOKEN, AWS_SECURITY_TOKEN,
MINIO_ACCESS_KEY, MINIO_SECRET_KEY,
SFTP_PASSWORD, SFTP_KEY_PATH,
HTTP_BEARER_TOKEN, HTTP_BASIC_PASSWORD from
child-process environments.write_file tool failure: malformed JSON in model
responses no longer silently drops the write; error is surfaced to the
userread_file, write_file,
list_files, run_command, git/kb commands).spmd)/route, @name
dispatch)