{"slug": "taste-zero-config-session-taste-packer-for-ai-agents", "title": "Taste – Zero-config session-taste packer for AI agents", "summary": "Taste, a zero-configuration tool for AI agents, compresses context from 56K to 1.9K tokens by automatically learning coding patterns from git history and session logs, enabling agents to write project-specific code with 97% less token usage.", "body_md": "*Zero-config. Auto-learns. Just works.*\n\n**97% smaller context · Auto-learns your style · Works with any agent**\n\nCompresses AI agent context from 56K tokens to 1.9K tokens. Learns your coding patterns from git history and session logs. Results vary by project size and session history.\n\nYou know the problem. You start an AI agent session. It reads your entire project: session logs, git diffs, READMEs, config files. It writes code that doesn't match your style. It wastes tokens and produces generic, bloated code.\n\ntaste puts a stop to that. It learns your patterns. It compresses your context. It makes your agents write code like you do.\n\nYou ask for a rate limiter. Your agent reads 56K tokens of context, installs a library, writes a generic implementation, and asks about your Redis setup.\n\nWith taste:\n\n```\ntaste\n# Creates .session-doc.md with 1.9K tokens\n# Agent reads your patterns, writes code your way\n```\n\nMore examples in [examples/](/dvcoolarun/taste-ai/blob/main/examples).\n\nFive metrics, one goal: make your agents write better code with less context.\n\n| Metric | Without taste | With taste | Improvement |\n|---|---|---|---|\n| Token usage | 56,000 | 1,950 | 97% reduction |\n| Context quality | Generic | Project-specific | Better |\n| Pattern learning | Manual | Automatic | Zero-config |\n| Agent support | Single | Multiple | 3+ agents |\n| Setup time | Hours | Seconds | Instant |\n\n**97% smaller context, auto-learns your style, and works with any agent.** Every pattern taste learns is marked in the code with confidence scores. Reproduce it yourself: run `taste learn`\n\nin any project. Method and raw numbers: [benchmarks/](/dvcoolarun/taste-ai/blob/main/benchmarks). Real-world examples: [examples/](/dvcoolarun/taste-ai/blob/main/examples).\n\n**That is the byproduct, not the pitch.** These are average numbers, and they vary by project. Larger projects with more session history see better compression. Smaller projects with less history see smaller savings. And all of this is iterative: each time you run `taste learn`\n\n, it learns more patterns, which makes the next compression better. The rule was never \"fewest tokens.\" It is: learn only what the project needs, and never skip validation, error handling, security, or accessibility. The context ends up small because it is necessary, not trimmed, and that is the part that stays useful. Better code quality is a side effect of learning your style, and that is the part that matters.\n\nBefore compressing context, taste learns your patterns:\n\n```\n1. Collect session data    → git diffs, session logs, taste config\n2. Create summary          → compact format, essential information only\n3. Analyze with agent      → calls opencode or claude\n4. Extract patterns        → naming, architecture, imports, error handling, style\n5. Update taste config     → append to TASTE.md, update .agent-taste.json\n```\n\nLazy, not negligent: validation, error handling, security, and accessibility patterns are never skipped.\n\nThe most effort taste will ever ask of you:\n\n```\ncurl -fsSL https://raw.githubusercontent.com/dvcoolarun/taste-ai/main/install.sh | bash\ngit clone https://github.com/dvcoolarun/taste-ai.git\ncd taste-ai\nchmod +x taste\ncp taste ~/.local/bin/\ntaste help\n```\n\nThat was it. It would be proud. It won't say it.\n\n```\n# In any project directory\ntaste\n\n# Generates .session-doc.md with compressed context\n# Analyze last 3 sessions and learn patterns\ntaste learn\n\n# Analyze last 5 sessions\ntaste learn --depth 5\n\n# Show patterns without updating files\ntaste learn --dry-run\n# Create default .agent-taste.json\ntaste init\n# Display current taste configuration\ntaste show\n```\n\n| Command | What it does |\n|---|---|\n`taste` |\nPack session context into `.session-doc.md` |\n`taste pack [file]` |\nPack to specific output file |\n`taste init` |\nCreate default `.agent-taste.json` |\n`taste show` |\nShow current taste config |\n`taste learn` |\nLearn patterns from recent sessions (agent-assisted) |\n`taste help` |\nShow help |\n\ntaste learn analyzes your coding sessions and extracts patterns:\n\n```\n┌─────────────────────────────────────────────────────────┐\n│              Data Collection                            │\n│  - Last 3-5 session logs                               │\n│  - Last 3-5 prompt logs                                │\n│  - Git diffs (last 3-5 commits)                        │\n│  - Current taste config                                │\n└─────────────────────────────────────────────────────────┘\n                           │\n                           ▼\n┌─────────────────────────────────────────────────────────┐\n│              Summary Creation                           │\n│  - Compact format (18KB typical)                       │\n│  - Token-efficient structure                           │\n│  - Essential information only                          │\n└─────────────────────────────────────────────────────────┘\n                           │\n                           ▼\n┌─────────────────────────────────────────────────────────┐\n│              Agent Analysis                             │\n│  - Calls opencode or claude                            │\n│  - Uses pattern extraction prompt                      │\n│  - Returns structured patterns                         │\n└─────────────────────────────────────────────────────────┘\n                           │\n                           ▼\n┌─────────────────────────────────────────────────────────┐\n│              Pattern Extraction                         │\n│  - NAMING conventions → TASTE.md                       │\n│  - ARCHITECTURE patterns → TASTE.md                    │\n│  - IMPORTS style → TASTE.md                            │\n│  - ERROR_HANDLING patterns → TASTE.md                  │\n│  - STYLE preferences → TASTE.md                        │\n│  - BANNED_PATTERNS → .agent-taste.json                 │\n└─────────────────────────────────────────────────────────┘\n                           │\n                           ▼\n┌─────────────────────────────────────────────────────────┐\n│              Auto-Update                                │\n│  - Positive patterns → TASTE.md                        │\n│  - Banned patterns → .agent-taste.json                 │\n│  - Preserve existing patterns                          │\n│  - Avoid duplicates                                    │\n└─────────────────────────────────────────────────────────┘\n```\n\n| Category | What It Learns | Output Location |\n|---|---|---|\n| NAMING | Function naming conventions (snake_case, camelCase, etc.) | TASTE.md |\n| ARCHITECTURE | Project structure patterns, dependency management | TASTE.md |\n| IMPORTS | Import style, ordering, lazy vs eager imports | TASTE.md |\n| ERROR_HANDLING | Try/catch patterns, error propagation | TASTE.md |\n| STYLE | Code formatting, function length, comments | TASTE.md |\n| BANNED_PATTERNS | What NOT to do, with reasons | .agent-taste.json |\n\ntaste learns both positive patterns (what to do) and negative patterns (what NOT to do). Banned patterns are extracted from user corrections, past mistakes, and feedback.\n\n**Example banned patterns:**\n\n```\n{\n  \"banned_patterns\": [\n    \"--single-process_Chromium_flag_on_macOS (reason: causes crashes, documented failure)\",\n    \"hardcoding_connection_URLs_or_env_specific_values (reason: caused 'Queue service unavailable' failure)\",\n    \"jumping_to_implementation_before_design_alignment (reason: wasted work when pricing model wasn't confirmed)\",\n    \"removing_comments_during_code_rewrites (reason: user explicitly called out and expects preservation)\",\n    \"using_browser_only_Node_APIs_in_subprocess (reason: ErrorEvent caused ReferenceError)\"\n  ]\n}\n```\n\n**Why banned patterns matter:**\n\n**Specific**- Not generic (\"don't use classes\") but concrete (\"don't use --single_process_Chrome_flag\")** Actionable**- Clear reasons that explain WHY it's banned** Learned from mistakes**- \"was replaced with page.setContent\" shows historical context** Platform-aware**- \"crashes on macOS\" shows environment-specific knowledge\n\n**How banned patterns work:**\n\n- Agent extracts BANNED_PATTERNS from session data\n- Patterns are written to\n`.agent-taste.json`\n\nas a JSON array - When you run\n`taste`\n\n, banned patterns are included in`.session-doc.md`\n\n- Agents read the banned patterns and avoid those patterns\n\nEach pattern includes a confidence score (0-1):\n\n**0.9-1.0**: Very high confidence (seen multiple times)** 0.8-0.9**: High confidence (seen consistently)** 0.7-0.8**: Medium confidence (seen occasionally)** 0.6-0.7**: Low confidence (seen once or twice)**<0.6**: Not included (insufficient evidence)\n\nEach time you run `taste learn`\n\n, it:\n\n**Reads** your latest session logs and git diffs**Analyzes** patterns with an AI agent**Extracts** structured patterns with confidence scores**Updates** your taste config (TASTE.md, .agent-taste.json)**Preserves** existing patterns and avoids duplicates\n\nThe more you use taste, the better it learns your style. Pattern confidence increases as it sees the same patterns across multiple sessions.\n\n```\n# Before starting opencode\ntaste\n\n# Feed to opencode\nopencode .\n# Before starting claude\ntaste\n\n# Feed to claude\nclaude .\n# Generate context\ntaste\n\n# Agent reads .session-doc.md automatically\n# TASTE BOUNDARIES\nSource: `.agent-taste.json`\n``` json\n{\n  \"flavor\": \"Functional TypeScript, strict types, zero dependencies\",\n  \"banned_patterns\": [\"classes\", \"any\", \"console.log\"],\n  \"style\": \"Implicit returns, max 20 lines per function\"\n}\nBranch: main\n\nLast 5 commits:\nabc1234 refactor: extract auth to /core\ndef5678 feat: add token validation\n\nChanged files (last commit):\nsrc/auth.ts | 12 +++---\nsrc/utils.ts | 5 +++-\n### `taste learn` Output\n```\n\ntaste: Analyzing last 3 sessions... taste: Collecting session data... taste: Summary created: 18818 bytes taste: Calling opencode for analysis...\n\nLEARNED PATTERNS (last 3 sessions):\n\nNAMING:\n\n- functions_describe_action_verbs (confidence: 0.9)\n- classes_use_PascalCase_Prefixed (confidence: 0.9)\n- variables_underscore_separated_snake_case (confidence: 0.8)\n\nARCHITECTURE:\n\n- Python_FastAPI_fronts_with_Node_subprocess_backend_via_stdin_stdout_bridge\n- async_job_queue_with_redis_backend_and_RQ_worker\n- dual_storage_PDF_disk_and_Redis_cache\n\nIMPORTS:\n\n- lazy_import_inside_endpoint_to_avoid_side_effects\n- from_stdlib_then_third_party_then_local_grouped\n- explicit_imports_not_star_imports_used\n\nERROR_HANDLING:\n\n- log_then_raise_precise_HTTPException_with_detail\n- check_rate_limit_before_database_operation\n- refund_credits_by_saving_values_before_session_closes\n\nSTYLE:\n\n- short_direct_corrections_fix_agent_behavior_precisely\n- comment_preservation_expected_across_rewrites\n\nBANNED_PATTERNS:\n\n- --single-process_Chromium_flag_on_macOS (reason: causes crashes, documented failure)\n- hardcoding_connection_URLs_or_env_specific_values (reason: caused 'Queue service unavailable' failure)\n- jumping_to_implementation_before_design_alignment (reason: wasted work when pricing model wasn't confirmed)\n- removing_comments_during_code_rewrites (reason: user explicitly called out and expects preservation)\n- using_browser_only_Node_APIs_in_subprocess (reason: ErrorEvent caused ReferenceError)\n\nUpdated: TASTE.md, .agent-taste.json\n\n```\n## Auto-Capture\n\ntaste learn automatically captures your current session if no recent session files exist:\n\n``` bash\n# If docs/session-*.md doesn't exist or is older than 2 hours\ntaste learn\n\n# It will:\n# 1. Capture git history + diffs\n# 2. Capture current taste config\n# 3. Create docs/session-[YYYY-MM-DD-HHMM].md\n# 4. Create prompts/prompt-[YYYY-MM-DD-HHMM].md\n# 5. Analyze patterns and update taste config\n```\n\n**What it captures:**\n\n- Git history (last 3 commits + diffs)\n- Current taste config (\n`.agent-taste.json`\n\nor`TASTE.md`\n\n) - Last 3-5 session log summaries\n\n**What it does NOT capture:**\n\n- Terminal histories\n- Agent session logs\n- Full file contents\n\n**Before taste:**\n\n```\nRaw context:\n- Session logs: ~40,000 words\n- Git diffs: ~10,000 words\n- README.md: ~1,000 words\n- Session notes: ~500 words\nTotal: ~51,000 words (~66,000 tokens)\n```\n\n**After taste:**\n\n```\nCompressed context:\n- Taste config: ~120 words\n- Git summary: ~200 words\n- Session notes: ~200 words\n- Agent config: ~500 words\nTotal: ~1,500 words (~1,950 tokens)\n```\n\n**Savings:**\n\n**Words**: 51,000 → 1,500 (97% reduction)** Tokens**: 66,000 → 1,950 (97% reduction)\n\nCreate `~/.config/taste/base.json`\n\nfor global settings:\n\n```\n{\n  \"flavor\": \"Standard idiomatic development\",\n  \"banned_patterns\": [],\n  \"style\": \"Prefer clarity over brevity\"\n}\n```\n\nCreate `.agent-taste.json`\n\nin your project root:\n\n```\n{\n  \"flavor\": \"Functional TypeScript, strict types, zero dependencies\",\n  \"banned_patterns\": [\n    \"classes\",\n    \"any\",\n    \"console.log\"\n  ],\n  \"style\": \"Implicit returns, max 20 lines per function\"\n}\n```\n\n**After running taste learn, banned patterns are automatically populated:**\n\n```\n{\n  \"flavor\": \"Standard idiomatic development\",\n  \"banned_patterns\": [\n    \"--single-process_Chromium_flag_on_macOS (reason: causes crashes, documented failure)\",\n    \"hardcoding_connection_URLs_or_env_specific_values (reason: caused 'Queue service unavailable' failure)\",\n    \"jumping_to_implementation_before_design_alignment (reason: wasted work when pricing model wasn't confirmed)\",\n    \"removing_comments_during_code_rewrites (reason: user explicitly called out and expects preservation)\",\n    \"using_browser_only_Node_APIs_in_subprocess (reason: ErrorEvent caused ReferenceError)\"\n  ],\n  \"style\": \"Prefer clarity over brevity\",\n  \"learned\": {}\n}\n```\n\n**Does it need a config file?**\nNo. An optional `.agent-taste.json`\n\nor `TASTE.md`\n\ncan be created, but nothing is required. taste works with zero configuration.\n\n**What if I really need that 120-line cache class?**\nYou don't. Insist anyway and taste will learn your pattern. Slowly. Correctly. While looking at you.\n\n**Does it scale?**\nThe context you never waste scales infinitely. Zero tokens wasted, zero generic code, 100% style matching since forever.\n\n**Why \"taste\"?**\nYou know exactly why.\n\n- bash 4.0+\n- git\n- opencode or claude (for\n`taste learn`\n\n)\n\n- Multi-agent support (claude, codex, commandcode)\n- Session auto-capture (daemon mode)\n- Global taste config (\n`~/.config/taste/`\n\n) - JSON output for agents\n- Integration with more agent harnesses\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n- Fork the repository\n- Create your feature branch (\n`git checkout -b feature/amazing-feature`\n\n) - Commit your changes (\n`git commit -m 'Add amazing feature'`\n\n) - Push to the branch (\n`git push origin feature/amazing-feature`\n\n) - Open a Pull Request\n\n[MIT](/dvcoolarun/taste-ai/blob/main/LICENSE). The shortest license that works.", "url": "https://wpnews.pro/news/taste-zero-config-session-taste-packer-for-ai-agents", "canonical_source": "https://github.com/dvcoolarun/taste-ai", "published_at": "2026-06-19 11:58:57+00:00", "updated_at": "2026-06-19 12:08:07.405040+00:00", "lang": "en", "topics": ["ai-agents", "developer-tools", "large-language-models", "ai-tools"], "entities": ["Taste", "opencode", "Claude"], "alternates": {"html": "https://wpnews.pro/news/taste-zero-config-session-taste-packer-for-ai-agents", "markdown": "https://wpnews.pro/news/taste-zero-config-session-taste-packer-for-ai-agents.md", "text": "https://wpnews.pro/news/taste-zero-config-session-taste-packer-for-ai-agents.txt", "jsonld": "https://wpnews.pro/news/taste-zero-config-session-taste-packer-for-ai-agents.jsonld"}}