Home/Features/core-workflow
plugin · agents

core-workflow

Opinionated dev workflow: commit + share + team up.

Install → View source ↗
6
skills
4
commands
2
agents
1
hook

01 Overview

core-workflow is a Claude Code plugin that bundles six integrated components for faster dev cycles: automated git commits with conventional messages and shellcheck linting; skill contribution and PR orchestration back to the claude-skills repository; agent-team evaluation for parallel workstreams; image-analysis subagent for screenshot comparisons and OCR; web-research subagent for API/framework lookups; and a PostToolUse hook that automatically lints shell scripts after every edit. Designed for iterative shell + Swift workflows and multi-agent coordination.

02 Problem & why it's needed

The friction

Context switching between coding and workflow tasks (git commits, skill contributions, team coordination, code review) fragments developer attention and slows iteration cycles. Manual commit message crafting, branch creation, PR orchestration, and image/doc lookups are friction points that interrupt flow.

Why it mattersDevelopment is fastest when workflow mechanics are invisible. core-workflow integrates commit automation, skill sharing, team-based parallel execution, and specialized research agents into one coherent plugin, so you stay in the editor and in command mode rather than switching tools or tabs.

03 Install

Via Claude Code /plugin marketplace

/plugin marketplace add abhijitbansal/claude-skills
/plugin install core-workflow@claude-skills

04 Usability guide

Every capability, how to invoke it, and a concrete example.

commit skill — Stage, lint, and create a conventional commit

Automatically stages relevant files, runs shellcheck on changed .sh files, generates a conventional commit message in imperative mood with a Co-Authored-By trailer, and confirms the commit. Designed to make snapshotting working state cheap so debug rounds don't accumulate uncommitted regressions.

Invoke when the user says 'commit', 'save this', 'snapshot this state', or 'checkpoint' without specifying the commit message themselves. Skip if the user asked for push, PR open, or anything beyond local commit.

User: 'Commit this' Claude runs in parallel: - git status (no -uall) - git diff (staged + unstaged) - git log --oneline -10 Then sequentially: - Lint changed .sh files with shellcheck (surface errors, ask if user wants to proceed) - Stage files by name (never git add -A or .) - Generate title (≤72 chars, imperative, lowercase, no period) - Commit via heredoc with Co-Authored-By trailer - Confirm via git status

contribute skill — Push changes back to claude-skills repo

Drives the claude-skills-contribute script from any repo or machine. Captures state of a locally developed or modified skill, agent, hook, command, or plugin manifest, creates a feature branch, validates, commits with conventional message, and opens a PR for review.

Use when the user says 'contribute this back', 'add this to claude-skills', 'share this skill', or invokes the /contribute-skill command.

User: 'Contribute this skill back to claude-skills' Claude: 1. Confirms intent (capture live state, or scaffold new skill?) 2. Runs: claude-skills-contribute --skill <name> --message "<msg>" OR: claude-skills-contribute --message "<msg>" (for live state) 3. Surfaces PR URL printed by gh 4. If --no-pr used, tells user the branch name for later push

/team command — Evaluate if task fits agent-team mode

Evaluates whether the current (or specified) task warrants spawning a Claude Code agent team. Applies a four-criterion heuristic: ≥3 independent workstreams with non-overlapping file ownership; read-heavy work or disjoint write surfaces; >60% context window fill or competing hypotheses; and scope not capped to a quick fix.

Returns either a team proposal (with role and directory ownership per teammate) or a pushback with better-fit alternative. Never spawns without explicit user confirmation.

User: '/team refactor the auth module and add logging' Claude: Evaluates heuristic: - Criterion 1: Auth refactor (src/auth/) and logging (src/logging/) are independent - Criterion 2: Both are write-heavy to disjoint directories - Criterion 3: Would fill >60% of context; competing approaches exist - Criterion 4: Scope is broad, not a quick fix Outputs proposal: "Team proposed. Teammates: 1. auth-lead — refactor. Owns src/auth/. 2. logging-lead — logging. Owns src/logging/." Waits for user confirmation before spawning.

/contribute-skill command — CLI wrapper for contribute skill

Slash-command entry point to the contribute skill. Accepts optional flags: --skill <name> to scaffold a new skill; --message "<text>" for commit message and PR title; --no-pr to skip PR and push only; --auto-merge to squash-merge once CI passes (use sparingly).

Directly invokes the contribute skill with the given arguments.

User: '/contribute-skill --skill my-new-agent --message "Add custom research agent"' Claude runs: contribute skill with --skill my-new-agent --message "..." Result: Feature branch created, new skill scaffolded and committed, PR opened.

image-parser agent — Analyze screenshots and images

Specialized subagent for image and screenshot analysis. Answers questions like 'what does this screenshot show', 'OCR the text', 'compare these two simulator screenshots', 'is the title cut off', 'extract the data table from this PNG'. Runs on Sonnet for cost efficiency.

Reads image files with the Read tool (content rendered visually), answers the specific question first, references UI elements concretely, flags uncertainty, and avoids fabrication. Common Paperix use case: check sheet titles, button labels, list item rendering, dark-mode contrast, PAS capsule presence.

User: 'Compare these two simulator screenshots and tell me what changed' Claude dispatches to image-parser agent with two image paths. image-parser: 1. Reads both images via Read tool 2. Leads with the diff: "Button color changed from blue to gray; sheet title now bold" 3. Structures as side-by-side bullets: "- Before: title in regular weight\n- After: title bold" 4. Flags blurry text or occlusions if any

web-researcher agent — API/framework lookups and doc research

Specialized subagent for web research and library documentation. Answers 'API behavior', 'framework changes', 'SDK syntax', 'version migration', 'what's the current way to do X in React/Django/etc'. Prefers Context7 for library docs, falls back to WebSearch and WebFetch.

Reads actual pages (doesn't trust snippets), stops early once confident, synthesizes with source URLs, and avoids speculation. Runs on Sonnet for cost.

User: 'What's the current way to handle async/await in FastAPI?' Claude dispatches to web-researcher agent. web-researcher: 1. Resolves library ID via Context7 (FastAPI) 2. Queries docs for async/await patterns 3. Returns: "FastAPI uses standard Python async/await. Declare route handlers async and FastAPI runs them in thread pool. Example: async def get_data(): return data" 4. Lists sources: https://fastapi.tiangolo.com/async/ 5. Flags version-specificity if relevant

shellcheck-on-edit hook — Auto-lint shell scripts after edits

PostToolUse hook that triggers automatically after any Edit or Write operation on a .sh file. Runs shellcheck and surfaces findings as non-blocking informational output. Complements the commit skill by catching shell script issues before they're committed.

Matches file paths ending in .sh; skips if shellcheck is not installed or file does not exist; always exits cleanly (non-blocking).

User edits setup/install.sh via Edit tool. Hook fires (PostToolUse): 1. Extracts file path from tool_input 2. Checks: is it *.sh? Does it exist? Is shellcheck available? 3. Runs: shellcheck setup/install.sh 4. Outputs: "shellcheck findings for setup/install.sh:\nSC2086: Double quote to prevent globbing and word splitting." 5. Exits 0 (non-blocking; Claude can see the findings and decide whether to fix now or defer)

05 How it works under the hood

Commit automation and validation

The commit skill runs three read-only commands in parallel to gather context: git status (untracked and modified files), git diff (staged and unstaged changes), and git log --oneline -10 (recent commit style). Then sequentially, it lints changed .sh files using shellcheck, stages files by name (never using git add -A or . to avoid accidentally staging .env or build artifacts), generates a conventional commit message (title ≤72 chars, imperative mood, lowercase, optional body focused on why, Co-Authored-By trailer), commits via heredoc to preserve formatting, and confirms via git status. If shellcheck finds errors, it surfaces them and asks the user whether to proceed, enforcing awareness of known issues without blocking the commit.

Skill contribution workflow

The contribute skill wraps claude-skills-contribute, a script that operates on $CLAUDE_SKILLS_HOME (the claude-skills repo clone, not the user's current working directory). When invoked, it confirms the user's intent (capture live state vs. scaffold new skill), runs the contribute script with optional --skill <name> and --message arguments, captures the PR URL printed by gh, or returns the branch name if --no-pr was used. The script handles branch creation, validation, committing, and PR opening; Claude surfaces the result and, on offline work, tells the user the branch name for later manual push. Never runs with --auto-merge unless explicitly requested.

Agent-team evaluation heuristic

The /team command applies a four-criterion filter to determine if parallel multi-agent execution is justified. Criterion 1: ≥3 independent workstreams with non-overlapping file ownership (by directory, target, or review lens, not by feature within the same module). Criterion 2: Each workstream is read-heavy (research, investigation) or owns a disjoint write surface. Criterion 3: Serial execution would fill >60% of context window OR task involves competing hypotheses. Criterion 4: User has not capped scope to a quick fix. If all four hold, the command outputs a proposal block with role, directory ownership per teammate, and estimated cost (~3–4× single-session); on user confirmation, teammates spawn in parallel via Agent tool calls. If any criterion fails, it outputs a pushback block with the failing criterion and a better-fit alternative (single session, Explore subagent, plan mode, etc.).

PostToolUse hook pipeline for shellcheck

When Edit or Write is invoked, the Claude Code harness fires the PostToolUse hook. shellcheck-on-edit.sh receives the hook payload as JSON stdin, extracts the file_path from tool_input, checks if it matches *.sh, verifies the file exists, and confirms shellcheck is installed. If all checks pass, it runs shellcheck on the file and captures output; if shellcheck finds issues, output is printed to Claude as informational (non-blocking). Hook always exits 0 so it never fails the underlying edit operation; Claude sees the findings and decides whether to fix immediately or defer.

Image-parser and web-researcher subagent delegation

When Claude encounters an image-analysis question or a web-research task during development, it dispatches to a specialized subagent (image-parser or web-researcher, respectively) instead of answering from context. These agents receive the Read tool for file/image ingestion, run on Sonnet (lower cost than Opus), and return a focused answer: image-parser leads with yes/no or a side-by-side diff and flags blurry/occluded content; web-researcher prefers Context7 for library docs and WebSearch/WebFetch for other research, synthesizes with source URLs, and stops once confident. Both agents are read-only (no code edits) and avoid speculation beyond what sources say. Dispatcher then integrates the subagent's answer into the main conversation.

06 What's inside

Skills

commitStage current changes, lint shell scripts with shellcheck, and create a single git commit with a conventional message. Use when the user says 'commit', 'save this', 'snapshot this state', or 'checkpoint' without specifying a message.
contributeContribute a change or new skill back to claude-skills repo. Branches, validates, commits, and opens a PR. Wraps claude-skills-contribute script. Use when the user says 'contribute this back', 'add this to claude-skills', or 'share this skill'.
learn-lessonCapture a lesson from the current session (a bug fixed, a trap discovered, a pattern that worked) into the claude-skills catalog as a new or extended skill. Dedupes against existing skills first — extend beats duplicate — then hands off to the contribute skill for the PR. Use when the user says 'remember this lesson', 'capture this learning', 'this should be a skill', or invokes /learn.
branch-explainerGenerate a self-contained HTML visual explainer for the current git branch — what's implemented, architecture diagram, key files, test evidence, next steps. Scoped to one branch/PR rather than the whole repo; every claim must trace to a command actually run or a file actually read.
github-repo-go-public-preflight-scanScan for secrets in both the working tree and the full git history before flipping a GitHub repo from private to public. Use before `gh repo edit --visibility public` — secrets committed and later deleted remain cloneable/indexable the instant the repo goes public.
github-solo-branch-protection-codeownersConfigure branch protection on a solo-owner repo so other people's PRs require the owner's approval before merge, while the owner can still self-merge their own PRs. Fixes the "review not required for administrators" lockout.

Commands

/teamEvaluate whether the current or specified task warrants a Claude Code agent team. Applies four-criterion heuristic and proposes composition (or pushes back) pending explicit confirmation.
/contribute-skillSlash-command entry point to the contribute skill. Accepts --skill <name>, --message "<text>", --no-pr, --auto-merge flags.
/learnCapture a lesson from this session into claude-skills as a new or extended skill (dedupes first, then opens a PR). Reports back the dedupe verdict — extended which skill, or created which new one — and the PR URL.
/explain-branchGenerate the branch-explainer HTML for the current branch, diffed against a base branch (default main). Writes to .scratch/branch-explainer/ and delivers it.

Hooks

shellcheck-on-editPostToolUse hook triggered after Edit or Write on .sh files. Runs shellcheck and surfaces findings as non-blocking informational output.

Agents

image-parserVision-capable Sonnet subagent for screenshot and image analysis. Answers 'what does this show', 'OCR the text', 'compare these two images', 'extract the data table'. Read-only; flags uncertainty; concrete and locatable.
web-researcherSonnet subagent for web research and library documentation lookups. Answers API behavior, framework changes, SDK syntax, version migration questions. Prefers Context7 for library docs, falls back to WebSearch/WebFetch. Synthesizes with source URLs.

Explore the other plugins

Browse the full skills & tools catalog →