You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat: add cross-session recall functionality and auto-generated session titles
- Implemented `/recall <query>` command to search across all saved sessions, with options for summarizing results and resuming the top match.
- Enhanced session management by introducing AI-generated titles for sessions, improving readability in session lists and recall results.
- Updated configuration to allow users to enable or disable auto-session title generation.
- Added utility functions for managing personal configurations, including syncing personalities and custom commands across devices.
- Improved documentation to reflect new features and usage instructions.
Copy file name to clipboardExpand all lines: CHANGELOG.md
+76Lines changed: 76 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -11,6 +11,82 @@ For releases before v1.3.35, see [GitHub Releases](https://github.com/VladoIvank
11
11
> as the social-share summary (IFTTT → X/Bluesky), capped at 220 chars.
12
12
> If omitted, the feed falls back to the first paragraph.
13
13
14
+
## [2.1.0] — 2026-05-19
15
+
16
+
> Session memory: `/recall <query>` searches across **all** your saved sessions, `--resume` jumps straight back into the best match, `--summarize` asks the LLM what you accomplished, and sessions now get readable AI-generated titles instead of truncated first messages.
17
+
18
+
### Added — `/recall` cross-session search
19
+
20
+
-**`/recall <query>`** scans every saved session in the active scope
21
+
(project `.codeep/sessions/` when in a project, else global
22
+
`~/.codeep/sessions/`), matches with AND semantics (every query term
23
+
must appear), and ranks results by term-hit count plus a recency
24
+
boost. Each result shows a context snippet and the session name.
25
+
-**`/recall <query> --resume`** loads the top-matching session
26
+
directly into the current conversation — skips the list + `/sessions`
27
+
picker dance. (TUI only; ACP shows results since it can't swap the
28
+
client's conversation in place.)
29
+
-**`/recall <query> --summarize`** reads the matching sessions and
30
+
returns a short LLM recap of what you actually accomplished across
31
+
them — "ask your history a question". Works in TUI + ACP.
32
+
- No new dependency: in-memory JSON scan, fast for the realistic
33
+
tens-to-hundreds-of-sessions case.
34
+
35
+
### Added — portable personal config sync
36
+
37
+
-**Personalities and custom commands now sync across your machines**
38
+
via `codeep account sync` (pull) and `codeep account push`. Global
travel with your account alongside API keys and profiles — set up a
41
+
`senior-reviewer` personality or a `/deploy` command once, get it
42
+
everywhere. New endpoints `/api/personalities` + `/api/commands`,
43
+
new DB tables `user_personalities` + `user_commands`.
44
+
-**Additive merge, never destructive**: pull only writes files that
45
+
don't already exist locally, so a sync can't clobber edits you
46
+
haven't pushed. Last-write-wins on the server via upsert.
47
+
-**Dashboard sections** to view + delete synced personalities and
48
+
commands at codeep.dev/dashboard (read + prune; editing stays in the
49
+
CLI).
50
+
-**Deliberately not synced**: lifecycle hooks (arbitrary shell —
51
+
syncing + auto-running on another machine is a security risk) and
52
+
MCP server configs (contain tokens). Those stay local by design.
53
+
54
+
### Added — AI-generated session titles
55
+
56
+
- Sessions now get a concise LLM-generated title ("OAuth2 migration
57
+
for auth module") instead of the first user message truncated to 60
58
+
chars ("help me with the…"). Generated once per session in the
59
+
background after it has ≥3 messages — fire-and-forget on autosave,
60
+
never blocks a save, never regenerates once set. Makes both
61
+
`/sessions` and `/recall` dramatically more readable.
62
+
- Title priority: AI title > stored title > first-message fallback >
63
+
session name. Stored under `aiTitle` in the session JSON.
64
+
-**Opt-out: `autoSessionTitle` setting** (default on). This is the
65
+
only feature that makes a background API call you didn't explicitly
66
+
request, so it's toggleable in `/settings` for privacy/cost-conscious
67
+
users. Off → sessions keep the first-message title, zero background
68
+
calls.
69
+
70
+
### Changed
71
+
72
+
-**`/search` description clarified** to "search the current session"
73
+
(vs `/recall` for cross-session) — the two were easy to confuse when
74
+
both said "search history".
75
+
76
+
### Fixed
77
+
78
+
-**`/sessions` picker showed raw session ids** (`session-2026-05-20-757cbda5`)
79
+
instead of readable titles. Now shows the title (AI-generated > stored
80
+
> first-message) with a short date + message count, so the list is
81
+
scannable.
82
+
-**Models hallucinating their identity in chat mode.** Asked "which
83
+
model are you", GLM (and others) would claim to be Claude because the
84
+
chat system prompt never stated the actual identity. Both the chat
85
+
and agent system prompts now inject the real `model` + `provider`
86
+
from config, so the answer is truthful. (Agent mode already said
87
+
"never call yourself Claude" but didn't state the real model; now it
88
+
does.)
89
+
14
90
## [2.0.4] — 2026-05-19
15
91
16
92
> Discoverability patch: new `/docs <command>` jumps from any slash command to its full guide on codeep.dev, the `/help` footer now points at the same place, and `/personality` and `/insights` have proper docs pages instead of one-liners.
Copy file name to clipboardExpand all lines: README.md
+28-5Lines changed: 28 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -73,7 +73,9 @@ When started in a project directory, Codeep automatically:
73
73
-**Session picker** - Choose which session to continue on startup
74
74
-**Per-project sessions** - Sessions stored in `.codeep/sessions/`
75
75
-**Rename sessions** - Give meaningful names with `/rename`
76
-
-**Search history** - Find past conversations with `/search`
76
+
-**AI session titles** - Sessions auto-title themselves with an LLM one-liner ("OAuth2 migration for auth module") instead of a truncated first message. This makes one small background API call per session; turn it off with the `autoSessionTitle` setting (`/settings`) if you prefer zero unsolicited calls
77
+
-**Search current session** - Find text in the open conversation with `/search`
78
+
-**Cross-session recall** - `/recall <query>` searches across **all** saved sessions, ranked by relevance + recency. Add `--resume` to load the top match, or `--summarize` for an LLM recap of what you accomplished across matches
77
79
-**Export** - Save to Markdown, JSON, or plain text
78
80
-`/cost` - Per-session token usage and estimated cost (per provider/model)
79
81
-`/compact [keepN]` - AI-summarize older messages to free up context (keeps last N, default 4)
@@ -709,19 +711,40 @@ codeep account # Opens browser → sign in with GitHub → CLI is linked
709
711
-**Project archiving** — hide projects from the list with one click
710
712
-**Tasks** — create/complete bug, feature, and task items from the web or directly from the CLI with `/tasks add` and `/tasks done`
711
713
-**API key sync** — store provider keys securely on codeep.dev, sync to any machine in one command
714
+
-**Personal config sync** — personalities and custom slash commands sync across machines; view and prune them on the dashboard
712
715
-**Connected devices** — see all machines linked to your account (hostname, last seen), revoke access per device
713
716
714
717
### API key sync
715
718
716
719
Add keys once on the dashboard, then sync them to any machine:
717
720
718
721
```bash
719
-
codeep account sync # Pull keys from codeep.dev → local config
720
-
codeep account push # Push local keys → codeep.dev
722
+
codeep account sync # Pull keys + config from codeep.dev → local
return`You are Codeep, an AI coding assistant. You are running on the \`${model}\` model via ${providerName}. If asked which model or provider you are, answer truthfully with these details — do not claim to be a different model.`;
293
+
}
294
+
return`You are Codeep, an AI coding assistant.`;
295
+
}
296
+
274
297
functiongetSystemPrompt(): string{
275
298
constlanguage=config.get('language');
276
-
299
+
300
+
// Identity line so the model doesn't hallucinate its name when asked
301
+
// "what model are you" — without it, models guess from their training
302
+
// data (e.g. GLM claiming to be Claude). State the truth: the product
303
+
// is Codeep, the underlying model + provider come from config.
304
+
constidentity=buildIdentityLine();
305
+
277
306
letbasePrompt: string;
278
307
if(language==='auto'){
279
-
basePrompt=`You are a helpful AI coding assistant. Always respond in the same language as the user's message. Detect the language of the user's input and reply in that same language.`;
308
+
basePrompt=`${identity} Always respond in the same language as the user's message. Detect the language of the user's input and reply in that same language.`;
0 commit comments