harlan-agent-kit

Personal agent plugin for Nuxt/Vue/TS development

4
0
4
3
TypeScript
public

harlan-agent-kit banner

harlan-agent-kit

Personal agent plugin for Nuxt/Vue/TypeScript workflows. It ships as a
Claude Code plugin and can also be installed locally
as a Codex plugin for its skills.

[!IMPORTANT]
This is a personal plugin with opinionated defaults. Use as inspiration or fork for your own setup.

Features

  • Nuxt/Vue workflows: Design, review, and improve frontend implementation
  • Architecture review: Find deeper seams in Nuxt apps and TypeScript packages
  • Package conformance: Sync package, module, test, and release conventions
  • PR and release writing: Draft PRs, release notes, tweets, and launch copy
  • Issue and email triage: Rank GitHub issues and process inboxes
  • Claude hooks: Enforce pnpm, lint changed files, block risky git actions, and show session context

Quick Start

Claude Code

/plugin marketplace add harlan-zw/harlan-agent-kit
/plugin install harlan-agent-kit

Codex

Codex support uses the nested plugin directory at harlan-agent-kit/.

For local development, expose that directory under ~/plugins and install from
the personal marketplace:

mkdir -p ~/.agents/plugins ~/plugins
ln -sfnT /home/harlan/pkg/harlan-agent-kit/harlan-agent-kit ~/plugins/harlan-agent-kit

Create ~/.agents/plugins/marketplace.json if it does not already exist:

{
  "name": "personal",
  "interface": {
    "displayName": "Personal"
  },
  "plugins": [
    {
      "name": "harlan-agent-kit",
      "source": {
        "source": "local",
        "path": "./plugins/harlan-agent-kit"
      },
      "policy": {
        "installation": "AVAILABLE",
        "authentication": "ON_INSTALL"
      },
      "category": "Productivity"
    }
  ]
}

Then install:

codex plugin add harlan-agent-kit@personal

Validate before reinstalling:

claude plugin validate ~/plugins/harlan-agent-kit
jq empty ~/plugins/harlan-agent-kit/hooks/codex.json
codex plugin add harlan-agent-kit@personal

Start a new Codex thread after reinstalling so newly installed skills are loaded.

Hooks

Claude Code loads hooks from .claude-plugin/plugin.json. Codex loads its hook
config from hooks/codex.json through .codex-plugin/plugin.json.

Event Hook Description
SessionStart session-start.sh Detect project type, show git status
PreToolUse merged-branch-guard.sh Block commits on merged branches
PreToolUse pnpm-only.sh Block npm/yarn commands
PreToolUse pr-skill-only.sh Require the PR skill for creation and description changes
PreToolUse wt-only.sh Keep worktrees under wt and off .claude/worktrees
PreToolUse pre-commit-push.sh Run lint/typecheck/test before commit/push
PostToolUse eslint.sh Auto-lint + fix after file changes
PostToolUse command-not-found.sh Help recover from missing shell commands
Manual check.sh Run configured project checks
Manual check-config.sh Inspect hook/check configuration

Skills

Skill Description
adversarial-review Review and repair one PR, then post its bot status
close-off Finish loose ends, verify delivery, and clean task-owned Git state
email-triage Triage inbox email with himalaya
humanize-writing Strip AI tells from prose before publishing
improve-ts-pkg-architecture Find architecture improvements in TS packages and monorepos
issue-triage Rank open issues by difficulty and impact
nuxt-frontend-design Build and polish Nuxt UI v4+ frontend work
nuxt-frontend-review Adversarially review frontend work against a build contract
nuxt-improve-codebase-architecture Find Nuxt-native architecture improvements
pkg-conform Conform or scaffold npm package and Nuxt module architecture
plan-ceo Produce CEO-level planning artifacts
pr Create, update, or sync pull requests
pr-triage Review and rank the owned PR backlog
release-notes Draft changelogs, release notes, and upgrade guidance
ripast Perform AST-aware TS/JS/Vue refactors
social-presence Plan social content and launch posts
take-ownership Finish current work through delivery and smoke verification
tweet Draft and polish tweets with visual direction

Configuration

Disable specific hooks per-project by creating .claude/hooks.json:

{
  "disabled": ["eslint", "pre-commit-push"]
}

License

Licensed under the MIT license.

v0.3.3[beta]