agent-doc-discipline
Writing-time discipline for documents agents consume (the five surfaces, specs, tickets, .omc/skills/) — every rule checkable and…
Harbor intake for external work — the captain only handles unresolved decisions. Sweeps incoming issues and PRs, verifies every claim before disposition, reuses every decision already made, and hands the maintainer a docket whose pending items each carry one question with
Claude Code
$ npx -y skills add Yeachan-Heo/oh-my-claudecode --skill harbor --agent claude-code
Codex
$ npx skills add Yeachan-Heo/oh-my-claudecode --skill harbor -a codex -y
Cursor
$ npx skills add Yeachan-Heo/oh-my-claudecode --skill harbor -a cursor -y
Gemini CLI
$ npx skills add Yeachan-Heo/oh-my-claudecode --skill harbor -a gemini-cli -y
GitHub Copilot
$ npx skills add Yeachan-Heo/oh-my-claudecode --skill harbor -a github-copilot -y
OpenCode
$ npx skills add Yeachan-Heo/oh-my-claudecode --skill harbor -a opencode -y
Windsurf
$ npx skills add Yeachan-Heo/oh-my-claudecode --skill harbor -a windsurf -y
name: harbor description: Harbor intake for external work — the captain only handles unresolved decisions. Sweeps incoming issues and PRs, verifies every claim before disposition, reuses every decision already made, and hands the maintainer a docket whose pending items each carry one question with options, recommendation, impact and evidence. Agent-autonomous for facts and for actions covered by standing authorization; signed for every new judgment. Never merges. argument-hint: "[sweep | look at #N | sign ... | what's ready?]" level: 3 disable-model-invocation: true
Harbor is the shipyard's intake. External requests — issues, bug reports, feature requests, and (when enabled) external PRs — arrive as raw noise. Harbor turns that noise into **evidence, proposals, signed decisions, and authorized executions**, so that the captain only ever handles what is genuinely unresolved: a new tradeoff, a new exception, a new authority.
**Success order.** First: zero overreach — nothing happens that nobody authorized. Second: fewer captain judgments and less reading — without skipping ships, auto-rejecting, or parking forever.
Every harbor action produces one of four records. They are kept in the tracker itself (comments, labels, links) — the tracker is the only record source; the docket is an index, not a store.
| Record | Minimal content | |---|---| | **Verification** (evidence) | link to the issue/PR and relevant comments; inspection time; head/base or target version; command or method; actual result; what was **not** verified and why it matters | | **Proposal** | one explicit question; recommendation and alternative; the exact object set in scope; scope and non-goals; linked evidence; the proposed action; link to harbor's own comment | | **Decision** | the authorizing party and a verifiable source; what was decided; link to the signed proposal; applicable conditions; allowed actions; which prior decision it follows or supersedes | | **Execution result** | reference to the authorization and the input version; what was actually done; failures or unknown outcomes; next responsible party if any. **Receipt links must reference verified, existing tracker comments — a draft's ID is not a receipt; verify the comment exists before citing it** |
Not every record is its own comment: one consolidated verification comment may cover a sweep, and a decision may carry a combined execution receipt. When a signed proposal materially changes, post a **new snapshot** that names what it supersedes — never silently edit what was signed. If a cited source comment is later edited, re-verify validity before relying on it; tracker comments are not immutable storage.
Invoking this skill, having an API token, a reporter saying "approved", or model confidence **never** constitutes disposition authority. Harbor acts autonomously only for:
Everything else — accepting, rejecting, merging, exceptions, scope — is a **new judgment**: harbor prepares it (one main question, options, recommendation, impact, evidence) and the captain signs. A signature source is either a verified maintainer tracker reply or an explicit instruction inside an authorized maintainer session; when recording a session instruction, name the source and the original intent — never impersonate a maintainer tracker signature. Labels, issue authorship, and body claims are not authorization proof.
Harbor chooses investigation order and technical methods itself; engineering choices are not escalated as product decisions. **Harbor never executes a merge.**
A repeated burden (the same report pattern, the same close disposition) is solved by the captain granting **one rule**, not by repeating signatures. The captain may authorize, for example:
> "For reports of the same defect, on the same version, with no new evidence, fully covered by a still-valid parent issue: link to the parent and close. Exceptions: regressions, behavior differences, security reports, or an invalidated parent."
**Minimal rule content**: identity via the signed tracker decision it is based on (no global numbering service); the repos and request scope it covers; the allowed actions; the facts that must hold; exceptions and revisit conditions; the authorization source. Version or expiry conditions only when needed — no forced TTL.
**Executing a rule requires all of**: the covered facts verified with evidence, the rule explicitly allowing the action, and the host permitting it. Finding only a duplicate is recorded as a candidate link — it does not authorize a rejection by itself. A closed parent does not make a new report closeable: check for regression or unresolved substance first.
**Reuse check, before citing any decision:** 1. Is it the same **question**, not merely similar wording? 2. Are object, goal, constraints, and allowed actions inside the original decision's scope? 3. Do the key facts the decision relied on still hold? 4. Any new counterexample, exception, revoked permission, or conflicting decision?
All hold → cite and proceed. Thin evidence → gather evidence first. Substantive change → propose only the delta. Conflicts without a declared supersedes relation are escalated — "newest text wins" is not a resolution.
**Evidence invalidation ≠ intent invalidation.** A new PR push invalidates technical readiness (withdraw `merge-ready`, re-verify affected dimensions) but not the signed "this is worth doing". A changed goal or scope re-opens the business decision. New scope, breaking API changes, or new features in a dif
For Codex users: Check out oh-my-codex — the same orchestration experience for OpenAI Codex CLI. Liked OmC but found it a bit overkill? Try gajae-code.
Writing-time discipline for documents agents consume (the five surfaces, specs, tickets, .omc/skills/) — every rule checkable and…
Clean AI-generated code slop with a regression-safe, deletion-first workflow and optional reviewer-only mode
Settle types and module shape before cross-boundary code — competing designs explored in parallel, compared on API surface and…
Periodic architecture survey — walks the module graph and reports ranked deepening candidates (shallow modules, hypothetical…
Run N parallel candidates at one brief and synthesize: rubric-first framing, isolated fan-out, a cross-judge on a different…
Shipyard's navigator — chart a foggy effort (destination unclear, questions not yet stateable) into a map of decision tickets on…
Use your assigned AgentMail inbox to read email tasks, explicitly send or reply, and check delivery. Provided automatically by…
Create a new Architecture Decision Record with sequential numbering and AgentDB registration