Releases: JDHole/pkm-assistant
Release list
2.3.1
Honest failures and tighter keys - PKM Assistant 2.3.1
In plain words. This release fixes ten things found by two audits of the plugin after 2.3.0.
Seven are about the chat telling you the truth when something goes wrong: a failed summary no
longer says "summarized", a file that is too big or of an unsupported type now shows a notice
instead of silently not attaching, a failed copy to the clipboard says so, the session save
window shows a human sentence instead of a raw error, and three small leaks are closed (the /
popup, the @ suggestions and the note opener no longer outlive a closed chat tab). Three are
about safety: an API key echoed back by a model provider in an error message is now redacted
before that text can reach any model or session file, a tool call whose agent was deleted
mid-turn is refused instead of silently running as the active agent, and the .gitignore
protection for your settings file compares whole lines, so an existing settings.json.example
entry no longer fools it. Nothing changes in how you use the plugin.
What changed, in detail:
- Summaries. When the model fails to produce a summary, manual compression and the token
viewer presets report the failure instead of success; the conversation is left as it was after
the cheap trimming phase. - Attachments. Too many files, an image over 10 MB, a text file over 100 KB or an unsupported
type each produce a notice with the reason. Processing continues with the remaining files. - Selection menu. A refused clipboard write shows an error notice. Copy still clears the
selection immediately. - Session save. The analysis failure message is one of three sentences (interrupted, model did
not respond in time, other error); the raw error stays in the log. - Chat lifecycle. Closing a tab or re-rendering the view closes the
/trigger popup and its
pending timer, destroys the previous@autocomplete before creating a new one, and the note
opener registry keeps only a reference to the app, not to the view. - API keys in error messages. Provider error bodies and stream error events (OpenAI-compatible,
Anthropic, Gemini) are masked by pattern and redacted by the exact key used in the request,
including URL-encoded andBearerforms, before the text becomes a normalized error. - Agent identity for tools. A tool call that names an agent which no longer exists is refused
with a clear permission error; a call with no agent at all is refused too. Approval windows are
signed with the name of the agent whose permissions were checked. .gitignoreentries. The vault.gitignoreis matched line by line and the entries are
written one after another, with a warning for any entry that fails; a vault without
.gitignoreis left alone.
2.3.0
Chat without walls of text - PKM Assistant 2.3.0
In plain words. The chat has a new face, built around one rule: no walls of text. Everything
the agent does on the way to an answer - thinking, reading a note, searching, handing a task to
a sub-agent, keeping a task list, asking you a question, running into an error - is now a small
tile with a human title and a status dot, and the details open only when you click. Nothing
technical sits in a tile header: no call ids, no raw tool names, no JSON. Three colours tell
you who is speaking: system things are red, the agent's things are in the agent's colour, and
your own messages are in your colour from Settings. The agent's replies sit in a column with
the agent's crystal next to every tile and every bubble, joined by a thin line, so a long turn
reads like a timeline instead of a pile. Any note the agent mentions is a link that opens in a
new tab. You can finally select and copy text from any message, and a small menu on the
selection offers Copy, Add as context and Quote. Typing / opens commands, skills, sub-agents
and the tools of your MCP servers; typing @ opens note suggestions only - one popup at a time,
and Enter in the popup picks an item instead of sending the message. The typing indicator's
dots light up one after another, a queued message stays visible while the task list is open,
and the "hand over to another agent" button is retired for now.
What changed, in detail:
- One tile for every action. Thinking, tool calls, sub-agent results, the task list, a
question from a past session, a stream error, a background sub-agent notification and an
artifact card all use the same tile: icon, human title, short summary, status dot, details on
click. Failure is one standard: a red icon on the left and a red dot on the right. Reads,
searches and the task list use a dimmed variant of the agent's colour. - Bubbles. Your message spans the full width in your colour from Settings (falls back to the
theme accent), with a gutter on the right that mirrors the agent's crystal gutter on the left.
The agent's reply is a bubble in the agent's colour; the agent's name is gone from the header,
the crystal stays. The context-trim block keeps its previous look. - Agent column with crystals. The agent's crystal is drawn next to every tile and every text
bubble (also next to a live question to you), and the connector line runs from the first
crystal to the last one in a series. The line is redrawn when a tile is expanded or collapsed,
when the first text of a reply arrives, when a thinking block folds after a tool round, and
when a tile is replaced by its result. - Clickable notes everywhere. Note names in read, search and list tiles, in the note-saved
line, in mentions and on the artifact card open the note in a new tab of the main area. Hidden
plugin paths are shown as plain text, not links. - Select, copy, quote. Text in bubbles and tiles can be selected. On a selection a menu
offers Copy, Add as context (a text attachment in the chip bar, kept in memory only) and Quote
(inserted into the input as a quote, with the caret placed after it). - Triggers.
/opens the trigger popup: slash commands, skills, sub-agents and the tools of
external MCP servers, each tool with its full name so the marker points at a real tool.@
opens note and folder suggestions only./followed by@hands the field over to the note
suggestions. Enter inside the popup picks the item; it no longer also sends the message. - Small things. Typing-indicator dots appear in sequence; a queued message is shown above the
chip bar even when the task-list panel takes the input slot; the delegation-to-another-agent
tool and its button are dormant (the code stays for a later release).
2.2.9
Smaller index, quieter memory, fewer questions - PKM Assistant 2.2.9
In plain words. Four things you will notice. First, the semantic index of your vault is no
longer rewritten as one huge text file every time you edit a note. It is now kept as a small
description plus compact binary pieces, and an edit adds only a tiny piece. On a vault with
5,200 indexed notes the files on disk shrink from about 122 MB to about 22 MB, and the save after
an edit drops from over a second of work that froze the interface to a few milliseconds. The
switch happens by itself the first time the plugin starts: the old file is removed only after
the new files have been written and read back, and a notice tells you when it is done. Second,
automatic memory consolidation is off by default - the plugin no longer proposes to merge an
agent's sessions or brain notes on every save unless you turn it on, and when you decline a
proposal it stops asking until the next threshold. Third, when an agent asks to write to a
file, you can tick "don't ask again for this file in this session" - the approval is remembered
for that chat only. Fourth, a brand-new agent under an English interface gets an English brain
file, with English section headings and English artifact statuses; existing Polish files keep
working unchanged.
What changed, in detail:
- Semantic index v2.
vault-index.meta.json(version 2) is the only source of truth: model
key, vector size, per-note timestamps and a row pointer per note. Vectors live in immutable
binary segmentsvault-index.NNNNNN.vec(Float32, little-endian, 16-byte header). A save after
edits writes one new segment with only the changed notes; when segments pile up (more than 8,
or half the rows are stale) they are compacted into one. Writes are serialised, so an edit
that lands while a save is in progress is never lost. The in-memory search engine and the
search results are unchanged. - Migration with a safety net. On first start the old
vault-index.jsonis read, converted,
written as v2, read back and verified; only then is the old file deleted. If any step fails
the old file stays untouched, you get a notice with the reason, and the index is rebuilt from
your notes as before. - Detected rebuilds instead of silent breakage. If the embedding model starts returning
vectors of a different size, or you switch models, the plugin says so and rebuilds the index.
Previously a size change made the indexer retry forever. A wrong API key or model name now
ends the scan with a visible error instead of retrying the whole vault every few minutes. - Embedding timeout in Settings. The request timeout for embedding calls is a field in
Settings → Models → Embedding, in seconds; before it could only be changed by editing the
settings file. - Optional consolidation. Two switches in Settings (sessions and summaries, brain notes),
threshold controls with their effective values shown, and a declined proposal resets the
counter instead of coming back on the next save. - Remember write approval for this session. Checkbox in the approval and diff dialogs, kept
in memory per file and per chat, cleared on a new chat or when the session is archived.
Concurrent writes to the same file from one model turn are serialised and no longer overwrite
each other. - Brain file and artifact statuses in the interface language. New brain files are born in
the interface language and stay in it; parsers know both Polish and English headings; artifact
types created under English have English statuses, and the buttons work on old Polish files too. - Removed the dead
preferred_toolsagent field. It never had an editor in the agent
profile and had no effect since the tool cluster rewrite; the same is true of the
default_permissions.mcppermission switch. Existing agent files with either field keep
loading unchanged. - Smaller, safer bundle. Checking a result an external MCP server sends back no longer builds
a piece of JavaScript from text at runtime; it uses a small library (MIT license) instead. The
bundled plugin is about 120 KB smaller as a result. - Factory texts and prompts use plain hyphens instead of dashes.
Every change ships with tests that fail without it. The index migration was additionally
replayed on a copy of a real 122 MB index: 5,200 vectors converted in under a second, zero
embedding calls, identical top results before and after.
Known limits: the index directory stays inside the vault (plugins may not write elsewhere), so a
sync client will still upload the small segment files after each save. Closing Obsidian within
30 seconds of an edit may leave that edit un-persisted; the next start re-embeds only that
note. Reindex on a vault that has zero indexable notes produces an empty index, as before.
Upgrading from 2.2.8: no settings change needed. The index migrates itself on first start and
shows a notice; on a large vault expect that one start to take about a second longer.
Downgrading to 2.2.8 or older after the migration means a full re-index, because the old build
does not read the new format. The downgrade warning from 2.2.6 still stands for active chat
sessions.
2.2.8
Memory first, no bundled skills - PKM Assistant 2.2.8
In plain words. Two changes in how agents behave out of the box. First, when an agent
looks something up and nobody said where, it now checks its own memory first - what it has
learned about you and what you agreed on together. Your notes are searched when the agent asks
for them on purpose, and agents are now told to do exactly that whenever your question is about
your notes. In live test chats with three different models every question about notes was
still answered with a single search, the same as before. Second, the plugin no longer installs
ready-made skills. We want skills to go through proper rounds of iteration and evaluation
before we ship any, so for now the plugin ships none. Skills you already have stay exactly
where they are.
What changed, in detail:
searchwithout a scope looks in the calling agent's memory. User notes need an explicit
scope: "vault". The tool description, the parameter description and the "one search" prompt
rule say so, with examples for both kinds of question. Three cases still default to the
vault: a call made by a sub-agent, an agent with the memory permission switched off, and an
agent that has no memory yet. A result from the default scope carries ascope_hintfield
that tells the model how to widen the search, so an empty memory result is not mistaken for
"there is no such note". Legacy tool names (vault_search,vault_grepand the rest) keep
searching the vault.- No starter skills. A fresh vault gets no skill files, and the plugin no longer creates
the skills folder at startup - the first skill you save creates it. The built-in agent
Jaskier starts with no skills assigned. Backstage templates (the two Deep Research skills and
the researcher sub-agent) are unchanged. - No promises about things that are not there. Jaskier's persona says he helps you design
agents and skills while you create them in the panel, and the chat welcome hint no longer
points at a skill bar that only appears once an agent has skills. - The quick start guide describes where a skill is actually created: agent profile, Skills tab.
Both changes ship with tests that fail without them. The search change was additionally
walked through in a live chat, reading the tool calls the models actually made.
Known limits: the scope_hint safety net has only been exercised in automated tests, because
every model we tried passed the scope on its own. Very small local models may still stop after
an empty memory result - if your agent says it cannot find a note you know exists, ask it to
search the vault. The vault map starter still lists skills/ as the skill library although
the folder now appears only with your first skill.
Upgrading from 2.2.7: no migration, no changes to settings, and your skill files are not
touched. If you never edited Jaskier's profile, his list of assigned skills is empty after the
update - the eight starter files are still in your skill library and can be assigned again in
his profile (Skills tab). If you wrote your own prompts or skills that tell an agent to
"search" your notes, they kept working with the models we tested, but adding scope: "vault"
to the instruction makes it certain. The downgrade warning from 2.2.6 still stands: do not
downgrade below 2.2.6 with active chat sessions written by 2.2.6 or newer - archive or
discard them first.
2.2.7
Maintenance release - PKM Assistant 2.2.7
In plain words. Two things were getting in the way. First, every time you created a new
agent, the plugin quietly added a helper sub-agent to its team that you never asked for - and
with similarly named agents those helpers could get mixed up. That no longer happens: a new
agent starts with an empty team, and you add helpers only when you want them. Second, if you
use the plugin in one language, bits of the other language kept leaking through: descriptions
of built-in tool servers, image tools, the window where you review what an agent wants to
remember, and the status of plans and notes. Those places now speak the language you picked in
settings. No new features, nothing to set up after the update.
What changed, in detail:
- A new agent starts with an empty team. The automatic "prep" sub-agent is gone, together
with its starter texts and the promises about it in the vault map starter, the health-check
skill and the quick start guide. Sub-agents you already have are not touched. - Built-in MCP server descriptions and the image tools (
generate_image,
add_text_to_image: descriptions, parameters, the save-folder error, the invalid output path
error, the generated image note and its date) follow the interface language. - The save-session review window names the agent's memory sections in the interface
language. The section headings inside the memory file itself stay as they were. - Artifact statuses are shown in the interface language in the note block, the agent
profile and the@picker. The value stored in the file stays a fixed identifier, and the
agent is told so. - Memory note types in the consolidation review are shown in the interface language, with
the same wording as the save-session window. - "What's new" always ends with the author's note, the same one as in the README.
- The Filesystem server preset shows a
<PATH>placeholder instead of a sample path. - Internal hardening: the "current context" memory section is normalized in one place before
a save-session update is applied.
Every fix ships with a regression test that was red before the change and green after it.
Known limits: Obsidian's own Properties and Bases views draw artifact statuses straight from
the file, so they still show the stored identifier, not the translated label. Memory section
headings inside an agent's memory file stay in the language they were created in. Reasons for
a refused vault path are still in English only.
Upgrading from 2.2.6: no migration, no changes to settings. The downgrade warning from 2.2.6
still stands: do not downgrade below 2.2.6 with active chat sessions written by 2.2.6 or
newer - archive or discard them first.
2.2.6
Maintenance release - PKM Assistant 2.2.6
Nine bug fixes from the post-release review, no new features. Every fix ships with a regression
test that was red before the change and green after it.
Highlights:
- Restarting Obsidian no longer loses tool calls from the restored chat. The active session
file now keeps the id of every tool call and its result, so the model sees the tool results
from before the restart instead of orphan warnings in the log. A tool that returned an empty
result is restored too, so the provider never sees an unanswered tool call. - Session secrets stay out of the log file. A
Set-Cookieorcookieheader echoed by a
proxy inside a provider error is masked in the plugin log like API keys already were. - Artifacts with a hand-typed numeric id (
pkm-artefakt: 20260911) are found again by the
registry, the disk fallback and the agent's read tool. - "Export profile" copies the agent's YAML instead of
[object Object]. - Regenerating a message that carried an attachment pastes the message text into the input
box instead of[object Object]. - A new chat clears the todo panel left by the discarded conversation and removes its
one-off todo file. - The token counter no longer crashes for an agent with no model configured.
- A failing sidebar view shows the friendly error instead of an unhandled rejection in the
console; the same for sending an artifact into the chat. - The Brain shard in the agent presentation shows the number of notes in the agent's
long-term memory, so a brand-new agent shows 0 and stays dim instead of lighting up with the
size of its empty memory template.
Known limits: preferred_tools in an agent's YAML has no effect and no editor in the UI; it is
a legacy field kept for compatibility. The mcp key under default_permissions has no effect
either; use the tool switches (disabled_tools) to keep an agent away from MCP servers.
Upgrading from 2.2.5: no migration, no changes to settings. Do not downgrade to 2.2.5 or
older with active chat sessions written by 2.2.6: the older plugin reads the new session file
fields as text, and archiving such a session with an older build corrupts its transcript.
Archive or discard active sessions before a downgrade.
2.2.5
English first - PKM Assistant 2.2.5
The plugin was born in a Polish vault, and until now an English-speaking user still met Polish in
a few places: the built-in agent introduced itself in Polish, the factory artifact templates had
Polish section names, and the rules the plugin adds to every system prompt were Polish. 2.2.5
makes the whole first session follow the interface language. Polish users see exactly what they
saw before.
Highlights:
- Jaskier, the built-in agent, speaks your language. His persona is now English by default and
Polish when the interface language is Polish. Your own edits to Jaskier (the overrides file) are
untouched. - Artifact templates follow the interface language. New vaults get
plan,notatkaand
raporttypes with English section names (Goal / Steps / Risks and assumptions / User notes;
Content; TL;DR / Findings / Blind spots / Sources). A factory template you never edited is
switched to the interface language on the next start; anything you edited is left alone.
Type ids, statuses and frontmatter keys do not change, so existing artifacts keep working. - The rules in the system prompt and the factory work prompts (save session, archive,
summaries, context compression) and the sub-agent frame prompt are English for English users and unchanged for Polish users.
Your own prompt overrides still win. - Renaming a freshly created agent is clean. The old YAML file is removed, and the sidebar
keeps showing the agent instead of "Agent not found". - Smaller fixes: the command palette shows "PKM Assistant: Chat" and "PKM Assistant: What's
new" instead of two entries named "PKM Assistant"; the first-run banner in settings, the
sub-agent editor labels and the model-settings descriptions are translated; a "{{count}}"
placeholder no longer leaks into a chat notice.
Known limits: the memory index file (brain.md) keeps its section headings, and the
<agent>-prep sub-agent created for a new agent keeps the name it got at creation.
Never picked a language? The plugin has always used English for its interface, and from 2.2.5
Jaskier, the templates and the prompts follow it too. To keep everything Polish, set Settings →
PKM Assistant → Appearance → Language to Polski.
Upgrading from 2.2.4: no migration, no changes to settings. Untouched factory artifact templates
may be rewritten in the interface language (see above).
2.2.4
Settings speak your language - PKM Assistant 2.2.4
A small follow-up to 2.2.3 for the community catalogue: the plugin's settings and first-run
messages now follow the interface language everywhere. Behaviour is otherwise identical to 2.2.3.
Highlights:
- Settings navigation follows the interface language. The section labels Models, Memory,
Limits, Advanced, API Keys and Information were shown in Polish regardless of the language
setting; they now use the built-in translations (English by default, Polish when selected). - First-run messages are translated. The welcome notice for new users, the "embedding
provider not configured" notice and the retired Connections command use the interface
language. - API key rows keep their platform names in a narrow settings pane. When the pane is too
narrow for the label and the key field side by side, the field wraps below the label instead
of squeezing the name out of view.
Upgrading from 2.2.3: no migration, no changes to settings or agent files.
2.2.3
Catalogue-ready sources - PKM Assistant 2.2.3
A maintenance release prepared for the community catalogue review: the sources now pass the
catalogue's static checks without warnings. Behaviour is the same as 2.2.2 apart from the
fixes below.
Highlights:
- Manual notes in the "Current" section of an agent's brain file survive memory saves.
Previously every memory save rebuilt the file and dropped what you had written there. - Custom configuration folders are respected. The plugin no longer assumes the vault's
configuration folder is called.obsidian; access rules and the migration of the plugin
folder use the folder Obsidian actually reports. - The log file keeps the full details of a failed model request (error code, HTTP status,
provider details) instead of only the message. - Sidebar and chat crystal animations are drawn with transforms instead of clip paths;
the shapes look the same, they just render on every Obsidian build. - Less console output: the plugin only logs debug, warning and error messages.
Upgrading from 2.2.2: no migration, no changes to settings or agent files.
2.2.2
Clean sources - PKM Assistant 2.2.2
A source-hygiene release before the community catalogue listing. No new features and no
functional changes apart from the renamed backup file below: the plugin does exactly what
2.2.1 does.
Highlights:
- Comments and developer documentation describe the current behaviour only. Internal
audit and sprint identifiers, dates and references to planning documents that never lived
in this repository are gone; the reasoning behind each decision stays where the code is. - Changelog and release notes are in English and list only what a user can notice.
- The settings backup written before the first save after an upgrade is now
.pkm-assistant/settings.pre-migration.json. An older backup under the previous name, if
present, is left untouched. - A few interface texts and one on-disk marker file lost stray internal references.
Upgrading from 2.2.1: no migration, no changes to settings or agent files.