Skip to main content

github.create_issue

The "file a GitHub issue" pack. Caller supplies a repo (owner/name), a title, optionally a body and labels, and the name of a vault credential containing a PAT with repo scope. The pack POSTs to /repos/{repo}/issues and returns the new issue's number plus URLs.

Stateless — no session needed. Hits api.github.com directly via the helmdeck control-plane (no gh CLI dependency).

Inputs

FieldTypeRequiredDefaultNotes
repostringyesowner/name slug.
titlestringyesIssue title.
bodystringno""Markdown body.
labelsarrayno[]Label names. Labels must already exist on the repo or GitHub silently drops them.
credentialstringnogithub-tokenVault credential name resolving to a PAT. Defaults to the canonical name; override only if you store the PAT under a different name.

Outputs

FieldTypeNotes
numbernumberThe new issue number.
urlstringAPI URL.
html_urlstringWeb URL — the link a human follows.

The full GitHub issue JSON body is also passed through; the named fields above are the schema-required subset every caller can rely on.

Vault credentials needed

github-token — type api_key, scoped to host pattern api.github.com, value is a Classic PAT with repo scope (or fine-grained PAT with Issues: Read and write on the target repo).

Add via the Vault panel before invoking. If absent, this pack returns handler_failed with the GitHub 401 Bad credentials body — public-repo write operations require auth.

Use it from your agent (OpenClaw chat-UI worked example)

Prompt (sent in OpenClaw chat UI / openclaw-cli agent):

Use helmdeck__github-create_issue against repo "tosin2013/helmdeck-pack-doc-fixtures" with title="Demo issue from helmdeck pack capture", body="This issue is a demo artifact captured while documenting the github.create_issue pack. Safe to close.", labels=["doc-capture"], credential=github-token. Tell me the issue number and html_url.

Tool call (1 call, no failures):

{
"name": "helmdeck__github-create_issue",
"arguments": {
"repo": "tosin2013/helmdeck-pack-doc-fixtures",
"title": "Demo issue from helmdeck pack capture",
"body": "This issue is a demo artifact captured while documenting the github.create_issue pack. Safe to close.",
"labels": [
"doc-capture"
],
"credential": "github-token"
}
}

Pack response (truncated):

{"pack":"github.create_issue","version":"v1","output":{"url":"https://api.github.com/repos/tosin2013/helmdeck-pack-doc-fixtures/issues/2","repository_url":"https://api.github.com/repos/tosin2013/helmdeck-pack-doc-fixtures","labels_url":"https://api.github.com/repos/tosin2013/helmdeck-pack-doc-fixtures/issues/2/labels{/name}","comments_url":"https://api.github.com/repos/tosin2013/helmdeck-pack-doc-fixtures/issues/2/comments","events_url":"https://api.github.com/repos/tosin2013/helmdeck-pack-doc-fixtures/issues/2/events","html_url":"https://github.com/tosin2013/helmdeck-pack-doc-fixtures/issues/2","id":4406682427,"node_id":"I_kwDOSX1U_c8AAAABBqijOw","number":2,"title":"Demo issue from helmdeck pack capture","user":{"login":"tosin2013","id":1975599,"node_id":"MDQ6VXNlcjE5NzU1OTk=","avatar_url
...[truncated]

Agent's final reply:

Verified via OpenClaw 2026.5.6 + helmdeck v0.9.0-dev + openrouter/openai/gpt-oss-120b on 2026-05-07 (cost: $0.1513).

Developer reference (curl)

curl -fsS -X POST http://localhost:3000/api/v1/packs/github.create_issue \
-H "Authorization: Bearer $JWT" -H 'Content-Type: application/json' \
-d '{
"repo": "tosin2013/helmdeck-pack-doc-fixtures",
"title": "Demo issue from helmdeck pack capture",
"body": "This issue is a demo artifact captured while documenting the github.create_issue pack. Safe to close.",
"labels": ["doc-capture"],
"credential": "github-token"
}'

Captured response (truncated to the schema-required fields):

{
"pack": "github.create_issue",
"version": "v1",
"output": {
"number": 1,
"url": "https://api.github.com/repos/tosin2013/helmdeck-pack-doc-fixtures/issues/1",
"html_url": "https://github.com/tosin2013/helmdeck-pack-doc-fixtures/issues/1"
}
}

Error codes

CodeTriggersCaptured response
handler_failedrepo or title missing{"error":"handler_failed","message":"repo and title are required"}
handler_failedPAT missing or invalid{"error":"handler_failed","message":"github API POST /repos/…/issues: 401 Bad credentials"}
handler_failedRepo doesn't exist or PAT lacks access{"error":"handler_failed","message":"github API POST /repos/…/issues: 404 Not Found"}
handler_failedA label in labels doesn't exist on the repoGitHub silently drops the label; the issue is still created. Not an error.

Session chaining

No session. Stateless REST passthrough. Compatible with anything; commonly chained downstream of web.scrape ("scrape this page, file an issue summarizing it") or repo.fetch ("clone, find a TODO, file an issue against it").

Async behavior

Synchronous. Round-trip is whatever GitHub's API takes (typically <500 ms).

See also