skill-bartender โ€” task-to-skill pairing for DeepSeek Harness
# ๐Ÿธ skill-bartender ### *Mix the right skill cocktail for every task โ€” and never pour an untasted bottle.* [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) [![SkillSpector CI](https://github.com/akqwpeter-prog/skill-bartender/actions/workflows/scan.yml/badge.svg)](https://github.com/akqwpeter-prog/skill-bartender/actions/workflows/scan.yml) [![DeepSeek Harness](https://img.shields.io/badge/DeepSeek%20Harness-Skill-4D6BFE)](https://github.com/topics/dsh-plugin) [![Self-scan](https://img.shields.io/badge/SkillSpector-0%20findings-2EA44F)](docs/skillspector-report.json) [![Laziness ladder](https://img.shields.io/badge/ladder-0%20skills%20when%20possible-8B5CF6)](README.md#-why) [![Platforms](https://img.shields.io/badge/platforms-DSH%20ยท%20Claude%20Code%20ยท%20Codex-4D6BFE)](README.md#-quick-start) [![Docs](https://img.shields.io/badge/docs-2%20languages-4D6BFE)](docs/lang/README_ZH.md)
Your agent already sees a catalog of skill names and descriptions โ€” but it **over-pours**: loads too many skills, loads the wrong ones, or misses the one workflow skill that composes the task. **skill-bartender** is the meta-skill that fixes the pour: - ๐Ÿชœ **Laziness ladder** โ€” zero skills when plain tools suffice; one skill when one matches; workflow over hand-composed atomics; unsure โ†’ don't load. - ๐Ÿท **Routing table** โ€” a user-editable taskโ†’skill map (`references/policy.md`) that overrides the defaults. - ๐Ÿ” **Safe cellar** โ€” a needed skill missing? Quarantine โ†’ SkillSpector scan โ†’ explicit human approval โ†’ install. Never auto-installs. - ๐Ÿง  **Learn** โ€” loaded-but-unused skills get logged and skipped next time. - ๐Ÿงช **Taste test** โ€” audit installed skills and rewrite weak descriptions into "when-to-use" sentences. [Why](#-why) ยท [What you get](#-what-you-get) ยท [Quick start](#-quick-start) ยท [See it in action](#-see-it-in-action) ยท [Usage](#-usage) ยท [Security model](#-security-model-read-this) ยท [FAQ](#-faq) ยท [Examples](#-examples) ยท [Layout](#-layout) ยท [License](#-license) [**English**](README.md) ยท [**็ฎ€ไฝ“ไธญๆ–‡**](docs/lang/README_ZH.md)
--- ## ๐Ÿค” Why Most agents treat the skill catalog as an all-you-can-eat buffet. `skill-bartender` treats it as a bar with a taste test: | | skill-bartender | Typical catalog behavior | |---|---|---| | Skills loaded per task | usually **one**; zero when plain tools suffice | whatever matches, however many | | Workflow skills | โœ… preferred โ€” never hand-assemble atomics | โŒ often missed or hand-composed | | Unsure about a match | โŒ don't load (miss beats false pour) | โš ๏ธ loads "just in case" | | Installing a missing skill | ๐Ÿ” quarantine โ†’ scan โ†’ **human approval** | โš ๏ธ downloads straight into the skills dir | | Auto-install | โŒ never, by design | โš ๏ธ often silent | | Learns from unused loads | โœ… logged, skipped next time | โŒ no memory | **Why the "laziness ladder"?** A wrong skill body stays in conversation history forever; a missed load only costs one tool round-trip. The best load is the load never made (spirit: [ponytail](https://github.com/DietrichGebert/ponytail)). ## โœจ What you get | Capability | What it does | Where | |---|---|---| | ๐Ÿชœ Laziness ladder | Stop at the first rung that holds: 0 no skill โ†’ 1 one skill โ†’ 2 workflow skill โ†’ 3 unsure, don't load | all platforms | | ๐Ÿท Routing table | Taskโ†’skill map in `references/policy.md`; URL-keyed families (doc/drive/wiki/sheets/base/slides) routed by path pattern | all platforms | | ๐Ÿ” Safe cellar | Missing skill: search โ†’ **quarantine dir** โ†’ SkillSpector scan โ†’ scripts shown to human (default deny) โ†’ explicit yes โ†’ install; source + commit hash + verdict recorded | DSH, Claude Code, Codex | | ๐Ÿง  Learn | Unused loads logged and skipped for the same task type next time; chronic no-shows get offered for removal | DSH | | ๐Ÿงช Taste test | On request: list installed skills, rewrite weak descriptions into trigger-phrase form (under the 500-char catalog cap) | on request | ## โšก Quick start One file, three platforms: ```sh # DeepSeek Harness mkdir -p ~/.dsh/skills/skill-bartender cp skills/skill-bartender/SKILL.md ~/.dsh/skills/skill-bartender/ cp -r skills/skill-bartender/references ~/.dsh/skills/skill-bartender/ # Claude Code mkdir -p ~/.claude/skills/skill-bartender cp skills/skill-bartender/SKILL.md ~/.claude/skills/skill-bartender/ # Codex mkdir -p ~/.codex/skills/skill-bartender cp skills/skill-bartender/SKILL.md ~/.codex/skills/skill-bartender/ ``` Or install as a DeepSeek Harness bundle: ```sh dsh plugin --profile web add github:akqwpeter-prog/skill-bartender ``` Then say "skill-bartender" once, or paste the routing table into your AGENTS.md for always-on routing. Full examples: [docs/EXAMPLES.md](docs/EXAMPLES.md). ## ๐Ÿ“ธ See it in action *The pour flow in one picture: stop at the first rung that holds, and never install without a taste test.* How the pour works: laziness ladder (0 plain tools, 1 one match, 2 workflow, 3 unsure) plus the safe cellar (quarantine โ†’ SkillSpector scan โ†’ human approval โ†’ install) ## ๐Ÿš€ Usage Four ways to use it: | Way | How | When | |---|---|---| | **A. Say the name** | In any session, just say "skill-bartender" | One-off or first-time setup | | **B. Always-on routing** | Paste the routing table into AGENTS.md | Every task routes through the ladder | | **C. Request a pour** | "Which skill fits this task?" | Choosing among skills | | **D. Cellar audit** | "Audit my installed skills" | Taste test: weak descriptions get rewritten | `skill-bartender` must itself be loaded once (user gesture or task match) โ€” it never self-triggers, and never pre-loads "just in case". ## ๐Ÿ” Security model (read this) - Skills are **instructions**, and instructions can be adversarial (prompt injection). SkillSpector is a **filter, not a guarantee**. - `scripts/` in any skill is **code** โ€” never executed without human review. - Human approval is mandatory for every install. **No silent installs, ever.** - This skill scans itself clean: SkillSpector **0 findings** (score 0 / SAFE) โ€” [docs/skillspector-report.json](docs/skillspector-report.json). - Security policy: [SECURITY.md](SECURITY.md). ## โ“ FAQ **Does it auto-install missing skills?** No. Every download goes to a quarantine dir, gets scanned with SkillSpector, and is copied into the skills root only after explicit human approval. A passing scan is a filter, not a guarantee โ€” prompt injection survives static scans, so scripts are shown to the human and default-deny. **What if SkillSpector isn't installed?** `uv tool install git+https://github.com/NVIDIA/skillspector.git`, or run the manual checklist in `references/policy.md`. **Does it work with Claude Code and Codex?** Yes โ€” the same SKILL.md installs on all three platforms in ~15 seconds. **How is this different from DshMarket / dsh-find-plugin / dsh-plugin-autoevo?** They find, search, and auto-install plugins. skill-bartender adds the **routing policy** (ladder + routing table) and the **quarantine-then-approve** discipline. Use it *alongside* the ecosystem, not instead of it. **How is it evaluated?** The routing policy ships with a gold-task suite: [docs/eval.md](docs/eval.md). ## ๐ŸŽ Examples - [docs/EXAMPLES.md](docs/EXAMPLES.md) โ€” real routing cases, cellar installs, audits. - [docs/ROUTING-GUIDE.md](docs/ROUTING-GUIDE.md) โ€” how to write your own taskโ†’skill rules. - [docs/eval.md](docs/eval.md) โ€” gold-task suite for the routing policy. ## ๐Ÿ—บ๏ธ Layout ``` skill-bartender/ โ”œโ”€โ”€ skills/ โ”‚ โ””โ”€โ”€ skill-bartender/ โ”‚ โ”œโ”€โ”€ SKILL.md # the skill itself (one file, three platforms) โ”‚ โ””โ”€โ”€ references/policy.md # user-editable routing table โ”œโ”€โ”€ docs/ โ”‚ โ”œโ”€โ”€ screenshots/how-it-works.png โ”‚ โ”œโ”€โ”€ eval.md # gold-task suite โ”‚ โ”œโ”€โ”€ EXAMPLES.md / ROUTING-GUIDE.md โ”‚ โ”œโ”€โ”€ skillspector-report.json # self-scan: 0 findings โ”‚ โ”œโ”€โ”€ social-preview.png # banner (regenerate via scripts/) โ”‚ โ””โ”€โ”€ lang/README_ZH.md # ็ฎ€ไฝ“ไธญๆ–‡ โ”œโ”€โ”€ scripts/ โ”‚ โ”œโ”€โ”€ make-banner.py # composes docs/social-preview.png โ”‚ โ”œโ”€โ”€ make-diagram.py # composes the how-it-works diagram โ”‚ โ””โ”€โ”€ validate.py # local structure validation โ”œโ”€โ”€ cordis.patch.yml / index.js / package.json # DSH bundle manifest โ””โ”€โ”€ LICENSE (MIT) ``` ## ๐Ÿค Join the DSH plugin ecosystem DeepSeek Harness developer preview is still in its testing phase for Harness developers; core plugins and base APIs will keep iterating. We look forward to exploring the upper limits of intelligence together with developers worldwide, on top of open-source, open, reusable, and composable infrastructure. - [dsh-plugin topic](https://github.com/topics/dsh-plugin) - [Quickstart](https://deepseek-harness.github.io/deepseek-harness/guide/quickstart) - [DeepSeek Harness repo](https://github.com/deepseek-ai/deepseek-harness) - Companion executor: [dsh-skill-router](https://github.com/akqwpeter-prog/dsh-skill-router) > This repo is tagged [`dsh-plugin`](https://github.com/topics/dsh-plugin) and > listed in the [awesome-dsh-plugin](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin) > curated list. PRs, issues and translations are welcome. ## ๐Ÿ“„ License [MIT](LICENSE). Ponytail (MIT) is referenced, not bundled โ€” tribute in the SKILL.md.