Metadata-Version: 2.4
Name: viberr
Version: 0.1.0
Summary: Lightweight local memory for vibe coding: prompts, edits, conflicts, decisions
Project-URL: Homepage, https://github.com/tanush-em/viberr
Project-URL: Repository, https://github.com/tanush-em/viberr
Project-URL: Issues, https://github.com/tanush-em/viberr/issues
Project-URL: Changelog, https://github.com/tanush-em/viberr/blob/master/CHANGELOG.md
Author-email: Tanush <tanush@viberr.dev>
License-Expression: MIT
License-File: LICENSE
Keywords: agent,ai,cursor,developer-tools,llm,local-first,vibe-coding
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Software Development
Classifier: Topic :: Software Development :: Version Control
Classifier: Topic :: Utilities
Requires-Python: >=3.10
Requires-Dist: gitpython>=3.1.43
Provides-Extra: dev
Requires-Dist: build>=1.2.0; extra == 'dev'
Requires-Dist: mypy>=1.10.0; extra == 'dev'
Requires-Dist: pytest-cov>=5.0.0; extra == 'dev'
Requires-Dist: pytest>=8.0.0; extra == 'dev'
Requires-Dist: ruff>=0.4.0; extra == 'dev'
Requires-Dist: twine>=5.0.0; extra == 'dev'
Description-Content-Type: text/markdown

# 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 init` will tell you if one is missing)
- **[Cursor](https://cursor.sh)** 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

```bash
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

```mermaid
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](docs/schema.md) for the full event format and [docs/how-to-use.md](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`:

```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`):

```json
{
  "decisions": {
    "enabled": true,
    "scan_responses": false
  },
  "work_session": {
    "idle_minutes": 30
  },
  "privacy": {
    "scrub_secrets": true
  }
}
```

## Development

```bash
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
