Releases: previously-lab/agent
Release list
v0.5.3
What's Changed
- Feat/v0.5.2 workflow timeout fix by @LikeDreamwalker in #15
- Feature/v0.5.3 model selection by @LikeDreamwalker in #16
Full Changelog: v0.5.2...v0.5.3
v0.5.2
What's Changed
- fix: use unauthenticated Octokit for upstream public repo reads in sync by @LikeDreamwalker in #13
- feat: v0.5.2 - workflow timeout resilience + deployment noise reduction by @LikeDreamwalker in #14
Full Changelog: v0.5.1...v0.5.2
v0.5.1
What's Changed
- Feat/v0.5 loop reenable by @LikeDreamwalker in #11
- feat: v0.5.1 — housekeeping unification, context continuity, recall s… by @LikeDreamwalker in #12
Full Changelog: v0.5.0...v0.5.1
Previously v0.5 — The "Agent Remembers You" Update
This is our biggest update yet. By a lot.
68 commits. 102 files changed. Nearly 9,000 lines of new code. Over 6,000 lines rewritten or removed.
It changes how your agent understands you. How you scroll through your own memory. How you see it think.
🧠 Your agent now actually remembers you
This is the soul of v0.5.
Before this, every conversation started fresh. Your agent would meet you again, like a stranger. Now, every conversation builds something called previously.md — your agent's persistent, evolving understanding of who you are.
This is not a static profile. It's a living self-model.
When you tell your agent something about yourself, it observes. When you bring it up again across different conversations, it reinforces that belief. When you correct it — "no, that's not what I meant" — it contradicts the old impression instead of forgetting it. Some beliefs promote from short-term memory into long-term. Others naturally expire.
And here's the thing: your agent self-evolves after every single conversation. That's not a metaphor. A separate Pro model literally fires up after each turn to ask: "Has my understanding of this person changed? Do I need to update anything?"
You can see it happen. The Previously Bar at the bottom of your screen tells you, in real time:
🧠 Evolved: +2 observed · ↑1 reinforced · ↓1 demoted
🕰️ A completely new timeline — your memory, now scrollable
We tore down the old memory browser and rebuilt it from scratch.
Before: a vertical sidebar. Date-grouped cards. Functional, but it felt like a file manager.
Now: a horizontal, scrollable line. Every dot is a conversation. Date above. Time below. A single thin connector runs through them all, from the past stretching all the way to —
The rightmost dot. Hollow. Waiting.
That one is NOW.
Click any dot and you're back in that day. The full conversation renders — every exchange, every reply, exactly as it happened. And next to every agent message, there's a tiny link that says "Thoughts." Click it, and you see what the agent was thinking during that exact turn. Not what it said. What it was thinking while it said it.
And when you're flipping through memories, the old one doesn't flash away while the new one loads. We built stable slice switching — content stays visible. Only a subtle pulse bar at the top lets you know something is loading. No flicker, no blank screen, no whiplash.
👁️ You can see it think now
We designed something called the Phase Indicator. Your agent's thought process is now transparent. Staged. Timed.
- 🌀 Slicing time… 3s → ✓ Time sliced
- 🔍 Scanning memory… 2s → ✓ 3 conversations found
- 🧠 Updating its understanding of you… → "+1 observed · +1 reinforced"
The best part? Subtitle-style reasoning. When the agent is thinking, you don't see a wall of text. You see the current line it's working on, like a subtitle track scrolling in real time. A line ends. A new one fades in. A cursor blinks at the last character.
Subtle. But trust is built on transparency.
🎨 A new visual language
- #0066FF — our brand color. It's on the icons. The links. The progress bars. The send button. The cursor blink.
- Typeset — we wrote our own typography engine to replace Tailwind prose. Three CSS variables control the entire rhythm. Streaming-safe: new text never reflows old text.
- Two-screen layout — Hero fills your entire viewport. Scroll down, the timeline snaps below the header, and your conversations flow beneath it. Pure CSS. Zero JavaScript height hacks.
- Loading Tip carousel — Agent thinking used to be a boring spinner. Now it's 16 rotating tips that teach you how the product works. What's a time slice. How previously.md evolves. Why GitHub is your database.
🏗️ What changed under the hood (if you're into that)
Push → Pull architecture
The old system force-fed context to the agent before every reply ("Push"). Now the agent decides when it needs to look something up — it calls the recall tool on its own ("Pull"). Conversations that don't need memory retrieval don't pay the latency or token cost. This is what turns a passive LLM into an actual agent.
Dual timeline
Every time slice now has two parallel records:
core.md— the conversation (what was said)agent.md— the cognition (what the agent was thinking, which tools it called, and why)
This is where the "Thoughts" link comes from. The agent can reflect on its own past reasoning.
Evolution as an independent workflow
The agent's self-evolution is now a fully independent Vercel Workflow, running in parallel with the chat workflow. The two know nothing about each other — they couple only through previously.md on disk. If evolution fails, chat doesn't care. If chat is slow, evolution doesn't wait.
Conceptual tools
The agent no longer sees readFile / writeFile. It sees:
readSlice— open a memoryreadStrand— trace a topic across timerecall— search the pastreadPreviously— check its own historical impressions
The agent navigates memory concepts, not file systems.
Subtraction
We deleted ~600 lines of UI components (old vertical timeline, old identity system, old loop engine, old filesystem tools). Less code. More capability.
📦 The full list
New
- Horizontal timeline (
HorizontalTimeline+TimeDisplay) - previously.md v2 — long-term / short-term memory split
- Phase Indicator — subtitle-style reasoning, staged thinking, elapsed timer
- Previously Bar — live evolution status, always visible
- Evolution Indicator — self-evolution after every turn, expandable mutation cards
- Cognition Popover — peek at the agent's past thoughts ("Thoughts" link)
- Historical Chat View — browse past conversations in full
- Loading Tip carousel — 16 rotating tips, randomized starting point
- Typeset typography engine — zero-specificity, streaming-safe
- #0066FF brand color system — light + dark mode
- Global timeline index — flat file, auto-regenerated, stale detection
- Recall search — Flash sub-agent with 3-stage exploration
- Capabilities module — single source of truth for app mode
- Dual-timeline architecture —
core.md+agent.mdper slice - Mechanical cognition extraction — no model involvement, automatic
- Reasoning effort control — low / medium / high
- 7 new test suites — capabilities, cognition, previously format/updater, timeline, recall, loops
Changed
- Page layout rebuilt — two-screen CSS document flow, no virtual scroller
- Tool system fully refactored — filesystem → memory concepts
- Evolution Agent extracted to independent Vercel Workflow
- Flash from mandatory per-turn step → on-demand search (Push → Pull)
- Streaming UX: animations, subtitle reasoning, shimmer bars, merged tool cards
- Identity system migrated from
profile.md→ previously.md - Data source resolution simplified (
STORAGEenv var)
Removed
- Old vertical timeline panel (~580 lines)
- Old
profile.mdidentity system - Old file-driven loop engine
- Old
memory/nodes/extractor - Old archive sync
- Old filesystem-concept tools (
readFile,writeFile,updateUserProfile, etc.) - Tailwind prose typography
🔭 What's next
v0.5 establishes Previously On's core product language: memory is a line you can scroll. Agents self-evolve. Thinking is transparent. Your data lives in your repo.
We're building a brand new website based on everything in this release.
Made with 🧠 by Previously On.
Your memory. Your repo. Your agent.
v0.4.0
v0.3.1
What's Changed
- Feat/template sync and version check by @LikeDreamwalker in #7
- fix: narrow optional types for next-intl t() arguments by @LikeDreamwalker in #8
Full Changelog: v0.3.0...v0.3.1
v0.3.0
v0.3.0 — Durable everything
Every conversation turn now runs inside a durable Vercel Workflow run, and the
agent loop itself is AI SDK 7's WorkflowAgent — every LLM call and every tool
call is an individually durable, auto-retried step. GitHub files remain the only
store; Workflow is the execution container, never the database.
Highlights
🔁 Durable chat turns (Vercel Workflow)
POST /api/chatstarts a durable Workflow run and streamsrun.readable
back; the turn keeps executing even if the connection drops- Same-browser resume: refresh mid-response and the turn replays, then keeps
streaming (run id persisted locally). Cross-device resume is deliberately out
of scope — it would require a database this architecture refuses to have
🧠 One agent brain (AI SDK 7 WorkflowAgent)
- The streamText-in-one-step loop is gone: chat turns and background loops now
share a single agent layer (src/app/api/agent/) - Each LLM call and each tool call is its own durable workflow step, visible
and retryable in the Workflow dashboard - Tool context crosses step boundaries via serializable
toolsContext— no
closures
🌐 Live web search
- New
webSearchtool backed by DeepSeek V4 Flash's native server-side search,
reached through DeepSeek's Anthropic-compatible endpoint (the OpenAI-style
protocol cannot express provider-executed tools) - Search runs as one durable step; the card shows the cited answer with source
links. The neutral tool contract keeps the backend swappable — your main
model choice is untouched
🛠 Robustness
- Deterministic tool errors ("file not found", "access denied") return to the
model as results instead of burning the runtime's automatic retries - Fixed client-side validation crashes on raw model stream parts that share
type names with UI chunks (reasoning-delta/text-delta/tool-input-*)
Infrastructure preview: background loops
The durable loop engine ships in this release as infrastructure: a goal goes
in, an autonomous agent works it step by step, and every increment is
checkpointed to memory/loops/ the moment it happens — surviving deploys and
restarts. The agent-facing startLoop door is intentionally not enabled yet;
in-conversation progress and the no-repo demo story land together in a coming
release.
Known trade-offs
- Server-measured reasoning duration has no WorkflowAgent equivalent yet; the
thinking timer is client-side and live-session only
Full Changelog: v0.2.1...v0.3.0
v0.2.1
What's Changed
- docs: point docs links to official site previously.ldwid.com by @LikeDreamwalker in #4
Full Changelog: v0.2.0...v0.2.1
v0.2.0
Documentation Site
- 24 bilingual docs pages (EN/ZH) covering intro, concepts, guides, reference
/docsroute with i18n sidebar nav, responsive hamburger menu on mobile- 9 live component demos (ToolLayout, RecallPhase, ThinkingSteps, Bubble, MarkdownRenderer, CodeBlock, slice file, strands index)
llms.txtfor AI tool indexing- Deployment guide: fork → token → Vercel, with security alert and non-Vercel notes
- README condensed to ~170 lines, pitch-forward with docs links
Architecture: RSC Refactor
- ChatPage is now a thin client shell — hero and timeline rendered server-side, passed as children
- All episodic data fetched in Server Components, no client-side data fetching for initial load
LoadedIdsContextreplaces callback prop chain for slice ID tracking
Unified AppHeader
- GitHub, Docs, Settings, ThemeToggle, LocaleToggle all in the fixed header
- Version badge with popover — shows current version, red dot + update links when newer release available
- Auto-checks GitHub Releases API (cached 1h)
- GitHub Action auto-bumps version constant on release (fork-safe with repo guard)
User Config System
memory/user/config.json— 6 tunable params via Settings UI- Slicing (max turns, silence timeout), Context (recent turns, token budget), Model (provider, thinking)
- Same GitHub/local-fs dual channel as user profile
Context Optimization
recentTurnswidened from 3 to 20, 300-char truncation removed- Slice turn cap at
maxTurnsPerSlice(default 20) — safety net for marathon sessions - Token budget configurable (default 12K)
Fixes
USE_GITHUBnow uses truthy check — empty string no longer treated as setrehype-highlighttext extraction ([object Object]bug)rehype-slugfor heading IDs (hash anchors work)- Scrollbar visible behind chat input (removed
bg-backgroundfrom input wrapper) - Deployment security warning rendered as shadcn Alert component
Previously v0.1.0 — Previously on you.
Previously v0.1.0 — Previously on you.
Previously is a lightweight cloud agent with episodic memory. There are no conversations — just one continuous timeline. Every interaction is stored as plain Markdown in your own GitHub repo, readable by any AI tool.
This is an early experimental release. Not production-ready, but fully functional and openly shared because the ideas deserve discussion.
What's different
No conversations. Chat threads are replaced by time slices — one file per conversation burst, organized by date on a vertical timeline. Scroll up to revisit years ago. Scroll down to continue where you left off.
Episodic memory, not a vector database. Time slices carry YAML frontmatter with focus, summary, decisions, and tags. Keywords woven across slices form strands — "the whole history of that thing" across months and years. No embeddings, no black boxes. Human-readable Markdown.
Memory is yours. Everything lives in your own GitHub repo as plain files. Previously writes them. Claude Code reads them. Codex extends them. Git is your version control for memory.
Try it
previously-demo.ldwid.com — a read-only demo with a fictional persona spanning several years of conversations.
What's next
Parallel timeline indexing · Multi-branch memory with git-native version control · Connector framework for cloud-local agent hybrid · Semantic memory extraction from episodic data.
This is a one-person research project. Ideas and bug reports welcome on GitHub Issues.
