174 lines
6.7 KiB
Markdown
174 lines
6.7 KiB
Markdown
---
|
|
name: ditto
|
|
description: "Use when a user asks to mine or update a private, evidence-backed work profile from local Claude Code, Codex, Copilot CLI, or OpenCode sessions."
|
|
category: agent-behavior
|
|
risk: critical
|
|
source: community
|
|
source_repo: ohad6k/ditto
|
|
source_type: community
|
|
date_added: "2026-07-14"
|
|
author: ohad6k
|
|
tags: [personalization, context-engineering, session-mining, agent-memory]
|
|
tools: [claude, cursor, gemini, codex-cli]
|
|
license: "MIT"
|
|
license_source: "https://github.com/ohad6k/ditto/blob/v0.3.6/LICENSE"
|
|
---
|
|
|
|
# Ditto
|
|
|
|
## Overview
|
|
|
|
Ditto mines only the user's words from real local coding-agent session logs and
|
|
turns repeated, supported patterns into private work, design, and writing
|
|
profiles. It keeps dated session receipts, rejects authored rules and memory as
|
|
source evidence, and requires approval before model-backed mining begins.
|
|
|
|
This standalone skill routes a compatible, already-installed Ditto runtime.
|
|
Native namespaced routing is available through the upstream Ditto plugin.
|
|
|
|
## When to Use This Skill
|
|
|
|
- Use when the user explicitly asks to set up, run, update, re-mine, or deepen Ditto.
|
|
- Use when the user wants an agent profile derived from real coding-session history rather than a questionnaire or rules file.
|
|
- Use when native `ditto:mine` is unavailable and the user already has a compatible Ditto runtime installed.
|
|
|
|
Do not trigger this skill merely because personalization might be useful. Mining
|
|
requires an explicit user request.
|
|
|
|
## How It Works
|
|
|
|
### 1. Resolve an installed runtime
|
|
|
|
Ask the user for the path to an existing, trusted Ditto runtime, or use the
|
|
native upstream plugin when it is already installed. Retain the exact Python 3
|
|
executable path as `PYTHON3`, the runtime path as `DITTO_PY`, and its matching
|
|
`MINING_PROMPT.md` path. Confirm the installed version and source before use.
|
|
|
|
Do not download or install executable code as part of this skill. If Ditto is
|
|
not installed, stop and direct the user to the upstream installation guidance;
|
|
installation is a separate, explicit decision.
|
|
|
|
### 2. Show the read-only mining plan
|
|
|
|
Mine only real user-authored sessions. Never synthesize a profile from
|
|
`AGENTS.md`, `CLAUDE.md`, memory files, rules files, or a typed self-description.
|
|
|
|
Run the full-history quality-default preflight:
|
|
|
|
```bash
|
|
"$PYTHON3" "$DITTO_PY" plugin preflight
|
|
```
|
|
|
|
Show the user the valid session count, post-dedupe source tokens, selected source
|
|
tokens, cache hits, planned worker calls, and planned reducer calls. Wait for
|
|
explicit approval of this displayed plan before any model-backed work.
|
|
|
|
If the user explicitly asks for a quick preview, add `--preview` and say exactly:
|
|
|
|
> Quick preview creates a starter profile from selected history, not the full profile.
|
|
|
|
Never present preview as the default or as equivalent to the full-history result.
|
|
|
|
### 3. Prepare the approved run
|
|
|
|
Retain the displayed `approval_hash`, then prepare with the exact approved mode.
|
|
For the full-history plan, run:
|
|
|
|
```bash
|
|
"$PYTHON3" "$DITTO_PY" plugin prepare --approved-plan-hash HASH
|
|
```
|
|
|
|
For an approved quick-preview plan, preserve preview mode explicitly:
|
|
|
|
```bash
|
|
"$PYTHON3" "$DITTO_PY" plugin prepare --preview --approved-plan-hash HASH
|
|
```
|
|
|
|
If the hash changes, show the new plan and obtain approval again. Retain the
|
|
returned `run_id`, assigned segment and report paths, and `pack_path`.
|
|
|
|
### 4. Mine and validate evidence
|
|
|
|
For every uncached selected segment, run one worker over only that segment and
|
|
the per-segment contract in the resolved `MINING_PROMPT.md`. Cache each JSON
|
|
report with `plugin cache-report` and stop on rejection.
|
|
|
|
Run one strongest-available reducer over only the validated reports and reducer
|
|
contract. Write the complete pack to `pack_path`, validate it, and activate only
|
|
the validated pack with `plugin activate`.
|
|
|
|
### 5. Verify and report
|
|
|
|
Run `plugin status`, render the profile card, and report:
|
|
|
|
- active version and core profile path
|
|
- active and inactive domains
|
|
- selected source tokens and actual worker/reducer passes
|
|
- cache reuse
|
|
- card path
|
|
- any exact targeted-deepen instruction
|
|
|
|
If the current host already has the native Ditto plugin, do not create a
|
|
competing direct profile installation.
|
|
|
|
## Examples
|
|
|
|
### Full-history setup
|
|
|
|
```text
|
|
User: run ditto on my coding history
|
|
Agent: resolves the pinned runtime, shows the read-only full-history plan, and
|
|
waits for explicit cost approval before starting any mining workers.
|
|
```
|
|
|
|
### Explicit quick preview
|
|
|
|
```text
|
|
User: give me a cheap ditto preview first
|
|
Agent: runs preflight with --preview, labels it as a starter profile, and waits
|
|
for approval of the displayed preview plan.
|
|
```
|
|
|
|
## Best Practices
|
|
|
|
- Keep raw sessions, caches, receipts, and generated profiles private by default.
|
|
- Report exact observed counts and paths; never estimate provider billing or coverage.
|
|
- Preserve the approval hash and mode through the complete run.
|
|
- Stop on validation failure instead of activating a partial profile.
|
|
- Share the card or a short trait, not the full private profile or receipt appendix.
|
|
|
|
## Limitations
|
|
|
|
- Ditto models working behavior; it does not make the underlying model smarter.
|
|
- Sparse or repetitive histories can leave design or writing domains inactive.
|
|
- Provider system prompts, tool traffic, and billing overhead are outside Ditto's exact token accounting.
|
|
- Quick preview has lower recall than the full-history quality default.
|
|
- Automatic work, design, and writing routing requires the upstream native plugin.
|
|
|
|
## Security & Safety Notes
|
|
|
|
- This skill does not download executable code; it requires an existing trusted Ditto installation.
|
|
- Extraction, redaction, caches, and generated profiles stay local. Selected redacted text is processed by the model provider the user chooses.
|
|
- Redaction is best-effort. Tell the user to inspect private output before sharing it.
|
|
- Never upload session logs or full profiles to a third party without explicit user approval.
|
|
- Installation itself schedules no mining model calls; every prepared mining mode still requires approval of its displayed plan.
|
|
|
|
## Common Pitfalls
|
|
|
|
- **Problem:** No eligible sessions are found.
|
|
|
|
**Solution:** Report the supported source locations that were checked and ask whether the user has retained or exported session history.
|
|
|
|
- **Problem:** The approval hash changed.
|
|
|
|
**Solution:** Do not reuse the old approval. Show the updated plan and obtain approval again.
|
|
|
|
- **Problem:** A cached or reduced report fails validation.
|
|
|
|
**Solution:** Stop, preserve the failure evidence, and never activate the incomplete pack.
|
|
|
|
## Related Skills
|
|
|
|
- `@agenttrace-session-audit` - Use for cost, latency, failure, and health analysis of coding-agent sessions.
|
|
- `@agent-memory` - Use for explicit persistent knowledge storage rather than evidence-based profile mining.
|