Skip to main content

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 recapviberr recap → markdown summary of everything that happened
  • Full-text searchviberr search "JWT" across prompts, diffs, and commands

Requirements

  • Python 3.10+
  • Git (a git repo is required — viberr init will tell you if one is missing)
  • Cursor IDE with hooks enabled (Settings → Features → Hooks)
    • Minimum Cursor version: any build that ships hooks.json support (≥ 0.42)

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

viberr-0.1.0.tar.gz (29.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

viberr-0.1.0-py3-none-any.whl (31.9 kB view details)

Uploaded Python 3

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

Hashes for viberr-0.1.0.tar.gz
Algorithm Hash digest
SHA256 503cc9360de0bfd784c67b93f3ccb34e0c292bffe33ccc132aeb820b5df962e1
MD5 856d1f2a93fe4ba8eddd0c7ddc40bf82
BLAKE2b-256 89a26691641cb3e113bb0bdb3455bd4af0b9818b7e0fa7961a8e89349704dc32

See more details on using hashes here.

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

Hashes for viberr-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 82902cfa71d08bdd197b2acdc2fa9cad31e8141b63c45ae0cd431fc522a0e081
MD5 766d769a1dd31f43691672bb02b06107
BLAKE2b-256 55625796ffb72994115f7b02cf6367f46cae58709e7c0d764f29ca538edc3926

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page