inkvault
Health Uyari
- License — License: MIT
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Low visibility — Only 6 GitHub stars
Code Basarisiz
- exec() — Shell command execution in src/inkvault/atlas/daily.js
- network request — Outbound network request in src/inkvault/atlas/daily.js
- network request — Outbound network request in src/inkvault/atlas/search.js
Permissions Gecti
- Permissions — No dangerous permissions requested
Bu listing icin henuz AI raporu yok.
Rescue your Pieces memory before it's gone, search it from Claude/Codex/any MCP client, and see it as a map of your year. Local-only.
InkVault
Local-first, user-owned persistent memory for your AI conversations, browsing, and work.
Keep the context behind your work: what you asked, what you learned, and the pages you opened.
InkVault preserves supported AI sessions and the browser history you choose in a local SQLite vault,
so you can find them again after the original tools have cleared their history.
Search your vault yourself in the Memory Atlas, or connect an AI tool through MCP so it can retrieve
past context when you ask. Optional Windows screen capture adds a timeline of the apps you use and text
from apps you choose. You control the sources, the vault folder, and the backups.
InkVault is free and MIT licensed. No account or telemetry. InkVault itself does not upload your archive.
If you connect an AI client, memories returned to that client may be sent to its model provider under
that client's settings.
Start your vault
You need uv and a terminal.
Copy your supported local sessions and chosen browser history into a vault:
uvx --from git+https://github.com/sandoreclegane/inkvault inkvault sync
In a terminal, InkVault greets you, asks which browser profiles are yours before reading their history, shows
progress while it builds search, and ends with a short summary. It downloads the search model on first use
(about 130 MB). When everything saved, the Memory Atlas opens by itself. Add --no-open to skip that. For later
visits, inkvault dashboard opens the Atlas again:
uvx --from git+https://github.com/sandoreclegane/inkvault inkvault dashboard
Search for something you remember, select a result, and read it in context. Addinkvault schedule to refresh and back up your vault nightly, or
connect your AI tools to search it from a conversation.
Have a Pieces archive to save? See Rescuing from Pieces.
What InkVault preserves
With a nightly schedule, InkVault reads the session files Claude Code and Codex already keep on disk, and the history of the
browser profiles you chose, and copies in what's new: what you asked, what the assistant answered, what each session
was called, and which pages you opened. Your AI tools can then search what they helped you with, and what you were
reading, last month or last year, long after the original files are gone.
- Claude Code: every project, from
~/.claude/projects. Synced messages stay in your vault after source cleanup. - Codex: every session it saved, from
~/.codex/sessions. - Claude desktop app (agent mode, Windows): including prompts only its audit log kept.
- Your browsers: Chrome, Edge, Comet, Brave, Arc, Vivaldi, Opera and Firefox, only the profiles you say are yours
(how). Kept past the browser's own cleanup.
Only what's new since the last sync is added. Tool output and attachments are left out, and sign-in codes and
tokens are cleaned out of web addresses (see Privacy).
What you get
- A vault you own: preserved sessions, chosen browser history, optional screen activity, and any rescued
Pieces records in one local SQLite file,vault.db. Keep it independently of the tools that produced it. - Search for your AI tools: an MCP server with
search_memories(keyword + meaning, merged),timeline
("what was I doing in March?"),get_memory, andmemory_stats. - Memory Atlas: open it with
inkvault dashboard(or the InkVault Atlas icon frominkvault dashboard --shortcut
on Windows). It shows your year: active hours per day (hover a day for what it was about), when you work, how your
projects connect, projects and topics over time, top apps and sites. Every chart has a table view. A Search view
finds things across your vault and opens the original in a reader. It runs on this computer only (127.0.0.1, a
private link, stops when idle) and needs no internet. - Daily Light (v0.3.2): a daily quotation from 32 curated public-domain passages, chosen by your local date,
without using your history. Hide it for the current Atlas session. When indexed activity exists on today's date
in an earlier year, On this day opens it in Search. You can also browse any date range by setting both
From and To without entering a keyword. These date-browsing additions are Atlas-only; MCP tools are unchanged. - Your Claude Code, Codex and Claude desktop sessions: your prompts and the replies, side by side with your
other preserved history, searchable as chats (named likeClaude Code · project: title), and part of the timeline, the
digests and the dashboard. - Your browser history: pages you opened in Chrome, Edge, Comet, Brave, Arc, Vivaldi, Opera or
Firefox, from the browser profiles you say are yours. Visits already copied stay in the vault after the browser
removes them. Searchable asweb, on the timeline, in the digests and on the dashboard. - Screen capture (optional, Windows): a timeline of the windows you used, plus the text of the windows in
apps you choose. No images are kept. See Screen capture. - Daily digests (optional): a 2-3 sentence summary of each day, written by a local model through
Ollama. Summarize your preserved activity without sending it to a hosted model.
Connect your AI tools
Claude Code
claude mcp add inkvault --scope user -- uvx --from git+https://github.com/sandoreclegane/inkvault inkvault serve
Codex (~/.codex/config.toml)
[mcp_servers.inkvault]
command = "uvx"
args = ["--from", "git+https://github.com/sandoreclegane/inkvault", "inkvault", "serve"]
Hermes, Claude Desktop, and other MCP clients: run uvx --from git+https://github.com/sandoreclegane/inkvault inkvault serve over stdio.
Then ask: "What was I working on the week of March 10?", "Find that retry helper I saved", "When did I last look at the Stripe dashboard?"
Your browser history
A browser profile can belong to someone else, so InkVault reads none until you choose:
inkvault browsers
It lists every profile it finds (browser, name, signed-in email) and asks which are yours. sync and rescue
ask too when they find a new one; the nightly run never asks, and skips profiles you haven't chosen. If someone
else starts using a browser on this computer, run inkvault browsers again: InkVault notices a profile that was
replaced on Windows and macOS, and when a profile's signed-in account changes, but it can't always tell.
inkvault browsers --no "chrome/Profile 2" --forgetstops copying a profile and removes what was copied, even
after the browser is uninstalled.inkvault browsers --skip-site mybank.comnever keeps that site or its subdomains, and removes what's there.
Removing rebuilds search and the dashboard and deletes the digests for each removed visit's day (in UTC) and the day
either side. If it's interrupted, the next inkvault sync, inkvault index or nightly run finishes it, and search
stays off until then. It can't recall an answer your AI tool already received, or a dashboard tab that's already
open. The nightly backups still hold the removed visits until they rotate out (7 nights).
What's kept: each page's address and title, and when you opened it. Before anything is stored, InkVault
removes parts of addresses that carry sign-in codes, tokens, signed links, password-reset tokens, and your email
or username. Searches (?q=…) stay. This catches the common shapes, not every possible secret. Copying happens
while the browser runs, so the newest few visits can wait for the next sync.
Safari isn't supported yet (macOS blocks reading it without Full Disk Access).
Screen capture (Windows)
With inkvault watch, you can add a local timeline of foreground windows and read text from apps you choose.
Screen capture stays off until you install the watcher. It's Windows-only for now; on macOS and Linuxinkvault watch says so and exits.
What it records
- A timeline, everywhere. Every foreground window becomes a stretch: the app, a cleaned title, and when it
started and ended. A window you only flick through isn't kept, and time you're away (no input for 5 minutes, or the
screen is locked) isn't counted. - Text, in apps you choose. After you settle on a window for 30 seconds, InkVault reads its text (Windows' own
OCR, on your machine) and stores it if it changed. A given window is read at most every 2 minutes. - No images, ever. The window image exists in memory just long enough to read, and is never written to disk.
- Before anything is stored, secrets in titles and text (API keys, tokens, JWTs,
password: ...values) are masked
and URLs are cleaned. This catches the common shapes, not every possible secret.
Which apps get text. By default: Comet and Edge; Claude, ChatGPT, Perplexity and Codex; Windows Terminal, VS
Code and Cursor; Notion, Obsidian and Notepad; and the Microsoft 365 apps (Word, Excel, PowerPoint, Outlook, new
Outlook, OneNote). Every other app is timeline-only. Two groups are off until you say yes, and --install asks:
- Messaging apps (Discord, WhatsApp, Telegram, Teams, LinkedIn). Reading them stores other people's messages and
names, and Discord's title is the name of the person you're talking to. Off unless you answer yes. - Chrome. Its window title is just the page and "Google Chrome", with no profile name, so InkVault can't tell
your Chrome profiles from anyone else's. Off unless you answer yes.
Without a terminal (for example a scripted install) both stay off. You can add or remove any app yourself.
Everyone using the Windows account is captured. The watcher runs in the account that installed it, from sign-in.
If anyone else uses that account, what they do is recorded too. Use a separate Windows account for anyone who
shouldn't be.
Never captured. Password managers and Windows' sign-in and permission prompts (1Password, Bitwarden, KeePass,
KeePassXC, the lock screen, UAC) are skipped entirely: no stretch, no text. So are windows whose title containsInPrivate, Incognito or Private Browsing, and anything you add with --never-app or --never-title.
Install
uv tool install "inkvault[screen]"
inkvault watch --apps # preview: shows the settings, records nothing
inkvault watch --install # asks about messaging apps and Chrome, then starts at every sign-in
--apps is a preview: it shows which apps get text and which are never captured, and starts nothing. --install
registers a Task Scheduler task that starts the watcher at sign-in, restarts it if it stops, and checks it's really
running before it says "screen capture is on". It also adds two desktop shortcuts: Pause screen capture (1 hour)
and Resume screen capture. Without the screen extra (or without an OCR language installed in Windows) the
watcher still records the timeline, and inkvault status says why there's no text.
Controls
| Command | Does |
|---|---|
inkvault watch --apps |
Show which apps get text and which are never captured. Changes nothing |
inkvault watch --install |
Start screen capture now and at every sign-in |
inkvault watch --stop |
Stop the running watcher (it starts again at the next sign-in) |
inkvault watch --pause 30m, 1h or until-tomorrow |
Record nothing for a while. Works even during a nightly run |
inkvault watch --resume |
End a pause |
inkvault watch --add-app EXE / --remove-app EXE |
Read text in this app / back to timeline-only |
inkvault watch --never-app EXE |
Never record this app at all |
inkvault watch --never-title TEXT |
Skip any window whose title contains this text |
inkvault watch --reset-settings |
Back to the default settings |
inkvault watch --uninstall |
Stop the watcher and remove the sign-in task |
Settings live in screen.json in your InkVault folder, and the watcher picks up a change within a couple of
seconds. If the file is unreadable or invalid, it records nothing until it's fixed. Executable names ignore case.
Searching it
timelineshows screen activity live: a separate Screen section lists the windows in the range, newest
first, including the one open now.search_memoriesfinds screen text and window titles after the nightly index (orinkvault index); results
say how far the index reaches. Usesource="screen"for just screen activity.get_memoryon a screen result shows the window's app, title and times, and its most recent text.inkvault statusshows the watcher (running, paused, the app in front, last error), the sign-in task, and how many
stretches and text reads were stored.- The dashboard has a Screen time tile and a Screen time by app chart, and daily digests include screen time by
app and the longest windows. Digests never include screen text.
Forgetting
inkvault forget --screen --app Discord.exe
inkvault forget --screen --since "2026-10-12 09:00" --until "2026-10-12 11:30"
Times are your local time: a --since date means local midnight; an --until date includes that whole
day. Add Z or an offset for an exact instant. --until only goes with --since; --app removes all of an app.
Whole windows are removed: any stretch that overlaps the range goes, with all its text, and the command shows the
span it actually removed before it asks. Search, the dashboard and the digests are rebuilt without it. Nightly
backups made before then still hold it until they rotate out (7 nights), and an answer an AI tool already received
can't be recalled. Forgetting removes the past only: to stop recording an app, use --never-app.
Limits
- Banks and other sensitive sites. Your browser-history
skip_siteslist holds domains, but a window title
rarely contains one, so it can't be applied here. Put the text a bank's page title shows into--never-title
(for example--never-title "Example Bank"). - Private windows. The markers (
InPrivate,Incognito,Private Browsing) are English. A localized browser
may use other words, or none: add yours with--never-title. - A last moment. InkVault checks the window just before and just after it reads it, and drops the text if it
changed. A window that changes in the instant between the last check and the screen being drawn can't be caught. - Search is nightly,
timelineis live. New screen activity shows intimelineat once, and in search after the
next index. - Store apps are timeline-only. Windows Store (UWP) apps run inside a frame window that holds no text, so they
show up in the timeline but their text isn't read. - Windows only. macOS and Linux aren't supported.
Keep it up to date
Keep supported sessions and chosen browser history up to date, rebuild search and the Atlas, and back up
your vault every night:
uvx --from git+https://github.com/sandoreclegane/inkvault inkvault schedule
This installs InkVault as a permanent inkvault command (with uv tool install, or updates an older one) and sets
up a nightly run at 03:00 with your system's own scheduler: Task Scheduler on Windows, launchd on macOS, a systemd
user timer (or cron) on Linux. If uv's tool folder isn't on your PATH, it tells you to run uv tool update-shell.
Each run exports new captures (if PiecesOS is running), copies new Claude Code and Codex sessions and new browser
history from the profiles you chose, and saves a dated copy of vault.db in backups/ right after (the last 7 are
kept). Then it rebuilds search, writes new digests (if
Ollama is running) and rebuilds the dashboard. One step failing never stops the others. The computer is kept awake
while it runs (Windows and macOS). The export has a time budget: if a big backlog doesn't fit, the run stops
cleanly, backs up what it has, and the next night continues where it stopped.
rescue won't start while a nightly run is going; it tells you to try again. If a rescue is going when the nightly
run starts, the run waits for it (up to an hour); the rescue makes its own backup when it finishes.
inkvault status shows the schedule and how the last run went. It checks the scheduler itself, and says so if the
task was disabled, runs a different vault (there's one nightly run per computer user, so scheduling another vault
replaces it), or points at an InkVault install that's gone, and it flags a run that's overdue (none in 26 hours).
Each run is logged to nightly.log in your InkVault folder (or nightly-fallback.log next to it, if nightly.log
can't be written).
The schedule is tied to your vault folder, so if you started with --home, run schedule with the same --home.
If the computer is asleep or off at run time:
- Windows and systemd catch up when the computer is next on.
- macOS catches up after sleep, but not after a power-off.
- cron doesn't catch up.
The Windows task runs only while you're logged in. You can have the computer wake for the run:
- Windows:
scheduleasks. Your power plan must allow wake timers, and some laptops (Modern Standby) ignore them. - macOS:
scheduleasks, then prints a one-timesudo pmset repeat ...command for you to run. It replaces anypmset repeatschedule you already have. - Linux: a user timer can't wake the computer. systemd runs the timer while you're logged in;
loginctl enable-linger $USERkeeps it going always.
inkvault schedule --at 02:30 picks another time, --wake or --no-wake skips the question, --off turns it off,
and uv tool upgrade inkvault updates InkVault.
Commands
| Command | Does |
|---|---|
inkvault rescue |
Export, index, digest (if Ollama is running), build and open the dashboard |
inkvault export |
Copy everything out of PiecesOS. Safe to stop and re-run: it only adds what's new |
inkvault sync |
Copy new Claude Code and Codex sessions and browser history into the vault, then rebuild search |
inkvault browsers [--yes|--no KEY] [--forget] [--skip-site HOST] |
Choose which browser profiles are yours, and sites never to keep |
inkvault index |
Rebuild search |
inkvault digest [--model M] [--redo] |
Daily digests with a local model (default qwen3.5:4b) |
inkvault dashboard |
Rebuild and open the Memory Atlas |
inkvault serve |
Run the MCP server |
inkvault status |
What's in your vault and where it lives, plus the schedule and last nightly run |
inkvault watch ... |
Screen capture (Windows): preview, install, pause, stop. See Screen capture |
inkvault forget --screen --app EXE / --since T --until T |
Remove screen capture from the vault |
inkvault schedule [--at HH:MM] [--wake|--no-wake] [--off] |
Refresh and back up the vault every night |
inkvault nightly |
One refresh + backup now (what the schedule runs) |
Privacy
This is your screen history, your chats, your browsing and your code. InkVault stores and searches your archive locally:
- Everything is stored in your app-data folder (
%LOCALAPPDATA%\InkVault,~/Library/Application Support/InkVault,
or~/.local/share/inkvault), or whereverINKVAULT_HOMEpoints. Never inside the code folder. - No telemetry, no accounts, no cloud.
- InkVault itself does not upload your archive. When you connect an AI client through MCP, memories returned to that
client may be sent to its model provider under that client's settings. Choose your client and settings accordingly. - One thing is downloaded: the search model (~130 MB from Hugging Face, once). The Atlas makes no network requests;
its chart library (ECharts) is bundled, so it works offline. - Digests use Ollama on your own machine. Skip them with
--no-digest. - From Claude Code and Codex sessions, InkVault keeps what you typed, what the assistant replied and session titles.
Claude Code's replies include its tool calls, so a file it wrote is kept as written. Tool output (files it read,
command output), pasted images and attachments are left out: they are most of each file and where secrets tend
to show up. That lowers the risk; it can't rule it out, since anything you typed or pasted as text is kept. - Browser history is read only from the profiles you choose (
inkvault browsers), from a copy of the browser's
file. InkVault keeps each page's address and title and when you opened it, after removing parts of addresses
that carry sign-in codes, tokens, signed links, reset tokens, or your email or username. It can't promise to catch
every secret.inkvault browsers --skip-siteand--no … --forgetremove what you don't want kept. - Screen capture (Windows, off until you install it) keeps window titles and, for the apps you choose, their text.
Images are never saved. Secrets in titles and text are masked before they are stored. See
Screen capture for what it can't catch. The connected-client boundary above applies
to screen memories too. - Captured text and page titles were written by other people, apps and websites. The MCP server tells your AI tool
to treat them as data, not instructions.
Back up your vault. It is one file: vault.db in your InkVault folder. Everything else can be rebuilt from it
with inkvault index.
Rescuing from Pieces
InkVault began as a way to preserve Pieces memory. Rescue remains a supported use case; you can also
start and keep a vault without Pieces.
Keep PiecesOS installed and running until your export is safely complete:
uvx --from git+https://github.com/sandoreclegane/inkvault inkvault rescue
The export preserves the raw records PiecesOS returns: captures, summaries and their text, chats,
snippets, tags, websites, and people.
It takes a while. PiecesOS hands records over at about 8 per second, so a year of captures (~100,000) takes
around 3-4 hours. Leave it running, or press Ctrl+C anytime: InkVault keeps everything saved so far and opens
a dashboard of what you have. Run the same command again later and it picks up where it left off.
Good to know
- Your projects on the dashboard are detected from recurring phrases in your session titles. To choose your own,
createthemes.txtin your InkVault folder with lines likeWebsite = website|landing page|stripeand runinkvault dashboard. - Topics come from the topic tags Pieces wrote on each session summary. Ongoing topics recur across months;
bursts are concentrated in a few weeks. They appear after the nextinkvault index(part ofrescueand the
nightly run). Thanks to Anthony at Pieces for the idea. - Claude Code and Codex sessions are read from
~/.claude/projectsand~/.codex/sessions(orCLAUDE_CONFIG_DIRandCODEX_HOMEif you set them).rescueand the nightly run do this too;inkvault sync
does it on its own, and works without Pieces. Only what's new since the last sync is read. - Claude desktop app sessions (agent mode, Windows) are read from the app's own folder
(%LOCALAPPDATA%\Packages\Claude_*\LocalCache\Roaming\Claude\local-agent-mode-sessions) and namedClaude desktop · project: title. On macOS and Linux they aren't read yet. - PiecesOS port: InkVault reads the port PiecesOS saved in its own config (
.port.txt), then the port that worked
last time, then tries 39300 and 1000. To force a port, setINKVAULT_PIECES_PORTSor pass--pieces-ports
(for the nightly run:inkvault --pieces-ports 39301 schedule). - Pieces' own export tool: Pieces said they'd send one. Use it too; two copies are better than one. Support
for importing its format into InkVault is planned. - Tested on Windows with PiecesOS 12.6.2 and a vault of 120,000 captures. macOS and Linux should work;
reports are welcome.inkvault schedulehas been tested end to end on Windows; on macOS and Linux it is
covered by automated tests only so far, so a report from a real Mac or Linux machine would help a lot.
Not affiliated with Pieces
InkVault is an independent project. "Pieces" is a trademark of its owner.
MIT licensed. Made by T. Matthew Chase / Logos 7.
Yorumlar (0)
Yorum birakmak icin giris yap.
Yorum birakSonuc bulunamadi