Introduce a Settings view for configuring the Claude data directory (with WSL auto-detection on Windows), sidebar project grouping module, and an empty-state onboarding screen for SessionList. Refactor recap-patterns.md into per-card reference files under references/recap/ with separate retrieval and writing guides. Remove the legacy panel.html. On the data layer: incremental indexing via changedPaths, per-session live-update IPC (obelisk:session-updated), and session dirty-tracking in the renderer.
2.5 KiB
Card 1 Cover Writing
The cover should be readable in one glance: badge, persona, one plain claim, activity, footer. Before writing, say the claim to the user in a chat bubble. If it sounds like a topic list or report heading, shrink it.
Mock taste anchor
{
"type": "cover",
"badge": "Week 24",
"title": "The Architect",
"claim": "从零设计了一个完整的 memory 系统。",
"activity": [0.85, 0.92, 0.72, 0.45, 0.88, 0.30, 0],
"footer": "12 sessions · 2.4M tokens"
}
This works because 从零设计了一个完整的 memory 系统。 is one plain claim, in
the user's language, and can be read in one breath. The Architect is English
chrome; it gives the card a designed surface without translating the user's
actual work.
JSON Shape
type CoverCard = {
type: "cover";
badge: string;
title: string;
claim: string;
activity: number[];
footer: string;
evidence_refs?: string[];
};
Field duties:
badge: compact period chrome, such asWeek 24.title: persona label, usuallyThe Architect,The Debugger, etc.claim: one plain claim; not a topic list, project inventory, colon-led tagline, or clever English that hides the user's language.activity: period intensity values from retrieval.footer: public metric line with no internal filter notes.
After writing, check that persona.claim and cover.claim tell the same
story, and attach evidence_refs to the claim or metric if it is surprisingly
specific.
First JSON Write
After Card 1, create or update the recap JSON file. Do this before reading
pattern2-thinking.md.
Use this top-level shape:
type Recap = {
schema_version: "obelisk.recap.v1";
kind: "weekly" | "monthly";
generated_at: string;
period: { label: string; start: string; end: string; timezone: string };
source: { project?: string; session_ids: string[]; memory_ids?: string[] };
metrics: {
sessions?: number;
messages?: number;
tokens?: number;
active_days?: number[];
streak_days?: number;
workflows?: number;
workflow_agents?: number;
corrections?: number;
};
persona: { archetype: string; title: string; claim: string; tone: string };
cards: [CoverCard, { type: "thinking_path" }, { type: "vibe" }, { type: "workflow" }, { type: "closing" }];
evidence?: Array<{ id: string; session_id?: string; message_uuid?: string; memory_id?: string; summary?: string }>;
};
For app handoff, write JSON under ~/.obelisk/recap/. Weekly filenames are
recap-{YYYY}-W{WW}.json; monthly filenames are recap-{YYYY}-{MM}.json.