geethob 0.1.0 → 0.1.2
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/.claude-plugin/marketplace.json +12 -0
- package/.claude-plugin/plugin.json +12 -0
- package/CHANGELOG.md +27 -0
- package/README.md +38 -49
- package/assets/logo.svg +55 -0
- package/dist/cli.js +88 -80
- package/package.json +7 -4
- package/{skill → skills/geethob}/SKILL.md +2 -1
- package/dist/geethob +0 -0
- package/skill/install.sh +0 -18
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "hemant1996",
|
|
3
|
+
"description": "Hemant Bangar's Claude Code plugins.",
|
|
4
|
+
"owner": { "name": "Hemant Bangar" },
|
|
5
|
+
"plugins": [
|
|
6
|
+
{
|
|
7
|
+
"name": "geethob",
|
|
8
|
+
"source": { "source": "url", "url": "https://github.com/hemant1996/geethob.git" },
|
|
9
|
+
"description": "Turn git history into prose narrative. CLI + skill, local-only, BYO API key."
|
|
10
|
+
}
|
|
11
|
+
]
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "geethob",
|
|
3
|
+
"description": "Turn git history into prose narrative. Use when the user asks 'what changed in this repo,' 'summarize these commits,' 'narrate the history of <feature>,' or 'what did <person> ship last week.' Local-only, BYO API key.",
|
|
4
|
+
"version": "0.1.0",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "Hemant Bangar"
|
|
7
|
+
},
|
|
8
|
+
"homepage": "https://github.com/hemant1996/geethob",
|
|
9
|
+
"repository": "https://github.com/hemant1996/geethob",
|
|
10
|
+
"license": "MIT",
|
|
11
|
+
"keywords": ["git", "github", "narrative", "changelog", "ai", "claude", "skill"]
|
|
12
|
+
}
|
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## v0.1.2
|
|
4
|
+
|
|
5
|
+
- New `geethob skill install` subcommand wires the bundled skill into Claude Code in one step. The full install is now `npm install -g geethob && geethob skill install` — no GitHub SSH key required (unlike the `/plugin install` path on current Claude Code versions).
|
|
6
|
+
- Renamed the bundled skill from `narrate` to `geethob` so the package name and the skill name match. Invocation slash form is now `/geethob:geethob` (or the agent auto-invokes via the Skill tool).
|
|
7
|
+
- Dropped the legacy `skill/` directory; `skills/geethob/SKILL.md` is the single source of truth.
|
|
8
|
+
- Fixed the hardcoded `0.1.0` version string in `--version` output.
|
|
9
|
+
|
|
10
|
+
## v0.1.1
|
|
11
|
+
|
|
12
|
+
- Slim the npm package from ~70 MB to ~700 KB by excluding the compiled Bun binary (`dist/geethob`) from the published tarball. The binary still ships via GitHub Releases for the single-binary install path; npm users only need the JS bundle.
|
|
13
|
+
- Ship the Claude Code plugin manifest (`.claude-plugin/`) and the bundled skill (`skills/narrate/`) inside the npm package, so a global install also lights up the plugin path once Claude Code's HTTPS-source bug lands a fix.
|
|
14
|
+
- Include `assets/logo.svg` in the package so README rendering doesn't 404 if viewed from the npm tarball.
|
|
15
|
+
|
|
16
|
+
## v0.1.0
|
|
17
|
+
|
|
18
|
+
Initial release.
|
|
19
|
+
|
|
20
|
+
- `geethob story <scope>` — narrate the history of a local path or a public GitHub repo (`<owner>/<name>` form).
|
|
21
|
+
- `geethob digest --since 7d` — narrate recent activity for the current working tree, a single remote repo (`--repo`), or a GitHub user (`--author`, falls back to public events when no local repo applies).
|
|
22
|
+
- `geethob configure` — write `~/.config/geethob/config.toml` (mode 0600) with an Anthropic API key. Skipped automatically when `ANTHROPIC_API_KEY` is in the environment.
|
|
23
|
+
- Single-binary builds for macOS arm64, macOS x64, Linux x64 via `bun build --compile`.
|
|
24
|
+
- npm package (`bun add -g geethob` or `npm install -g geethob`) for Node ≥20.
|
|
25
|
+
- Claude Code skill via `skill/install.sh` and `skill/SKILL.md`.
|
|
26
|
+
- Hard cap of 200 commits per invocation (`--max-commits` to override), plus a token-budget pass that sheds oldest commits when the assembled prompt would exceed 150K tokens.
|
|
27
|
+
- Six documented exit codes (0 success, 1 usage, 2 no-git, 3 no-key, 4 model error, 5 GitHub auth/rate).
|
package/README.md
CHANGED
|
@@ -13,37 +13,59 @@ Two modes in v0.1:
|
|
|
13
13
|
- **`geethob story <repo>`** — narrate the history of a feature, module, or the whole repo.
|
|
14
14
|
- **`geethob digest --since 7d`** — narrate a developer's recent work, formatted to paste cleanly into Slack or a PR comment.
|
|
15
15
|
|
|
16
|
-
Local-only. Bring your own model key. No server. Same binary works as a CLI for humans and a skill for AI harnesses
|
|
16
|
+
Local-only. Bring your own model key. No server. Same binary works as a CLI for humans and a skill for AI harnesses.
|
|
17
17
|
|
|
18
18
|
## Install
|
|
19
19
|
|
|
20
|
+
### Claude Code (recommended — works everywhere)
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
npm install -g geethob && geethob skill install
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Two things happen: the `geethob` binary lands on your `$PATH`, and the bundled skill is dropped into `~/.claude/skills/geethob/`. Restart Claude Code (or reload skills) and ask a story-grained question about any repo.
|
|
27
|
+
|
|
28
|
+
Requires Node ≥20 or Bun ≥1.1. If you don't have either, use the [single-binary install](#single-binary-no-runtime-needed) below.
|
|
29
|
+
|
|
30
|
+
### Claude Code — plugin marketplace (alpha)
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
/plugin marketplace add hemant1996/geethob
|
|
34
|
+
/plugin install geethob@hemant1996
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
This is the standard Claude Code plugin install pattern, but current Claude Code versions clone via SSH on the install step. If you have a GitHub SSH key configured, it works. If you don't, either use the npm path above or run this once to tell git to use HTTPS for GitHub:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
git config --global url."https://github.com/".insteadOf "git@github.com:"
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Cursor / Codex / Hermes / OpenClaw / plain terminal
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
npm install -g geethob
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
After install, `geethob` is on `$PATH` for any harness with shell-tool access. To wire the skill into a specific harness, copy [`skills/geethob/SKILL.md`](./skills/geethob/SKILL.md) into that harness's skills directory. PRs welcome with verified one-liners for harnesses you've tested.
|
|
50
|
+
|
|
20
51
|
### Single-binary (no runtime needed)
|
|
21
52
|
|
|
22
|
-
Download
|
|
53
|
+
Download from [the latest release](https://github.com/hemant1996/geethob/releases/latest), drop on your `$PATH`, `chmod +x`:
|
|
23
54
|
|
|
24
55
|
```bash
|
|
25
56
|
# macOS arm64
|
|
26
|
-
curl -L https://github.com/hemant1996/geethob/releases/latest/download/geethob-darwin-arm64 -o /usr/local/bin/geethob
|
|
27
|
-
chmod +x /usr/local/bin/geethob
|
|
57
|
+
curl -L https://github.com/hemant1996/geethob/releases/latest/download/geethob-darwin-arm64 -o /usr/local/bin/geethob && chmod +x /usr/local/bin/geethob
|
|
28
58
|
|
|
29
59
|
# macOS x64
|
|
30
|
-
curl -L https://github.com/hemant1996/geethob/releases/latest/download/geethob-darwin-x64 -o /usr/local/bin/geethob
|
|
31
|
-
chmod +x /usr/local/bin/geethob
|
|
60
|
+
curl -L https://github.com/hemant1996/geethob/releases/latest/download/geethob-darwin-x64 -o /usr/local/bin/geethob && chmod +x /usr/local/bin/geethob
|
|
32
61
|
|
|
33
62
|
# Linux x64
|
|
34
|
-
curl -L https://github.com/hemant1996/geethob/releases/latest/download/geethob-linux-x64 -o /usr/local/bin/geethob
|
|
35
|
-
chmod +x /usr/local/bin/geethob
|
|
63
|
+
curl -L https://github.com/hemant1996/geethob/releases/latest/download/geethob-linux-x64 -o /usr/local/bin/geethob && chmod +x /usr/local/bin/geethob
|
|
36
64
|
```
|
|
37
65
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
Requires Node ≥20 or Bun ≥1.1.
|
|
66
|
+
After installing the binary, run `geethob skill install` to wire it into Claude Code.
|
|
41
67
|
|
|
42
|
-
|
|
43
|
-
npm install -g geethob
|
|
44
|
-
# or
|
|
45
|
-
bun add -g geethob
|
|
46
|
-
```
|
|
68
|
+
`geethob serve` (MCP server mode) is on the v0.2 roadmap.
|
|
47
69
|
|
|
48
70
|
## Configure
|
|
49
71
|
|
|
@@ -77,39 +99,6 @@ geethob digest --author tj --since 14d
|
|
|
77
99
|
|
|
78
100
|
`--max-commits` defaults to 200. If the prompt would overflow Claude Sonnet's context window, geethob sheds the oldest commits to fit and prints a warning.
|
|
79
101
|
|
|
80
|
-
## Use from your AI harness
|
|
81
|
-
|
|
82
|
-
geethob ships as a skill that any compatible AI harness can invoke.
|
|
83
|
-
|
|
84
|
-
### Claude Code — plugin install (recommended)
|
|
85
|
-
|
|
86
|
-
Inside Claude Code, run:
|
|
87
|
-
|
|
88
|
-
```
|
|
89
|
-
/plugin marketplace add hemant1996/geethob
|
|
90
|
-
/plugin install geethob@hemant1996
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
The plugin bundles the `narrate` skill, which Claude Code's Skill tool will invoke automatically whenever you ask story-grained questions about a repo's history. You can also invoke it explicitly via `/geethob:narrate`.
|
|
94
|
-
|
|
95
|
-
### Claude Code — manual install (legacy)
|
|
96
|
-
|
|
97
|
-
If you prefer a shell-based install:
|
|
98
|
-
|
|
99
|
-
```bash
|
|
100
|
-
./skill/install.sh
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
This drops `SKILL.md` into `~/.claude/skills/geethob/`. Restart Claude Code (or reload skills) and the `geethob` skill is invokable from the Skill tool.
|
|
104
|
-
|
|
105
|
-
### Hermes / OpenClaw / Cursor
|
|
106
|
-
|
|
107
|
-
Manual until v0.2 ships adapters. Each harness has a skills directory; copy `skill/SKILL.md` into it and adjust the invocation paths to point at the `geethob` binary on your `$PATH`. PRs welcome with one-line install snippets for any harness you've tested.
|
|
108
|
-
|
|
109
|
-
### MCP server (v0.2)
|
|
110
|
-
|
|
111
|
-
`geethob serve` will expose `story` and `digest` as MCP tools so any MCP-compatible host can invoke them without shelling out. Not in v0.1.
|
|
112
|
-
|
|
113
102
|
## Exit codes
|
|
114
103
|
|
|
115
104
|
| Code | Meaning |
|
package/assets/logo.svg
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256" width="256" height="256" role="img" aria-label="geethob logo: a smiling speech-bubble blob with a tiny git-graph inside">
|
|
2
|
+
<title>geethob</title>
|
|
3
|
+
<defs>
|
|
4
|
+
<linearGradient id="bodyGrad" x1="0" y1="0" x2="0" y2="1">
|
|
5
|
+
<stop offset="0%" stop-color="#FFB199"/>
|
|
6
|
+
<stop offset="100%" stop-color="#FF7A7A"/>
|
|
7
|
+
</linearGradient>
|
|
8
|
+
</defs>
|
|
9
|
+
|
|
10
|
+
<!-- speech-bubble blob body -->
|
|
11
|
+
<path d="
|
|
12
|
+
M 56 36
|
|
13
|
+
C 100 16, 156 16, 200 36
|
|
14
|
+
C 232 56, 240 96, 232 132
|
|
15
|
+
C 224 172, 188 200, 144 204
|
|
16
|
+
L 132 232
|
|
17
|
+
L 116 204
|
|
18
|
+
C 72 200, 36 172, 28 132
|
|
19
|
+
C 20 96, 28 56, 56 36
|
|
20
|
+
Z"
|
|
21
|
+
fill="url(#bodyGrad)"
|
|
22
|
+
stroke="#3D2B3D"
|
|
23
|
+
stroke-width="6"
|
|
24
|
+
stroke-linejoin="round"/>
|
|
25
|
+
|
|
26
|
+
<!-- left eye (smiling, commit-node shaped) -->
|
|
27
|
+
<circle cx="96" cy="110" r="10" fill="#FFFAF5"/>
|
|
28
|
+
<circle cx="98" cy="112" r="5" fill="#3D2B3D"/>
|
|
29
|
+
|
|
30
|
+
<!-- right eye -->
|
|
31
|
+
<circle cx="160" cy="110" r="10" fill="#FFFAF5"/>
|
|
32
|
+
<circle cx="162" cy="112" r="5" fill="#3D2B3D"/>
|
|
33
|
+
|
|
34
|
+
<!-- cheek dots (subtle warmth) -->
|
|
35
|
+
<circle cx="70" cy="140" r="6" fill="#FF5A5A" opacity="0.35"/>
|
|
36
|
+
<circle cx="186" cy="140" r="6" fill="#FF5A5A" opacity="0.35"/>
|
|
37
|
+
|
|
38
|
+
<!-- happy smile -->
|
|
39
|
+
<path d="M 100 152 Q 128 174, 156 152"
|
|
40
|
+
fill="none"
|
|
41
|
+
stroke="#3D2B3D"
|
|
42
|
+
stroke-width="6"
|
|
43
|
+
stroke-linecap="round"/>
|
|
44
|
+
|
|
45
|
+
<!-- tiny git-graph above the head: three commit nodes connected by a curve -->
|
|
46
|
+
<path d="M 86 64 Q 128 44, 170 64"
|
|
47
|
+
fill="none"
|
|
48
|
+
stroke="#3D2B3D"
|
|
49
|
+
stroke-width="4"
|
|
50
|
+
stroke-linecap="round"
|
|
51
|
+
opacity="0.85"/>
|
|
52
|
+
<circle cx="86" cy="64" r="6" fill="#FFFAF5" stroke="#3D2B3D" stroke-width="3"/>
|
|
53
|
+
<circle cx="128" cy="50" r="6" fill="#FFFAF5" stroke="#3D2B3D" stroke-width="3"/>
|
|
54
|
+
<circle cx="170" cy="64" r="6" fill="#FFFAF5" stroke="#3D2B3D" stroke-width="3"/>
|
|
55
|
+
</svg>
|