Skip to content
Back to skills

Create Issue

ASecurity

Create a GitHub issue with a drafted title and body. Use when the user asks to \"create an issue\", \"file an issue\", \"open an issue\", \"submit an issue\", \"report a bug\", \"file a bug report\", \"file a feature request\", or \"file a design proposal\".

  • 406 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 3, 2026
ai-agentsgobashgitapi

Works with

  • api

Security analysis

A100/100

Scanned October 4, 2026

npx -y skills add tobihagemann/turbo --skill create-issue --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Create Issue?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Create Issue
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/tobihagemann-create-issue-turbo/badge)](https://www.skillsdirectory.com/skills/tobihagemann-create-issue-turbo)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: create-issue
description: "Create a GitHub issue with a drafted title and body. Use when the user asks to \"create an issue\", \"file an issue\", \"open an issue\", \"submit an issue\", \"report a bug\", \"file a bug report\", \"file a feature request\", or \"file a design proposal\"."
---

# Create Issue

Draft a focused title and body for a GitHub issue, then file it. Bug reports state reproduction steps and observed versus expected behavior.

## Step 1: Gather Context

Determine what the issue is about from the conversation. When the subject is ambiguous, use `request_user_input` to settle it before drafting.

List the repo's issue templates, read its labels, and search for an existing issue covering the same thing:

```bash
ls .github/ISSUE_TEMPLATE/ 2>/dev/null
gh label list --limit 100
gh issue list --search "<keywords>" --state all
```

When the issue goes to a repository other than the checkout, replace the `ls` with `gh api repos/<owner>/<repo>/contents/.github/ISSUE_TEMPLATE`, read the files it lists through the same API, and pass `--repo <owner>/<repo>` to the label list and the duplicate search.

When the target repository, the checkout included, has no `.github/ISSUE_TEMPLATE` folder of its own, list its owner's `.github` repository with `gh api repos/<owner>/.github/contents/.github/ISSUE_TEMPLATE`, whose files GitHub applies to a repository without that folder.

Treat an empty listing or a 404 as normal. When templates exist, read the one matching the kind of issue, and read `.github/ISSUE_TEMPLATE/config.yml` when present. Follow the template's structure and required sections, and apply the labels and title prefix the template declares. For a YAML issue form, render each field's `attributes.label` as a `###` heading with the answer beneath, matching what the web form produces. When `config.yml` sets `blank_issues_enabled: false`, choose a template rather than filing a blank issue.

When the search surfaces a plausible duplicate, present it and use `request_user_input` to confirm whether to file anyway.

## Step 2: Run `$github-voice` Skill

Run the `$github-voice` skill to load writing style rules.

## Step 3: Draft Title and Body

Draft the title and body. Output them as chat text so the user can review before anything is filed.

## Step 4: Confirm and Create

Use `request_user_input` for confirmation only. Generate a random tag so the body file is unique across sessions:

```bash
head -c 4 /dev/urandom | xxd -p
```

Write the drafted body to `.turbo/issue/<tag>-body.md` (using the printed tag) with `apply_patch`, then create the issue with `gh issue create --body-file`:

```bash
gh issue create --title "<TITLE>" --body-file .turbo/issue/<tag>-body.md --label "<LABEL>,<LABEL>"
```

Add `--repo <owner>/<repo>` when the issue goes to a repository other than the checkout. Repeat `--label` when the template sets several. Drop `--label` when no existing label fits. Set the issue type with `--type <name>` when a type is asked for or the template declares one; an issue type is a separate feature from a label, so applying a label of the same name leaves the request unmet. Do not set `--assignee` or `--milestone` unless the user explicitly asks.

Then call `update_plan` to mark this step completed and continue with the next step of the active workflow.

## Rules

- Don't reference `.turbo/` content (filenames, acceptance criteria, step numbers, headings) in the title or body. `.turbo/` is gitignored, so these references would be opaque to anyone reading without local copies.
- Create labels only when the user asks.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.