
Security News
PolinRider: North Korea-Linked Supply Chain Campaign Expands Across Open Source Ecosystems
PolinRider expands across npm, Packagist, Go modules, and Chrome extensions, using hidden loaders to target developer environments.
hiddink-harness
Advanced tools
Universal agent harness for Claude Code, agy, gpt-codex, and Kimi.
hiddink-harness is a lightweight orchestration harness that lets multiple AI coding agents coexist peacefully in a single project. Claude Code, agy/Antigravity, OpenAI Codex CLI, and Kimi each expect their own directory conventions and configuration formats. Without a coordination layer, these agents conflict or overwrite each other's state. hiddink-harness solves this by acting as a single source of truth (SSOT) under ~/.hiddink-harness/ and exposing each provider's native directory layout via symlinks that auto-mount in any working directory.
.claude/, .agy/, etc.). hiddink-harness manages all of them from a single SSOT under templates/, eliminating conflicts.npm update -g hiddink-harness.ConversationHub with a ProviderAdapter pattern handles three lifecycle patterns — persistent-bidirectional (Claude/Kimi), per-turn-resume (Codex), and PTY-wrap (agy, Phase 2).File counts are tracked in templates/manifest.json and verified by the test suite.
Each file defines a single specialist agent. Frontmatter binds the optimal model, allowed tools, memory scope, and optional soul identity. Agents span language experts, backend and frontend frameworks, data engineering, infrastructure, security, QA, architecture, and system management roles.
Reusable task modules that agents import to perform specific workflows. Skills cover code review, refactoring, release management, routing, research, wiki sync, and more. Each skill lives in .claude/skills/{name}/SKILL.md with optional shell scripts and context files.
Behavioral guidelines (MUST / SHOULD / MAY priority tiers) that govern agent conduct across identification, parallel execution, orchestration, memory, safety, permissions, and continuous improvement. Rules are injected into agent context and re-enforced after compaction.
Reference documents covering cloud-native design, token efficiency, security practices, architectural patterns, and framework-specific best practices. Agents consult guides during task execution without loading them into the primary context window.
npm install -g hiddink-harness
cd any-directory # no init required
hiddink-harness # auto-mounts the global SSOT for this CWD
The CLI derives a deterministic project ID from the CWD path and mounts .claude/, .agy/, .omx/, .kimi/ as symlinks pointing to ~/.hiddink-harness/projects/{projectId}/. Templates (agents, skills, rules, guides) auto-seed on first invocation; updates flow via npm update -g hiddink-harness.
| Command | Description |
|---|---|
hiddink-harness | Auto-mount global SSOT for this CWD and launch TUI Dashboard |
hiddink-harness list [type] [--format] [--verbose] | List deployed agents, skills, rules, and guides |
hiddink-harness sync | Sync SSOT state |
hiddink-harness doctor [--fix] [--updates] | Diagnose the installation and configuration |
hiddink-harness security [--verbose] | Run a security audit |
Global flags: --skip-version-check, --auto-self-update, --skip-self-update.
Run hiddink-harness in any directory — the CLI automatically mounts symlinks pointing to the global SSOT on entry, and cleans them up on exit. Templates auto-seed on first invocation.
The global state layout is:
~/.hiddink-harness/
├── projects/
│ └── {projectId}/ # SHA256-derived deterministic ID per CWD
│ ├── .claude/ # SSOT for Claude Code state
│ ├── .agy/
│ ├── .omx/
│ ├── .kimi/
│ ├── sessions/ # Per-project session index
│ ├── memory/ # Per-project long-term memory
│ └── .seed-version # Auto-seed stamp
└── state/ # Global: active-process.json etc.
projectId format: {directory-name}-{12-char-sha256-hex} (e.g., my-app-8f9a2b3c4d5e). Computed by getProjectId in src/core/global-state.ts, so the same directory always resolves to the same SSOT slot.
The core abstraction is the ConversationHub (src/core/hub.ts), which owns the SSOT conversation state and dispatches to provider-specific ProviderAdapter implementations (src/core/providers/). The current adapters are:
claude-adapter.ts — persistent bidirectional session with Claude Codecodex-adapter.ts — per-turn resume pattern for OpenAI Codex CLIkimi-adapter.ts — persistent bidirectional session for Kimistream-json-base.ts — shared streaming JSON utilitiessystem-prompt.ts — 4-layer SystemPromptEvolver for dynamic prompt constructionThe CLI is built with Commander and Ink. Self-update logic hooks into Commander's preAction lifecycle. The TUI includes a Dashboard and ChatPanel component for multi-provider chat interaction.
This is the source repository layout. For the runtime directory structure created on the user's machine, see the Architecture — Per-CWD symlink mount section above.
hiddink-harness/
├── src/
│ ├── cli/ # CLI commands and Ink-based TUI
│ ├── core/ # Hub, providers, installer, registry
│ ├── mcp/ # MCP server entry point
│ └── i18n/ # Locales (en, ko)
├── templates/
│ ├── agents/ # 49 agent definitions
│ ├── skills/ # 121 skill directories
│ ├── rules/ # 23 rule files
│ ├── hooks/
│ ├── contexts/
│ ├── ontology/
│ ├── guides/ # 57 guide topics
│ ├── claude-specific/ # Claude Code-specific assets
│ │ ├── output-styles/
│ │ ├── profiles/
│ │ ├── schemas/
│ │ └── config/
│ ├── install-hooks.sh
│ ├── uninstall-hooks.sh
│ ├── statusline.sh
│ ├── manifest.json
│ ├── deprecated-files.json
│ └── index.yaml
├── packages/ # Workspace packages (memory-mcp-server, eval-core)
└── tests/ # Bun test suite (2175 tests passing)
When you run hiddink-harness in any directory, the CLI auto-creates a per-CWD SSOT and mounts symlinks. Templates auto-seed on first invocation.
~/.hiddink-harness/
├── projects/
│ └── {projectId}/ # e.g. my-app-8f9a2b3c4d5e
│ ├── .claude/ # Claude Code state (SSOT)
│ ├── .agy/
│ ├── .omx/ # OpenAI Codex
│ ├── .kimi/
│ ├── sessions/ # Per-project session index
│ ├── memory/ # Per-project long-term memory
│ └── .seed-version # Auto-seed stamp
└── state/ # Global: active-process.json
The CLI auto-mounts .claude/, .agy/, .omx/, .kimi/ in the current directory as symlinks pointing to the SSOT on entry, and removes them on exit. State persists across sessions because the projectId is derived deterministically from the CWD path.
See CONTRIBUTING.md for development setup, coding conventions, and the pull request process.
Hiddink Harness License (Source-Available, Non-Commercial)
SPDX: LicenseRef-Hiddink-NC-1.0
This project is source-available under a non-commercial license. Personal and open-source use is permitted; commercial use requires explicit written permission from the author. See the LICENSE file for full terms.
FAQs
Universal agent harness for Claude Code, agy, gpt-codex, and Kimi
We found that hiddink-harness demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
PolinRider expands across npm, Packagist, Go modules, and Chrome extensions, using hidden loaders to target developer environments.

Security News
Open source attacks are accelerating as AI coding agents pull in dependencies faster, with less human review.

Research
/Security News
Malicious Chrome and Firefox extensions posed as free VPNs while stealing clipboard data through later extension updates.