{"id":"1bbe706c-90f6-4088-8e33-5fecb3607294","shortId":"gBtwED","kind":"skill","title":"holochain","tagline":"Holochain hApp development assistant covering coordinator/integrity zome architecture, Rust HDK/HDI patterns, entry/link types, CRUD, validation, cross-zome calls, Tryorama testing, TypeScript client integration, and Nix dev environments. USE WHEN writing zome code, designing DHT","description":"# Holochain Development Skill\n\nExpert assistant for Holochain hApp development. Covers the full development spiral: architecture, design, scaffolding, implementation, testing, and deployment.\n\n## Proactive Invocation Rule\n\n**Always invoke this skill in the PLAN phase** when the task touches a Holochain project. Do not wait to be asked explicitly.\n\nTrigger conditions — any of these means the skill should be loaded before coding begins:\n- Working directory is a Holochain project (contains `workdir/*.happ` or `dnas/*/zomes/`)\n- Task involves `.rs` files inside `zomes/coordinator/` or `zomes/integrity/`\n- Task involves entry types, link types, cross-DNA calls, or zome functions\n- Task involves a PR on a Holochain project\n\nWhen proactively invoked: load `Architecture.md` + `Patterns.md`, run the **ReviewZome** checklist against any files being modified, surface issues before implementation begins.\n\n---\n\n## Workflow Routing\n\n| Workflow | Trigger | File |\n|----------|---------|------|\n| **ReviewZome** | review zome, audit zome, check implementation, validate patterns, before implementing, PR review, code review on zome | `Workflows/ReviewZome.md` |\n| **DesignDataModel** | design data model, model entries, what entries, what links, DHT schema | `Workflows/DesignDataModel.md` |\n| **Scaffold** | scaffold, new happ, new project, setup environment, init project, Holonix, nix develop, hc scaffold | `Workflows/Scaffold.md` |\n| **ImplementZome** | implement zome, create zome, scaffold zome, write zome | `Workflows/ImplementZome.md` |\n| **DesignAccessControl** | design access control, who can call, cap grant design | `Workflows/DesignAccessControl.md` |\n| **PackageAndDeploy** | deploy, package, distribute, kangaroo, installer, desktop app, webhapp | `Workflows/PackageAndDeploy.md` |\n\n## Context Files\n\nLoad on demand based on task:\n\n| File | Load When |\n|------|-----------|\n| `Architecture.md` | Coordinator/integrity split, DNA structure, Cargo workspace, Nix, progenitor (dna_info, dna properties, network_seed), private entries, multi-DNA (multiple roles, bridge call, OtherRole) |\n| `Scaffold.md` | New project setup, Holonix installation, Nix flake, hc CLI, `hc scaffold` commands, adding a new domain to existing project |\n| `Patterns.md` | Entry types, link types, CRUD, cross-zome calls, validation, HDK 0.6 API (GetStrategy, LinkQuery, Local vs Network), must_get, signals (remote signal, init cap grant) |\n| `AccessControl.md` | Cap grants, capability system, cap claim, recv_remote_signal setup, admin-only access |\n| `CellCloning.md` | Cell cloning, partitioned data, clone roles, createCloneCell, clone_limit |\n| `ErrorHandling.md` | Error types, WasmError, ExternResult patterns, thiserror |\n| `Testing.md` | Four-layer strategy, Sweettest (Rust-native), E2E Playwright + AdminWebsocket, Wind-Tunnel performance |\n| `WindTunnel.md` | Performance/load testing with wind-tunnel: ScenarioDefinitionBuilder, call_zome, ReportMetric, multi-agent roles, DHT sync lag measurement, InfluxDB metrics pipeline |\n| `TypeScript.md` | holochain-client setup, callZome, signals, SvelteKit integration |\n| `Deployment.md` | Packaging, distributing, Kangaroo-Electron, installers, desktop app, versioning |\n\n## Quick Reference\n\n```\nVersions (current stable):  hdk = \"=0.6.0\"   hdi = \"=0.7.0\"   holonix ref=main-0.6\nDev commands:  nix develop  |  hc s sandbox generate workdir/  |  bun run test\nScaffold:      hc scaffold entry-type MyEntry  |  hc scaffold link-type AgentToMyEntry\n```\n\n## Common Pitfalls Checklist\n\nRun this against any zome code being written or reviewed. Each item is a class of bug that has burned projects before.\n\n### Entry Schema Evolution\n- [ ] **`#[serde(default)]` on new optional fields** — Any field added to an existing entry struct after initial deployment MUST have `#[serde(default)]`. Without it, existing entries serialized before the field existed will fail to deserialize. `Option<T>` alone is NOT sufficient.\n  ```rust\n  #[serde(default)]          // ← REQUIRED for fields added post-deployment\n  pub new_field: Option<ActionHash>,\n  ```\n\n### Cross-DNA Calls\n- [ ] **`ZomeCallResponse` is exhaustive** — HDK 0.6 has 5 variants: `Ok`, `Unauthorized`, `AuthenticationFailed`, `NetworkError`, `CountersigningSession`. Wildcard `_` is safe but hides new variants. Exhaustive match is preferred.\n- [ ] **Role name matches `happ.yaml`** — `CallTargetCell::OtherRole(\"role_name\")` must exactly match the role name in `workdir/happ.yaml`. Typos fail silently at runtime.\n- [ ] **Zome name matches coordinator crate name** — `ZomeName(\"zome_name\")` must match the coordinator's `name` in `Cargo.toml`. Check both.\n- [ ] **Local mirror structs for cross-DNA types** — Avoid importing the remote DNA's Cargo crate. Define a local serialization mirror struct instead.\n\n### Validation Rules\n- [ ] **No DHT reads in `validate()`** — `validate()` must be deterministic. No `get()`, `get_links()`, `agent_info()`, `sys_time()`. Only inspect the op itself.\n- [ ] **Use `op.flattened::<EntryTypes, LinkTypes>()`** — Not the old `op.to_type()`. Patterns.md has the correct pattern.\n\n### HDK 0.6 API\n- [ ] **`delete_link()` requires `GetOptions`** — `delete_link(hash, GetOptions::default())` not `delete_link(hash)`.\n- [ ] **`get_links()` uses `LinkQuery::try_new()`** — Not `GetLinksInputBuilder` for most cases.\n- [ ] **`GetStrategy::Local` vs `Network`** — Use `Local` for own-data queries (fast, no network), `Network` for DHT queries (cross-agent data).\n\n### Shared Utility Patterns (project-specific)\n- [ ] **`agent_pub_key` and `created_at` are NOT entry fields** — They live in the action header. Remove them from entry structs.\n- [ ] **If using a shared utility crate** — verify intra-DNA and cross-DNA call helpers are used consistently rather than raw `call()` inline.\n\n## Examples\n\n**Example 1: Design a new entry type for a marketplace listing**\n```\nUser: \"I need to model a Listing entry with status transitions\"\n→ Loads Patterns.md (entry types, status enum, link types)\n→ Designs ListingStatus enum (Active/Archived/Deleted)\n→ Defines link types (AgentToListing, PathToListing, ListingUpdates)\n→ Implements soft-delete via status field update, not entry deletion\n```\n\n**Example 2: Debug a cross-agent test that fails intermittently**\n```\nUser: \"My Tryorama test passes alone but fails when another agent reads the entry\"\n→ Loads Testing.md\n→ Identifies missing dhtSync call before cross-agent read\n→ Adds dhtSync([alice, bob], t) after Alice's create, before Bob's get\n→ Test passes reliably\n```\n\n**Example 3: Scaffold a new hApp from scratch**\n```\nUser: \"Start a new Holochain project for a community coordination app\"\n→ Loads Scaffold.md + Workflows/Scaffold.md\n→ Guides: nix flake setup → hc scaffold happ → first DNA → first zome pair\n→ Verifies compilation with hc s sandbox generate workdir/\n```\n\n**Example 4: Implement CRUD for a new zome**\n```\nUser: \"Implement a full resource zome with create, read, update, delete\"\n→ Loads Architecture.md + Patterns.md\n→ Invokes Workflows/ImplementZome.md\n→ Creates integrity crate (entry struct, link enum, validation)\n→ Creates coordinator crate (create/read/update/delete functions)\n→ Writes Tryorama tests at foundation + integration layers\n```","tags":["holochain","agent","skill","soushi888","agent-skills","claude-code","claude-skill","distributed-systems","happ-development","hdk","nix","p2p"],"capabilities":["skill","source-soushi888","skill-holochain-agent-skill","topic-agent-skills","topic-claude-code","topic-claude-skill","topic-distributed-systems","topic-happ-development","topic-hdk","topic-holochain","topic-nix","topic-p2p","topic-rust","topic-tryorama"],"categories":["holochain-agent-skill"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/Soushi888/holochain-agent-skill","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add Soushi888/holochain-agent-skill","source_repo":"https://github.com/Soushi888/holochain-agent-skill","install_from":"skills.sh"}},"qualityScore":"0.455","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 10 github stars · SKILL.md body (7,240 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-24T07:03:27.032Z","embedding":null,"createdAt":"2026-04-23T13:04:06.415Z","updatedAt":"2026-04-24T07:03:27.032Z","lastSeenAt":"2026-04-24T07:03:27.032Z","tsv":"'-0.6':425 '/zomes':108 '0.6':309,540,662 '0.6.0':419 '0.7.0':421 '1':763 '2':814 '3':866 '4':908 '5':542 'access':222,338 'accesscontrol.md':324 'action':730 'active/archived/deleted':795 'ad':290,487,524 'add':849 'admin':336 'admin-on':335 'adminwebsocket':367 'agent':385,638,708,716,819,834,847 'agenttolist':799 'agenttomyentri':450 'alic':851,855 'alon':514,829 'alway':61 'anoth':833 'api':310,663 'app':238,411,883 'architectur':9,51 'architecture.md':142,252,927 'ask':81 'assist':5,41 'audit':166 'authenticationfail':546 'avoid':608 'base':246 'begin':96,157 'bob':852,859 'bridg':274 'bug':470 'bun':435 'burn':473 'call':20,126,226,275,306,380,535,751,759,843 'calltargetcel':564 'callzom':399 'cap':227,322,325,329 'capabl':327 'cargo':257,614 'cargo.toml':597 'case':687 'cell':340 'cellcloning.md':339 'check':168,598 'checklist':147,453 'claim':330 'class':468 'cli':286 'client':24,397 'clone':341,344,347 'code':34,95,176,459 'command':289,427 'common':451 'communiti':881 'compil':900 'condit':84 'consist':755 'contain':103 'context':241 'control':223 'coordin':584,593,882,940 'coordinator/integrity':7,253 'correct':659 'countersigningsess':548 'cover':6,46 'crate':585,615,742,933,941 'creat':213,720,857,922,931,939 'create/read/update/delete':942 'createclonecel':346 'cross':18,124,304,533,605,707,749,818,846 'cross-ag':706,817,845 'cross-dna':123,532,604,748 'cross-zom':17,303 'crud':15,302,910 'current':416 'data':183,343,697,709 'debug':815 'default':480,499,520,672 'defin':616,796 'delet':664,668,674,805,812,925 'demand':245 'deploy':57,232,495,527 'deployment.md':403 'deseri':512 'design':35,52,182,221,229,764,792 'designaccesscontrol':220 'designdatamodel':181 'desktop':237,410 'determinist':633 'dev':28,426 'develop':4,38,45,49,206,429 'dht':36,191,387,626,704 'dhtsync':842,850 'directori':98 'distribut':234,405 'dna':125,255,261,263,271,534,606,612,746,750,895 'dnas':107 'domain':293 'e2e':365 'electron':408 'entri':119,186,188,268,298,442,476,491,503,724,735,767,780,786,811,837,934 'entry-typ':441 'entry/link':13 'entrytyp':649 'enum':789,794,937 'environ':29,201 'error':350 'errorhandling.md':349 'evolut':478 'exact':569 'exampl':761,762,813,865,907 'exhaust':538,556 'exist':295,490,502,508 'expert':40 'explicit':82 'externresult':353 'fail':510,577,822,831 'fast':699 'field':484,486,507,523,530,725,808 'file':112,150,162,242,249 'first':894,896 'flake':284,889 'foundat':948 'four':358 'four-lay':357 'full':48,918 'function':129,943 'generat':433,905 'get':317,635,636,677,861 'getlinksinputbuild':684 'getopt':667,671 'getstrategi':311,688 'grant':228,323,326 'guid':887 'happ':3,44,105,197,870,893 'happ.yaml':563 'hash':670,676 'hc':207,285,287,430,439,445,891,902 'hdi':420 'hdk':308,418,539,661 'hdk/hdi':11 'header':731 'helper':752 'hide':553 'holochain':1,2,37,43,74,101,136,396,877 'holochain-cli':395 'holonix':204,281,422 'identifi':840 'implement':54,156,169,173,211,802,909,916 'implementzom':210 'import':609 'influxdb':391 'info':262,639 'init':202,321 'initi':494 'inlin':760 'insid':113 'inspect':643 'instal':236,282,409 'instead':622 'integr':25,402,932,949 'intermitt':823 'intra':745 'intra-dna':744 'invoc':59 'invok':62,140,929 'involv':110,118,131 'issu':154 'item':465 'kangaroo':235,407 'kangaroo-electron':406 'key':718 'lag':389 'layer':359,950 'limit':348 'link':121,190,300,448,637,665,669,675,678,790,797,936 'link-typ':447 'linkqueri':312,680 'linktyp':650 'list':772,779 'listingstatus':793 'listingupd':801 'live':727 'load':93,141,243,250,784,838,884,926 'local':313,600,618,689,693 'main':424 'marketplac':771 'match':557,562,570,583,591 'mean':88 'measur':390 'metric':392 'mirror':601,620 'miss':841 'model':184,185,777 'modifi':152 'multi':270,384 'multi-ag':383 'multi-dna':269 'multipl':272 'must':316,496,568,590,631 'myentri':444 'name':561,567,573,582,586,589,595 'nativ':364 'need':775 'network':265,315,691,701,702 'networkerror':547 'new':196,198,278,292,482,529,554,682,766,869,876,913 'nix':27,205,259,283,428,888 'ok':544 'old':653 'op':645 'op.flattened':648 'op.to':654 'option':483,513,531 'otherrol':276,565 'own-data':695 'packag':233,404 'packageanddeploy':231 'pair':898 'partit':342 'pass':828,863 'pathtolist':800 'pattern':12,171,354,660,712 'patterns.md':143,297,656,785,928 'perform':371 'performance/load':373 'phase':68 'pipelin':393 'pitfal':452 'plan':67 'playwright':366 'post':526 'post-deploy':525 'pr':133,174 'prefer':559 'privat':267 'proactiv':58,139 'progenitor':260 'project':75,102,137,199,203,279,296,474,714,878 'project-specif':713 'properti':264 'pub':528,717 'queri':698,705 'quick':413 'rather':756 'raw':758 'read':627,835,848,923 'recv':331 'ref':423 'refer':414 'reliabl':864 'remot':319,332,611 'remov':732 'reportmetr':382 'requir':521,666 'resourc':919 'review':164,175,177,463 'reviewzom':146,163 'role':273,345,386,560,566,572 'rout':159 'rs':111 'rule':60,624 'run':144,436,454 'runtim':580 'rust':10,363,518 'rust-nat':362 'safe':551 'sandbox':432,904 'scaffold':53,194,195,208,215,288,438,440,446,867,892 'scaffold.md':277,885 'scenariodefinitionbuild':379 'schema':192,477 'scratch':872 'seed':266 'serd':479,498,519 'serial':504,619 'setup':200,280,334,398,890 'share':710,740 'signal':318,320,333,400 'silent':578 'skill':39,64,90 'skill-holochain-agent-skill' 'soft':804 'soft-delet':803 'source-soushi888' 'specif':715 'spiral':50 'split':254 'stabl':417 'start':874 'status':782,788,807 'strategi':360 'struct':492,602,621,736,935 'structur':256 'suffici':517 'surfac':153 'sveltekit':401 'sweettest':361 'sync':388 'sys':640 'system':328 'task':71,109,117,130,248 'test':22,55,374,437,820,827,862,946 'testing.md':356,839 'thiserror':355 'time':641 'topic-agent-skills' 'topic-claude-code' 'topic-claude-skill' 'topic-distributed-systems' 'topic-happ-development' 'topic-hdk' 'topic-holochain' 'topic-nix' 'topic-p2p' 'topic-rust' 'topic-tryorama' 'touch':72 'transit':783 'tri':681 'trigger':83,161 'tryorama':21,826,945 'tunnel':370,378 'type':14,120,122,299,301,351,443,449,607,655,768,787,791,798 'typescript':23 'typescript.md':394 'typo':576 'unauthor':545 'updat':809,924 'use':30,647,679,692,738,754 'user':773,824,873,915 'util':711,741 'valid':16,170,307,623,629,630,938 'variant':543,555 'verifi':743,899 'version':412,415 'via':806 'vs':314,690 'wait':78 'wasmerror':352 'webhapp':239 'wildcard':549 'wind':369,377 'wind-tunnel':368,376 'windtunnel.md':372 'without':500 'work':97 'workdir':104,434,906 'workdir/happ.yaml':575 'workflow':158,160 'workflows/designaccesscontrol.md':230 'workflows/designdatamodel.md':193 'workflows/implementzome.md':219,930 'workflows/packageanddeploy.md':240 'workflows/reviewzome.md':180 'workflows/scaffold.md':209,886 'workspac':258 'write':32,217,944 'written':461 'zome':8,19,33,128,165,167,179,212,214,216,218,305,381,458,581,588,897,914,920 'zomecallrespons':536 'zomenam':587 'zomes/coordinator':114 'zomes/integrity':116","prices":[{"id":"b28a756e-4de2-432d-8341-3a2586cc9652","listingId":"1bbe706c-90f6-4088-8e33-5fecb3607294","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"Soushi888","category":"holochain-agent-skill","install_from":"skills.sh"},"createdAt":"2026-04-23T13:04:06.415Z"}],"sources":[{"listingId":"1bbe706c-90f6-4088-8e33-5fecb3607294","source":"github","sourceId":"Soushi888/holochain-agent-skill","sourceUrl":"https://github.com/Soushi888/holochain-agent-skill","isPrimary":false,"firstSeenAt":"2026-04-23T13:04:06.415Z","lastSeenAt":"2026-04-24T07:03:27.032Z"}],"details":{"listingId":"1bbe706c-90f6-4088-8e33-5fecb3607294","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"Soushi888","slug":"holochain-agent-skill","github":{"repo":"Soushi888/holochain-agent-skill","stars":10,"topics":["agent-skills","claude-code","claude-skill","distributed-systems","happ-development","hdk","holochain","nix","p2p","rust","tryorama"],"license":"other","html_url":"https://github.com/Soushi888/holochain-agent-skill","pushed_at":"2026-04-07T01:41:56Z","description":" Agent Skills Open Standard skill for Holochain hApp development, compatible with Claude Code, GitHub Copilot, Cursor, Augment, and any other tool supporting the standard. Covers the full development spiral from architecture and design through scaffolding, implementation, testing, and deployment.","skill_md_sha":"a7df68f23f8d7bdee66d206de5474824347a9c7a","skill_md_path":"SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/Soushi888/holochain-agent-skill"},"layout":"root","source":"github","category":"holochain-agent-skill","frontmatter":{"name":"holochain","license":"Apache-2.0","description":"Holochain hApp development assistant covering coordinator/integrity zome architecture, Rust HDK/HDI patterns, entry/link types, CRUD, validation, cross-zome calls, Tryorama testing, TypeScript client integration, and Nix dev environments. USE WHEN writing zome code, designing DHT data models, scaffolding a new project, testing hApps, debugging HDK issues, implementing entry types or links, cap grants, access control, cell cloning, deploying or packaging hApps, or working on any Holochain project.","compatibility":"Requires Nix dev environment (holonix ref=main-0.6). Rust toolchain managed by Nix — no separate rustup install needed. Network access required for hc scaffold and nix flake updates."},"skills_sh_url":"https://skills.sh/Soushi888/holochain-agent-skill"},"updatedAt":"2026-04-24T07:03:27.032Z"}}