Skip to content

Releases: JDHole/pkm-assistant

2.3.1

Choose a tag to compare

@github-actions github-actions released this 26 Sep 10:49

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 and Bearer forms, 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.
  • .gitignore entries. The vault .gitignore is matched line by line and the entries are
    written one after another, with a warning for any entry that fails; a vault without
    .gitignore is left alone.

2.3.0

Choose a tag to compare

@github-actions github-actions released this 24 Sep 18:48

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

Choose a tag to compare

@github-actions github-actions released this 23 Sep 15:29

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 segments vault-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.json is 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_tools agent 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.mcp permission 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

Choose a tag to compare

@github-actions github-actions released this 20 Sep 08:22

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:

  • search without 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 a scope_hint field
    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_grep and 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

Choose a tag to compare

@github-actions github-actions released this 19 Sep 10:13

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

Choose a tag to compare

@github-actions github-actions released this 17 Sep 15:45

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-Cookie or cookie header 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

Choose a tag to compare

@github-actions github-actions released this 13 Sep 09:54

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, notatka and
    raport types 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

Choose a tag to compare

@github-actions github-actions released this 13 Sep 06:36

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

Choose a tag to compare

@github-actions github-actions released this 12 Sep 13:12

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

Choose a tag to compare

@github-actions github-actions released this 09 Sep 18:59

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.