Personalize AI coding assistants by analyzing conversation history
Project description
vardoger
A cross-platform plugin for AI coding assistants (Cursor, Claude Code, OpenAI Codex, OpenClaw) that reads your conversation history, extracts behavioral patterns, and generates personalized system prompt additions — making the assistant progressively better suited to how you work.
All processing happens locally. No data ever leaves your machine.
Prerequisites
Python 3.11+
| Platform | Command |
|---|---|
| macOS | brew install python@3.13 (install Homebrew) or python.org/downloads/macos |
| Debian / Ubuntu | sudo apt install python3 |
| Fedora | sudo dnf install python3 |
| Windows | winget install Python.Python.3.13 or python.org/downloads/windows |
pipx
Recommended for installing vardoger as an isolated CLI tool. Full instructions at pipx.pypa.io/stable/installation.
| Platform | Command |
|---|---|
| macOS | brew install pipx && pipx ensurepath |
| Debian / Ubuntu | sudo apt install pipx && pipx ensurepath |
| Fedora | sudo dnf install pipx && pipx ensurepath |
| Windows | scoop install pipx or pip install --user pipx && pipx ensurepath |
Quick Start
pipx install vardoger
vardoger setup cursor # or claude-code, codex, openclaw
Then tell your assistant: "Personalize my assistant."
CLI Commands
| Command | Purpose |
|---|---|
vardoger setup <platform> |
Register vardoger with a platform (cursor, claude-code, codex, openclaw). |
vardoger status [--platform X] [--json] |
Report whether each personalization is fresh or stale. |
vardoger prepare --platform X [--batch N] [--synthesize] |
Produce the batched prompts used by the AI-driven skill pipeline. |
vardoger write --platform X |
Read synthesized personalization from stdin and write it to the platform's rules file (supports YAML-frontmatter confidence metadata). |
vardoger feedback accept|reject --platform X [--reason TEXT] |
Record whether you kept or rejected the last generation. reject auto-reverts to the prior generation. |
vardoger compare --platform X | --all [--window DAYS] [--json] |
Compare heuristic conversation-quality metrics before vs. after the latest personalization. |
How It Works
- Read — Parses conversation history already stored on disk by each platform
- Analyze — The host AI model identifies patterns in your communication style, tech stack, workflow, and preferences
- Generate — Produces a system prompt addition tailored to you
- Deliver — Writes the addition to the platform's native config (
.cursor/rules/,.claude/rules/,AGENTS.md, etc.)
Supported Platforms
| Platform | History Source | Prompt Delivery | Integration |
|---|---|---|---|
| Cursor | Agent transcript JSONL | .cursor/rules/vardoger.md |
MCP server |
| Claude Code | Session JSONL | .claude/rules/vardoger.md |
Plugin with skill |
| OpenAI Codex | Session rollout JSONL | ~/.codex/AGENTS.md |
Plugin with skill |
| OpenClaw | Session JSONL | ~/.openclaw/skills/vardoger-personalization/SKILL.md |
Skill |
Development
Requires uv (Python package manager):
git clone https://github.com/dstrupl/vardoger.git
cd vardoger
uv sync
.venv/bin/vardoger --help
Project Layout
src/vardoger/ # shared core — history reading, analysis, prompt generation
plugins/cursor/ # Cursor MCP server config, install script
plugins/claude-code/ # Claude Code plugin manifest, skills
plugins/codex/ # Codex plugin manifest, skills
plugins/openclaw/ # OpenClaw skill
tests/ # all tests, mirroring src/ structure
- Platform-agnostic logic lives under
src/vardoger/. - Platform-specific integration (manifests, skills, install scripts) lives under
plugins/<platform>/. - Tests live in
tests/, mirroring the source tree.
See AGENTS.md for full coding standards and quality checks.
Quality gates
CI enforces a combined quality bar on every push and pull request:
ruff check/ruff format --check— lint (incl. complexity, pylint, return, pathlib, tryceratops rules) and formatting.mypy src/— strict type checking.pytest --cov=vardoger --cov-fail-under=80— tests across Python 3.11–3.13 with a combined 80% coverage floor.- A parallel security job runs
bandit -r src/andpip-audit --skip-editableto catch common code smells and dependency CVEs.
Run the full bundle locally before pushing:
uv run ruff check . && uv run ruff format --check . && uv run mypy src/ && uv run pytest --cov=vardoger --cov-fail-under=80
Contributing
Contributions are welcome. Short version:
- Fork
dstrupl/vardogeron GitHub and clone your fork. uv syncand create a topic branch.- Make your changes with tests and run the quality-gate one-liner above.
- Push to your fork and open a PR against
main.
CI (test on Python 3.11/3.12/3.13 plus a security job) will run automatically on the PR. First-time contributors may need a maintainer to click Approve and run before the first workflow execution.
See CONTRIBUTING.md for the full walkthrough and AGENTS.md for coding standards and commit-message conventions.
Releasing to PyPI
CI runs automatically on every push and PR (lint, type check, tests across Python 3.11–3.13). To publish a new version:
- Bump
versioninpyproject.toml - Commit and push to
main - Go to Releases > Create a new release
- Create a new tag matching the version (e.g.
v0.1.0), add a title and description - Click Publish release
The publish.yml workflow builds the package and uploads it to PyPI via trusted publishers (no API tokens needed). Once complete, pipx install vardoger will pull the new version.
Status
Early development. See PRD.md for the full product requirements document.
License
Licensed under the Apache License, Version 2.0.
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 vardoger-0.1.0b1.tar.gz.
File metadata
- Download URL: vardoger-0.1.0b1.tar.gz
- Upload date:
- Size: 70.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b8e613081320c24efbb387b05ebb52bf6a7d373872883cb339d6dc921e83e92f
|
|
| MD5 |
927fe4e7f09bd90208ed08672176f363
|
|
| BLAKE2b-256 |
49d916d51b07bc295ffa9c8dfa276f650198ad1dc44c6ec0f276e5fd76926870
|
Provenance
The following attestation bundles were made for vardoger-0.1.0b1.tar.gz:
Publisher:
publish.yml on dstrupl/vardoger
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
vardoger-0.1.0b1.tar.gz -
Subject digest:
b8e613081320c24efbb387b05ebb52bf6a7d373872883cb339d6dc921e83e92f - Sigstore transparency entry: 1328155901
- Sigstore integration time:
-
Permalink:
dstrupl/vardoger@df55cef24bf2ee93d64b5955248513535b6faee2 -
Branch / Tag:
refs/tags/v0.1.0b1 - Owner: https://github.com/dstrupl
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@df55cef24bf2ee93d64b5955248513535b6faee2 -
Trigger Event:
release
-
Statement type:
File details
Details for the file vardoger-0.1.0b1-py3-none-any.whl.
File metadata
- Download URL: vardoger-0.1.0b1-py3-none-any.whl
- Upload date:
- Size: 53.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e6cd82e8f5e282c396102b020edd8c9e29ade8dea581d6c4e7d3af27379c931f
|
|
| MD5 |
8320863389750af58f0f97eaa1e9d49f
|
|
| BLAKE2b-256 |
f9842b584ccc2bbf7813baec8534a51b0cf4c0656bafb6e5590adf7e05ba6e51
|
Provenance
The following attestation bundles were made for vardoger-0.1.0b1-py3-none-any.whl:
Publisher:
publish.yml on dstrupl/vardoger
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
vardoger-0.1.0b1-py3-none-any.whl -
Subject digest:
e6cd82e8f5e282c396102b020edd8c9e29ade8dea581d6c4e7d3af27379c931f - Sigstore transparency entry: 1328155906
- Sigstore integration time:
-
Permalink:
dstrupl/vardoger@df55cef24bf2ee93d64b5955248513535b6faee2 -
Branch / Tag:
refs/tags/v0.1.0b1 - Owner: https://github.com/dstrupl
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@df55cef24bf2ee93d64b5955248513535b6faee2 -
Trigger Event:
release
-
Statement type: