Agent skill

Taste

by TryCaspian in TryCaspian/caspian-sdk

Domain-first store/port design for any codebase: product-shaped APIs, swappable backends, schema at boundaries, one vocabulary catalog (derive don’t re-author), no infrastructure names on the domain…

AGPL-3.0Auto-check passedDatabases

Install Taste

skills CLI
$ npx skills add TryCaspian/caspian-sdk --skill taste -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install TryCaspian/caspian-sdk taste --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/TryCaspian/caspian-sdk.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.cursor/skills/taste .claude/skills/taste && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
taste
GitHub stars
973
Token cost
~1.8k tokens
SKILL.md length
903 words
Files
1
Skills in repo
8
Repo updated
First seen
Licence
AGPL-3.0

At a glance

Domain-first store/port design for any codebase: product-shaped APIs, swappable backends, schema at boundaries, one vocabulary catalog (derive don’t re-author), no infrastructure names on the domain…

  • Works in 7 steps: One fact, one place. Vocabulary and… → Indexed ideas over parallel nouns.… → HOF means shared ritual, not twin… → …
  • Refactoring persistence
  • SKILL.md covers When this applies, Taste (abstract), Taste (call sites & policy) and Hard rules
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Taste is an agent skill from TryCaspian/caspian-sdk. Domain-first store/port design for any codebase: product-shaped APIs, swappable backends, schema at boundaries, one vocabulary catalog (derive don’t re-author), no infrastructure names on the domain surface. Use when adding or refactoring persistence, cache, policy resolve, registries, or anything that might leak Redis/SQL/HTTP/SDK names into shared contracts. Taste: one fact one place, HOF as shared ritual not twin wrappers, call-site clarity, dumb engines, challenge early / cut ruthlessly, DX (cascading…

Its SKILL.md is about 1.8k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Databases, covering Query optimization and Refactoring. It works with Redis and SQL. The repository describes itself as: Agent communication SDK. The open-source agent communication layer for AI agents — email, WhatsApp, Slack, Discord, Telegram, SMS. Python & TypeScript. The licence is AGPL-3.0.

When your agent uses it

  • Refactoring persistence
  • Anything that might leak Redis/SQL/HTTP/SDK names into shared contracts

Example prompts

  • “/taste”

Workflow steps

7 steps, taken from the first numbered list in SKILL.md.

  1. One fact, one place. Vocabulary and policy live in small catalogs
  2. Indexed ideas over parallel nouns. Prefer catalog row + allowed dims →
  3. HOF means shared ritual, not twin wrappers. Three helpers that only
  4. Call sites stay obvious. Pass raw fields; schema owns null/empty. Don’t
  5. Engine stays dumb; boundaries stay sharp. Cascade/match with a simple
  6. Challenge early, cut ruthlessly. Prefer deleting a layer to polishing a
  7. DX is part of correctness. If IntelliSense doesn’t follow a new dim or

What it can do on your machine

Read from SKILL.md and the folder at commit 718a96d. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md.

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Taste loads about 1.8k tokens when it runs. Until then it costs about 166 tokens; SKILL.md has 903 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~166
When it runs · the whole SKILL.md, loaded when a task matches
~1.8k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from TryCaspian/caspian-sdk at commit 718a96d, republished under its AGPL-3.0 licence (© TryCaspian). 903 words, ~1,827 tokens.

Download SKILL.mdSave it as .claude/skills/taste/SKILL.md (or your agent's skills folder).
name
taste
description
Domain-first store/port design for any codebase: product-shaped APIs, swappable backends, schema at boundaries, one vocabulary catalog (derive don’t re-author), no infrastructure names on the domain surface. Use when adding or refactoring persistence, cache, policy resolve, registries, or anything that might leak Redis/SQL/HTTP/SDK names into shared contracts. Taste: one fact one place, HOF as shared ritual not twin wrappers, call-site clarity, dumb engines, challenge early / cut ruthlessly, DX (cascading IntelliSense) as correctness, policy resolve → push-down query plan (not load-all-then-filter), no hardcodes when dims/rows already name the filter.

Domain-first stores

Portable agent law for persistence, cache, policy documents, and similar ports. If the repo has its own AGENTS.md overlay, read that after this file and prefer project overrides for paths and house libraries.

When this applies

Designing or changing shared domain surfaces: stores, registries, policy resolve, CAS/publish, desired-set membership, or multi-service clients that must not fork wire APIs.

Taste (abstract)

  1. One fact, one place. Vocabulary and policy live in small catalogs (dimensions, fields, families). Everything else is derived. If adding one concept means editing three sibling types (FooConfig + FooContext + FooDims), delete the twins.

  2. Indexed ideas over parallel nouns. Prefer catalog row + allowed dims → context/result over re-authored per-family Structs. Types should cascade from the catalog.

  3. HOF means shared ritual, not twin wrappers. Three helpers that only inject the same default are copy. Lift once when compose actually repeats; otherwise inline. Prefer decodeFamily(family, …) over decodeFoo / decodeBar / decodeBaz.

  4. Call sites stay obvious. Pass raw fields; schema owns null/empty. Don’t hide a one-liner behind a named helper. One context type: scalar or non-empty array per dim; match with equality or ∈. Closed dims declare enums on the registry; open dims stay free strings.

  5. Engine stays dumb; boundaries stay sharp. Cascade/match with a simple priority rule — no expand/desugar pass. Allowlists and IntelliSense live at catalog / publish / family resolve — not a second “pass a Policy bag” API. Resolve on use (ports); never freeze knobs at create* / make* boot.

  6. Challenge early, cut ruthlessly. Prefer deleting a layer to polishing a wrong one. Redundant Structs and family-specific context exports are smell, not thoroughness.

  7. DX is part of correctness. If IntelliSense doesn’t follow a new dim or field, the type model failed — even when runtime works. Adding a dim = registry row; adding a field = one catalog row (+ family key list if needed).

Taste (call sites & policy)

  1. Call site stays clean. Decode at the family/resolve boundary — not scattered ?? / === "" ? null / dual APIs for the same policy.

  2. Invariants at the boundary. Decode once; the rest of the system only sees a clean shape. Schema bounds are the ceiling — don’t re-clamp the same knobs via env at boot.

  3. Resolve from real context. Hot path uses identity dims that exist (fooId / bar / region / …) against defaults + overrides — not a bare env-only context when richer identity is available, and not a parallel Policy injection. Example: resolve.foo({ env: "published", fooId, bar }).

  4. Pass the whole port, not plucked fields. Wire resolve.foo (or the whole resolve bag) into consumers — don’t extract fooLimit at main / server and pass a number.

  5. One concern, one return. Boot/open helpers return the store (or one domain value) — not { store, resolveEverything }. Callers compose resolve ports at the edge.

  6. Share the ritual, don’t twin it. One module per compose; no service-local copies of the same decode/match/apply.

  7. Defaults everywhere, scoped when stated. Defaults are the base case; dimensions/overrides only matter when specified.

  8. Ugly in adapters/scripts, not the server. Seeds and fixtures are scripts; empty required config → fail loud.

  9. Explain by flow, not jargon. Show a concrete resolve example (defaults + matching override → result).

  10. Live day one, minimal now. Production-minded (version/revert, HA) but ruthlessly cut scope. Ship the flexible core; defer authoring UI / extra domains until needed.

  11. House schema library owns Encoded/Type. Prefer derived FamilyContextEncoded<"foo"> over hand-rolled { fooId: string; … } bags.

  12. Policy resolve drives the query — don’t filter the world in JS. Derive a conservative DB/search plan from the same resolve port (probe closed dims like bar from the registry), push WHERE / ORDER / LIMIT (or equivalent), then re-resolve with full row context (fooId, …) only on the small result for open-dim overrides. Example: planFooLoad(resolveFoo) → SQL filters + LIMIT → JS finish for per-fooId keep/drop.

  13. No hardcodes when the row or closed enum already names it. Don’t bake bar = 'qux' into loaders that should follow the registry. Prefer bar IN (enabled…) from resolve, or no bar predicate when the plan is “all enabled bars.” Hardcodes fight multi-value dims and make admin overrides lie.

  14. Prefilter is conservative; finish pass is exact. Under-fetching because the plan guessed wrong is worse than a slightly larger LIMIT. Closed-dim floors/size from resolve are safe bounds; open dims (fooId) stay in the post-load pass. Skip the query when every probed context resolves disabled.

Show full SKILL.md (198 more words)Show less

Hard rules

  1. Domain API first. Public names describe product concepts (getFields, writeAll, publish, retain), never wire commands (hgetall, INSERT, GetItem) or vendor products in types, factories, errors, or domain comments.

  2. Backends are swappable. Runtime adapters (cache, SQL, HTTP, SDK) vs in-process backends for unit tests. Do not bake wire commands into the Tag / port interface.

  3. Service shape. Prefer an explicit service interface + tagged errors. Factories return the service / Layer — not createVendorX(client).

  4. Wire only at the edge. Adapters map infrastructure → domain. Scripts, pipelines, and SDK calls stay inside adapters — not on public contract exports’ names.

  5. One shared module per concern. Do not fork the same store into two services. Put it in a shared package (packages/domain, packages/contracts, …).

  6. No duplicate client interfaces. If the domain service already defines ops, don’t redefine the same Promise surface under another name in a service package.

  7. Side channels stay adapters. Pub/sub channel strings, queue names, and publish transport calls are adapter details. Domain may expose publish → boolean and an optional sink — not transport identifiers on the Tag.

  8. Comments stay product-shaped. Don’t document “Redis-backed” / “Dynamo-backed” on domain constructors. Say what the backend does (in-process cache, scripted CAS).

© TryCaspian, AGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .cursor/skills/taste of TryCaspian/caspian-sdk.

Open the folder on GitHubat commit 718a96d

Compare with similar skills

Taste next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Taste compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Taste this skillTryCaspian/caspian-sdk973—~1.8kAutomated safety check: PassAGPL-3.0
Discover Databaserand/cc-polymath181—~2kAutomated safety check: PassMIT
Django Filter Benchmarksaleor/saleor23k—~2.3kAutomated safety check: PassBSD-3-Clause
SQL Optimization Patternsynulihao/AgentSkillOS61711 repos~3.3kAutomated safety check: PassNone
PostgreSQL Documentation Reference2025Emma/vibe-coding-cn23k1 repos~19kAutomated safety check: PassMIT
Relational Query ProcessorFoundationDB/fdb-record-layer675—~1kAutomated safety check: PassApache-2.0

Similar skills

  • Discover Database

    rand/cc-polymath

    Automatically discover database skills when working with SQL, PostgreSQL, MongoDB, Redis, database schema design, query optimization, migrations, connection pooling, ORMs, or database selection.

    181 GitHub stars~2k tokensUpdated 7 mo ago
    DatabasesAuto-check passed
  • Benchmarks Django ORM filters in Saleor by generating bulk data, extracting the SQL and running EXPLAIN ANALYZE to check index usage.

    23k GitHub stars~2.3k tokensUpdated yesterday
    DatabasesAuto-check passed
  • SQL Optimization Patterns

    ynulihao/AgentSkillOS

    Master SQL query optimization, indexing strategies, and EXPLAIN analysis to dramatically improve database performance and eliminate slow queries.

    617 GitHub starsUsed in 11 repos~3.3k tokens
    DatabasesAuto-check passed
  • PostgreSQL Documentation Reference

    2025Emma/vibe-coding-cn

    PostgreSQL database documentation - SQL queries, database design, administration, performance tuning, and advanced features. Use when working with PostgreSQL…

    23k GitHub starsUsed in 1 repo~19k tokens
    DatabasesAuto-check passed
  • Relational Query Processor

    FoundationDB/fdb-record-layer

    Specialized skill for working in the fdb-relational-core SQL processing layer — parser, plan generator, and Cascades planner.

    675 GitHub stars~1k tokensUpdated today
    DatabasesAuto-check passed
  • Clickhouse System Queries

    FrankChen021/datastoria

    Query ClickHouse system tables to inspect query logs, monitor cluster health, check replication status, and analyze slow queries.

    327 GitHub stars~731 tokensUpdated 2 mo ago
    DatabasesAuto-check passed

More from TryCaspian/caspian-sdk

All 8 skills in this repo
  • Caspian Toast Test

    TryCaspian/caspian-sdk

    Dummy skill to test OpenCode TUI toast UI (and optional system notification) via caspiantesttoast.

    973 GitHub stars~267 tokensUpdated 1 mo ago
    Auto-check passed
  • Caspian Connect Email

    TryCaspian/caspian-sdk

    Connect Caspian email for OpenCode: ensure credentials (sandbox or dashboard API key), write caspian.env, connect inbox, enable email in caspian.json.

    973 GitHub stars~566 tokensUpdated 1 mo ago
    Auto-check: notes
  • Caspian Connect Discord

    TryCaspian/caspian-sdk

    Connect Caspian Discord for OpenCode (install OAuth or BYO bot token), enable discord in caspian.json channels, and tell the user to restart.

    973 GitHub stars~376 tokensUpdated 1 mo ago
    Auto-check: notes
  • Caspian Connect Telegram

    TryCaspian/caspian-sdk

    Connect Caspian Telegram for OpenCode, enable telegram in caspian.json channels, and tell the user to restart.

    973 GitHub stars~446 tokensUpdated 1 mo ago
    Auto-check: notes
  • Caspian Discord

    TryCaspian/caspian-sdk

    Post a Discord message via Caspian to a channel snowflake id.

    973 GitHub stars~323 tokensUpdated 1 mo ago
    Auto-check passed
  • Caspian Inbox

    TryCaspian/caspian-sdk

    Caspian Inbox (caspian:Inbox) — list agent email and other configured channel conversations/messages.

    973 GitHub stars~347 tokensUpdated 1 mo ago
    Auto-check passed

Works with

Categories

Questions about Taste

What does Taste do?

Domain-first store/port design for any codebase: product-shaped APIs, swappable backends, schema at boundaries, one vocabulary catalog (derive don’t re-author), no infrastructure names on the domain…. Taste is an agent skill from TryCaspian/caspian-sdk. Domain-first store/port design for any codebase: product-shaped APIs, swappable backends, schema at boundaries, one vocabulary catalog (derive don’t re-author), no infrastructure names on the domain surface.

When should I use Taste?

Taste fits situations like: refactoring persistence; anything that might leak Redis/SQL/HTTP/SDK names into shared contracts.

How do I install Taste in Claude Code?

Run `npx skills add TryCaspian/caspian-sdk --skill taste -a claude-code`. Or copy the skill folder (.cursor/skills/taste in TryCaspian/caspian-sdk) into .claude/skills/taste in your project. Claude Code loads it when a task matches its description.

How do I install Taste in Codex?

Run `npx skills add TryCaspian/caspian-sdk --skill taste -a codex`. Or copy the skill folder (.cursor/skills/taste in TryCaspian/caspian-sdk) into .agents/skills/taste in your project. Codex loads it when a task matches its description.

Can I use Taste in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add TryCaspian/caspian-sdk --skill taste -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/taste, .gemini/skills/taste, .github/skills/taste and .opencode/skills/taste in your project.

What does Taste need to run?

SKILL.md names no scripts, command-line tools or credentials: Taste is instructions for the agent only.

Does Taste access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Taste safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Taste use?

Taste is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Taste use?

About 1.8k tokens (SKILL.md is roughly 7.3k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Taste?

Skills that share tags, products or a category with Taste: Discover Database (rand/cc-polymath, 181 stars), Django Filter Benchmark (saleor/saleor, 23k stars), SQL Optimization Patterns (ynulihao/AgentSkillOS, 617 stars) and PostgreSQL Documentation Reference (2025Emma/vibe-coding-cn, 23k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Taste?

TryCaspian (a GitHub organization) maintains it in TryCaspian/caspian-sdk, which has 973 GitHub stars. The repository holds 8 skills in this directory. The repository was last updated on August 25, 2026.

Source: TryCaspian/caspian-sdk on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.