Skip to content

risadams/ink-and-agency

v2.0.0MIT

Skills for writing, sprint work, codebase workflows, and neurodivergent-friendly executive-function support (ink), plus a multi-lens decision council (agency).

Ink and Agency

Ink and Agency Skill Pack

An Agent Plugins 1.0.0 plugin — one installable unit, one primitive (skills), readable by any conformant host: Claude Code, OpenAI Codex, Cursor, GitHub Copilot, Kiro, VS Code.

  • Ink — workflow skills: writing, sprint/Scrum, issue management, Obsidian tooling, codebase analysis, debugging, research, teaching, an end-to-end build loop (plan→spec→tickets→implement→tdd→review), and neurodivergent-friendly executive-function support, with a which-skill router over them all.
  • Agency — the clarity-council skill: multi-perspective decisions (single / multi / iterative modes) through 31 compact decision lenses — statistics, psychology, delivery, architecture, risk, and more — that the workflow skills call on.

80 skills total, one folder each directly under skills/ — the flat layout Agent Plugins fixes for skill discovery, so every host finds the same set without host-specific configuration. Each skill declares its browsing category in frontmatter; CATEGORIES.md is the index. (The pack once carried hundreds of generic specialist and persona files; they were retired — a capable model covers generic expertise, so the pack keeps only workflows and the lenses that change how a decision is weighed.)

Formerly two repositories: risadams/skills and risadams/claude-subagent. Both histories are preserved via git subtree.

Structure

ink-and-agency/
├── .claude-plugin/
│   ├── plugin.json              # Claude Code plugin manifest
│   └── marketplace.json         # Claude Code marketplace catalog
├── .agents/
│   └── plugins/
│       └── marketplace.json     # Codex marketplace catalog
├── plugin.json                  # Agent Plugins 1.0.0 manifest (GENERATED — do not edit)
├── AGENTS.md                    # Maintainer guidance (canonical; Codex auto-loads it)
├── CLAUDE.md                    # Mirror of AGENTS.md (GENERATED — do not edit)
├── skills/                      # 80 skills, flat — one folder each (shared by every host)
│   ├── <name>/SKILL.md          # canonical skill; `category:` frontmatter is the browsing bucket
│   ├── <name>/agents/openai.yaml  # Codex picker metadata (GENERATED — do not edit)
│   ├── sprint-plan/             #   e.g. scrum-sprint
│   ├── debug/                   #   e.g. codebase-build
│   ├── clarity-council/         # the decision council — featured skill; LENSES.md holds every lens
│   ├── ... (see CATEGORIES.md for all 80 grouped by category)
│   ├── CATEGORIES.md            # Browsable index of all skills by category
│   ├── FLOWS.md                 # How skills chain into flows (which-skill routes on this)
│   ├── PORTABILITY.md           # How to interpret Claude tool names on other hosts
│   └── SELF-EVOLVE.md           # The self-evolution contract every skill's footer points to
├── scripts/
│   ├── add-self-evolve.ps1      # Maintains the Self-Evolve footer in every SKILL.md
│   ├── bulk-loop-update-skills.ps1
│   ├── convert-agents-to-codex.ps1  # Regenerates GENERATED artifacts (openai.yaml, plugin.json, CLAUDE.md)
│   └── lint-skills.ps1
└── docs/
    ├── adr/                     # Architecture decision records
    └── assets/                  # Banners, skill map

Skill Map

AreaExample skillsWhat they help with
Writing & messagingwriting-humanize, writing-tone-check, writing-apology-calibrator, writing-social-scriptComposing long-form text, calibrating outgoing messages, scripting awkward conversations
Analysisbreak-it-down, codebase-explain, issue-triageMaking sense of a codebase, decoding incoming messages, diagnosing bugs faster
Collaborationclarity-council, grill-me, grill-with-docsGetting sharper decisions through structured discussion
Planningsprint-plan, sprint-review, daily-briefing, handoffOrganizing work, progress, reporting, and context continuity
Focus & statetask-initiation, hyperfocus-recovery, idea-decision-maker, energy-budget, meeting-decompressionDefeating stalls, recovering context, calibrating load — built with ND-friendly defaults
Git & workflowbranch-rebase, branch-resolve-conflictsClean rebases with trivial conflict auto-resolution, complex conflict resolution with intent preservation
Workspace toolsobsidian-vault, obsidian-markdown, obsidian-canvasManaging notes, structure, and visual knowledge maps

Skill Map

The full inventory lives in skills/CLAUDE.md — the source of truth for the skill list and descriptions. Skills are grouped by their category: frontmatter; see skills/CATEGORIES.md for the full index.

Install

Claude Code

Add the marketplace once, then install the plugin:

/plugin marketplace add risadams/ink-and-agency
/plugin install ink-and-agency

This installs all 80 skills. Or load locally for development (no marketplace, picks up your working copy):

claude --plugin-dir /path/to/ink-and-agency

OpenAI Codex

Add the marketplace once, then install the plugin:

codex plugin marketplace add risadams/ink-and-agency
codex plugin install ink-and-agency

The plugin bundles all skills via ./skills/ — nothing to install separately. If your Codex version predates plugin marketplaces, copy the skills directly:

git clone https://github.com/risadams/ink-and-agency
cp -r ink-and-agency/skills/* ~/.agents/skills/

Update

Releases are cut with semantic versioning and published as GitHub Releases (see CHANGELOG.md). To move to the latest version:

Updating on Claude Code

/plugin marketplace update ink-and-agency   # refresh the catalog
/plugin update ink-and-agency               # pull the new version

For a local dev checkout, just git pull — --plugin-dir always reflects the working tree.

Updating on OpenAI Codex

codex plugin marketplace update ink-and-agency
codex plugin update ink-and-agency

Invoking skills

Everything is a skill — a prompt-driven capability that runs inline on every host.

Invoking on Claude Code

How to invoke
ExplicitType /ink-and-agency:<skill-name> — e.g. /ink-and-agency:which-skill. Names are namespaced by the plugin at install time, so they never collide with your project's own skills.
AutomaticMost skills auto-fire when your request matches their description. The exceptions are user-invoked-only skills (which-skill, handoff, teach, work-plan, codebase-explain, implement, plan-to-spec, plan-to-tickets) — reach those by typing the name.

Not sure which skill fits? Run /ink-and-agency:which-skill — it routes over the whole pack and hands you the exact invocation.

Invoking on OpenAI Codex

How to invoke
ExplicitType $<skill-name> — e.g. $which-skill.
AutomaticSkills auto-fire on a matching task, except those marked user-invoked (same list as above), which Codex keeps out of automatic reach via policy.allow_implicit_invocation: false.

A skill's invocation mode is identical on both hosts — it's authored once in SKILL.md frontmatter and projected to each host, so a skill that's user-invoked in Claude Code is user-invoked in Codex too.

How skills compose

This pack is skills-only. Every skill is a triggered procedure — code-review, writing-humanize, sprint-plan. When a procedure needs judgment from a particular angle, it asks clarity-council to apply a named lens (e.g. statistics-expert, psychologist) rather than shipping a separate expert.

Common patterns

Pattern 1: workflow skill invokes another skill

implement skill
  → writes the API
  → code-review skill → validated diff

Pattern 2: a flow chains skills

grill → work-plan → plan-to-spec → plan-to-tickets → implement (tdd + code-review)

Skills declare workflow neighbours in the related-skills frontmatter field. For the full model, see skills/INTEGRATION.md; for named end-to-end flows, see skills/FLOWS.md.

Self-evolution

Every skill in the pack learns across invocations. Each SKILL.md ends with a short Self-Evolve footer pointing at the shared contract, skills/SELF-EVOLVE.md. The loop it runs:

  1. Start — the skill reads its learnings journal, if one exists, and applies what's relevant (standing guidance always; past entries when they match the situation).
  2. End — the skill silently evaluates how the run went, from observable signals: corrections, retries, things that misfired, things that clicked.
  3. Optional feedback — it may ask you one short question, and only when the session is interactive and the run had visible friction. Ignoring or declining costs nothing; it never asks during /loop runs, in subagents, or in non-interactive sessions.
  4. Capture — only signal-bearing runs get a journal entry (the test: would this change the next invocation?). Routine clean runs write nothing.
  5. Route improvements — when a learning suggests the skill itself should change, not just your context, it's routed by tier (see below).

Where learnings live — always on your machine. One markdown journal per skill: ~/.ink-and-agency/learnings/<skill-name>.md (user-global, follows you across projects), falling back to .ink-and-agency/learnings/<skill-name>.md at the workspace root on hosts whose sandbox confines writes to the workspace (Codex's default). Journals are plain markdown you can read, edit, or delete; nothing is ever sent anywhere.

How the skill itself improves. If the canonical checkout of this repo is present — you're working inside it, or ~/.ink-and-agency/config.md names its path — the skill proposes a concrete edit and, with your confirmation, applies it to the checkout (uncommitted, generated artifacts re-synced). Otherwise it records the idea under Suggested skill improvements in the journal and, only with your consent, offers to file it as an issue on this repo. A skill never edits its running copy in a plugin cache — caches are wiped on update and diverge from source.

For contributors: the footer is machine-maintained by pwsh ./scripts/add-self-evolve.ps1 (idempotent — run it after adding a skill; lint fails on a missing footer). A skill where end-of-run evaluation makes no sense can opt out with self-evolve: false in its frontmatter.

Conventions

  • Skills cross-reference each other via the related-skills frontmatter field.
  • Cross-component file paths are written relative to the referencing file (or described as "under the plugin root"), so they resolve on any host. Claude Code additionally exposes the plugin root as ${CLAUDE_PLUGIN_ROOT}.
  • Skill bodies use Claude Code tool vocabulary; skills/PORTABILITY.md defines how other hosts map those names by intent.
  • The markdown under skills/, plus AGENTS.md, are the single source of truth. Everything Codex-facing is generated from them by pwsh ./scripts/convert-agents-to-codex.ps1: skills/*/agents/openai.yaml (per-skill Codex picker metadata + invocation policy), the root plugin.json, and the root CLAUDE.md (mirror of AGENTS.md). After editing any source, re-run the script and commit the output; CI fails if they drift.
  • One skill, both hosts: a skill's invocation mode lives once in its SKILL.md frontmatter (disable-model-invocation: true = user-invoked only) and is projected to Codex as policy.allow_implicit_invocation: false. Never hand-edit openai.yaml. See AGENTS.md.
  • The council is the clarity-council skill (three inline modes), not a set of subagents — so it ships in the skills bundle on both hosts. Its lenses (formerly persona files) live in one reference doc, skills/clarity-council/LENSES.md; retired persona names resolve through its alias table.
  • The Self-Evolve footer at the bottom of every SKILL.md is machine-maintained (between <!-- self-evolve:start/end --> markers) by pwsh ./scripts/add-self-evolve.ps1 — change the template in that script and re-run it, never the footer itself. See Self-evolution.
  • On Claude Code, skill names are namespaced by the plugin at install time (ink-and-agency:skill-name), so local project skills won't collide.

License

MIT