Reconstruct AI coding task state from GitHub Issue records
Project description
GitHub Task Protocol
GTPは、AIへ実装を任せても、人間が目的・変更範囲・現在地・根拠を理解し、停止・再開・やり直し・mergeの判断を手放さないための小さなprotocolです。
作業はAIに任せる。判断は手放さない。
AIの説明だけを信じるのではなく、GitHub Issue上のRecordと、実際のbranch・PR・commit・Check Runからtask stateを再構成します。GTP自身は変更、完了、mergeの権限を与えません。
task固有の未確認事項は、通常のIssue本文やcommentへ人が読める形で残します。開始前から完了判断に必要な不明点はDone Conditionにし、開始後にContract変更が必要になった場合はStopと後継Issueへ移ります。GTP Recordは自由文の意味を自動評価しないため、statusはDone提示前にIssueを確認するURLを表示します。
推奨: 明示的にsetupを依頼
bare GTP repository URLだけではsetup依頼にもrepository変更のauthorizationにもなりません。URLだけを受け取ったagentは、説明または目的確認に留まり、現在のrepositoryを変更しません。
導入先repositoryを操作中のclean agentへ、変更対象とDraft setup PR作成を明示して依頼します。
このrepositoryへGTPを導入するDraft setup PRを作ってください。
GTP repository: https://github.com/shinya0x00/github-task-protocol
この明示依頼を受けたagentは、次の順序でsetupします。
agentが手順を理解できることと、実行中ずっと意図の境界内に留まり続けることは別の能力です。この手順はbranch-first順序で境界逸脱のriskを下げます。GTP単独の強制力はこの手順の受入対象にしません。repository ownerは補完策としてGitHub branch protectionまたはrulesetでdefault branchへの直接pushを拒否し、pull request経由の変更を必須にできます。setup agentは保護設定を変更せず、未設定なら人間へ報告します。
- GitHubのlatest stable Releaseを取得し、
draft: falseかつprerelease: falseを確認する。未公開candidateやmovingmainは選ばない。 - Releaseのtagをcommit SHAまでdereferenceし、選択したtagとexact commit SHAを記録する。
- target fileを変更する前にrepositoryのdefault branch名とhead SHAを記録し、そのheadから
gtp/setup-<tag>-<short-sha>branchを作ってswitchする。現在branchがdefault branchではなくsetup branchであることを確認できなければ停止する。 - そのcommitの
GTP.mdだけをhttps://raw.githubusercontent.com/shinya0x00/github-task-protocol/<commit-sha>/GTP.mdから取得し、導入先rootへvendorする。既存GTP.mdとSHA-256が同一なら保持する。内容が異なるfile、別のGTP authority、または既存instructionとの衝突があれば、上書きせず停止して人間へ報告する。 - root
AGENTS.mdがなければ作成する。存在する場合は本文を変更・削除せず、下のexact adapterがなければ## GitHub Task Protocol adapterheading付きで追記する。既に同じadapterがあれば重複追加しない。 - commitとpushはsetup branchだけに行い、default branchへ直接pushしない。push後にdefault branch headを再取得し、setup開始前に記録したSHAから予期せず変化していたら停止して報告する。Draft setup PRのbodyにはrelease tag、exact commit SHA、immutable
GTP.mdURL、変更file、保持した既存instruction、次に必要な人間判断を書く。 - 人間がsetup PRをmergeするまで導入完了としません。merge後、taskごとにGitHub Issueを1件作り、agentへそのIssue URLだけを渡します。
共通adapter文:
このrepositoryはrootの
GTP.mdをtask protocolの唯一の正本とする。GitHub Issue URLを受け取ったら、Issue commentをServer Orderで読み、4 Record、6 state、7 halt reasonに従って既存branch・PR・次のprotocol actionを再構成する。Recordを推測、編集、独自拡張せず、矛盾時は原因URLを示して止まり、取得不能はhaltと混同しない。GTPの表示やRecordは変更・完了・mergeの権限を与えない。
配置例は次のとおりです。runtimeごとに異なる指示を作る必要はありません。
- Codex:
AGENTS.md - Claude Code:
CLAUDE.mdまたはAGENTS.md - Cursor:
AGENTS.mdまたは.cursor/rules/gtp.md
手動導入
自動setupを使わない場合は、次の3手順で導入できます。
- latest stable Releaseをexact commitへ固定し、file変更前にdefault branchからsetup用branchを作ってswitchする。
- setup branch上で
GTP.mdをrootへコピーし、共通adapter文を既存instructionへ非破壊で追加する。 - commitとpushをsetup branchだけに行ってDraft PRを作り、人間が内容を確認してmergeする。
4つのRecord
| Record | 平易な意味 |
|---|---|
contract |
目的、変更してよい範囲、完了条件を固定する |
start |
Contractと唯一の作業branchを結び付ける |
done |
PRのsource headと、条件ごとのEvidenceを提示する |
stop |
完了を主張せず中止し、必要なら後継Issueを示す |
RecordはIssue commentへ人向け要約を先に、機械用JSONを折りたたんで記録します。1 Issue = 1 branch = 1 PRです。 Start branchへrepositoryのdefault branchは指定できません。 Startより前から存在するPRは、そのtaskのcandidateやDoneとして引き継げません。誤ったStartをStopする場合は、古いPRを対象外として安全に閉じます。
6つのstate
| state | 平易な意味 |
|---|---|
unmanaged |
有効なContractがない |
ready |
ContractはあるがStart前 |
in_progress |
作業中、またはDone提示後のmerge待ち |
halt |
特定transitionを矛盾や不適合のため進められない |
done |
Doneのsource headへEvidence resourceが結び付き、そのPRがnative mergeされた。条件内容の十分性は人がEvidenceを読んで判断する |
stopped |
Stopにより、このIssueでの作業を終了した |
GitHub情報を完全に取得できない場合はstateを推測しません。404だけではresource不在と権限不足を区別できないため、これはhaltではなくAcquisition Errorです。
CLIは任意の検証器
人間がGTPを使うためにCLIをinstallする必要はありません。gtpはagentや自動検査がRecordと現在stateを確認するための、runtime dependency 0の任意toolです。
CLIはPyPI公開後、固定versionを指定して実行できます。現在のsource candidateは1.0.2であり、公開確認前です。公開済み1.0.1はこのcandidateと挙動が異なるため、下記commandは1.0.2の公開Evidence取得後に使用します。GTPを使うだけならCLIのinstallは不要です。
uvx --from github-task-protocol==1.0.2 gtp status <issue-url>
uvx --from github-task-protocol==1.0.2 gtp check <comment.md>
statusはGitHubへGETだけを行い、日本語6項目の後にmachine JSONを出します。Evidenceの存在・種類・状態・source headとの結び付きを検査しますが、完了条件の自然言語上の充足までは自動判定しません。checkは投稿前のMarkdown comment全文をoffline検査します。Issue上でもvalidだとは主張しません。- exit code、緑色のCheck Run、Evidence URLは、変更やmergeの許可ではありません。
仕様と判断記録
protocolの唯一の正本は400行以内のGTP.mdです。Record作成やstate判断に、他の文書は必要ありません。
DECISIONS.mdは、設計変更の理由と履歴です。GTP.mdと意味が衝突する場合はGTP.mdを優先します。
実GitHubで観測した引き継ぎ結果はacceptance/level0/にあります。これは仕様の代わりではありません。
GTPが証明しないこと
GTPは、actor本人性、credential安全性、コード品質そのもの、Evidence内容の真実性を証明しません。filesystem削除や本番database操作を物理的に防ぐものでもありません。
サンドボックス、最小権限、不可逆操作前の確認、reviewと組み合わせてください。最終的な受理は、人間がPRとEvidenceを読み、GitHubのnative mergeで判断します。
License: MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file github_task_protocol-1.0.2.tar.gz.
File metadata
- Download URL: github_task_protocol-1.0.2.tar.gz
- Upload date:
- Size: 117.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9ebd41dc392629deb26231e32116b6d015ab1c8a7d933cc93fde30efc6789ee3
|
|
| MD5 |
1a5543f2447c224e1510768c1b9154e2
|
|
| BLAKE2b-256 |
163e7490405dbf6c801771cf5acd220572cc2a91090bc7e3a772f3356ce890c2
|
File details
Details for the file github_task_protocol-1.0.2-py3-none-any.whl.
File metadata
- Download URL: github_task_protocol-1.0.2-py3-none-any.whl
- Upload date:
- Size: 28.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f5ccb6eaec5fd553fa46ac22f01bd4af35a8f226ad45a9a704674104a525bc8a
|
|
| MD5 |
0944377d073c59e39990c6f855bcffc8
|
|
| BLAKE2b-256 |
8b28d1f9b586a85896f925fa73070e07f9683f3a777c984a9f922a7c727a4b84
|