{"id":49318059,"url":"https://github.com/brockamer/jared","last_synced_at":"2026-05-04T01:00:22.496Z","repository":{"id":353392274,"uuid":"1214532797","full_name":"brockamer/jared","owner":"brockamer","description":"Claude Code plugin that makes a GitHub Projects v2 board the single source of truth for what's being worked on.","archived":false,"fork":false,"pushed_at":"2026-05-03T21:11:56.000Z","size":3083,"stargazers_count":1,"open_issues_count":8,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-03T22:24:05.465Z","etag":null,"topics":["agentic-workflows","ai-agents","anthropic","claude","claude-code","claude-code-plugin","cli","developer-tools","github-projects","issue-management","kanban","plugin","project-management","python","workflow-automation"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/brockamer.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-18T17:51:04.000Z","updated_at":"2026-05-03T21:11:59.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/brockamer/jared","commit_stats":null,"previous_names":["brockamer/jared"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/brockamer/jared","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brockamer%2Fjared","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brockamer%2Fjared/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brockamer%2Fjared/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brockamer%2Fjared/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/brockamer","download_url":"https://codeload.github.com/brockamer/jared/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brockamer%2Fjared/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32590466,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T22:12:39.696Z","status":"ssl_error","status_checked_at":"2026-05-03T22:09:10.534Z","response_time":103,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agentic-workflows","ai-agents","anthropic","claude","claude-code","claude-code-plugin","cli","developer-tools","github-projects","issue-management","kanban","plugin","project-management","python","workflow-automation"],"created_at":"2026-04-26T16:04:55.559Z","updated_at":"2026-05-04T01:00:22.427Z","avatar_url":"https://github.com/brockamer.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Jared\n\nA Claude Code plugin that turns a GitHub Projects v2 board into the single\nsource of truth for what's being worked on — with a discipline that\nsurvives across sessions, weeks, and shifts in scope.\n\n\u003e Project boards drift. Scope leaks into `TODO:` comments and\n\u003e `tmp/next-session-prompt.md` files. Plans approved three weeks ago no\n\u003e longer match the code. By month two the board is decorative and real\n\u003e status lives in your head. **Jared makes the board the thing you\n\u003e actually look at.**\n\n---\n\n## What it's for\n\nLong-running work on a complex project — features that take more than one\nsitting, bugs surfaced mid-refactor, plans that need to outlast the\nsession that wrote them. Anywhere the work is bigger than your working\nmemory, Jared keeps the board in lockstep with reality so you (and any\nagent picking up the work) can resume from the board instead of from\nrecollection.\n\nIt works just as well on non-software projects. A kanban for renovating a\nhouse uses the same model — `Backlog / Up Next / In Progress / Blocked /\nDone` — with work streams like *Demo*, *Rough-in*, *Finish*. The\ninvariants are identical.\n\n## Where the discipline comes from\n\nJared is a software-engineering translation of **Personal Kanban**, the\ntwo-rule visual-management framework Jim Benson and Tonianne DeMaria\nintroduced in *Personal Kanban: Mapping Work | Navigating Life*\n(Modus Cooperandi Press, 2011). The rules are deliberately small:\n\n1. **Visualize your work.**\n2. **Limit your work-in-progress.**\n\nEverything else is consequence. The first rule turns information you'd\notherwise carry in your head into something you can scan in two seconds;\nthe second forces you to finish before you start.\n\n\u003e \"Set limits to stay within capacity.\" — [Modus Cooperandi](https://moduscooperandi.com/)\n\nIn a software-engineering context the sticky note on the wall is a\nGitHub issue, the wall is a GitHub Projects v2 board, and the column\ntransitions happen via API mutations Claude can execute atomically. The\ndiscipline outlives any single chat because the state lives in GitHub,\nnot in your conversation history.\n\nThe two rules map directly onto what Jared enforces:\n\n| Personal Kanban rule | How Jared enforces it |\n|---|---|\n| **Visualize your work** | Every issue has Status + Priority the moment it lands; `jared file` is atomic, so nothing is \"filed but invisible\". `Blocked` is a Status column with a `## Blocked by` body section, not a stray label. Plans cite issues, issues link back. |\n| **Limit your work-in-progress** | In Progress caps at ~3 by default; `/jared-groom` flags scattered focus and stalled items; `/jared-start` is the only sanctioned way to add to In Progress, and it expects the previous session's `## Session` note to be closed out. |\n\n## Working in Claude Code, with vs. without Jared\n\n| | Without Jared | With Jared |\n|---|---|---|\n| **Starting a session** | \"What were we doing?\" Skim recent commits, re-read CLAUDE.md, scroll the issue list trying to remember which ones are actually live right now. | `/jared` shows In Progress, top of Up Next, what's blocked, what's aging — in two seconds. `/jared-start \u003cN\u003e` loads issue body + latest Session note + linked plan. |\n| **Mid-session scope discovery** | \"We should also fix X\" — either filed as an issue you'll forget about, or done inline and lost in the diff. | The skill triggers on phrases like *\"let me refactor X\"*, *\"I noticed\"*, *\"I'll file that later\"*. `jared file` opens an issue with Priority + Status set atomically before the change happens. |\n| **Plans** | Plans from Claude Code's plan mode (or the superpowers plugin) accumulate as markdown files. Claude reads everything in the plans directory each time, so old, shipped, or superseded plans dilute the context that's actually relevant right now. | Each plan cites its issue (`## Issue` or `**Issue:** #N`). When the issue ships, `/jared-wrap` proposes archiving the plan into `archived/YYYY-MM/`. The active set stays small enough to be load-bearing. |\n| **Ending a session** | Rely on you remembering to commit cleanly, write a meaningful commit message, push, and update the right tracking artifact (issue, ticket, doc) — every time, even when the session ran long. The discipline is correct; it's also exactly the discipline that erodes first when you're tired. | `/jared-wrap` checkpoints the session onto the board: appends a structured `## Session YYYY-MM-DD` note (Progress / Decisions / Next action / Gotchas / State) to every issue touched, files any discovered scope, and proposes plan archivals. Next session reads from the issue, not your recollection. |\n| **Two months in** | Board half-decorative, items with `Status=null` floating off the kanban, `## Blocked by` written as a label that nobody's filtering for. | Daily `/jared-groom` flags drift before it accumulates: missing metadata, WIP-cap violations, aging items, stale plans, native-dependency hygiene. Nothing silent. |\n| **Cross-session continuity** | Lives in your head. | Lives on the board, in Session notes on issues, in the Status column. Any agent — Sonnet, Opus, you next Tuesday — picks up the same context. |\n\nThe shape Jared enforces makes this work:\n\n- **Five Status columns.** `Backlog / Up Next / In Progress / Blocked / Done`. Blocked is a column, never a label.\n- **Status + Priority required** the moment an issue lands. `jared file` fails loudly rather than leave the board half-updated.\n- **Blocked-by is a native GitHub dependency** (`addBlockedBy`/`removeBlockedBy` GraphQL), not a comment convention.\n- **WIP cap on In Progress.** More than ~3 items means focus is scattered; the groom flags it.\n\n---\n\n## A typical week\n\n| When | Command | Why |\n|---|---|---|\n| Once a week (Mon morning) | `/jared-reshape` | Structural review — shape, phasing, milestones, dependencies, long-horizon arc. Catches drift the daily groom can't see. |\n| Every day | `/jared-groom` | Routine sweep — metadata completeness, WIP cap, aging items, pullable check, plan/spec drift, label hygiene. Advisory; you approve each proposed change. |\n| Per work session — start | `/jared` then `/jared-start \u003cN\u003e` | `/jared` orients in 2 seconds. `/jared-start` moves the issue to In Progress and loads everything you need to resume. |\n| Per work session — end | `/jared-wrap` | Captures Progress / Decisions / Next action on every touched issue. Files any discovered scope. Proposes plan archivals. |\n| As scope arrives | `/jared-file` | One atomic operation: create issue, add to board, set Priority + Status, verify. No \"filed but invisible\" state. |\n\n### What the cycle looks like\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eExcerpt — \u003ccode\u003e/jared\u003c/code\u003e at session start\u003c/strong\u003e\u003c/summary\u003e\n\n```\nWhere we are (2026-05-03):\n\nIn Progress (1/3):\n  #89 [Low] feat(archive-plan): support recycled-issue plans\n    Last session: \"Add ## Shipped section parser to lib/board.py; tests next\"\n\nUp Next (top 3):\n  #76 [Medium] Jared roadmap — open strategic questions — pullable: yes\n  #80 [Medium] feat(ties): LLM-pass overlay for semantic ties — pullable: yes\n  #67 [Low] verify: #22 rate-limit fix smoke results on findajob — pullable: yes\n\nBlocked:\n  #60 — waiting on findajob measurement run for post-#51/#55 GraphQL delta\n\nAging: none\nTotals: 6 open (0 H / 3 M / 3 L)\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eExcerpt — \u003ccode\u003e/jared-start 89\u003c/code\u003e\u003c/strong\u003e\u003c/summary\u003e\n\n```\nStarted #89 — feat(archive-plan): support recycled-issue plans via ## Shipped section\n  Status: Backlog → In Progress\n  Priority: Low\n  Linked plan: docs/superpowers/plans/2026-05-03-89-shipped-section.md\n  Latest Session note (2026-05-02):\n    Progress: Designed ## Shipped section convention; reviewed bug repros.\n    Next action: Add parse_shipped_section to lib/board.py with same\n                 line-start rules as parse_referenced_issues.\n    Gotchas: PR/Issue label needs to be gated behind a list marker or\n             we re-open the #87 false-positive class.\n  Branch: feature/89-shipped-section-archival\n```\n\nSession plan announced. Picking up from the documented Next action.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eExcerpt — \u003ccode\u003e/jared-file\u003c/code\u003e mid-session, scope discovered\u003c/strong\u003e\u003c/summary\u003e\n\n```\nYou: \"Hmm, the regex relaxation here re-opens the #87 prose-match bug\n      if I don't gate the label behind a list marker. Let me file that as\n      a sub-concern so we don't lose it.\"\n\n  → jared file --title \"bug: PR/Issue label gating in plan-line ref regex\"\n                --body-file /tmp/issue.md --priority Medium\n\nOK: filed #94 → Backlog, Priority=Medium\nURL: https://github.com/brockamer/jared/issues/94\n```\n\nThe conversation continues. The scope is on the board, not in your head.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eExcerpt — \u003ccode\u003e/jared-groom\u003c/code\u003e\u003c/strong\u003e\u003c/summary\u003e\n\n```\nSweep for https://github.com/users/brockamer/projects/4\nRun at: 2026-05-03T13:42:00+00:00\n\nOpen items on board: 6\nOpen issues in brockamer/jared: 6\n\n== Metadata completeness ==\n  All open items have required metadata\n\n== WIP (In Progress cap = 3) ==\n  Healthy\n\n== Stale High-priority Backlog (\u003e14d) ==\n  None\n\n== Stalled In Progress (\u003e7d no activity) ==\n  None\n\n== Blocked-status hygiene (\u003e7d) ==\n  #60: in Blocked status with no activity for 9 days\n\n== Plan/spec drift ==\n  docs/superpowers/plans/2026-05-03-89-shipped-section.md:\n    all referenced issues closed ([89]) — propose archiving\n\n== Closed items not on Done ==\n  None\n\nSweep complete. Advisory only — review and propose before applying.\n```\n\nYou approve each proposed change individually. The groom never silently mutates state.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eExcerpt — \u003ccode\u003e/jared-wrap\u003c/code\u003e at session end\u003c/strong\u003e\u003c/summary\u003e\n\n```\nTouched this session: #89\n\nProposed Session note for #89:\n\n  ## Session 2026-05-03\n\n  **Progress:** Implemented ## Shipped section archival path. Added\n  parse_shipped_section to lib/board.py via shared _parse_plan_section\n  helper. Tightened _PLAN_LINE_REF_RE to gate the PR/Issue label behind\n  a list marker. PR #93 merged.\n\n  **Decisions:** Shipped takes priority over ## Issue when both are\n  present — explicit shipping evidence beats potentially-recycled refs.\n\n  **Next action:** None — issue shipped.\n\n  **Gotchas:** Advisor caught the label-gating regression before push;\n  test_parse_referenced_issues_ignores_prose_line_starting_with_issue_label\n  locks it in.\n\n  **State:** Branch deleted; main tagged v0.9.0.\n\nApply? [Y/n] y\n  Appended Session note to #89.\n\nDiscovered scope filed this session: none.\n\nPlans ready to archive:\n  docs/superpowers/plans/2026-05-03-89-shipped-section.md → archived/2026-05/\nArchive? [Y/n] y\n  Archived. Updated #89 ## Planning section.\n```\n\n\u003c/details\u003e\n\n---\n\n## Install\n\n```\n/plugin marketplace add brockamer/jared\n/plugin install jared\n```\n\nIn any project with a `docs/project-board.md`, use `/jared` for status or\nthe workflow commands above.\n\n## Bootstrap on a new project\n\nIf a project has no `docs/project-board.md` yet, run `/jared-init` to\npair the repo with an existing (or new) GitHub Projects v2 board. The\nbootstrap introspects the board's field schema and writes a convention\ndoc with the project ID, field IDs, and option IDs. The CLI reads that\nfile on every invocation — it's the contract between Jared and the board.\n\n---\n\n## Under the hood\n\nSlash commands sit on top of a unified Python CLI\n(`skills/jared/scripts/jared`) that owns the multi-step operations:\n`file`, `move`, `set`, `close`, `comment`, `blocked-by`, `add-to-board`,\n`get-item`, `summary`, `ties`. Each subcommand is atomic — `file`\nguarantees \"issue exists AND on board AND Status set\" or fails with a\nnon-zero exit.\n\nWhen the GitHub MCP plugin is loaded, the skill prefers its typed tools\nfor single-call ops; the CLI handles everything multi-step. Raw `gh` is\nthe last resort.\n\nThe plugin's own development runs on a Jared-stewarded board; integration\ntests target a dedicated `brockamer/jared-testbed` repo.\n\n---\n\n## Reference cards\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eField Notes\u003c/strong\u003e — why Jared exists, in one page (click to expand image)\u003c/summary\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"docs/field-notes-full.png\"\u003e\n    \u003cimg src=\"docs/field-notes-full.png\"\n         alt=\"Jared — Field Notes: the board is a mirror of reality, not a plan.\"\n         width=\"320\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003ePocket Reference\u003c/strong\u003e — install, triggers, board states, session-note template, anti-patterns (click to expand image)\u003c/summary\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"docs/pocket-reference-full.png\"\u003e\n    \u003cimg src=\"docs/pocket-reference-full.png\"\n         alt=\"Jared — Pocket Reference: install, triggers, board states, session-note template, anti-patterns.\"\n         width=\"320\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003c/details\u003e\n\n---\n\n## Developing\n\nFor active development, install from a local checkout:\n\n```\n/plugin marketplace remove jared-marketplace\n/plugin marketplace add file:///path/to/your/checkout/jared\n/plugin install jared\n```\n\nAfter editing files, run `/plugin update jared` to re-sync the plugin\ncache, then `/reload-plugins` to reload. Claude Code copies plugins into\n`~/.claude/plugins/cache/` at install time — source edits are not picked\nup until you re-sync. (See [plugin-marketplaces docs][pm].)\n\n[pm]: https://code.claude.com/docs/en/plugin-marketplaces.md\n\n## Testing\n\n```\npytest                  # unit tests — fast, offline, the default\npytest -m integration   # integration tests against brockamer/jared-testbed\n                        # (requires tests/testbed.env)\n```\n\nSee `tests/testbed-setup.md` for testbed setup.\n\n## Layout\n\n```\n.claude-plugin/\n  plugin.json           Plugin metadata\n  marketplace.json      Self-hosted marketplace manifest\ncommands/               Slash-command stubs (7)\nskills/jared/\n  SKILL.md              Skill contract\n  references/           Detail docs loaded on demand\n  scripts/\n    jared               Unified CLI: file, move, set, close, comment,\n                        blocked-by, add-to-board, get-item, summary, ties\n    lib/board.py        Shared helper: board parsing, gh wrapper,\n                        item-id lookup, plan-issue-ref parser\n    sweep.py            Routine grooming sweep\n    bootstrap-project.py  Introspect a board; write docs/project-board.md\n    dependency-graph.py   Render issue-dependency graph\n    capture-context.py    Append Session notes / Decisions to issue body\n    archive-plan.py       Archive a completed plan doc\n  assets/               Templates: issue body, session note, etc.\ntests/                  pytest suite (unit + opt-in integration)\ndocs/                   Field Notes + Pocket Reference + plugin's own\n                        project-board.md + superpowers plans\n```\n\n## Versioning\n\nSemantic versioning in `.claude-plugin/plugin.json`. Git tag `v\u003cx.y.z\u003e`\nper release. Currently **v0.9.0**.\n\n## License\n\nMIT.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrockamer%2Fjared","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbrockamer%2Fjared","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrockamer%2Fjared/lists"}