sentence-to-issueSAFE
Sentence to Issue — 一句话提 GitHub issue. Evidence, privacy scan, gh.
Overview
Sentence to Issue — 一句话提 GitHub issue. Evidence, privacy scan, gh.
3ef3318d70e1OBSERVED · 2026-10-13What it tells the agent
The instruction file, verbatim from the audited commit — this is the text the model reads, and the surface the audit's instruction layer examines. Quoted here so you can judge it without cloning anything.
---
name: sentence-to-issue
description: >-
Use when the user says "file an issue", "report this bug to the repo",
"one sentence issue", or the Chinese equivalents "一句话提 GitHub issue" /
"帮我把这个 bug 传上去" - turn one sentence of description into a filed GitHub
issue on any public repository. Gathers evidence, privacy-checks the draft,
writes the report, submits with the gh CLI, then reads it back to verify.
Works for any software or game, not only AI tools.
license: MIT
---
# Sentence to Issue · 一句话提 GitHub issue
Turn one sentence about something broken into a filed GitHub issue — and hand the user the link.
The user is not a developer by default. Explain in plain language, keep it short, and never
assume they know GitHub vocabulary.
---
## Language rules (hard)
1. **Reply in the language the user writes in.** Chinese in → Chinese out. English in → English out.
2. **The issue body follows the target repository's language** — check its README / recent issues.
English open-source project → English body. Default to English when unsure.
3. **This file and `references/` are for you, not for the user.** Never paste them into the chat.
Lines marked `ZH:` / `EN:` are user-facing scripts — pick the one matching the user's language.
---
## The flow (12 steps)
### 1. Parse the one sentence
Extract three things: **what broke**, **which repository**, **what evidence the user already has**.
Ask only for what is missing. Never guess the repository.
### 2. Resolve the target repository — three sources
1. `git remote get-url origin` in the current working directory
2. The user's own words: an `owner/repo`, or a full `https://github.com/...` link
3. **Explicit repository URLs in the project's own config** — `package.json`'s `repository`
field, `pyproject.toml`'s `repository` / `homepage`. These name a repository outright.
A `LICENSE` copyright line names at most an **owner**, never a repository: it may
*confirm* a repo you already locked onto, it must never *choose* one
(`Never guess the repository`, Step 1).
There is **no keyword search** — if none of the three yields a repository, ask the user for it.
Anything resolved from source 3 is confirmed with the user before it is used to file.
### 3. Capability probe
Inventory what you can actually reach: terminal, file read, browser, screenshots, installed skills.
That decides how deep you can capture (see `references/evidence.md`). Chat window only → layer L0.
**Never invent evidence you did not read.**
### 4. Freeze the scene — say this first, in the user's language
> **ZH:** **正在搜集相关信息 —— 期间别刷新、别重启、别更新、别关窗口。** 这期间如果你有与 bug 相关的细节要补充,直接发给我就行。
> **EN:** **Gathering evidence — please don't refresh, restart, update, or close anything.** If you have more detail about the bug to add meanwhile, just send it over.
That line replaces any "when did it happen / what were you doing" interrogation.
This applies to **any software or game**, not only AI tools — as long as the user's
environment is reachable and they grant the permission.
### 5. Capture evidence (L0 → L3)
Follow `references/evidence.md`. Read-only commands only: no writes, no restarts, no config edits.
Anything you could not reach gets marked `not captured` in the report — never filled in from memory.
### 6. Deduplicate
```bash
gh issue list --repo <owner/repo> --state all --search "<keywords>"
```
A hit → ask the user whether to add a comment to the existing issue instead of filing a new one.
### 7. Check the target repository's issue templates
```bash
gh api repos/<owner/repo>/contents/.github/ISSUE_TEMPLATE --jq '.[].name'
```
- **Template fits** → fetch it and fold its headings into your draft:
```bash
gh api repos/<owner/repo>/contents/.github/ISSUE_TEMPLATE/<file> --jq .content | base64 -d
```
Fill those headings from your evidence, then file with `--body-file` **only**.
⚠️ `gh issue create` **rejects** `--template` combined with `--body`/`--body-file`
(`--template is not supported when using --body or --body-file`) — merge first, then file.
Filing through `gh` also skips web-only required fields (forms that force a log upload).
- **Template listing quirks** (all seen in the wild):
- `config.yml` appears in the listing but is **not a template** (`blank_issues_enabled` +
`contact_links`) — skip it.
- `.yml` issue **forms** are not markdown: field labels live in `body[].attributes.label`.
There is no heading to fold — read them as a field list instead.
- `.md` templates carry YAML frontmatter (`--- name/about/title/labels/assignees ---`).
Strip it first, or you will send `labels: ''` and friends verbatim.
- **Template demands uploading logs/debug output** → **ask the user first**:
> **ZH:** 这个仓库的模板要求附日志。**要我帮你把日志附上吗?**
> · 日志文件没法用命令行直接传;我可以把相关片段**贴进正文**(你在网页上传也行)——
> 发出去后凭链接的人都能看到,贴之前我会先扫一遍敏感信息。
> · 不附也行,我照常提 issue,正文里标 `logs not attached`,维护者需要时会再找你。
> 你决定。
>
> **EN:** This repo's template asks for logs. **Want me to include them?**
> · Log files cannot be attached from the CLI — I can paste the relevant excerpt into the
> body (or you can upload it on the web). It becomes public to anyone holding the link,
> and I'll scan it for secrets first.
> · Or skip it: I'll file with `logs not attached` and maintainers can ask later.
> Your call.
`--attach` takes **images and video only** — a log file cannot ride along that way.
Scan any excerpt for secrets **before** it goes in. If the user declines, proceed without them.
### 8. Privacy check — reminder, not a veto
Run `scripts/privacy_scan.py <draft-file>`. Two levels (see `references/privacy.md`):
| Level | Examples | What you do |
|---|---|---|
| **1 — identity / location / history** | username, local paths, chat logs, ids | Warn **once**, continue on yes |
| **2 — secrets** | password, API key, token, private key | **Second confirmation**: state the consequence, then wait for an explicit reply |
Content the user pasted themselves gets the same warnings.
**You never uploadTrust audit
SAFEgrade B · trust 89/100 Nothing in the source contradicts what it says it does. Grade A is reserved for packages that have also passed the behavioural sandbox.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | PASS |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | PASS |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- none-observed
- Network
- none-observed
- Shell
- none-observed
- Dependencies
- pinned
- Secrets in source
- none-found
Findings (1)
| **2 — secrets** | things that unlock access | passwords, API keys, tokens, session cookies, private keys | **Second confirmation**: state the consequence first, then wait for an explicit reply. |
Gates applied: no_behavioural_pass.
3ef3318d70e1full audit observations/trust-audit/skill/qjzzsky__sentence-to-issue.json · Report an issue / request a re-scanAudit history
Every audit this skill has had.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-13 | 3ef3318d70e1 | SAFE | B | 89 | first audit |
Questions
What does the sentence-to-issue skill do?
Sentence to Issue — 一句话提 GitHub issue. Evidence, privacy scan, gh.
Is sentence-to-issue safe to install?
The audit found nothing in the source that contradicts what it says it does, and graded it B (89/100). Grade A is held back for packages that have also passed a sandboxed behavioural run, which is why a clean skill reads B.
What can sentence-to-issue access on my machine?
The audit observed no filesystem, network or shell use at all in its source.
How current is this page?
The grade is for one exact copy of the source (3ef3318d70e1), read on 2026-10-13. The repository is watched, and a new audit runs when it changes — this is the first audit.