{"id":50209739,"url":"https://github.com/hmj1026/dhpk","last_synced_at":"2026-05-28T05:00:46.142Z","repository":{"id":359274306,"uuid":"1245267195","full_name":"hmj1026/dhpk","owner":"hmj1026","description":"Reusable Claude Code dev harness plugin — agents, commands, skills, hooks, opt-in stack modules","archived":false,"fork":false,"pushed_at":"2026-05-26T02:31:17.000Z","size":1014,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-26T03:31:15.481Z","etag":null,"topics":["ai-tooling","claude-code","claude-code-plugin","harness","openspec"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hmj1026.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-21T04:17:54.000Z","updated_at":"2026-05-26T02:31:21.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/hmj1026/dhpk","commit_stats":null,"previous_names":["hmj1026/dhpk"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/hmj1026/dhpk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hmj1026%2Fdhpk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hmj1026%2Fdhpk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hmj1026%2Fdhpk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hmj1026%2Fdhpk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hmj1026","download_url":"https://codeload.github.com/hmj1026/dhpk/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hmj1026%2Fdhpk/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33594851,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-28T02:00:06.440Z","response_time":99,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-tooling","claude-code","claude-code-plugin","harness","openspec"],"created_at":"2026-05-26T03:03:04.718Z","updated_at":"2026-05-28T05:00:46.135Z","avatar_url":"https://github.com/hmj1026.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# dhpk — Dev Harness Plugin Kit for Claude Code\n\n\u003e **Languages**: **English** · [繁體中文](./README.zh-TW.md)\n\nA generic, install-and-go Claude Code harness. Ships **15 role-based agents** (+ 1 module-scoped reviewer), ~65 commands (codex / gitnexus / git / project workflow), ~55 core skills + the `deploy-list` cross-project deploy file list generator, **6-slot sentinel-driven review hooks** (code / db / sec / frontend / doc / **polyfill** — the last via `library-author`), statusline, harness scripts, and **16 opt-in stack modules** across PHP (`php-5.6`, `php-7.4`, `php-8.x`), Yii (`yii-1.1`), PHPUnit (`phpunit-5.7`, `phpunit-9`, `phpunit-10`, `phpunit-11`), Laravel (`laravel-6` through `laravel-11`), JS (`js`), plus the cross-cutting `library-author` module. Modules contribute hooks at runtime via the **wrapper-dispatch** model (see [`docs/hook-extension.md`](./docs/hook-extension.md)). Parallel Codex CLI tree included for dual-assistant projects.\n\nOpenSpec is an **optional external integration** — install the [OpenSpec plugin](https://github.com/Fission-AI/OpenSpec) separately if you want OpenSpec workflow commands. dhpk retains only its own value-add helper `opsx-apply-resume` (long-running OpenSpec session context handoff); the 10 generic OpenSpec wrapper skills/commands were unbundled in v0.2.1 since OpenSpec ships them upstream.\n\n## Prerequisites\n\n| Tool | Status | Why |\n|------|--------|-----|\n| `bash` | Required | All hook and helper scripts |\n| `git` | Required | Sentinel/artifact path resolution; `git rev-parse --show-toplevel` |\n| `python3` | Required IF you enable `modules` | Parses `module.yaml` in `post-edit-remind` and `session-start` |\n| `jq` | Optional (python3 fallback exists) | Faster JSON payload extraction |\n| `docker` | Optional | Only consulted when `userConfig.docker_containers` is non-empty |\n| Codex MCP server | Optional | Required ONLY if you invoke the 14 `codex-*` skills (install separately) |\n| Codex CLI binary | Optional | Required ONLY if you run `install-codex-skills.sh` and want Codex to actually load the synced content |\n\nMissing optional tools degrade gracefully (the script no-ops or skips a feature). Missing required tools surface as a single-line `[hook-name] WARN: …` to stderr at SessionStart or first hook fire so you can act on them.\n\n## Install\n\ndhpk follows the standard [Claude Code plugin distribution model](https://docs.claude.com/en/docs/claude-code/plugins): the same marketplace + manifest is reachable from **two surfaces**, pick whichever fits your workflow:\n\n- **Terminal** — `claude plugin marketplace add …` / `claude plugin install …`\n- **Inside a Claude Code session** — `/plugin marketplace add …` / `/plugin install …` (or the interactive `/plugin` browser)\n\nBoth surfaces read the same `.claude-plugin/marketplace.json` shipped in this repo, so the result is identical.\n\n### Path A — From GitHub (recommended)\n\nNo clone needed. Fastest path for end users.\n\n```bash\n# Terminal\nclaude plugin marketplace add hmj1026/dhpk\nclaude plugin install dhpk@dhpk\n```\n\n```text\n# …or inside Claude Code\n/plugin marketplace add hmj1026/dhpk\n/plugin install dhpk@dhpk\n```\n\nAdd `--config` flags to pre-seed config (skip if you'd rather answer interactively via `/dhpk:setup` after install):\n\n```bash\nclaude plugin install dhpk@dhpk \\\n  --config modules=php-8.x,laravel-11,phpunit-11,library-author \\\n  --config docker_containers=php-fpm,mysql \\\n  --config hook_profile=standard\n```\n\nPin a specific release by appending a version: `claude plugin install dhpk@dhpk@v0.3.2`. Available stacks/versions live in `manifests/module-catalog.json` (SSOT); curated bundles in `manifests/install-profiles.json`. Docker prerequisites: see [`docs/docker-setup.md`](./docs/docker-setup.md).\n\nAfter install, reconfigure any time from inside Claude Code:\n\n```text\n/dhpk:setup           # rerun the same questions\n/dhpk:setup --show    # print current effective config\n```\n\n### Path B — Local clone + interactive installer\n\nUse this if you want an out-of-Claude shell wizard, or you'll be hacking on the plugin source. **You must `git clone` first** — the installer lives inside the repo.\n\n```bash\ngit clone https://github.com/hmj1026/dhpk ~/projects/dhpk\nclaude plugin marketplace add ~/projects/dhpk\nbash ~/projects/dhpk/scripts/install.sh        # interactive (gum / python3 fallback)\n```\n\nThe script walks stack/version selection, docker prerequisites, review-agent overrides, and hook profile, then runs `claude plugin install` for you. Append `--dry-run` to print the resolved `claude plugin install …` command without executing it.\n\nValidate the local checkout at any time:\n\n```bash\nclaude plugin validate ~/projects/dhpk --strict\n```\n\nFor live source edits during plugin development (no reinstall loop), see [§ Development](#development).\n\n### Update / Uninstall\n\n```bash\nclaude plugin update dhpk              # pull the latest version from the marketplace\nclaude plugin uninstall dhpk           # remove the plugin\nclaude plugin marketplace remove dhpk  # forget the marketplace entry\n```\n\nThe same actions are available as `/plugin update dhpk`, `/plugin uninstall dhpk`, `/plugin marketplace remove dhpk` inside Claude Code.\n\n### Troubleshooting\n\n| Symptom | Likely cause | Fix |\n|---|---|---|\n| `marketplace add` says the path doesn't exist | You followed Path B but skipped the `git clone` step | Run `git clone https://github.com/hmj1026/dhpk ~/projects/dhpk` first — or switch to Path A which needs no clone |\n| `claude plugin install dhpk@dhpk` says marketplace not found | `marketplace add` didn't run, or you removed it earlier | Re-run the `marketplace add` line from your chosen path |\n| `/dhpk:*` commands or hooks don't appear after install | Session loaded its skill list before install finished | Run `/reload-plugins` inside Claude Code, or restart the session |\n| `claude plugin list` shows dhpk but `/dhpk:setup` is missing | Plugin is installed but disabled | `claude plugin enable dhpk` (or `/plugin enable dhpk`) |\n| `install.sh` errors on `gum` / `jq` not found | Optional UI deps missing | The script falls back to plain shell / `python3`; install `gum` and `jq` for the nicer flow, or ignore the warning |\n\n## What you get\n\n| Component | Count | Notes |\n|-----------|------:|-------|\n| Agents | 15 root + 1 module | 5 sentinel-driven reviewers (code / db / sec / **frontend** / **doc**) + the 6th `polyfill-reviewer` shipped by `library-author`. Situational: architect, tdd-guide, refactor-cleaner, ui-ux-verifier, performance-analyzer, doc-updater, docs-lookup, harness-reviser, harness-optimizer, version-matrix-impact-reviewer. |\n| Commands | ~65 | `dhpk:codex-*`, `dhpk:review-pending`, `dhpk:smart-commit`, `dhpk:ts-check-status` (JS module), `dhpk:opsx-apply-resume` (needs OpenSpec), `dhpk:matrix-cell-onboard` (library-author), etc. |\n| Core skills | ~55 + extras | codex-*, gitnexus, tool-routing, dhpk-execution-policy, **deploy-list** (cross-project deploy file list generator), **execution-checklist** (end-of-task self-check), `opsx-apply-resume` helpers (need OpenSpec) |\n| Stack modules | 16 | PHP: `php-5.6`, `php-7.4`, `php-8.x` · Yii: `yii-1.1` · PHPUnit: `phpunit-5.7`, `phpunit-9`, `phpunit-10`, `phpunit-11` · Laravel: `laravel-6` … `laravel-11` · `js` · `library-author` (opt-in; see \"Modules\" below) |\n| Hooks | 5 events | PreToolUse (Edit, Bash + dispatcher), PostToolUse (Edit + dispatcher + async crlf-fix), SessionStart, Stop (stop-review-reminder + reap-stale-sentinels) |\n| Hook dispatchers | 2 | `post-edit-dispatch.sh`, `pre-bash-dispatch.sh` — fan out to active modules' hooks |\n| Harness scripts | 5 | precommit-runner, verify-runner, harness-audit, codemap generator, dep-audit |\n| Codex dual-track | 14 skills + 1 agent (5 config profiles) | Synced into project `.codex/` by `install-codex-skills.sh` |\n\n## userConfig\n\nNine knobs, all settable at install time with `--config \u003ckey\u003e=\u003cvalue\u003e`:\n\n| Key | Default | Purpose |\n|-----|---------|---------|\n| `hook_profile` | `standard` | `minimal` suppresses Stop reminders; `strict` adds extra warnings |\n| `review_agents` | `[\"code-reviewer\",\"database-reviewer\",\"security-reviewer\",\"frontend-reviewer\",\"doc-reviewer\"]` | Five agents invoked by sentinel reminders. Override to point at your project-specific agents; shorter lists reduce coverage. (The 6th `polyfill-reviewer` slot is enabled by the `library-author` module, not via this list.) |\n| `docker_containers` | `[]` | Container names checked at SessionStart. Empty list disables the check. First entry exported as `DHPK_PHP_CONTAINER`; second as `DHPK_MYSQL_CONTAINER`. |\n| `modules` | `[]` | Stack modules to enable. Ships 16: `php-5.6`, `php-7.4`, `php-8.x`, `yii-1.1`, `phpunit-5.7`, `phpunit-9`, `phpunit-10`, `phpunit-11`, `laravel-6`, `laravel-7`, `laravel-8`, `laravel-9`, `laravel-10`, `laravel-11`, `js`, `library-author`. Module `requires:` validated at SessionStart (warning, not blocking). Project-level `.claude/settings.local.json` `pluginConfigs.dhpk@dhpk.options.modules` **overrides** the global value — supports a single dev machine working on projects with different stacks. |\n| `review_trigger_extra_paths` | `[]` | Extra path prefixes per reviewer slot. Format: `\u003cslot\u003e:\u003cprefix\u003e` where slot ∈ `code\\|db\\|sec\\|fe\\|doc`. Example: `code:protected/`, `fe:resources/views/`. |\n| `reap_stale_mcp_processes` | `false` | When `true`, SessionStart kills older `gitnexus mcp` processes (keep only newest). Only useful for gitnexus MCP users. |\n| `js_lint_script` | `\"lint\"` | npm script invoked by the `js` module's pre-commit gate. |\n| `js_typecheck_script` | `\"typecheck\"` | npm script invoked by the `js` module's pre-commit gate. |\n| `js_check_path` | `\"js/\"` | Path scanned by `/ts-check-status` for `// @ts-check` rollout progress. |\n\nExamples:\n\n```bash\n# Plain install with defaults (6-slot review chain on the default agent names).\nclaude plugin install dhpk@dhpk\n\n# Legacy PHP/Yii + JS fullstack project.\nclaude plugin install dhpk@dhpk \\\n  --config modules=php-5.6,yii-1.1,phpunit-5.7,js \\\n  --config docker_containers=php-fpm,mysql \\\n  --config review_agents=code-reviewer-myproj,db-reviewer-myproj,sec-reviewer-myproj,fe-reviewer-myproj,doc-reviewer-myproj\n\n# Modern Laravel package library spanning Laravel 6–11 (with polyfill review).\nclaude plugin install dhpk@dhpk \\\n  --config modules=php-7.4,php-8.x,laravel-6,laravel-11,phpunit-9,library-author\n```\n\nSee `manifests/install-profiles.json` for curated module bundles.\n\n## Skills with MCP dependencies\n\n13 skills require the **Codex MCP server** (`mcp__codex__codex`, `mcp__codex__codex-reply`):\n\n```\ncodex-architect       codex-brainstorm     codex-cli-review\ncodex-code-review     codex-explain        codex-implement\ncodex-review-doc      codex-review         codex-review-branch\ncodex-review-fast     codex-security       codex-test-gen\ncodex-test-review\n```\n\nWithout Codex installed, invoking any of these will surface a tool-permission error. Install separately (see Anthropic's Codex documentation), then these become available.\n\nAll other skills (~42) have no MCP dependencies.\n\n## Modules\n\nA **module** is a labeled, version-tagged bundle of skills + references + hooks + trigger contributions, gated by `userConfig.modules`. Modules across the same axis (PHP / Laravel / PHPUnit) are **additive** — a library spanning Laravel 6–11 should enable each version to get cumulative guidance. Currently shipped:\n\n**PHP language baselines** — pick the version(s) your composer `require.php` constraint spans:\n- **`php-5.6`** — forbids 7.0+ syntax; polyfill guidance.\n- **`php-7.4`** — typed properties, arrow functions, null coalescing assignment. Wires the **php-cs-fixer post-edit hook** + pre-commit lint + phpstan + psalm gate.\n- **`php-8.x`** — readonly, enums, match, named args, attributes, first-class callable syntax.\n\n**Frameworks**:\n- **`yii-1.1`** — Yii 1.1: alias autoload, `CActiveRecord` / `CDbCriteria`, `accessRules`, XSS / CSRF defaults. Requires `php-5.6`.\n- **`laravel-6`** … **`laravel-11`** — one module per major. Per-version: Eloquent / collection / cast / migration / queue / event / mail / notification / package-discovery deltas; Testbench mapping; deprecation walls.\n\n**Testing**:\n- **`phpunit-5.7`** — PHPUnit 5.7 assertion API and patterns. Requires `php-5.6`.\n- **`phpunit-9`** / **`phpunit-10`** / **`phpunit-11`** — per-major API deltas (`createMock` vs `createPartialMock`, attribute-based metadata, deprecation surface).\n\n**Tooling / cross-cutting**:\n- **`js`** — JS / TS tooling. ESLint flat-config tier strategy (Tier 1 strict / 1.5 core-exempt / 1.7 deferred-migration / globals), per-leaf `// @ts-check` rollout, async post-edit ESLint feedback, pre-commit `npm run \u003clint\u003e + \u003ctypecheck\u003e` gate. Framework-agnostic.\n- **`library-author`** — Cross-cutting glue for multi-major-version PHP libraries (Laravel 6–11, Monolog 2/3, PHPUnit 8–11, Flysystem 1/3 etc.). Ships the **sixth-color** `polyfill-reviewer` agent (sentinel-driven via `.pending-polyfill-review`), the `polyfill-version-matrix-audit` skill, the `matrix-cell-onboard` skill (+ root-level `/dhpk:matrix-cell-onboard` alias), an OpenSpec artifact guard, and a dual-testsuite mapping helper. Auto-fires on `.php` edits containing runtime version guards (`version_compare`, `class_exists`, `method_exists`, `Composer\\InstalledVersions::*`).\n\nWhen enabled, a module:\n- Surfaces its skills under `dhpk:\u003cskill-name\u003e` (e.g. `dhpk:php-pro`, `dhpk:yii1-security-audit`, `dhpk:js-lint-config`).\n- Contributes path triggers to `post-edit-remind` so reviewers fire on framework-specific paths.\n- May contribute hooks under `modules/\u003cm\u003e/hooks/post-edit-*.sh` and `modules/\u003cm\u003e/hooks/pre-{bash,commit}-*.sh`, fanned out by the dispatcher when the module is active. See [`docs/hook-extension.md`](./docs/hook-extension.md).\n- Prints a SessionStart activation line so Claude knows the module is in scope.\n\n### Adding a new module\n\n```bash\nmkdir -p modules/\u003cstack\u003e-\u003cversion\u003e/{skills,references}\ncat \u003e modules/\u003cstack\u003e-\u003cversion\u003e/module.yaml \u003c\u003c'EOF'\nname: \u003cstack\u003e-\u003cversion\u003e\ndisplay_name: \"...\"\nversion: 0.1.0\ndescription: \"...\"\nrequires: []\ntriggers:\n  code: { extensions: [], paths: [] }\n  db:   { extensions: [], paths: [] }\n  sec:  { extensions: [], paths: [] }\nprovides:\n  skills: []\nEOF\n```\n\nAdd at least one `modules/\u003cstack\u003e-\u003cversion\u003e/skills/\u003cname\u003e/SKILL.md`. Then register the path in `.claude-plugin/plugin.json`:\n\n```json\n\"skills\": [..., \"./modules/\u003cstack\u003e-\u003cversion\u003e/skills/\"]\n```\n\nBump plugin `version` in the manifest. Run `claude plugin validate ~/projects/dhpk --strict`. Document the module in this README.\n\nPer-module hooks are supported as of v0.2.0 via the wrapper-dispatch model. Drop scripts under `modules/\u003cstack\u003e-\u003cversion\u003e/hooks/`:\n\n- `post-edit-*.sh` — fired (backgrounded) by `scripts/hooks/post-edit-dispatch.sh` whenever the module is active.\n- `pre-bash-*.sh` / `pre-commit-*.sh` — fired (synchronously, can block) by `scripts/hooks/pre-bash-dispatch.sh`.\n\nSee [`docs/hook-extension.md`](./docs/hook-extension.md) for the dispatcher contract and the worked `js` module example.\n\n### External-path placeholders in module references\n\nModule `references/*.md` may contain placeholders for project-specific paths:\n\n- `\u003cframework-source\u003e` — local checkout of the framework source (e.g. Yii framework).\n- `\u003cproject-root\u003e` — your project root.\n- `\u003ccontainer-workdir\u003e` — the `-w` working dir inside the docker container.\n- `\u003cdocker-bind-mount\u003e` — host path bind-mounted into the container.\n\nReplace these in your project's notes when you reference module content.\n\n## Wire the statusline\n\nThe plugin spec has no statusline component; opt in manually by adding to your project's `.claude/settings.json`:\n\n```json\n{\n  \"statusLine\": {\n    \"type\": \"command\",\n    \"command\": \"bash ${CLAUDE_PLUGIN_ROOT}/scripts/statusline/statusline.sh\"\n  }\n}\n```\n\nThe statusline renders `[branch] +staged ~modified | docker:status | profile=\u003cp\u003e | mod=\u003cactive\u003e | ⚠ \u003cpending-sentinels\u003e` and falls back to the global `~/.claude/statusline.sh` for tokens/model/rate-limit lines.\n\n## Sync Codex CLI content\n\nProjects using both Claude Code and Codex CLI:\n\n```bash\n# From any project root:\nbash \"${CLAUDE_PLUGIN_ROOT}/scripts/hooks/install-codex-skills.sh\"\n```\n\nSymlinks (default) or copies (`--copy`) the plugin's `codex/{skills,agents}` into the project's `.codex/`. Idempotent — re-run with `--update` after a plugin version bump. See `codex/AGENTS.md` and `codex/README.md` for the dual-harness model.\n\n## Migrating an existing project\n\nIf the project already has its own `.claude/` harness, follow the phased plan:\n\n1. **Phase A — baseline**: snapshot pre-install hook outputs and test results.\n2. **Phase B — install (parallel)**: install the plugin with `userConfig.review_agents` pointing at the project's existing agents. Both sets of hooks fire side-by-side.\n3. **Phase C — discovery**: confirm `/agents` and `/plugin details dhpk` show expected components.\n4. **Phase D — hook parity**: diff plugin-side sentinels vs project-side. Document any expected differences.\n5. **Phase E — cutover**: disable the project's in-tree hooks via `.claude/settings.local.json` (`\"hooks\": {}`); run regression tests.\n6. **Phase F — cleanup**: delete project files now provided by the plugin; keep project-specific overrides.\n\nEach phase has a rollback gate. Tag `pre-dhpk-migration` before deleting anything.\n\n## Repository layout\n\n```\ndhpk/\n├── .claude-plugin/\n│   ├── marketplace.json          # one-entry marketplace (plugins[0].source: \"./\")\n│   └── plugin.json               # plugin manifest with userConfig\n├── agents/                       # 15 role-based agents (INDEX.md is navigation)\n├── commands/                     # ~65 slash commands (codex-*, smart-commit, opsx-apply-resume, matrix-cell-onboard, ...)\n├── skills/                       # ~55 core skills (codex-*, tool-routing, dhpk-execution-policy, opsx-apply-resume helpers, ...)\n├── modules/                      # 16 opt-in stack modules\n│   ├── php-5.6/, php-7.4/, php-8.x/        # {module.yaml, skills/, references/, hooks/ (php-7.4 only)}\n│   ├── yii-1.1/                            # Yii 1.1 framework\n│   ├── phpunit-5.7/, phpunit-9/, phpunit-10/, phpunit-11/\n│   ├── laravel-6/ … laravel-11/            # one per major\n│   ├── js/{module.yaml, hooks/, skills/, commands/, references/}\n│   └── library-author/{module.yaml, agents/, skills/, hooks/, references/}\n├── hooks/hooks.json              # PreToolUse / PostToolUse / SessionStart / Stop wiring\n├── scripts/\n│   ├── hooks/                    # core hooks incl. post-edit-dispatch.sh, pre-bash-dispatch.sh, reap-stale-sentinels.sh, _lib/{payload,portable-sed}.sh\n│   ├── statusline/statusline.sh\n│   ├── codemaps/, lib/, opsx-apply-resume/, validate/\n│   └── (harness-audit, precommit-runner, verify-runner, gemini-adapt-agents, dep-audit)\n├── docs/\n│   ├── hook-extension.md         # wrapper-dispatch contract + module-hook authoring\n│   ├── recommended-permissions.md\n│   ├── docker-setup.md, subagent-prompt-template.md\n├── codex/                        # Codex CLI dual-track (Claude Code does NOT auto-load)\n│   ├── AGENTS.md                 # Codex-specific guidance\n│   ├── README.md                 # how to sync into a project\n│   ├── skills/, agents/, config.toml.example\n├── manifests/install-profiles.json  # curated module bundles\n├── docs/design/bootstrap-dhpk-plugin/  # original design archive (proposal/design/tasks/specs)\n├── README.md, README.zh-TW.md, CHANGELOG.md, LICENSE, .gitignore\n```\n\n## Development\n\nFor iterating on the plugin source itself (no install/reinstall loop), launch Claude Code against the working tree directly:\n\n```bash\ngit clone https://github.com/hmj1026/dhpk ~/projects/dhpk\nclaude --plugin-dir ~/projects/dhpk\n```\n\nEdits to plugin files take effect after `/reload-plugins` (hooks, MCP, LSP) or session restart (monitors, skill listings).\n\nThe marketplace install path (`claude plugin install`) copies the plugin into `~/.claude/plugins/cache/`, so edits to the source repo do NOT take effect there until `claude plugin update dhpk`.\n\n## License\n\nReleased under the [MIT License](./LICENSE). Copyright (c) 2026 Paul.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhmj1026%2Fdhpk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhmj1026%2Fdhpk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhmj1026%2Fdhpk/lists"}