RuneCLI
A terminal-first developer tool that turns real GitHub issues into grounded, timed coding quests with RuneScape-inspired progression.
Installation
RuneCLI requires Python 3.11+.
# Recommended: install globally using pipx
pipx install runecli
# Or install with pip
pip install runecli
Environment Variables
| Variable | Required | Description |
|---|---|---|
GITHUB_TOKEN |
Yes | Personal access token (classic or fine-grained with repo scope) used to interact with the GitHub API. Never logged, printed, or persisted. |
GEMINI_API_KEY |
Yes | Google Gemini API key used exclusively with Google's open-weights Gemma 4 model (gemma-4-31b-it). |
RUNE_SEARCH_USER |
No | Pre-fills the Sage prompt on the Quest Board (the GitHub user or org whose issues to search; not your personal username). |
GEMMA_MODEL |
No | Gemma model identifier (defaults to gemma-4-31b-it; also supports gemma-4-26b-a4b-it). Must start with gemma-. |
RUNE_DURATION_OVERRIDE_SECONDS |
No | Overrides quest timer duration in seconds for testing and demos. Modifies duration only, never XP. |
RUNE_HOME |
No | Custom root directory for local quest records, workspaces, player cache, and analysis clone caches (defaults to ~/.rune). |
SENTRY_DSN |
No | Optional Sentry DSN for error telemetry. When set, only redacted tags are sent; tokens, issue content, and file paths are never transmitted. |
Commands
Rune provides exactly three commands:
rune
Starts the interactive quest cycle:
- Verifies GitHub credentials and detects an installed IDE (VS Code
codeor Cursorcursor). - Opens the Quest Board to search open issues by keyword, Sage, and assignment status.
- Clones a bounded, read-only analysis cache and extracts deterministic code evidence (E1–E8).
- Uses Gemma 4 to formulate grounded quest specifications with acceptance criteria.
- Creates an empty workspace directory and launches your IDE.
- Prints guided Git setup commands and verifies your branch before starting the timer.
rune status
Displays the active quest's status, remaining time, acceptance criteria, matched pull request status, and Git finishing instructions.
rune refresh
Polls GitHub for pull request activity matching your quest branch. When your PR is merged, transitions the quest to COMPLETED and awards RuneScape XP.
Quest Board Filters
- Keywords: 3 to 8 search terms matching issue titles and bodies.
- Sage: The GitHub username or organization whose repositories to search (e.g.
pallets,fastapi). Leave blank to search across public repositories. Note: Sage designates the repo owner whose issues you seek to solve, not your own username. - Unassigned: Choose
Yesto find unclaimed issues (is:unassigned) orNoto include assigned issues. - Difficulty:
EASY: 60 minutes / 100 XPNORMAL: 180 minutes / 150 XPHARD: 360 minutes / 250 XPEPIC: 540 minutes / 400 XP
Guided Git Flow
Rune guides; the player controls Git. Rune never automatically pushes, commits, creates branches, or forks on your behalf:
- Empty Workspace: Rune creates an isolated workspace directory at
~/.rune/workspaces/<quest-id>/and opens it in your detected editor. - Setup Instructions: Rune prints the exact commands to run in your IDE terminal:
- Direct Route (repositories where you have push permission): Clones the base repo and creates a dedicated quest branch (
rune/<display_id>-<issue_number>-<slug>). - Fork Route (external open-source repositories): Instructs you to fork the repository on GitHub, clone your fork, configure the
upstreamremote, and create the quest branch.
- Direct Route (repositories where you have push permission): Clones the base repo and creates a dedicated quest branch (
- Read-Only Verification: Rune inspects
git remoteandgit branchwithin the workspace. The quest timer starts only after verification succeeds. - Finishing Instructions: Once coding is complete, Rune prints the commands to stage, commit, and push your branch, along with the link to open a standard GitHub pull request.
Demo Walkthrough
- Set your environment variables:
export GITHUB_TOKEN="ghp_yourTokenHere" export GEMINI_API_KEY="AIzaSyYourKeyHere"
- Launch Rune:
rune
- Search for issues on the Quest Board:
- Keywords:
parser crash - Sage:
pallets(or leave blank) - Unassigned:
Yes - Difficulty:
NORMAL
- Keywords:
- Select an issue from the results.
- Review Gemma 4's quest framings with cited code evidence, acceptance criteria, and objectives.
- Accept a quest. Rune creates
~/.rune/workspaces/<quest-id>/and opens VS Code or Cursor. - Run the printed setup commands in the IDE terminal and press Enter to verify.
- Implement your fix in the IDE and run Rune's finish commands:
git add . git commit -m "fix: resolve CLI parser crash" git push origin rune/<branch-name>
- Open a Pull Request on GitHub against the base branch.
- Check progress with
rune status. - Merge the pull request on GitHub, then run:
rune refresh - See your quest marked
COMPLETEDand watch your RuneScape level progress!
License
MIT License. See LICENSE for details.
Metadata
Release files for runecli 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| runecli-0.1.0.tar.gz | 37.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| runecli-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 85.4 kB
Release files / runecli-0.1.0.tar.gz
| Download URL | runecli-0.1.0.tar.gz |
|---|---|
| Size | 37.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2378e8d9f92a6d168dd0d845d7732091d453802f234773288a66435a140711f3
|
|
BLAKE2b-256 checksum How to use checksums |
8bab6dfca9b5d338e7ef80edb1b93c3ba15fe0808abe14f536f39a92a455c56c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.5
|
Release files / runecli-0.1.0-py3-none-any.whl
| Download URL | runecli-0.1.0-py3-none-any.whl |
|---|---|
| Size | 47.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
78eb989a8f6eeeac6d59ac7440e74c6ad08cb807a693b9938c18ebc469655d62
|
|
BLAKE2b-256 checksum How to use checksums |
8aa630d3145d218bd1de349f53786c96954c941075eaa2b53dfd0abd17366bc0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.5
|