Duncan persona: warm directness, adaptive technical depth, honest unknowns
Details
Enriched the cloud system prompt with personality traits: honest but
empathetic tone, balanced verbosity, clean dry humor, neutral error
handling that pivots to solutions. Technical depth now adapts to the
user via memory context rather than assuming expertise level.
RAG search: cross-plugin diversity with query-based plugin boosting
Details
RAG search results were dominated by the active plugin's data, making
cross-plugin queries (e.g. asking about Notes from Tasks) return no
results from the mentioned plugin. Fix: fetch 3x candidates, then
apply plugin diversity via round-robin interleaving. When the user
mentions a specific plugin by name (e.g. "notes", "calendar"),
half the result slots are reserved for that plugin's data.
Fix intent actions not surfacing in RAG — use dedicated intent search
Details
The root cause of the AI responding conversationally ("Shall I go ahead?"
"Creating those now!") without actually executing actions was that RAG
returned 0 intent_action chunks. Entity data (the user's actual tasks,
notes, etc.) crowded out intent_action chunks in the general semantic
search because task titles are closer to the query than "ACTION: Create
Task" descriptors.
Fix: BuildRagContextWithIntentsAsync now performs TWO parallel searches —
one general (for entity data + plugin context) and one specifically
filtered to intent_action entity type. Results are deduped and merged,
ensuring the AI always sees relevant available actions alongside the
user's data context.
Also fixed incorrect slot names in ActionFormatHeader for tasks.add_link
(was source_task_id/target_entity_id, corrected to task_id/target_id).
Desktop version 1.65.6 → 1.65.7.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Dynamically index plugin quick actions and shortcuts for RAG discovery
Details
ShellContentProvider now discovers all IQuickActionProvider plugins at
indexing time and creates individual RAG chunks per quick action. This
replaces the hardcoded shortcut list that was manually maintained and
had drifted out of sync (e.g. listed Cmd+B for transactions instead of
Cmd+Shift+T).
Each quick action gets its own searchable chunk with the action name,
plugin, description, keyboard shortcut, and usage instructions. The
global shortcuts chunk now dynamically appends plugin shortcuts instead
of hardcoding them, so adding a new quick action to any plugin
automatically makes it discoverable by Duncan via semantic search.
Shell-level shortcuts (Cmd+K, Cmd+I, Cmd+M, etc.) remain hardcoded
since they are not plugin-declared.
Desktop version 1.65.5 → 1.65.6.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add slot validation and action result feedback to AI intent pipeline
Details
Three fixes for the AI creating duplicate tasks and inventing fake slots:
1. IntentEngine.ExecuteDirectAsync now validates slot names against the
IntentDescriptor before calling the plugin. Unknown slots (e.g.
"parent_task_id", "parent_id") are stripped and warnings attached to
the IntentResult. This prevents silent data loss.
2. Action execution results are now injected into conversation history
as an [Action Results] block. On the next turn, the AI sees what
succeeded, what failed, and what warnings were raised — enabling
self-correction instead of blindly retrying or duplicating.
3. ActionFormatHeader updated with explicit guidance: only use declared
slot names, use tasks.add_link for linking existing entities instead
of re-creating them, and acknowledge action result feedback.
Desktop version 1.65.4 → 1.65.5.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Get notified about new releases