Skip to content

Guided init, settings and the Atlas look; memory search like the app - #3

Merged
Ukaykhingmarma28 merged 9 commits into
mainfrom
feat/tui-memory-search
Oct 12, 2026
Merged

Ukaykhingmarma28 merged 9 commits into
mainfrom
feat/tui-memory-search

Conversation

@Ukaykhingmarma28

Copy link
Copy Markdown
Collaborator

Summary

Brings main up to v0.4.0. It also carries the v0.3.x work that landed after #2 was merged (per-event capture, commit checkpoints, the app's .atlas layout, memory parity, agents' own names).

Setup and UI

  • atlas init: guided steps (organisation, Project, agents with an All agents row, background sync, memory search); --agents, --all-agents, --sync for scripts.
  • atlas settings: account, capture and memory, agents, sync, the local model, updates on one screen.
  • atlas sync on|off: a background listener the hooks restart. atlas update: checksum-verified self-update.
  • Every command drawn in the Atlas palette with the dot logo, tree lists, a progress bar, a live atlas serve feed; plain text for pipes.

Shared memory like the app

  • MiniLM embeddings in pure Go (no cgo); vectors identical to the app's (cosine 1.000000 on 54 real memories).
  • Vectors in memory.sqlite, near-duplicate merge, hybrid search; corpus.sqlite documents in memory_search (9/9 documents byte-identical to the app's index).
  • atlas memory index, Settings ▸ Model (download, index, remove).
  • Agents' plan tools become the shared plan (memory_briefing).

Fixes

  • A commit of a file the agent had read gets its checkpoint.
  • A listener stops when .atlas/ is replaced instead of writing into deleted files.
  • Init creates the memory record; extract state, the daily snapshot and damaged-record restore follow the app.

Test plan

  • go test ./..., golangci-lint run (0 issues), go mod tidy -diff clean
  • Live: init and settings in a terminal; OpenCode and Claude commits get checkpoints; re-init under a running listener; memory_search finds memories by meaning through a Claude session; OpenCode todowrite becomes the plan; model download from Settings; atlas update from a 0.3.0 build

🤖 Generated with Claude Code

A hook that writes the store directly drains the new rows within the
sync budget; a turn delivered to atlas serve forces a drain instead of
waiting for the 30 s tick. Without atlas serve nothing synced before
until atlas capture sync.
… its hook fires

The prompt is recorded as it is submitted, every tool call as the agent's
post-tool hook reports it (with the file it wrote, or for a shell call the
files git saw change while it ran), and Stop closes the turn with the
transcript's text and usage. Each delivery syncs to the cloud at once.

- record.OpenTurn and RecordTool; CapturedTurn.Open completes an open
  turn; Tool.NoSample lets a transcript sighting complete a delivered row.
- The dispatcher holds a per-session lock for the hook's lifetime, tracks
  delivered calls as key groups (id, name+arguments, command text, written
  paths) so the transcript read at Stop records none twice, and keeps the
  hook's own time on every delivery.
- Post-tool hooks for all eight agents: Claude Code, Codex (code-mode exec
  scripts unwrapped), Cursor (afterFileEdit, afterShellExecution), Copilot
  (postToolUse; derived ids), OpenCode (tool.execute.after), Droid
  (PostToolUse), Antigravity (PostToolUse; the prompt read at
  PreInvocation), Pi (tool_result; the extension serialises its hooks).
- Verified live for every agent but Droid.
A file written and committed in one shell command never appeared in git
status, so the turn had no touch for it; and touches that landed after the
post-commit hook had walked the commit never linked to it. The dispatcher
now remembers HEAD at turn start and after each shell call, counts files
changed by the turn's commits as its changes, and asks the writer to link
the commits made during the turn (gitlink.LinkRange), consuming those late
touches so they cannot attach to a later commit.
Hook session state, the spool, the OpenCode export cache, the listener's
run file and the CLI's logs move to a per-user state directory,
$XDG_STATE_HOME/atlas-cli/projects/<hash>/ (internal/clistate); older
layouts are moved there on first use. .atlas/ now holds only what the
desktop app writes. Test packages point XDG_STATE_HOME at a temp dir.
Hook-captured sessions now use the app's registry agent ids, record
capture candidates from the agent's reply, leave a handoff note at session
end, and run the extractor through the Atlas gateway's default model after
long turns and at session end (detached, one pass per session at a time).
atlas memory list --all includes candidates, as the app shows them.
Reverts the registry-id renaming of 0.3.3: hook sessions, memory entries,
handoff notes and the MCP bridge use the integration's own id again.
… like the app

- atlas init is a guided flow (organisation, Project, agents with an
  "All agents" row, background sync, memory search); flags answer it in
  scripts. atlas settings changes everything on one screen; atlas sync on|off
  keeps a listener the hooks restart; atlas update replaces the binary from a
  checksum-verified release.
- Every command draws in the Atlas palette (monochrome, colour for status),
  with the dot logo of Array Bold's "///", tree lists, a progress bar, a live
  atlas serve feed and styled help; pipes keep plain text.
- Memory search matches the app: MiniLM in pure Go (vectors identical to the
  app's), vectors in memory.sqlite, near-duplicate merge, hybrid search, and
  corpus.sqlite with the project's documents in memory_search; atlas memory
  index and Settings > Model download the model and build the index.
- Agents' plan tools (TodoWrite, update_plan, todowrite, Claude's tasks and
  plan mode) become the shared plan.
- Fixes: a commit of a file the agent had read gets its checkpoint; a
  listener stops when .atlas/ is replaced instead of writing into deleted
  files; init creates the memory record; extract state, the daily snapshot
  and damaged-record restore follow the app.
- README redesigned with a banner.
@Ukaykhingmarma28
Ukaykhingmarma28 merged commit 866ea21 into main Oct 12, 2026
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant