opencode-gemiterm-skills 0.5.1 → 0.6.1

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/AGENTS.md CHANGED
@@ -1,10 +1,11 @@
1
1
  # AGENTS.md - opencode-gemiterm-skills
2
2
 
3
3
  <critical_rules priority="highest">
4
- 1. The bundled `debate-with-gemini` skill depends on the `gemiterm` Python CLI being installed and authenticated on the host.
4
+ 1. The bundled `debate-with-gemini` skill depends on the `gemiterm` Bun-native CLI being installed (or available via `bunx gemiterm`) and authenticated on the host.
5
5
  2. This package ships a real installer (`src/installer.ts`) that copies skill assets to the consumer's `.opencode/skills/` and registers them in `opencode.json`. The `src/cli.ts` is the CLI entry point (install/uninstall/status subcommands), resolved by `package.json#bin`. Only add code under `src/` that supports the install/uninstall/status commands.
6
- 3. Skill frontmatter is the source of truth. Do not edit `assets/skills/*/SKILL.md` frontmatter in ways that break the `name` / `description` contract.
7
- 4. The `metadata.requires: gemiterm` link on `debate-with-gemini` must remain so consumers know to install the Python CLI first.
6
+ 3. Skill frontmatter is the source of truth. Do not edit `skills/*/SKILL.md` frontmatter in ways that break the `name` / `description` contract.
7
+ 4. The `metadata.requires: gemiterm` link on `debate-with-gemini` must remain so consumers know to install the CLI first.
8
+ 5. GemiTerm is a Bun-native CLI — all skill documents assume Bun as the runtime. Do not reference Python, `pipx`, or `pip` install paths.
8
9
  </critical_rules>
9
10
 
10
11
  <context_hierarchy>
@@ -21,13 +22,13 @@
21
22
  </role>
22
23
 
23
24
  <bundled_skills>
24
- <skill name="gemiterm" path="assets/skills/gemiterm/SKILL.md" requires="Python CLI gemiterm" />
25
- <skill name="debate-with-gemini" path="assets/skills/debate-with-gemini/SKILL.md" requires="gemiterm skill + Python CLI gemiterm" />
25
+ <skill name="gemiterm" path="skills/gemiterm/SKILL.md" requires="Bun-native CLI gemiterm" />
26
+ <skill name="debate-with-gemini" path="skills/debate-with-gemini/SKILL.md" requires="gemiterm skill + Bun-native CLI gemiterm" />
26
27
  </bundled_skills>
27
28
 
28
29
  <self_config>
29
30
  <location>.opencode/opencode.json</location>
30
- <purpose>Register assets/skills/ as a skill path and pre-allow both skills</purpose>
31
+ <purpose>Register skills/ as a skill path and pre-allow both skills</purpose>
31
32
  <pointer_in_package_json>opencode.plugin → .opencode/opencode.json</pointer_in_package_json>
32
33
  </self_config>
33
34
 
@@ -53,7 +54,7 @@
53
54
  <use_case>Local development against a checkout of this repo</use_case>
54
55
  </file_fallback>
55
56
  <prerequisites>
56
- - pip install gemiterm
57
+ - bun install gemiterm -g
57
58
  - gemiterm install-browser
58
59
  - gemiterm auth
59
60
  </prerequisites>
package/CHANGELOG.md CHANGED
@@ -4,6 +4,27 @@ All notable changes to `opencode-gemiterm-skills` will be documented in this fil
4
4
 
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [0.6.1] - 2026-06-12
8
+
9
+ ### Changed
10
+ - Fixed frontmatter for `debate-with-gemini` skill.
11
+
12
+ ## [0.6.0] - 2026-06-10
13
+
14
+ ### Changed
15
+ - **GemiTerm is now a Bun-native CLI** — the underlying `gemiterm` CLI has been rewritten to run on Bun instead of Python. All skill documents updated to reflect the new runtime: skills first check for a global `gemiterm` install, fall back to `bunx gemiterm` for transparent npx-style invocation, and if Bun itself is missing emit platform-aware install instructions (`curl -fsSL https://bun.sh/install | bash` on macOS/Linux, `powershell -c "irm bun.sh/install.ps1 | iex"` on Windows) before erroring out.
16
+ - Added `metadata.runtime: bun` to both skill frontmatter entries.
17
+ - Updated `debate-with-gemini` REFERENCE.md subagent template to mention `bunx gemiterm` fallback for every command and added `bunx gemiterm *` to the permissions block.
18
+ - **Rewrote both skill documents** — `gemiterm` and `debate-with-gemini` SKILL.md and REFERENCE.md now contain richer, more structured content: the `debate-with-gemini` skill includes tactical patterns (Concede-and-Counter, Force Concrete Example, Decision Matrix, Reframe the Question, Line-in-the-Sand), explicit stopping criteria, and a structured debate-report format; the `gemiterm` skill has an expanded command reference with detailed flags and common automation patterns.
19
+ - **Directory restructure** — moved `assets/skills/{gemiterm,debate-with-gemini}` → `skills/{gemiterm,debate-with-gemini}` so both skills sit at the standard `skills/<name>/SKILL.md` path recognized by Vercel's `skills` CLI (and the broader skills ecosystem).
20
+ - `.claude-plugin/plugin.json` and `.opencode/opencode.json` updated to reference the new `./skills` path; `package.json#files` now whitelists `skills` instead of `assets`.
21
+ - `src/installer.ts` and `tests/skills.test.ts` source-path constants updated accordingly.
22
+ - Docs (`AGENTS.md`, `CONTRIBUTING.md`) updated to reflect the new layout.
23
+
24
+ ### Removed
25
+ - `assets/` directory (no longer needed; skills moved to repo root).
26
+ - All references to `pipx install gemiterm` and Python-based install paths.
27
+
7
28
  ## [0.5.1] - 2026-06-07
8
29
 
9
30
  ### Added
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-gemiterm-skills",
3
- "version": "0.5.1",
3
+ "version": "0.6.1",
4
4
  "type": "module",
5
5
  "module": "index.ts",
6
6
  "description": "AI agent skills for Google Gemini — list, search, export Gemini chats and run structured debates with Gemini. Works with OpenCode, Claude Code, and any skill-compatible AI agent.",
@@ -26,7 +26,7 @@
26
26
  "index.ts",
27
27
  "plugin.ts",
28
28
  "src",
29
- "assets",
29
+ "skills",
30
30
  "README.md",
31
31
  "AGENTS.md",
32
32
  "CHANGELOG.md",
@@ -2,6 +2,8 @@
2
2
 
3
3
  Subagent prompt template, tactical patterns, and report format for the `debate-with-gemini` skill.
4
4
 
5
+ > **Runtime note:** GemiTerm is a Bun-native CLI. Replace every `gemiterm` invocation with `bunx gemiterm` if the tool is not globally installed. See execution-loop details below.
6
+
5
7
  ---
6
8
 
7
9
  ## Subagent Prompt Template
@@ -30,14 +32,17 @@ For each turn:
30
32
  1. Send your message:
31
33
  gemiterm continue "{{GEMINI_CHAT_ID}}" "your message here"
32
34
 
35
+ If gemiterm is not globally installed, use:
36
+ bunx gemiterm continue "{{GEMINI_CHAT_ID}}" "your message here"
37
+
33
38
  Wait for Gemini's response written to the console.
34
39
  2. Analyze the response — concessions? New arguments? Weaknesses?
35
40
  3. Craft next response using Tactical Patterns below
36
41
  4. Repeat until turn limit or stop condition
37
42
 
38
- Prefer `gemiterm continue` because it returns Gemini's last response inline and avoids an extra round-trip.
43
+ Prefer `gemiterm continue` (or `bunx gemiterm continue`) because it returns Gemini's last response inline and avoids an extra round-trip.
39
44
 
40
- Use `gemiterm fetch "{{GEMINI_CHAT_ID}}" --format json` ONLY if console output has parsing issues or times out.
45
+ Use `gemiterm fetch "{{GEMINI_CHAT_ID}}" --format json` (or `bunx gemiterm fetch ...`) ONLY if console output has parsing issues or times out.
41
46
 
42
47
  ## Stopping Criteria
43
48
  - {{TURN_LIMIT}} turns completed
@@ -108,12 +113,13 @@ If the opencode config lacks bash permissions for `gemiterm`, add:
108
113
  {
109
114
  "permission": {
110
115
  "bash": {
111
- "gemiterm *": "allow"
116
+ "gemiterm *": "allow",
117
+ "bunx gemiterm *": "allow"
112
118
  }
113
119
  }
114
120
  }
115
121
  ```
116
122
 
117
- This allows the subagent to run `gemiterm new`, `gemiterm continue`, `gemiterm fetch`, and `gemiterm list` without prompting.
123
+ This allows the subagent to run `gemiterm new`, `gemiterm continue`, `gemiterm fetch`, `gemiterm list`, and their `bunx gemiterm` equivalents without prompting.
118
124
 
119
125
  Drop this into the top-level `permission` object in `opencode.json`. For per-agent override, nest it under `agent.<name>.permission`.
@@ -1,11 +1,12 @@
1
1
  ---
2
2
  name: debate-with-gemini
3
- description: Conduct structured multi-turn technical debates with Gemini AI via gemiterm CLI. Delegates a subagent to argue a position (for/against) autonomously for up to N turns. Use when user says "debate gemini", "argue with gemini", "have gemini defend/attack X", "continue debate", or wants a technical position stress-tested against Gemini. Triggers on: debate, argue, gemini, position, for/against, stress-test, counter-argument. Requires gemiterm CLI installed and authenticated.
3
+ description: 'Conduct structured multi-turn technical debates with Gemini AI via the gemiterm CLI. Delegates a subagent to argue a position (for or against) autonomously for up to N turns. Use when the user says - debate gemini, argue with gemini, have gemini defend or attack X, continue debate, or wants a technical position stress-tested against Gemini. Requires the gemiterm CLI to be installed and authenticated.'
4
4
  license: MIT
5
5
  compatibility: opencode, claude-code, and any skill-compatible agent
6
6
  metadata:
7
7
  tool: gemiterm
8
8
  workflow: debate
9
+ runtime: bun
9
10
  ---
10
11
 
11
12
  # Debate with Gemini
@@ -16,7 +17,7 @@ metadata:
16
17
  User: "Debate gemini on for/against using X. Context: docs/arch.md. 5 turns."
17
18
 
18
19
  1. skill("gemiterm") — load CLI commands
19
- 2. gemiterm status — verify auth
20
+ 2. gemiterm status — verify auth (or bunx gemiterm status)
20
21
  3. Read docs/arch.md, build seeding prompt
21
22
  4. gemiterm new "You argue AGAINST X. [context]" — seed Gemini, capture chat_id
22
23
  5. Build opening argument for the FOR position
@@ -26,11 +27,24 @@ User: "Debate gemini on for/against using X. Context: docs/arch.md. 5 turns."
26
27
 
27
28
  ## Prerequisites
28
29
 
30
+ GemiTerm is a **Bun-native** CLI. Before running any commands, resolve the executable:
31
+
32
+ 1. `gemiterm --version` — if this succeeds, use `gemiterm` directly.
33
+ 2. If not found, use `bunx gemiterm` as a transparent fallback for all commands.
34
+ 3. If `bun` is not installed, print the platform-appropriate install command and stop:
35
+
36
+ | Platform | Command |
37
+ |----------|---------|
38
+ | macOS / Linux | `curl -fsSL https://bun.sh/install \| bash` |
39
+ | Windows | `powershell -c "irm bun.sh/install.ps1 \| iex"` |
40
+
41
+ Then:
42
+
29
43
  ```bash
30
44
  gemiterm status
31
45
  ```
32
46
 
33
- If not connected: `pipx install gemiterm && gemiterm install-browser && gemiterm auth`
47
+ If not connected: install gemiterm globally (`bun install gemiterm -g`), then `gemiterm install-browser && gemiterm auth`.
34
48
 
35
49
  ## Inputs
36
50
 
@@ -2,6 +2,8 @@
2
2
 
3
3
  Complete command reference for GemiTerm CLI. Loaded on demand by [SKILL.md](SKILL.md).
4
4
 
5
+ > **Runtime note:** GemiTerm is a Bun-native application. All commands below assume `gemiterm` is available. If not globally installed, prefix every command with `bunx` (e.g. `bunx gemiterm list --format json`). See [SKILL.md](SKILL.md) > "Install & invocation" for the full resolution flow.
6
+
5
7
  ## Contents
6
8
 
7
9
  - [Commands](#commands)
@@ -1,26 +1,55 @@
1
1
  ---
2
2
  name: gemiterm
3
- description: Google Gemini Terminal CLI wrapper for listing chats, fetching transcripts, exporting conversations, and managing profiles via the gemiterm Python CLI. Use when the user asks to read, list, export, or interact with Gemini chat history from a terminal, or invokes "gemiterm" commands.
3
+ description: Google Gemini Terminal CLI wrapper for listing chats, fetching transcripts, exporting conversations, and managing profiles via the gemiterm Bun-native CLI. Use when the user asks to read, list, export, or interact with Gemini chat history from a terminal, or invokes "gemiterm" commands.
4
4
  license: MIT
5
5
  compatibility: opencode, claude-code, and any skill-compatible agent
6
6
  metadata:
7
7
  tool: gemiterm
8
+ runtime: bun
8
9
  ---
9
10
 
10
11
  # GemiTerm — Google Gemini Terminal CLI
11
12
 
12
13
  GemiTerm provides terminal access to Google Gemini chat history: list, fetch, export, delete, and manage profiles. Commands that emit `--format json` are automation-friendly; `auth` and `continue` require interactive flows.
13
14
 
14
- ## Install check
15
+ ## Install & invocation
16
+
17
+ GemiTerm is a **Bun-native** CLI. All `gemiterm` commands below assume the tool is available. The agent must resolve the executable at runtime:
18
+
19
+ ### 1. Check if globally installed
15
20
 
16
21
  ```bash
17
22
  gemiterm --version
18
23
  ```
19
24
 
20
- If missing:
25
+ If this succeeds, use `gemiterm` directly for all commands.
26
+
27
+ ### 2. Fallback: `bunx gemiterm`
28
+
29
+ If not globally installed, use `bunx gemiterm` as a transparent fallback. This downloads and runs the latest version on first use:
30
+
31
+ ```bash
32
+ bunx gemiterm --version
33
+ bunx gemiterm list --format json
34
+ bunx gemiterm auth
35
+ # … etc — prefix every command with "bunx"
36
+ ```
37
+
38
+ ### 3. Bun not installed
39
+
40
+ If `bun` is not available either, print the appropriate install command for the user's platform and stop:
41
+
42
+ | Platform | Command |
43
+ |----------|---------|
44
+ | macOS / Linux | `curl -fsSL https://bun.sh/install \| bash` |
45
+ | Windows | `powershell -c "irm bun.sh/install.ps1 \| iex"` |
46
+
47
+ After the user installs Bun, re-run from step 1. Auto-detect the platform from `$OSTYPE`, `uname`, or `process.platform`.
48
+
49
+ **To install gemiterm globally (optional):**
21
50
 
22
51
  ```bash
23
- pipx install gemiterm
52
+ bun install gemiterm -g
24
53
  gemiterm install-browser
25
54
  gemiterm auth
26
55
  ```
package/src/installer.ts CHANGED
@@ -169,7 +169,7 @@ export async function install(
169
169
  }
170
170
 
171
171
  for (const name of SKILL_NAMES) {
172
- const srcSkillDir = join(pkgDir, "assets", "skills", name);
172
+ const srcSkillDir = join(pkgDir, "skills", name);
173
173
  const destSkillDir = join(configBase, "skills", name);
174
174
  await copyDir(srcSkillDir, destSkillDir);
175
175
  skillPaths.push(destSkillDir);