Lightweight local memory for vibe coding: prompts, edits, conflicts, decisions
Project description
Viberr
Lightweight local memory for vibe coding. Cursor hooks write prompts, edits, conflicts, and decisions to a single readable log. A small CLI helps you browse, search, and recap your sessions.
No server. No dashboard. No accounts.
What it solves
- Prompt amnesia — every prompt and response preview, timestamped
- File-change provenance — which prompt caused which edit (with diff)
- AI vs manual — edits you make yourself are tagged
source: manual - Conflicting AI edits — overlapping line ranges from different prompts
- Decision tracking — extracts "use X", "never Y" and flags contradictions
- Session recap —
viberr recap→ markdown summary of everything that happened - Full-text search —
viberr search "JWT"across prompts, diffs, and commands
Requirements
- Python 3.10+
- Git (a git repo is required —
viberr initwill tell you if one is missing) - Cursor IDE with hooks enabled (Settings → Features → Hooks)
- Minimum Cursor version: any build that ships
hooks.jsonsupport (≥ 0.42)
- Minimum Cursor version: any build that ships
Other editors (experimental): Adapter stubs for Claude Code, Aider, Cline, and Windsurf are included. Full support for these will be added in a future release.
Quick start
pip install viberr
cd your-git-repo
viberr init
Use Cursor in that workspace. Events append to .viberr/events.ndjson automatically.
What you'll see
viberr status
Events file: /your/project/.viberr/events.ndjson
Total events: 42
Active conversation: sess_a1b2c3
Latest work session: work_1 (3 conversation(s))
[40] prompt evt_d4e5f6
[41] edit evt_g7h8i9
[42] shell evt_j0k1l2
viberr recap
# Viberr recap
**Scope:** work session `work_1` (3 conversations)
## Summary
- **Conversations:** 3
- **Prompts:** 12
- **Edits:** 28 (25 AI, 3 manual)
- **Shell commands:** 7
- **Files touched:** 9
- **Conflicts:** 1
- **Decisions:** 4
- **Decision contradictions:** 0
## Prompts
- `evt_abc` — refactor the auth module to use JWT
- `evt_def` — add refresh token support
...
## Decisions
- **use** JWT for authentication
- **prefer** httponly cookies for token storage
## Conflicts
- `src/auth.py`: prompt `evt_abc` overlaps `evt_def` at [[45, 60]]
Commands
| Command | Description |
|---|---|
viberr init |
Git check, .viberr/, merge Cursor hooks, .gitignore |
viberr status |
Active session and recent events |
viberr log |
Print events (--session, --type, --tail, --since 1h) |
viberr show <id> |
Full event JSON |
viberr search <query> |
Search events (--regex, --type, --limit) |
viberr recap |
Markdown session summary |
viberr conflicts |
List conflict events |
viberr decisions |
List decision events |
viberr tail |
Follow the log live |
viberr export |
Export session (--format md|json|ndjson) |
viberr doctor |
Verify git, hooks, log file |
How it works
flowchart LR
Cursor[Cursor IDE] -->|hooks stdin/stdout| Hook[viberr.hook]
Hook --> Log[".viberr/events.ndjson"]
CLI[viberr CLI] --> Log
Hook --> State[".viberr/state.json"]
See docs/schema.md for the full event format and docs/how-to-use.md for a complete walkthrough of every command.
Privacy
All data stays on your machine under .viberr/. viberr init adds .viberr/ to .gitignore.
Secret scrubbing is on by default. Common credential patterns (API keys, tokens, passwords)
are redacted with [REDACTED] before reaching disk. Disable in .viberr/config.json:
{ "privacy": { "scrub_secrets": false } }
Even with scrubbing enabled, do not paste raw secrets into AI prompts — source-level caution is always better than automatic redaction.
Configuration
.viberr/config.json (created by viberr init):
{
"decisions": {
"enabled": true,
"scan_responses": false
},
"work_session": {
"idle_minutes": 30
},
"privacy": {
"scrub_secrets": true
}
}
Development
pip install -e ".[dev]"
pytest -q
ruff check viberr/ tests/
History
Earlier internal prototypes used a FastAPI daemon, SQLite, and a VS Code extension.
v0.1 strips all of that back to a zero-dependency, hooks-only design that works with
the single pip install viberr + viberr init workflow.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file viberr-0.1.0.tar.gz.
File metadata
- Download URL: viberr-0.1.0.tar.gz
- Upload date:
- Size: 29.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
503cc9360de0bfd784c67b93f3ccb34e0c292bffe33ccc132aeb820b5df962e1
|
|
| MD5 |
856d1f2a93fe4ba8eddd0c7ddc40bf82
|
|
| BLAKE2b-256 |
89a26691641cb3e113bb0bdb3455bd4af0b9818b7e0fa7961a8e89349704dc32
|
File details
Details for the file viberr-0.1.0-py3-none-any.whl.
File metadata
- Download URL: viberr-0.1.0-py3-none-any.whl
- Upload date:
- Size: 31.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
82902cfa71d08bdd197b2acdc2fa9cad31e8141b63c45ae0cd431fc522a0e081
|
|
| MD5 |
766d769a1dd31f43691672bb02b06107
|
|
| BLAKE2b-256 |
55625796ffb72994115f7b02cf6367f46cae58709e7c0d764f29ca538edc3926
|