Create Gist

0. Preflight check

Verify gh is available and authenticated:

gh auth status

Handle errors distinctly:

Do not proceed until this check passes.

1. Gather content and options

Collect everything needed to build the gist — in order of priority:

Parse the following options from the arguments or conversation:

Option Default Meaning
--public off Make the gist public instead of secret
--desc <text> inferred Gist description
--filename <name> inferred Override the filename shown in the gist

If no content is identifiable, ask the human what to put in the gist before proceeding.

Multi-file gists are out of scope. If multiple files are referenced, ask the human to pick one.

2. Infer filename and description

Filename: All gist filenames MUST follow this convention:

{TICKET-ID}-{SUMMARY}.{EXTENSION}

If --filename was passed explicitly, use that value verbatim — but still warn the human if it doesn’t match the convention.

Examples of valid filenames:

Description: Summarize the purpose in one short line. Pull from conversation context, the skill args, or the content itself. Keep it under 72 characters.

3. Determine visibility

4. Draft and review

Present a summary to the human before creating anything:

File:        <filename>
Description: <description>
Visibility:  <secret or public>
Content:
---
<first ~20 lines or full content if short>
---

If the content contains secrets (API keys, tokens, passwords, private URLs) — flag them explicitly. Warn the human that even secret gists are accessible to anyone with the URL. Let them decide whether to proceed.

Ask for confirmation. Do not create the gist until the human says yes. If running non-interactively or if the human passed --yes, skip the confirmation prompt.

5. Create the gist

IMPORTANT — gh gist create’s --filename/-f flag ONLY applies when reading from stdin (-). When you pass a file argument, gh names the gist after that file’s own basename and silently ignores --filename. This means you must NEVER hand gh a randomly-named temp file (e.g. mktemp’s default gist-XXXXXX.ext) — that random name is what ends up as the gist’s filename. Always create the temp file (or copy the source file) under the exact {TICKET-ID}-{SUMMARY}.{EXTENSION} name computed in step 2, then pass that path with no --filename flag needed.

If the source is a file on disk whose name already matches the convention, pass it directly:

# Secret (default)
gh gist create --desc "<description>" <filepath>

# Public
gh gist create --public --desc "<description>" <filepath>

If the source file’s name does NOT match the convention, copy it first to a correctly-named temp path (see below) rather than passing it as-is.

If the source is content from the conversation, or a source file with the wrong name, create a temp directory and write/copy the content into a file with the exact target name:

tmpdir=$(mktemp -d)
tmpfile="$tmpdir/<filename>"   # e.g. "$tmpdir/ENG-123-fix-auth-redirect.py"
# write or cp the content into "$tmpfile"

Then run:

# Secret (default)
gh gist create --desc "<description>" "$tmpfile"

# Public
gh gist create --public --desc "<description>" "$tmpfile"

After the gist is created (or if creation fails), delete the temp directory immediately:

rm -rf "$tmpdir"

6. Report back

Return: