Skill: File GitHub Issue

SkillFiles & storage

File a GitHub issue for a bug or improvement found this session.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Skill: File GitHub Issue skill

What this skill tells your AI

The instructions your AI receives, as published by open-thoughts/openthoughts-agent in .agents/skills/file-issue/SKILL.md and read by ahel’s review.

Create a GitHub issue in the current repository from bugs, regressions, or improvements identified in the current conversation. gh defaults to the repo of the current checkout; pass --repo <owner>/<name> only to target a different one.

Background

Read first: AGENTS.md.

Before drafting, read:

  • .agents/skills/writing-style/SKILL.md
  • .agents/skills/writing-style/issues.md
  • .agents/skills/writing-style/ai-writing-donts.md

Issue Kinds and Body Structure

Pick the kind, then use the matching body structure below. There are no GitHub issue templates — these structures live here.

KindWhen to useLabels
bugA bug or regression was foundbug, agent-generated
taskAn improvement, refactor, or feature requestagent-generated + priority if known
experimentAn experiment needs trackingexperiment, agent-generated

Bug body

<what is broken and its impact -- concrete symptoms or error messages>

Reproduce:
1. <step>
2. <step>

Expected: <what should happen instead>

<optional: concise evidence or confirmed root cause>

Task body

<what needs to be done and why -- enough context for anyone on the team>

Done when:
<specific, testable completion criteria>

Experiment body

## TL;DR

<One-paragraph current summary. Leave blank only when the work is just being kicked off.>

## Description

<Context someone outside the thread can understand.>

## Hypothesis or Goal

<What are you trying to learn, fix, or achieve?>

## Status

<Current state; update as evidence lands.>

## Links

* Logbook:
* Report:
* Important updates:

## Decision Log

## Conclusion

Workflow

1. Gather Context from Conversation

Extract from the conversation:

  • What is broken or missing -- concrete symptoms, error messages, failing test output.
  • Where it happens -- file paths, line numbers, module names.
  • How to reproduce -- steps, commands, or minimal config that triggers it.
  • Root cause (if known).
  • Severity -- blocks work, causes data loss, or cosmetic?

If it's ambiguous what to file, ask the user before proceeding.

2. Classify the Issue

Pick the kind (bug, task, or experiment). If unsure, ask the user.

3. Duplicate Check

Search for existing issues first:

gh issue list --state open --search "<keyword>"

If a match exists, tell the user and offer to comment on it instead.

4. Draft the Issue

Title: At most 80 characters, optionally prefixed with a scope tag. State a factual symptom for a bug (e.g. [training] Gradient accumulation drops the last microbatch) and an imperative outcome for a task (e.g. [training] Handle partial accumulation steps). Do not add bug:, task:, or another type prefix.

Body: Use the section structure for the chosen kind (see above).

Rules for the body:

  • No filler ("I noticed...", "During our conversation...").
  • No markdown images or tables.
  • Reference code with file:line links, not inline dumps.
  • Keep every fact needed to understand and act on the issue. Remove history, repetition, and implementation narration that does not define the problem or completion criteria; experiment issues may retain more tracking context.
  • Do not repeat the title in a Description section.
  • Do not inventory files, functions, or proposed implementation steps that are not required to define the problem or completion criteria.
  • Include error messages or stack traces in code blocks, trimmed to the relevant frames.
  • For task issues: include concrete Done when criteria.
  • For bug issues: include numbered reproduction steps.

5. Compress and Inspect the Payload

Apply the writing-style final compression pass to the exact title and body that will be sent to GitHub. For a bug or task, verify the title is at most 80 characters. Every remaining sentence must add a symptom, impact, reproduction step, observation, expected behavior, or completion criterion.

This review is required even when the user explicitly asked to file the issue. It is an author self-check, not a request for approval.

6. Confirm or File Directly

If the user explicitly asked to file an issue, skip the preview — file it and share the link. If the agent surfaced the issue (not explicitly requested), show the drafted title and body and wait for approval or edits.

7. File the Issue

Write the body to a uniquely named temp file, then pass it with --body-file. Do not inline the body with shell substitution (--body "$(cat <<'EOF' ...)") — multiline text can be corrupted by pasted output or escaping mistakes. Do not reuse a fixed path like /tmp/issue-body.md; concurrent agent runs can overwrite each other's drafts on shared hosts.

body_file="$(mktemp "${TMPDIR:-/tmp}/issue-body.XXXXXX.md")"
trap 'rm -f "$body_file"' EXIT

cat > "$body_file" <<'EOF'
<body>
EOF

issue_url="$(gh issue create \
  --title "<title>" \
  --label "agent-generated" \
  --body-file "$body_file")"

Add kind-appropriate labels (bug, experiment). If a relevant label does not exist, skip it rather than creating new labels. For task issues, add a priority label (p1, p2, p3) if the user specifies one or severity is clear.

Before creating the issue, re-open the body file and verify it contains no unrelated shell output (pre-commit logs, pytest session headers, prompt transcripts). If it does, clean the draft before posting.

After creating the issue, fetch its published text with gh issue view "$issue_url" --json title,body and correct any text added or altered by the publishing tool.

8. Report Back

Print the issue URL.

Writing Style

Terse: every sentence conveys new information; no preamble or editorializing; no restating code a link covers; annotate code links, don't narrate them.

Rules

  1. Never credit yourself in the issue.
  2. Always add the agent-generated label.
  3. Confirm with the user before filing only when the agent surfaced the issue (not when the user explicitly asked to file).
  4. If the conversation does not contain a clear bug or actionable improvement, say so and ask the user what they want to file.
  5. Use the smallest matching body structure. Omit optional context and headings that add no information.

Signals

GitHub stars
291
Forks
41
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
file-issue
Source
github.com/open-thoughts/openthoughts-agent