A Manifest V3 browser extension that makes the org's repo skills and common bot directives discoverable right inside GitHub's issue/PR comment box. It is built Chrome-first but deliberately portable to Edge, Firefox, and Safari.
Chrome Web Store listing is under review. In the meantime, install directly from the latest release ZIP.
- Key Features
- Overview
- Installation
- Usage
- Configuration
- Privacy
- Multi-Browser Support
- Development
- Roadmap
- Contributing
- License
- π Open Source: Available under the Apache 2.0 License.
- β‘ Skill Tab-Completion: Type
!in a comment to open a caret-anchored, keyboard-navigable dropdown of the current repo's skills, fuzzy-filtered as you type. - ποΈ Quick Prompts Palette: A searchable palette of
@opentaskdirectives plus editable templates. Open withCtrl/Cmd+Shift+Por theβ‘toolbar button. - π Repo-Aware: Resolves
owner/repofrom the page and fetches.agents/skills/via the GitHub Contents API, cached per repo. - π€ Non-Intrusive: Never touches GitHub's native
@/#/:completion; insertions fire aninputevent so draft-autosave and preview stay in sync. - π Multi-Browser Ready: One
dist/bundle; onlychrome.storageis used, so a port is a manifest tweak, not a rewrite. - π Private-Repo Support: Optional fine-grained PAT (
Contents: read), stored in extension storage. Supports per-owner tokens for multi-org setups. - π One-Click Agent Install: Open any GitHub repo and use the Tasks tab in
the repo navigation to install the OpenTask Agent workflow via a pull request.
Requires a PAT with
Contents: write,Pull requests: write, andWorkflows: write. - π§© Skills Install/Uninstall: In the repo's Skills tab (repo nav), a
searchable, multi-select list of the Inference Gateway skills registry.
Skills matching the repo's top languages are suggested first; applying opens a single PR
that adds/removes skill folders under
.agents/skills/. - π€ Agents Panel: The Agents tab (repo nav) lets you select A2A agents from the agents registry to include in the workflow. Selected agents are spun up alongside the OpenTask agent at runtime.
- π Free-Text Tasks: The Tasks tab sends a task to the agent. Leave Create a
GitHub issue checked to open an
@opentaskissue, or uncheck it to run the task directly viaworkflow_dispatch(infer-action'sdirect-prompt) with no public issue. - ποΈ Project Init: The Init tab (repo nav) dispatches the installed workflow to
scaffold an
AGENTS.mdfor the repo and open a PR. Optional extras (configured in Settings) include a.githooks/pre-commithook, aCLAUDE.mdβAGENTS.mdsymlink, and a.claude/skillsβ.agents/skillssymlink. - π Project Board Tracking: The installed workflow tells the agent to keep an issue's
project-board Status in sync (In Progress on start, Done on completion), best-effort and
board-agnostic. Board writes need a token with
Projects: read and write- enable the GitHub App option, since the defaultGITHUB_TOKENcan't reach Projects v2; without it the agent skips board updates silently. - π€ GitHub App Bot: Run the agent as your own GitHub App instead of
github-actions[bot]. When configured, the workflow mints an installation token viaactions/create-github-app-tokenand checks out + comments as the App, so its comments and commits are attributed to (and verified for) the App. - π₯οΈ Self-Hosted GPU Models: From the extension popup, provision a RunPod
GPU that serves a llama.cpp OpenAI-compatible endpoint. Pick a catalog GGUF (or any custom
Hugging Face
repo:quant), choose a GPU, and deploy; the popup then hands you the repo secrets/variable to route tasks atllamacpp/<model>. See Self-hosted GPU models. - π§© Plugin Support: Optional infer-action plugins extend the agent's capabilities. Toggle them on in Settings and re-install the workflow to bake them in.
- π§ Configurable Permissions: Control what the agent may do at runtime: create PRs, create issues, and comment on issues/PRs. Unchecked capabilities stay blocked.
- β±οΈ Configurable Timeout: Set the per-run job timeout for the generated workflow (default 25 minutes).
On the first !, the extension resolves owner/repo from the page URL and calls the
GitHub Contents API (GET /repos/{owner}/{repo}/contents/.agents/skills) from the
background service worker, caching the result per repo for 10 minutes. Repos with no
skills directory simply show nothing - native completion is untouched.
The quick-prompts palette is a self-contained popup opened by a keyboard shortcut or a
β‘ button injected into the comment toolbar. Both surfaces share the same insertion
path, which writes through the native textarea setter so React-controlled composers and
GitHub's own draft/preview state stay consistent.
The Tasks, Skills, Agents, and Init tabs are injected into GitHub's repo navigation bar by the content script. Each opens a popover panel that communicates with the background service worker to install workflows, manage skills, select agents, or scaffold project files.
From a release ZIP (recommended until the store listing is approved):
- Download the
browser-extension.zipfrom the latest release. - Open
chrome://extensions(oredge://extensions). - Enable Developer mode.
- Load unpacked and select the
dist/folder inside the extracted ZIP. - Open any GitHub issue/PR, focus the comment box, and type
!.
Manual (unpacked) for development or self-building:
bun install
bun run build # outputs dist/- Open
chrome://extensions(oredge://extensions). - Enable Developer mode.
- Load unpacked and select the
dist/folder. - Open any GitHub issue/PR, focus the comment box, and type
!.
- Skills: type
!at the start of a word to open the dropdown. Arrow keys navigate,Tab/Enterinserts/,Esccloses. - Quick prompts: press
Ctrl/Cmd+Shift+P(or click theβ‘toolbar button) to open the palette, filter, andEnterto insert the selected template at the caret. - Install the agent: navigate to any GitHub repo and click the Tasks tab in the repo navigation bar. Pick a model and click Install to open a PR that adds the OpenTask Agent workflow.
- Send a task: in the Tasks tab, type a prompt and choose whether to create a GitHub issue or dispatch the workflow directly.
- Manage skills: the Skills tab shows the skills registry, filtered by the repo's languages. Check skills to install and uncheck to remove, then click Apply to open a PR.
- Select agents: the Agents tab lists available A2A agents from the registry. Check the ones you want included in the workflow, then re-install to bake them in.
- Init a project: the Init tab dispatches the workflow to generate an
AGENTS.mdand open a PR. Configure extras (githooks, symlinks) in Settings. - Refine an issue: on issue pages, a Refine button appears in the header (if enabled in Settings). Click it to have the agent rewrite the issue's description in place. Auto-refine on new issue creation is also configurable.
Right-click the extension β Options (or the Details page β Extension options):
Manage per-owner tokens and bot configurations. Each account pairs a GitHub owner (user or org) with a PAT and an optional GitHub App bot. The account whose owner matches the repo's owner is used automatically.
- Owner: your GitHub username or an organization. Populated from GitHub once you enter a token.
- Personal access token: required to install the OpenTask Agent workflow, send
tasks, and list skills in private repos. Use a fine-grained token with
Contents: write,Pull requests: write,Workflows: write,Issues: write, andActions: write. Stored in this browser's extension storage. - Custom bot (GitHub App): when enabled, the generated workflow authenticates as
your GitHub App instead of
github-actions[bot]. Create an App via the provided link, then enter its Client ID and the name of the repo secret holding its private key. The App needsContents: write,Issues: write,Pull requests: write,Actions: write, andWorkflows: write.
A JSON array of { id, label, description, insert } objects shown in the palette.
Editable, with a Reset to defaults button.
A JSON array of { model, keyInput, secret } objects offered in the Tasks tab's
model dropdown. The first entry is the default. keyInput is the infer-action
provider-key input (e.g. anthropic-api-key) and secret is the repo secret it
reads. Add custom models here.
Instead of a hosted provider, you can run a model yourself on an on-demand GPU and
point tasks at it. OpenTask provisions a RunPod pod running
llama.cpp's server (image
ghcr.io/ggml-org/llama.cpp:server-cuda), which exposes an OpenAI-compatible
endpoint the Inference Gateway reaches via the
llamacpp provider.
1. Add your RunPod key. Options β Orchestrator β RunPod API key (from RunPod settings). Stored in this browser's extension storage. The GPU section in the popup only appears once a key is set.
2. Deploy. Open the extension popup:
- Pick a catalog GGUF (Ornith 1.0 9B, Llama 3.1 8B, Qwen 2.5 7B, Mistral 7B, Phi-4,
Gemma 2 9B) or type any Hugging Face ref in custom HF repo:quant (e.g.
unsloth/Qwen2.5-32B-Instruct-GGUF:Q4_K_M). Ornith 1.0 9B is the default - it's a small model tuned for agentic tool-calling, unlike general chat GGUFs. - Choose a GPU (RTX 4090 β A100 80GB). The pod is pinned to hosts with CUDA β₯ 12.8
(the image's requirement) and secured with a generated
--api-keybearer token. - Hit Deploy. Status goes provisioning β running; the model's GGUF downloads and
loads on the pod first (watch the pod's logs for
server is listening).
3. Wire it into the repo. Once running, the popup shows copy-to-clipboard rows - add them under the repo's Settings β Secrets and variables β Actions:
| Kind | Name | Value |
|---|---|---|
| Secret | LLAMACPP_API_URL |
the pod endpoint + /v1 |
| Secret | LLAMACPP_API_KEY |
the generated bearer token (masked; Copy copies the real value) |
| Variable | DEFAULT_MODEL |
llamacpp/<repo:quant> (the model the gateway registers) |
DEFAULT_MODEL is the model used for issue-triggered runs. For Run task
dispatches, the running llama.cpp model also appears in the Tasks-tab model dropdown.
Then re-install the workflow so it wires the LLAMACPP_* secrets onto infer-action.
Each redeploy is a new pod with a new URL and token - update
LLAMACPP_API_URLandLLAMACPP_API_KEYagain from the popup. Deprovision from the popup terminates the pod so it stops billing.
What the OpenTask agent may do while a task runs. These widen infer-action's read-only baseline; unchecked capabilities stay blocked. Re-install the workflow after changing these.
- Create pull requests (commit & push)
- Create GitHub issues
- Comment on issues & pull requests
Let the OpenTask agent rewrite an issue's description in place. Refine edits the issue
body via gh issue edit, so the installed workflow needs Create GitHub issues
permission above - re-install after enabling.
- Show a Refine button on issue pages (default on)
- Auto-refine issues you create on GitHub (default off)
What the Init button (in a repo's nav) asks the agent to scaffold. It always
generates an AGENTS.md and opens a PR; these add optional extras. Requires the
OpenTask Agent workflow to be installed on the repo.
- Add a
.githooks/pre-commithook - Symlink
CLAUDE.mdβAGENTS.md - Symlink
.claude/skillsβ.agents/skills
- Timeout (minutes): per-run job timeout for the generated workflow (default 25). Applies to newly installed workflows; re-run Install on a repo to update an existing one.
Optional infer-action plugins the installed workflow pre-installs to extend the agent. All off by default; check the ones you want. Re-install the workflow after changing these.
Choose how the options page and toolbar popup are displayed: System default, Light, or Dark.
Everything the extension stores (your optional token, quick prompts, and a short per-repo skill cache) stays in this browser's local storage - nothing is synced or sent to any server. The only network call is a single GitHub Contents API request to list a repo's skills; there is no backend and no telemetry. See PRIVACY.md for the full data-flow breakdown and how to delete stored data; per-permission justifications for the store listing live in docs/store/privacy-declarations.md.
The same dist/ is the whole extension, and the only privileged API used is
chrome.storage (present on Chrome/Edge/Firefox). Per-browser notes:
| Browser | What's needed |
|---|---|
| Chrome, Edge | Works as-is (background.service_worker). Chrome Web Store and Edge Add-ons use the same dist/ ZIP. |
| Firefox 109+ | Build with task build:firefox (applies manifest.firefox.json overrides: background.scripts + browser_specific_settings.gecko.id). |
| Safari 16.4+ | Build with task build:safari, then wrap with xcrun safari-web-extension-converter on macOS. See docs/store/safari-listing.md for the full packaging and App Store release guide. |
If the API surface ever grows beyond chrome.storage, drop in Mozilla's single-file
webextension-polyfill and alias browser β chrome.
Activate the Flox environment, then install the repository's pre-commit hook before making changes:
flox activate
task hooks:install # required first-time setup
task setup # installs the hook and Bun dependencies
task check # typecheck, test, and buildLayout: src/content.ts is the imperative controller (DOM detection, caret math,
insertion, keyboard, repo-nav injection); src/ui/* is the React view (skill menu,
palette, Tasks/Skills/Agents/Init panels); src/background.ts is the service worker
that fetches and caches skills, manages workflows, and handles the skills/agents
registries.
To produce a store ZIP:
task package:chrome # builds, zips dist/ to browser-extension.zip, writes SHA-256
task package:edge # same ZIP, named edge-extension.zip for Edge Add-ons
task package:firefox # builds with Firefox manifest, zips to firefox-extension.zip, writes SHA-256
task build:safari # builds with Safari manifest; see docs/store/safari-listing.md for Xcode conversionThe ZIPs are also built and attached automatically to every GitHub Release by the release workflow.
- The newer React/ProseMirror composer on some 2024+ issue pages (v1 targets the
classic
<textarea>). - Skill descriptions in the dropdown (would cost one API call per skill; names only for now, one call per repo).
- An org-wide skill catalog (v1 is per-repo).
- A packaged icon set, a build-time watch mode, and CI.
Found a bug or have a feature in mind? You're more than welcome to open issues or submit pull requests for any fixes, improvements, or new ideas. Read the Repository Guidelines before contributing; they cover project structure, testing, style, commits, and pull-request expectations.
This project is licensed under the Apache 2.0 License.