Domain Modeling
fossasia/eventyay-interpretation
Build and sharpen a project's domain model. An agent skill from fossasia/eventyay-interpretation.
Analyzes an existing codebase using strategic Domain-Driven Design to discover bounded contexts, surface ubiquitous language and semantic collisions, find places where code boundaries diverge from…
$ npx skills add testdouble/han --skill ddd-analysis -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install testdouble/han ddd-analysis --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/testdouble/han.git skills-src && mkdir -p .claude/skills && cp -r skills-src/han-ddd/skills/ddd-analysis .claude/skills/ddd-analysis && rm -rf skills-srcUse ~/.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/
Install the "ddd-analysis" agent skill from https://github.com/testdouble/han/tree/main/han-ddd/skills/ddd-analysis into .claude/skills/ddd-analysis/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ddd-analysis", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/testdouble/han/tree/main/han-ddd/skills/ddd-analysisType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add testdouble/han --skill ddd-analysis -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install testdouble/han ddd-analysis --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/testdouble/han.git skills-src && mkdir -p .agents/skills && cp -r skills-src/han-ddd/skills/ddd-analysis .agents/skills/ddd-analysis && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "ddd-analysis" agent skill from https://github.com/testdouble/han/tree/main/han-ddd/skills/ddd-analysis into .agents/skills/ddd-analysis/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ddd-analysis", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add testdouble/han --skill ddd-analysis -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install testdouble/han ddd-analysis --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/testdouble/han.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/han-ddd/skills/ddd-analysis .cursor/skills/ddd-analysis && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "ddd-analysis" agent skill from https://github.com/testdouble/han/tree/main/han-ddd/skills/ddd-analysis into .cursor/skills/ddd-analysis/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ddd-analysis", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/testdouble/han.git --path han-ddd/skills/ddd-analysis--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add testdouble/han --skill ddd-analysis -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install testdouble/han ddd-analysis --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/testdouble/han.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/han-ddd/skills/ddd-analysis .gemini/skills/ddd-analysis && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "ddd-analysis" agent skill from https://github.com/testdouble/han/tree/main/han-ddd/skills/ddd-analysis into .gemini/skills/ddd-analysis/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ddd-analysis", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install testdouble/han ddd-analysisInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add testdouble/han --skill ddd-analysis -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/testdouble/han.git skills-src && mkdir -p .github/skills && cp -r skills-src/han-ddd/skills/ddd-analysis .github/skills/ddd-analysis && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "ddd-analysis" agent skill from https://github.com/testdouble/han/tree/main/han-ddd/skills/ddd-analysis into .github/skills/ddd-analysis/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ddd-analysis", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add testdouble/han --skill ddd-analysis -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install testdouble/han ddd-analysis --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/testdouble/han.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/han-ddd/skills/ddd-analysis .opencode/skills/ddd-analysis && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "ddd-analysis" agent skill from https://github.com/testdouble/han/tree/main/han-ddd/skills/ddd-analysis into .opencode/skills/ddd-analysis/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ddd-analysis", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
ddd-analysisAnalyzes an existing codebase using strategic Domain-Driven Design to discover bounded contexts, surface ubiquitous language and semantic collisions, find places where code boundaries diverge from…
Ddd Analysis is an agent skill from testdouble/han. Analyzes an existing codebase using strategic Domain-Driven Design to discover bounded contexts, surface ubiquitous language and semantic collisions, find places where code boundaries diverge from domain boundaries, and produce an evidence-backed domain and context map. Use when the goal is DDD-specific: bounded context discovery, ubiquitous language analysis, domain model discovery, or mapping contested ownership and responsibility. The entire repository is a valid scope; no module or directory must be named…
Its SKILL.md is about 7.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including reference files (for example `references/ddd-analysis-report-template.md`).
It sits in Development, covering Domain-driven design. The repository describes itself as: Han: AI skills and agents for "Solo" product engineers and small teams. The licence is MIT.
12 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit abba73a. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
ReadGlobGrepAgentWriteBash(find *)Bash(date *)Bash(mkdir *)Bash(bash "${CLAUDE_PLUGIN_ROOT}/scripts/han-config-dir.sh")From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
bashgitFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Ddd Analysis loads about 7.8k tokens when it runs, and up to ~11k if it reads all its reference files. Until then it costs about 218 tokens; SKILL.md has 3,980 words of instructions outside code blocks.
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.
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.
The full file from testdouble/han at commit abba73a, republished under its MIT licence (© testdouble). 3,980 words, ~7,762 tokens.
.claude/skills/ddd-analysis/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.which git 2>/dev/null || echo "not installed"find . -maxdepth 1 -name "CLAUDE.md" -type ffind . -maxdepth 3 -name "project-discovery.md" -type fbash "${CLAUDE_PLUGIN_ROOT}/scripts/han-config-dir.sh" 2>/dev/null || echo "$HOME/.claude"cat .han/config.md 2>/dev/null || echo ""As your first action, use the Read tool on .han/config.md inside the personal config directory path above. A
read that returns no file is no personal configuration: continue silently. When that file or the
project .han/config.md probe supplies content, apply it per
config-rule.md, which governs precedence between the two files, relative-path
resolution, and what to do with a file that reads but cannot be used.
Read these before dispatching anything. They constrain every step below.
han-planning:plan-a-feature (to
specify a change) or han-coding:architectural-analysis (for a code-level view of a specific module). The
context model informs those steps; it does not replace them.han-communication:readability-guidance and applies the shared standard, holding one audience above the
writing: the engineer or product manager reading the context model and deciding what to do next.Bind $size. If the user passed small, medium, or large as the first positional argument, bind $size
to it. If $size is none provided and the project config supplies a default-swarm-size value via
config-rule.md, adopt that value as $size and note the config as the source. If no value is available from
either source, set $size to medium.
Resolve the focus area. Take the remaining argument and conversation context as the focus area. If a focus area was supplied, confirm it resolves to real files using Glob and Read. If it does not resolve to actual files, stop and ask the user to clarify before proceeding. If no focus area was supplied, the scope is the entire repository — do not ask for one.
Resolve project context. If CLAUDE.md is present (see Project Context), read its ## Project Discovery
section for language, framework, and convention signals. Fall back to project-discovery.md if present. If neither
exists, discovery agents will infer from surrounding code — note this in every agent brief.
Note git availability. Read the git installed value from Project Context. If it is empty or reads
not installed, git is unavailable: note this in the agent briefs and in the report.
State the driving concern, if any. If the user named a concern ("I think billing and subscriptions overlap", "we need to understand where auth ends and identity begins"), capture it. Pass it to each discovery agent as a directing note — it biases attention without narrowing scope.
Resolve the run folder. Determine where this run's artifacts will land before dispatching any agent:
output-directory: When the config read above supplied an output-directory, resolve it per
config-rule.md (relative path resolves against the file that declared it;
~/ expands to home; full path is used as-is). Write the run folder beneath that resolved base.${TMPDIR:-/tmp} as the base. This keeps an
unconfigured analysis out of version control, matching the same principle that governs code-overview.Run date +%Y%m%d-%H%M%S via Bash to obtain a timestamp suffix. Name the run folder ddd-analysis-{timestamp}
inside the resolved base. If that directory already exists, check for -2, -3 suffixes until the name is free.
Run mkdir -p {run_folder}/discovery {run_folder}/synthesis to create the full directory tree. Set $run_folder
to the absolute resolved path — this value threads through every subsequent step.
If the resolved base cannot be written (permission error, path does not exist), fall back to
${TMPDIR:-/tmp}/ddd-analysis-{timestamp} and record the failed path so Step 12 can name it.
Survey the repository structure within the resolved scope. Use Bash and Glob to identify:
find {scope} -maxdepth 2 -type d | head -60)main.*, index.*, app.*, server.*, cli.*, or bootstrap.*model, models, entity, entities, schema, schemas,
migration, migrations, repository, repositoriesroutes, controllers, handlers, api, endpoints,
resolvers, clients, adapters, connectors, external, integrationsjob, worker, task, queue, consumer,
subscriber, event, EventRecord the inventory as a compact list of paths — this is context for later briefs, not a finding.
For large repositories: If the resolved scope is the entire repository and the top-level source tree contains
more than ten distinct application areas by directory, identify 3-5 meaningful partitions based on the directory
structure and names (for example: billing, fulfillment, identity). Include these partitions in the
han-core:structural-analyst and han-core:behavioral-analyst briefs in Step 4 to keep those analyses
tractable. These partitions are not context candidates and must not be named as such.
Depth bands control the calibration directive passed to the discovery agents. They do not change which agents are dispatched; this skill always dispatches exactly five discovery agents.
Announce in one line before dispatching:
Scope: {entire repository | focus area path}. Depth: {small | medium | large}. Dispatching
han-ddd:domain-language-analyst,han-ddd:business-capability-analyst,han-ddd:domain-ownership-analyst,han-core:structural-analyst, andhan-core:behavioral-analystin parallel. Git {available | unavailable}.
State any driving concern the user supplied. Proceed without a blocking confirmation — this analysis is read-only and re-runnable.
Dispatch all five agents with concurrent Agent calls. Each agent reads the codebase independently.
Brief for han-ddd:domain-language-analyst:
DL1, DL2, … exactly.$run_folder/discovery/domain-language.md and return only the path
written, the total DL# count, and a two-sentence summary of the highest-value signals.Brief for han-ddd:business-capability-analyst:
CAP1, CAP2, … exactly.$run_folder/discovery/business-capabilities.md and return only the
path written, the total CAP# count, and a two-sentence summary of the strongest behavioral signals.Brief for han-ddd:domain-ownership-analyst:
OWN1, OWN2, … exactly.$run_folder/discovery/domain-ownership.md and return only the path
written, the total OWN# count, and a two-sentence summary of the most significant authority signals.Brief for han-core:structural-analyst:
S1, S2, … exactly.Brief for han-core:behavioral-analyst:
B1, B2, … exactly.Wait for all five agents to return before proceeding.
The three han-ddd discovery agents have written their own artifacts and returned the paths. Use the Read tool to confirm each reported path exists. If an artifact is absent, note the shortfall — the skill continues without it, but Step 12 must name the missing file.
The han-core agents do not write their own artifacts. Write their verbatim returned output now:
$run_folder/discovery/structural.md using the
Write tool. Preserve every S# finding and its prefix exactly, including any "no findings" statements.$run_folder/discovery/behavioral.md using the
Write tool. Preserve every B# finding and its prefix exactly, including any "no findings" statements.The five discovery artifacts are now stable at:
$run_folder/discovery/domain-language.md$run_folder/discovery/business-capabilities.md$run_folder/discovery/domain-ownership.md$run_folder/discovery/structural.md$run_folder/discovery/behavioral.mdDo not carry their contents transiently in context. All downstream stages read from these paths directly.
Dispatch han-ddd:bounded-context-modeler with one Agent call. The brief must contain:
$run_folder/synthesis/context-model-initial.md and return only the path written, the BCM# count
by status, and the Bounded Context Model Summary.Wait for the modeler to return. Capture the reported path as $context_model_initial. Use Read to verify the file
was written. This is the first-pass model.
Dispatch han-ddd:bounded-context-critic with one Agent call. The brief must contain:
$context_model_initial. Instruct the agent to read this file with the Read tool before evaluating.$run_folder/synthesis/critique.md and return only the path written, the BCR# count with verdict
distribution, and the Bounded Context Model Critique Summary.Wait for the critic to return. Capture the reported path as $critique. Use Read to verify the file was written.
Dispatch han-ddd:bounded-context-modeler a second time with one Agent call. This is the final and only
revision pass. The brief must contain:
$context_model_initial. Instruct the agent to read this file with the Read tool.$critique. Instruct the agent to read this file with the Read tool.$run_folder/synthesis/context-model-final.md and return only the path written and a brief
revision summary (what changed from the first pass and why).Wait for the modeler to return. Capture the reported path as $context_model_final. Use Read to verify the file
was written. The revision loop is now closed — do not dispatch the modeler or critic again.
Before rendering the report, run a deterministic cross-reference check on the final context model. This step uses Read and Grep only — no new agent is dispatched.
$context_model_final. Extract every evidence identifier cited in BCM# entries and DC# entries — all
DL#, CAP#, OWN#, S#, and B# references appearing in Evidence fields.$run_folder/discovery/domain-language.md$run_folder/discovery/business-capabilities.md$run_folder/discovery/domain-ownership.md$run_folder/discovery/structural.md$run_folder/discovery/behavioral.mdRead $context_model_final to load the final BCM# model before rendering. Read
references/ddd-analysis-report-template.md. Render it into the
report draft. Render rules:
$context_model_final sorted by status; Boundary Problems from BCR# failure modes in
$critique and OWN# contestation findings; Context Map from BCM# relationship fields where evidence exists;
Context Details by expanding each CURRENT and LATENT BCM# entry's fields verbatim from $context_model_final;
Rejected or Weak Candidates from BCR# weak and reject verdicts; Questions for Domain Experts consolidated and
deduplicated from BCR# domain-expert questions.$run_folder/synthesis/ddd-analysis.md; omit the intermediate critique from this section). For each:
filename, absolute path, and finding type with count from the agents' return summaries.Readability. Invoke han-communication:readability-guidance to surface the shared readability standard into
your context. Apply it to every synthesized section as you write: main point first, descriptive headings, one
idea per paragraph, and progressive disclosure. The finding IDs (BCM#, BCR#, DL#, CAP#, OWN#, S#, B#) and
file-path references are citation identifiers; they survive any rewrite and self-check unchanged.
Dispatch han-communication:readability-editor with one Agent call to audit and rewrite the report draft
against the shared readability standard. Pass it the draft report text and the named audience: the engineer or
product manager reading the context model and deciding what to do next; the editor reads han-communication's own
canonical rule, so pass no rule path. It preserves every fact and edits prose regions only — never inside
code fences, diagram bodies, or finding-ID and file-path citation identifiers. Scope its rewrite to all
synthesized prose sections — Executive Summary, Domain Landscape, Ubiquitous Language, Business Capabilities,
the overview paragraphs in Current/Latent/Speculative sections, Boundary Problems, Rejected or Weak Candidates,
Questions for Domain Experts, and Evidence / Analysis Artifacts. Leave Context Details unchanged (it carries BCM#
field values directly) and do not edit within the Context Map Mermaid block. Apply its rewrite.
Run the standardized readability self-check (the shared standard is in your context from the
readability-guidance invocation in Step 9) over the report's prose regions only — never inside code fences,
diagram bodies, or finding-ID / file-path citation identifiers. Confirm each criterion and correct any failure
before presenting:
After the readability rewrite and self-check, verify that the rendered report contains every entry from the canonical final model. This step uses Read and Grep only — no new agent is dispatched.
$context_model_final. Extract the canonical registry:$context_model_final and replacing the defective section text before presenting. This is a
hard gate: do not present the report until set equality holds.Unlike the soft gate in Step 8.5, this check must block presentation until resolved. An entry dropped during readability editing is a correctness failure, not a style issue.
Write the rendered report to disk. Use the Write tool to write the complete rendered report to
$run_folder/synthesis/ddd-analysis.md. This persists the reader-facing report as a stable artifact and
provides the domain visualizer with the consolidated Questions for Domain Experts section.
Create the visuals directory. Run mkdir -p $run_folder/visuals via Bash.
Dispatch han-ddd:domain-visualizer with one Agent call. The brief must contain:
$run_folder/synthesis/ddd-analysis.md — the rendered report$context_model_final — the canonical context model$critique — the BCR# evaluations and domain-expert questions$run_folder/discovery/domain-language.md$run_folder/discovery/business-capabilities.md$run_folder/discovery/domain-ownership.md$run_folder/discovery/structural.md$run_folder/discovery/behavioral.md$run_folder/visuals/.Wait for the visualizer to return. On success, capture:
$visual_paths: the list of generated artifact paths$visual_types: the list of generated visual types$visual_skips: any visuals that were skipped and the reasonFailure handling. If the visualizer fails or returns an error, record the failure message as
$visual_failure. Do not invalidate the DDD model or the rendered report. Proceed to Step 13 either way.
Visual-generation failure must never affect the underlying DDD model's validity.
Present the rendered report directly in the conversation. Close by telling the user, in a short message:
$run_folder (or the fallback path if the configured destination failed,
naming which path failed and which fallback was used instead).$run_folder/visuals/ path. When generation failed, note the failure and that the DDD model is unaffected.han-coding:architectural-analysis to examine a named module's code-level structure, or
a narrower /ddd-analysis restricted to a single focus area. If the team has gathered domain-expert input
on the open questions above and wants to specify next steps for a confirmed boundary,
han-planning:plan-a-feature starts that conversation. If the contexts raise cross-service or integration
questions, han-core:system-architect provides a topology read after the team has confirmed which boundaries
are real. Do not assert that any boundary violation can or should be fixed, prescribe a correction, or
recommend extraction, refactoring, or migration in this closing message.© testdouble, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file (references) in han-ddd/skills/ddd-analysis of testdouble/han.
Open the folder on GitHubat commit abba73a
Ddd Analysis 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Ddd Analysis this skilltestdouble/han | 279 | — | ~7.8k | Automated safety check: Pass | MIT | |
| Domain Modelingfossasia/eventyay-interpretation | 1.6k | 29 repos | ~821 | Automated safety check: Pass | Apache-2.0 | |
| Architecture Governancezai-org/ZCode | 7.5k | — | ~1.2k | Automated safety check: Pass | Apache-2.0 | |
| Evolutionary Modular Architecturetech-leads-club/agent-skills | 7k | — | ~3.7k | Automated safety check: Pass | CC-BY-4.0 | |
| Domain Modelingbrim-borium/spotify_sdk | 166 | 5 repos | ~806 | Automated safety check: Pass | Apache-2.0 | |
| Domain Modeling and Glossarywindmill-labs/windmill | 18k | — | ~622 | Automated safety check: Pass | Custom licence |
fossasia/eventyay-interpretation
Build and sharpen a project's domain model. An agent skill from fossasia/eventyay-interpretation.
zai-org/ZCode
Apply the repository's architecture policy to code changes by generating a bounded context package, checking module and layer boundaries, and reporting baseline-aware violations.
tech-leads-club/agent-skills
Guides design of modular-monolith platforms with DDD, flat-by-aggregate modules, anti-corruption layers, outbox events and resilience, plus an architecture document with SVG diagrams.
brim-borium/spotify_sdk
Build and sharpen a project's domain model. An agent skill from brim-borium/spotify_sdk.
windmill-labs/windmill
Actively challenges vague or conflicting terminology as you design, and keeps a living domain glossary file up to date in real time.
swamp-club/swamp
Domain Driven Design guidance for TypeScript/Deno codebases.
testdouble/han
Convert a stakeholder summary markdown file into a single self-contained HTML executive report — bottom line and decision asks up front, supporting detail later — styled with a Test Double-derived…
testdouble/han
Update Han plugin documentation so every skill, agent, guidance doc, index, and cross-reference is current and accurate.
testdouble/han
Authoritative guidance for building Claude Code skills, agents, and plugins, plus init and update steps that install and refresh the plugin-building skills in the current repository.
testdouble/han
Cut a Han release: update CHANGELOG.md with the changes since the last release, bump and tag every plugin that changed as {plugin-name}--v{version} so a version-constrained dependency can resolve…
testdouble/han
Builds a feature implementation plan from an existing feature specification (or equivalent context) through a facilitated team conversation.
testdouble/han
Restructure existing code without changing its behavior, through a test-gated refactoring loop: a named target, a green suite over that target before any edit, a planned sequence of small named…
Categories
Analyzes an existing codebase using strategic Domain-Driven Design to discover bounded contexts, surface ubiquitous language and semantic collisions, find places where code boundaries diverge from…. Ddd Analysis is an agent skill from testdouble/han. Analyzes an existing codebase using strategic Domain-Driven Design to discover bounded contexts, surface ubiquitous language and semantic collisions, find places where code boundaries diverge from domain boundaries, and produce an evidence-backed domain and context map.
Ddd Analysis fits situations like: the goal is DDD-specific: bounded context discovery; ubiquitous language analysis; domain model discovery; mapping contested ownership and responsibility.
Run `npx skills add testdouble/han --skill ddd-analysis -a claude-code`. Or copy the skill folder (han-ddd/skills/ddd-analysis in testdouble/han) into .claude/skills/ddd-analysis in your project. Claude Code loads it when a task matches its description.
Run `npx skills add testdouble/han --skill ddd-analysis -a codex`. Or copy the skill folder (han-ddd/skills/ddd-analysis in testdouble/han) into .agents/skills/ddd-analysis in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add testdouble/han --skill ddd-analysis -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/ddd-analysis, .gemini/skills/ddd-analysis, .github/skills/ddd-analysis and .opencode/skills/ddd-analysis in your project.
Going by SKILL.md and its folder, Ddd Analysis needs the command-line tools its instructions call (bash and git). Its frontmatter pre-approves these tools: Read, Glob, Grep, Agent, Write, Bash(find *), Bash(date *), Bash(mkdir *), Bash(bash "${CLAUDE_PLUGIN_ROOT}/scripts/han-config-dir.sh").
SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
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.
Ddd Analysis is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 7.8k tokens (SKILL.md is roughly 31k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 3.1k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Ddd Analysis: Domain Modeling (fossasia/eventyay-interpretation, 1.6k stars), Architecture Governance (zai-org/ZCode, 7.5k stars), Evolutionary Modular Architecture (tech-leads-club/agent-skills, 7k stars) and Domain Modeling (brim-borium/spotify_sdk, 166 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
testdouble (a GitHub organization) maintains it in testdouble/han, which has 279 GitHub stars. The repository holds 54 skills in this directory. The repository was last updated on October 1, 2026.
Source: testdouble/han on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.