← Back to home@qazsedcftg

dsh-user-portrait

Learns your habits, skills and working style from everyday conversations and work summaries - an evidence-backed portrait for resume material, plus a prompt hint and tools that let the model consult it on demand.

Stars
0
Language
JavaScript
Created
Oct 20, 2026
Updated
Oct 20, 2026

Introduction

dsh-user-portrait

A DSH Host/Client plugin that learns your habits, skills and preferences from everyday conversations and work summaries — a reviewable portrait for resumes and self-review, plus a prompt hint and tools that let the model consult it on demand.

English | 中文

The panel when opened for the first time

What it does

  • Per-turn extraction. After each turn a background job asks the model for a short “what I asked / key points / what you answered / corrections” digest and appends the evidence to a ledger. A turn with no new evidence makes no model call.
  • Nine dimensions. Daily life (personality & communication, interests, background, current focus, recent state) and technical (skills & stack, working style, boundaries, sensitivities).
  • Resume and self-review material. Skills, working style and background accumulate as evidence and can be exported as Markdown.
  • Every conclusion is verifiable. It carries a confidence level, a basis (your words / the model's answer / both) and its source sessions. Similar conclusions are merged; conflicting ones supersede the old entry.
  • Reviewable and correctable. The right-side panel has four tabs (dimensions, my notes, session log, evidence timeline) with editing, confidence up/down, retire and restore, permanent delete, search, Markdown export and a conclusion cap.
  • Four model tools. portrait_read, portrait_search, portrait_history, portrait_maintain.
  • Opt-in prompt hint. The portrait is not injected into the system prompt by default. Turn it on next to the composer and a short “portrait is available” note is added.

Install

# A regular dsh web profile
dsh plugin --profile web add dsh-user-portrait

# The desktop app: the marketplace also installs an exact version
dsh plugin --profile desktop add dsh-user-portrait@0.1.0

Restart DSH or reload the plugin. It is plain ESM with no build step and no extra dependencies.

Using it

  • Open it from the User Portrait tab in the right sidebar, the portrait button in the session header, or Settings → User Portrait.
  • Dimensions: search, add/edit, conclusion cap and export at the top; the daily and technical groups below.
  • My notes: notes outrank automatic conclusions and are never overwritten by extraction.
  • Session log: a per-session summary plus each turn's “what I asked / what you answered”.
  • Evidence timeline: the evidence ledger, with the original excerpts.
  • Two levels of delete: deleting on a dimension card marks an entry retired (restorable); permanent delete in the discard area removes it and blacklists its evidence (with a second confirmation).
ToolWhat it does
portrait_readRead the portrait; filter by dimension, include history with includeRetired
portrait_searchSearch the evidence ledger and turn records by keyword
portrait_historyRead session summaries and per-turn key points
portrait_maintainCorrect entries and notes, plus backfill / redigest / synthesizeNow

Configuration

Set these in cordis.patch.yml; changes take effect after a restart.

KeyDefaultMeaning
dataDirempty (→ DSH_HOME/user-portrait)Portrait directory; relative or absolute
enabledtrueMaster switch
loadHinttrueAllow the “portrait is available” prompt section; each session still has to switch it on
backfillOnStarttrue (shipped patch: false)Process history on startup
synthesizeEveryTurns1Merge the portrait every N turns (0 disables automatic merging)
turnSynthesisDelayMs3000Coalescing window for the per-turn merge
minEvidenceForSynthesis3Skip a merge with fewer new evidence rows
rollupOnDisposetrueRewrite a session roll-up when its agent is disposed
sessionRollupMinTurns3Sessions with fewer turns get no model-written roll-up
provider / modelemptyModel route for background extraction; empty means the current default model
feedbackUrlemptyTarget of the feedback button; empty keeps it disabled
limits.perUserMessage6000Character cap for one user message before extraction
limits.perAssistantTurn4000Character cap for one assistant turn before extraction
limits.synthesisEvidence80Maximum evidence rows per merge
limits.maxOutputTokens4000Output cap for an extraction call; a capped reply is discarded

Data & privacy

  • The default data directory is <DSH_HOME>/user-portrait (~/.dsh/user-portrait when DSH_HOME is unset).
  • Everything is plain text: profile.json, profile.md, evidence.jsonl, state.json, blacklist.json, deleted.log, plus sessions/, turns/ and views/.
  • The plugin reads full session transcripts and sends its extraction prompts to the model configured in DSH. It makes no other network requests.
  • Secrets are masked before anything is written or sent: sk-, ghp_, AKIA, JWTs, private keys, password=.

License

MIT © 2026 loliisgood