@apogeelabs/the-agency 0.5.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -50,6 +50,7 @@ Slash commands invoked in Claude Code sessions.
50
50
  | `/prep-pr` | Pre-submission PR prep and draft creation |
51
51
  | `/review-pr` | Structured PR review briefing |
52
52
  | `/weekly-summary` | Weekly synthesis of merged PRs |
53
+ | `/dnd-alignment` | D&D alignment chart from commit history |
53
54
 
54
55
  ### AI Context (`.ai/`)
55
56
 
package/dist/manifest.js CHANGED
@@ -13,7 +13,8 @@ const manifest = {
13
13
  { file: "pm.md", description: "Interactive product requirements discovery" },
14
14
  { file: "prep-pr.md", description: "Pre-submission PR prep and draft creation" },
15
15
  { file: "review-pr.md", description: "Structured PR review briefing" },
16
- { file: "weekly-summary.md", description: "Weekly synthesis of merged PRs" }
16
+ { file: "weekly-summary.md", description: "Weekly synthesis of merged PRs" },
17
+ { file: "dnd-alignment.md", description: "D&D alignment chart from commit history" }
17
18
  ],
18
19
  ai: [
19
20
  { file: "UnitTestGeneration.md", description: "TypeScript/Jest unit testing style guide" },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apogeelabs/the-agency",
3
- "version": "0.5.0",
3
+ "version": "0.7.0",
4
4
  "description": "Centralized Claude Code agents, commands, and workflows",
5
5
  "type": "module",
6
6
  "bin": {
@@ -0,0 +1,84 @@
1
+ # D&D Alignment Chart Command
2
+
3
+ ## Goal
4
+
5
+ Analyze recent commit history and assign a D&D alignment (Lawful Good, Neutral Good, Chaotic Good, Lawful Neutral, True Neutral, Chaotic Neutral, Lawful Evil, Neutral Evil, Chaotic Evil) to each committer based on their commit patterns, message style, and the nature of their work. This is for fun — treat it like a roast, not a performance review.
6
+
7
+ ## Constraints
8
+
9
+ - **Be funny.** Dry humor, sarcasm, and well-placed jabs are mandatory. This is a comedy bit backed by data, not a Jira report.
10
+ - **Ground it in evidence.** Quote actual commit messages. The humor lands because it's _true_.
11
+ - **Every committer gets a fantasy class/title** in addition to their alignment. The title should reflect their commit personality (e.g., "The Paladin of Tech Debt," "The Test Suite Warlock").
12
+ - **Include commit counts** as supporting data for each person.
13
+ - **Don't pull punches.** If someone's commit history is chaotic, say so. If someone made one commit and vanished, that's comedy gold.
14
+ - **Don't be cruel.** Roast the commits, not the person. There's a line between "your commit history is a hostage negotiation" and actually being mean.
15
+ - **Typos in commit messages are fair game.** Always.
16
+
17
+ ## Step 1: Fetch Commit History
18
+
19
+ Fetch the last ~30 days of non-merge commits:
20
+
21
+ ```bash
22
+ git log --since="30 days ago" --pretty=format:"%an|%s" --no-merges
23
+ ```
24
+
25
+ Also get per-author commit counts:
26
+
27
+ ```bash
28
+ git log --since="30 days ago" --pretty=format:"%an" --no-merges | sort | uniq -c | sort -rn
29
+ ```
30
+
31
+ ## Step 2: Analyze Patterns
32
+
33
+ For each committer, look for patterns in their commit messages and work:
34
+
35
+ - **What kind of work do they do?** Feature building, bug fixing, cleanup, infrastructure, tests, docs?
36
+ - **How do they name commits?** Terse? Verbose? Chaotic capitalization?
37
+ - **What's their commit cadence?** Many small commits or few large ones?
38
+ - **Any recurring themes?** Lots of "fix" commits? Lots of "remove" commits? An endless skip/unskip cycle?
39
+ - **Anything funny in the messages?** Typos, frustration, oddly specific wording?
40
+
41
+ Use these patterns to determine alignment:
42
+
43
+ - **Lawful**: Follows process, systematic, methodical, adds tooling/enforcement
44
+ - **Chaotic**: Unpredictable patterns, high blast radius, skip/unskip cycles, inconsistent capitalization
45
+ - **Neutral**: Balanced, pragmatic, no strong lean either way
46
+ - **Good**: Improves things for others, security fixes, cleanup, documentation
47
+ - **Evil**: Breaks things (intentionally or otherwise), adds complexity, creates tech debt
48
+ - **Neutral (moral axis)**: Neither improves nor degrades, just ships what's needed
49
+
50
+ ## Step 3: Write the Report
51
+
52
+ Write the output to `docs/reports/dnd-alignment-chart-YYYY-MM-DD.md` (using today's date).
53
+
54
+ If a file already exists at that path, overwrite it.
55
+
56
+ ## Output Format
57
+
58
+ ```markdown
59
+ # {Repo Name} — D&D Alignment Chart ({Month} {Year})
60
+
61
+ Based on ~{N} commits from the last 30 days. This is strictly for fun and not a performance review (unless your alignment is Chaotic Evil, in which case HR will be in touch).
62
+
63
+ ---
64
+
65
+ ## {Name} — **{Alignment}** ({Fantasy Title})
66
+
67
+ **{N} commits** | Evidence: {quoted commit message snippets}
68
+
69
+ {1-2 paragraphs of analysis with humor. Reference specific commits. Make it sting a little.}
70
+
71
+ ---
72
+
73
+ [Repeat for each committer, ordered by commit count descending]
74
+
75
+ ---
76
+
77
+ _Roll for initiative on that next PR._
78
+ ```
79
+
80
+ ## Notes
81
+
82
+ - If someone has only 1 commit, lean into the mystery of it. One commit is inherently funny.
83
+ - If the repo has a co-author bot (like Claude), don't assign it an alignment — it's an NPC.
84
+ - End with the "Roll for initiative" line. It's tradition now.
@@ -223,7 +223,7 @@ Based on the changes in this PR, provide concrete testing recommendations. This
223
223
  Produce your output as inline markdown with these sections:
224
224
 
225
225
  ```markdown
226
- # PR Review: #{number} — {title}
226
+ # {title}
227
227
 
228
228
  **Branch**: {headRefName} → {baseRefName}
229
229
  **Changes**: {additions} additions, {deletions} deletions across {changedFiles} files
@@ -288,3 +288,31 @@ Each block contains:
288
288
 
289
289
  [If test coverage is already good, say so and note any minor gaps]
290
290
  ```
291
+
292
+ ## Step 9: Offer to Update PR Description
293
+
294
+ After producing the review output, ask the user:
295
+
296
+ > **Would you like to update the PR description with this review?**
297
+
298
+ If the user declines, you're done.
299
+
300
+ If the user accepts, update the PR description by prepending the review content above the original description, separated as follows:
301
+
302
+ ```
303
+ {review content}
304
+
305
+ ---
306
+ Original PR Description
307
+ ---
308
+
309
+ {original PR description}
310
+ ```
311
+
312
+ Use the `body` captured in Step 2 as the original PR description. Update the PR with:
313
+
314
+ ```bash
315
+ gh pr edit --body "{new body content}"
316
+ ```
317
+
318
+ ⚠️ **Preserve the original description exactly as-is** — no reformatting, no trimming, no "improving" it.
@@ -0,0 +1,60 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Read",
5
+ "Edit",
6
+ "Write",
7
+ "Glob",
8
+ "Grep",
9
+ "Bash(npm *)",
10
+ "Bash(npx *)",
11
+ "Bash(git diff *)",
12
+ "Bash(git log *)",
13
+ "Bash(git status *)",
14
+ "Bash(git show *)",
15
+ "Bash(git branch *)",
16
+ "Bash(git fetch *)",
17
+ "Bash(git commit *)",
18
+ "Bash(git checkout *)",
19
+ "Bash(git pull *)",
20
+ "Bash(git merge *)",
21
+ "Bash(git rebase *)",
22
+ "Bash(git reset *)",
23
+ "Bash(git revert *)",
24
+ "Bash(git stash *)",
25
+ "Bash(gh pr *)",
26
+ "Bash(gh browse *)",
27
+ "Bash(gh gist *)",
28
+ "Bash(mkdir *)",
29
+ "Bash(ls *)",
30
+ "Bash(wc *)",
31
+ "Bash(chmod *)",
32
+ "Bash(cat *)",
33
+ "Bash(head *)",
34
+ "Bash(tail *)",
35
+ "Bash(pnpm build:*)",
36
+ "mcp__voicemode__converse",
37
+ "Bash(gh auth status:*)",
38
+ "Bash(gh repo view:*)",
39
+ "Bash(gh pr create:*)",
40
+ "Bash(git rm:*)",
41
+ "Bash(voicemode --help:*)",
42
+ "Bash(voicemode config:*)",
43
+ "Bash(git push:*)",
44
+ "Bash(git -C /Users/jimcowart/git/apogee/the-agency status)",
45
+ "Bash(git -C /Users/jimcowart/git/apogee/the-agency diff --stat)",
46
+ "Bash(git -C /Users/jimcowart/git/apogee/the-agency log --oneline -5)",
47
+ "Bash(git -C /Users/jimcowart/git/apogee/the-agency branch:*)",
48
+ "Bash(git -C /Users/jimcowart/git/apogee/the-agency rev-parse --abbrev-ref --symbolic-full-name @{u})",
49
+ "Bash(git -C /Users/jimcowart/git/apogee/the-agency push -u origin command-updates)",
50
+ "Bash(echo:*)"
51
+ ],
52
+ "deny": [
53
+ "Bash(rm -rf /*)",
54
+ "Bash(rm -rf ~*)",
55
+ "Bash(curl * | *)",
56
+ "Edit(~/.ssh/**)",
57
+ "Edit(/etc/**)"
58
+ ]
59
+ }
60
+ }