File and track GitHub issues (bugs, feature requests, change requests, questions) against insight-wave ecosystem plugins using browser automation (browsermcp). Guides users through a short consultation to capture the right details, resolves the target plugin's repository automatically, drafts issues from templates, creates them via browser automation on github.com, and tracks them locally. Use this skill whenever the user wants to report a bug, request a feature, file a change request, ask a question about a plugin, list filed issues, or check issue status. Also trigger when the user says things like "this plugin is broken", "I found a problem with {plugin}", "can we get X added to {plugin}", "{plugin} doesn't work", "open an issue", "something is wrong with {plugin}", "das Plugin funktioniert nicht", "Fehler in {plugin}", "set up GitHub issues", "configure issue filing", "ich kann kein Issue erstellen", or any complaint/suggestion about a specific plugin — even if they don't use the word "issue".
From cogni-helpnpx claudepluginhub cogni-work/insight-wave --plugin cogni-helpThis skill is limited to using the following tools:
evals/evals.jsonreferences/issue-templates.mdscripts/issue-store.shscripts/resolve-plugin.shscripts/setup-gh.shDesigns and optimizes AI agent action spaces, tool definitions, observation formats, error recovery, and context for higher task completion rates.
Enables AI agents to execute x402 payments with per-task budgets, spending controls, and non-custodial wallets via MCP tools. Use when agents pay for APIs, services, or other agents.
Compares coding agents like Claude Code and Aider on custom YAML-defined codebase tasks using git worktrees, measuring pass rate, cost, time, and consistency.
Manage the lifecycle of GitHub issues for insight-wave ecosystem plugins: consult with the user to understand the problem clearly, resolve which repository the plugin belongs to, draft issues from templates, create them via browser cobrowsing on github.com, and track them locally.
All GitHub operations use browser automation via browsermcp (Playwright headless) —
navigating to github.com, reading pages, and filling forms directly. This works in any
environment, including Cowork VMs. No Personal Access Tokens or gh CLI needed —
browsermcp auto-installs via the plugin's .mcp.json when the plugin is loaded.
Important: Do NOT use gh CLI commands — all GitHub operations go through
browser automation. The gh CLI is not required and should not be invoked.
Read the workspace language from .workspace-config.json in the workspace root
(language field — "en" or "de") as the default interaction language. If the
user's message is in a different language, prefer the user's language (message
detection overrides the workspace setting — someone writing in German wants a
German response even if the workspace is set to English).
If .workspace-config.json is missing, fall back to detecting the user's language
from their message. If still unclear, default to English.
Conduct the entire interaction in the chosen language — consultation questions, acknowledgments, draft body, and confirmation prompts.
Exceptions where English stays:
[Bug], [Feature], [Change], [Question] — conventions for
GitHub label automation and cross-team readability.The skill scripts live at ${CLAUDE_PLUGIN_ROOT}/skills/cogni-issues/scripts/.
CLAUDE_PLUGIN_ROOT points to the cogni-help plugin directory. If you can't
find the scripts, tell the user — don't guess paths.
All GitHub operations use browsermcp (Playwright headless) tools:
| Operation | Tools | URL Pattern |
|---|---|---|
| Create issue | browser_navigate, browser_snapshot, browser_click, browser_type | github.com/{owner}/{repo}/issues/new |
| List issues | browser_navigate, browser_snapshot | github.com/{owner}/{repo}/issues |
| Search issues | browser_navigate, browser_snapshot | github.com/{owner}/{repo}/issues?q={keywords} |
| Get issue | browser_navigate, browser_snapshot | github.com/{owner}/{repo}/issues/{number} |
The browsermcp tools are declared in the skill's allowed-tools and auto-loaded from
the plugin's .mcp.json. No ToolSearch needed.
| Mode | Triggers | Action |
|---|---|---|
| setup | browsermcp not available or user not logged into GitHub, "set up issues", "ich kann kein Issue erstellen" | Verify browsermcp, guide user to log into GitHub |
| create | reporting bugs, requesting features, filing change requests, asking plugin questions | Consult, resolve, draft, confirm, create, log |
| list | "my issues", "show issues", "what have I filed" | Read local state, display grouped by plugin |
| status | "check issue #N", "any updates on my issue" | Fetch from GitHub via browser, update local record |
| browse | "open issue", "show in browser" | Navigate to the GitHub issue in the browser |
Default to list when intent is unclear.
Before any GitHub operation, verify browsermcp availability and GitHub login:
mcp__browsermcp__browser_navigate to https://github.commcp__browsermcp__browser_snapshot to read the pagebrowsermcp runs headless (Playwright) — no visible browser window. The user needs to have GitHub credentials available for headless login.
Try mcp__browsermcp__browser_navigate to about:blank. If the tool is not
available, inform the user that browsermcp is required and should auto-install
when the cogni-help plugin is loaded via .mcp.json.
Navigate to https://github.com and use mcp__browsermcp__browser_snapshot to
read the page. Look for signs of a logged-in session (profile avatar, user menu)
vs "Sign in" link.
If the snapshot shows the user is already logged in, tell them they're all set and offer to file an issue.
Navigate to https://github.com/login and guide the user through headless login:
browser_snapshot to find the username/email fieldbrowser_click on the username field, then browser_type to enter credentialsAlternative: If headless login is complex (2FA, SSO), suggest the user set up
a GitHub Personal Access Token and use the gh CLI as a fallback:
Headless GitHub login requires credentials. If you have 2FA enabled, it may be easier to use a Personal Access Token. Would you like me to guide you through that?
Re-check with browser_snapshot on https://github.com. If the page shows a
logged-in state, confirm success. If still not logged in, suggest the PAT fallback.
If the user came here because they were trying to file an issue, continue with the create flow.
Run once before any operation (idempotent):
bash "${SKILL_DIR}/scripts/issue-store.sh" init "${working_dir}"
working_dir defaults to the current working directory. State lives in {working_dir}/cogni-issues/.
First, verify browser access and GitHub login (see Prerequisites). If not ready, enter setup mode and return here once the user is logged in.
If the user hasn't named a specific plugin, ask which plugin this is about. Then resolve it:
bash "${SKILL_DIR}/scripts/resolve-plugin.sh" "<plugin_name>"
Handle: "ambiguous": true -> present matches and ask; "error" -> list available plugins
and ask; success -> extract owner_repo, version, marketplace.
Before investing in consultation and drafting, search for existing issues via the browser:
https://github.com/{owner}/{repo}/issues?q=is%3Aopen+{url_encoded_keywords}
using 2-3 keywords from the user's complaintbrowser_snapshot to read the search results pageIf you find a likely match, show it to the user and ask: "This looks similar — is it the same problem, or something different?" If it's the same, link them to the existing issue instead of creating a duplicate.
Infer the type from context (match intent across languages, not specific keywords):
| Type | Signals |
|---|---|
bug | something is broken, errors, crashes, doesn't work, fails, wrong output |
feature | add something new, would be nice, request, support for |
change-request | change existing behavior, modify, adjust, different behavior wanted |
question | how to, why does, confused, wondering |
If genuinely ambiguous, ask. Otherwise trust your judgment.
When the complaint involves config changes or unexpected output, do a quick sanity
check before classifying: scan the plugin's data model or config schema to verify the
user's premise. For example, if a user says "I updated the logo in the config but it
still shows the old one," check whether the config actually has a logo field. The user's
mental model of how the plugin works may not match reality — what looks like a bug might
be a feature gap, a wrong-config-file situation, or a misunderstanding of which component
owns that functionality. A 30-second Grep or Read of the relevant schema can save
everyone from filing a misleading issue.
Help the user articulate what they need. Many users know something is wrong but haven't organized their thoughts. Your job is to be a helpful interviewer, not a form.
First, mine the conversation for existing evidence. Check recent tool outputs for error messages, stack traces, or failed commands. Look at what the user was working on — the conversation often contains the exact workflow that triggered the problem. If you see a traceback from earlier, use it — don't ask "did you see an error?"
If you did a premise check (above) and found a mismatch, incorporate that finding into your consultation. Instead of generic "what happened?" questions, tell the user what you found and ask targeted questions to resolve the gap — e.g., "I checked the portfolio config schema and it doesn't have a logo field. Where exactly are you seeing the logo, and which file did you edit?"
Then ask only what's missing — 2-3 questions max, batched in one turn:
Skip consultation entirely if the user (or conversation context) already provides enough detail. Acknowledge it: "You've given me a clear picture — let me draft this up."
Read the template from references/issue-templates.md for the determined type.
Fill in from conversation + resolver output. Omit sections you can't fill meaningfully — shorter with real content beats complete with placeholders.
Auto-detect environment:
uname -s && uname -r && node -v 2>/dev/null
Write in the user's language (except title prefixes and technical terms).
Transform vague input into precise descriptions. This is the core value you add:
| User says | You write |
|---|---|
| "it doesn't work" | "The skill exits with a non-zero status code without producing output when invoked with default arguments" |
| "it's slow" | "Rendering takes 45+ seconds for a 3-station brief, compared to ~15s previously — a 3x regression" |
| "the output looks wrong" | "Generated propositions show placeholder text ('Lorem ipsum') instead of configured descriptions" |
| "es funktioniert nicht mehr" | "Das Skill bricht beim Aufruf mit einem TypeError ab und erzeugt keine Ausgabe" |
The pattern: replace subjective impressions with observable facts, measurable quantities, or specific error details.
Add a root cause hypothesis when you can. If the error or context suggests a likely
cause, include it in "Additional context" — e.g., "The TypeError on narrative_arc
suggests a property was renamed or removed in the latest update, possibly a breaking
change in the data model." This helps maintainers triage faster. Only do this when the
evidence supports it — don't speculate wildly.
Show the complete draft (title + body) and ask for approval in the user's language. Never create without explicit confirmation. If the user wants changes, apply them and show the updated draft.
Navigate to https://github.com/{owner}/{repo}/issues/new and fill the form:
browser_snapshot to verify the "New Issue" form has loaded — look for the
title input field and body textarea in the snapshotbrowser_click on the title field (by ref from snapshot), then browser_type
to enter the titlebrowser_click on the body textarea, then browser_type to enter the full
drafted bodybrowser_click on the "Labels" gear icon in the sidebar,
wait for the label filter to appear, then browser_type the label name and
browser_click the matching label. Label mapping is in references/issue-templates.md.
If the interaction fails, skip it — the issue can be created without labels.browser_click on the "Submit new issue" buttonbrowser_wait for navigation, then browser_snapshot to read the new issue
page. Extract github_number (from the URL or heading) and github_urlIf creation fails entirely, show the error and suggest next steps — don't retry blindly.
ID_JSON=$(bash "${SKILL_DIR}/scripts/issue-store.sh" gen-id)
Then pipe the issue record as JSON via stdin:
echo '<json_record>' | bash "${SKILL_DIR}/scripts/issue-store.sh" add "${working_dir}"
The record includes: id, plugin, marketplace, repository, github_number,
github_url, type, title, status ("open"), created_at, updated_at.
Parse github_number and github_url from the browser redirect URL after submission.
Return the GitHub issue URL and local issue ID.
bash "${SKILL_DIR}/scripts/issue-store.sh" read "${working_dir}"
Display issues grouped by plugin: title, type badge, GitHub number + URL, status, date. If empty, suggest the create flow.
owner, repo, and github_numberhttps://github.com/{owner}/{repo}/issues/{github_number}browser_snapshot to read the issue page — extract state (open/closed), labels,
latest comments, and last update timestamp from the accessibility treeupdate-statusNavigate to the GitHub issue URL using browser_navigate. The URL follows
the pattern: https://github.com/<owner>/<repo>/issues/<number>
If browsermcp is unavailable, provide the URL as text instead.
gh CLI instead."browser_screenshot to visually inspect the page and adapt element references.browser_screenshot to share visual state
when the user needs to verify something.scripts/setup-gh.sh — Platform info script. Returns JSON with OS detection. The primary readiness check is done via browsermcp tools (navigate + snapshot).scripts/resolve-plugin.sh — Resolves a plugin name to its GitHub repo by scanning marketplace.json files. All insight-wave plugins resolve to the monorepo cogni-work/insight-wave.scripts/issue-store.sh — Local JSON state management (init, gen-id, add, read, update-status). The add command reads JSON from stdin for safety.references/issue-templates.md — Templates for the four issue types with auto-fill placeholders and label mapping