[{"data":1,"prerenderedAt":952},["ShallowReactive",2],{"knowledge:en:\u002Fknowledge\u002Fweb\u002Fgithub\u002Fgithub-projects-issues-prs-team-coordination":3,"knowledge-locales:\u002Fknowledge\u002Fweb\u002Fgithub\u002Fgithub-projects-issues-prs-team-coordination":951},{"id":4,"title":5,"appliesTo":6,"body":10,"description":931,"extension":932,"meta":933,"navigation":301,"path":934,"publishedAt":935,"seo":936,"status":937,"stem":938,"tags":939,"technologies":945,"updatedAt":949,"__hash__":950},"knowledge_en\u002Fknowledge\u002Fweb\u002Fgithub\u002Fgithub-projects-issues-prs-team-coordination.md","Coordinating Multiple AI Agents with GitHub Projects, Issues, PRs, and a Custom .team Registry",[7,8,9],"GitHub Projects","GitHub Issues","GitHub Pull Requests",{"type":11,"value":12,"toc":916},"minimark",[13,18,30,33,36,43,47,98,102,105,185,194,198,201,242,245,255,274,278,281,369,379,383,386,393,608,619,622,626,629,697,704,708,716,722,726,729,743,746,750,753,776,780,783,832,835,839,869,873,912],[14,15,17],"h2",{"id":16},"overview","Overview",[19,20,21],"blockquote",{},[22,23,24,25,29],"p",{},"Workflow update (2026-09-05): Company now treats Issues as optional and has retired its shared registry, leases, and ",[26,27,28],"code",{},"task:*"," commands. This article records the former design. The procedures and code examples below are not the current Company workflow.",[22,31,32],{},"Delegating development work to multiple AI agents introduces conflicts that ordinary task tracking does not handle well. Two agents may edit the same files, an agent may silently take over an expired task, or a pull request from the wrong branch may be linked to an issue.",[22,34,35],{},"Building a large custom task manager to solve these problems creates a different risk: GitHub Projects, Issues, Pull Requests, and the custom system all begin storing the same progress state.",[22,37,38,39,42],{},"This article describes a hybrid design. GitHub remains the source of truth for the human-facing work lifecycle, while a ",[26,40,41],{},".team"," registry on a dedicated branch provides only the active lease and path-level exclusion that GitHub does not directly provide.",[14,44,46],{"id":45},"conclusions","Conclusions",[48,49,50,66,69,72,78,92],"ul",{},[51,52,53,54,57,58,61,62,65],"li",{},"Use GitHub Projects to display priority and the ",[26,55,56],{},"Open",", ",[26,59,60],{},"In Review",", and ",[26,63,64],{},"Done"," work lifecycle.",[51,67,68],{},"Use Issues as work contracts containing context, objectives, completion criteria, exclusions, and writable paths.",[51,70,71],{},"Use Pull Requests as the source of truth for implementation diffs, reviews, CI, and merge state.",[51,73,74,75,77],{},"Keep only the owner, session, lease, branch, claimed paths, and PR identity checks in ",[26,76,41],{},".",[51,79,80,81,83,84,87,88,91],{},"Determine whether implementation is active from the ",[26,82,41],{}," lease; do not duplicate Project Status, ",[26,85,86],{},"draft-pr",", or ",[26,89,90],{},"ready-pr"," there.",[51,93,94,95,77],{},"Let built-in GitHub Projects workflows handle the transitions they support, and do not update the Project from ",[26,96,97],{},"task:start",[14,99,101],{"id":100},"do-not-make-one-system-own-everything","Do not make one system own everything",[22,103,104],{},"Projects, Issues, PRs, and a coordination registry each serve a different purpose.",[106,107,108,124],"table",{},[109,110,111],"thead",{},[112,113,114,118,121],"tr",{},[115,116,117],"th",{},"Information",[115,119,120],{},"Source of truth",[115,122,123],{},"Why",[125,126,127,139,150,161,173],"tbody",{},[112,128,129,133,136],{},[130,131,132],"td",{},"Priority, planned owner, work stage",[130,134,135],{},"GitHub Project",[130,137,138],{},"Easy for people to inspect in board and table views",[112,140,141,144,147],{},[130,142,143],{},"Context, objective, completion criteria, exclusions",[130,145,146],{},"GitHub Issue",[130,148,149],{},"Keeps decisions and discussion attached to the unit of work",[112,151,152,155,158],{},[130,153,154],{},"Diff, review, CI, merge state",[130,156,157],{},"Pull Request",[130,159,160],{},"Directly connected to Git revisions and review state",[112,162,163,166,170],{},[130,164,165],{},"Owner, session, lease",[130,167,168],{},[26,169,41],{},[130,171,172],{},"Supports machine-enforced temporary ownership",[112,174,175,178,182],{},[130,176,177],{},"Allowed paths and shared resources",[130,179,180],{},[26,181,41],{},[130,183,184],{},"Rejects conflicts before implementation and before commit",[22,186,187,188,190,191,193],{},"In this split, Project Status is the source of truth for the human-facing work lifecycle. ",[26,189,41],{}," owns the active implementation lease, while the PR itself owns Draft, Ready, and merged state. ",[26,192,41],{}," is a development safety mechanism, not a second Project.",[14,195,197],{"id":196},"recommended-state-transitions","Recommended state transitions",[22,199,200],{},"Create three Project Status values.",[106,202,203,213],{},[109,204,205],{},[112,206,207,210],{},[115,208,209],{},"Status",[115,211,212],{},"Meaning",[125,214,215,224,233],{},[112,216,217,221],{},[130,218,219],{},[26,220,56],{},[130,222,223],{},"The Issue is open and no PR is currently awaiting review",[112,225,226,230],{},[130,227,228],{},[26,229,60],{},[130,231,232],{},"A PR is linked to the Issue and is reviewable",[112,234,235,239],{},[130,236,237],{},[26,238,64],{},[130,240,241],{},"The Issue is closed or the PR is merged",[22,243,244],{},"The standard flow becomes:",[246,247,253],"pre",{"className":248,"code":250,"language":251,"meta":252},[249],"language-text","Issue created\n  -> Project: Open\n  -> task:start: claim lease and paths\n     Project stays Open; inspect .team for active implementation\n  -> PR created with \"Closes #123\"\n  -> Project: In Review\n  -> PR merged \u002F Issue closed\n  -> Project: Done\n  -> task:finish: sync main and release lease\n","text","",[26,254,250],{"__ignoreMap":252},[22,256,257,259,260,262,263,266,267,270,271,273],{},[26,258,56],{}," intentionally covers both unclaimed and actively implemented work. Inspect the ",[26,261,41],{}," active record or ",[26,264,265],{},"task:status"," to distinguish them. ",[26,268,269],{},"task:finish"," should not set the Project to Done. GitHub handles the merge and Issue closure, and a Project workflow reflects that state. ",[26,272,269],{}," focuses on syncing the local main branch and releasing the temporary claim.",[14,275,277],{"id":276},"treat-the-issue-as-a-work-contract","Treat the Issue as a work contract",[22,279,280],{},"At minimum, an Issue should contain the context, objective, completion criteria, and exclusions. Include the agent's writable scope in a machine-readable block.",[246,282,286],{"className":283,"code":284,"language":285,"meta":252,"style":252},"language-markdown shiki shiki-themes github-light github-dark","## Task contract\n\n\u003C!-- task-contract\nallowed_paths:\n  - apps\u002Fweb\u002Fcontent\u002Fknowledge\u002F**\n  - tools\u002Ftask-workflow\u002F**\nshared_resources:\n  - apps\u002Fweb\u002Fpnpm-lock.yaml\nrequired_checks:\n  - format:check\n  - typecheck\nbranch_slug: project-team-hybrid\n-->\n","markdown",[26,287,288,296,303,309,315,321,327,333,339,345,351,357,363],{"__ignoreMap":252},[289,290,293],"span",{"class":291,"line":292},"line",1,[289,294,295],{},"## Task contract\n",[289,297,299],{"class":291,"line":298},2,[289,300,302],{"emptyLinePlaceholder":301},true,"\n",[289,304,306],{"class":291,"line":305},3,[289,307,308],{},"\u003C!-- task-contract\n",[289,310,312],{"class":291,"line":311},4,[289,313,314],{},"allowed_paths:\n",[289,316,318],{"class":291,"line":317},5,[289,319,320],{},"  - apps\u002Fweb\u002Fcontent\u002Fknowledge\u002F**\n",[289,322,324],{"class":291,"line":323},6,[289,325,326],{},"  - tools\u002Ftask-workflow\u002F**\n",[289,328,330],{"class":291,"line":329},7,[289,331,332],{},"shared_resources:\n",[289,334,336],{"class":291,"line":335},8,[289,337,338],{},"  - apps\u002Fweb\u002Fpnpm-lock.yaml\n",[289,340,342],{"class":291,"line":341},9,[289,343,344],{},"required_checks:\n",[289,346,348],{"class":291,"line":347},10,[289,349,350],{},"  - format:check\n",[289,352,354],{"class":291,"line":353},11,[289,355,356],{},"  - typecheck\n",[289,358,360],{"class":291,"line":359},12,[289,361,362],{},"branch_slug: project-team-hybrid\n",[289,364,366],{"class":291,"line":365},13,[289,367,368],{},"-->\n",[22,370,371,374,375,378],{},[26,372,373],{},"allowed_paths"," describes normal writable scope. ",[26,376,377],{},"shared_resources"," covers files such as lockfiles that multiple areas may need to change. If a new claim overlaps another active task, split the Issue or adjust the claimed scope before implementation begins.",[14,380,382],{"id":381},"limit-team-to-leases-and-conflict-prevention","Limit .team to leases and conflict prevention",[22,384,385],{},"GitHub Projects is effective for progress visibility, but it does not provide a compare-and-swap lease such as “this session owns this directory for four hours,” nor does it reject overlapping path claims.",[22,387,388,389,392],{},"A dedicated branch can therefore contain ",[26,390,391],{},".team\u002Findex.yml"," and one active record per task. The files may use a YAML extension while containing JSON-compatible data to keep parsing simple.",[246,394,398],{"className":395,"code":396,"language":397,"meta":252,"style":252},"language-json shiki shiki-themes github-light github-dark","{\n  \"schema_version\": 1,\n  \"issue\": 123,\n  \"owner\": {\n    \"kind\": \"agent\",\n    \"name\": \"implementation-agent\",\n    \"session_id\": \"session-uuid\"\n  },\n  \"branch\": \"codex\u002Fissue-123-project-team-hybrid\",\n  \"base_branch\": \"main\",\n  \"base_sha\": \"commit-sha\",\n  \"allowed_paths\": [\"tools\u002Ftask-workflow\u002F**\"],\n  \"shared_resources\": [],\n  \"started_at\": \"2026-08-22T00:00:00.000Z\",\n  \"heartbeat_at\": \"2026-08-22T01:00:00.000Z\",\n  \"lease_expires_at\": \"2026-08-22T05:00:00.000Z\",\n  \"pr\": 456,\n  \"pr_head_sha\": \"commit-sha\"\n}\n","json",[26,399,400,406,421,433,441,454,466,476,481,493,505,517,531,539,552,565,578,591,602],{"__ignoreMap":252},[289,401,402],{"class":291,"line":292},[289,403,405],{"class":404},"sVt8B","{\n",[289,407,408,412,415,418],{"class":291,"line":298},[289,409,411],{"class":410},"sj4cs","  \"schema_version\"",[289,413,414],{"class":404},": ",[289,416,417],{"class":410},"1",[289,419,420],{"class":404},",\n",[289,422,423,426,428,431],{"class":291,"line":305},[289,424,425],{"class":410},"  \"issue\"",[289,427,414],{"class":404},[289,429,430],{"class":410},"123",[289,432,420],{"class":404},[289,434,435,438],{"class":291,"line":311},[289,436,437],{"class":410},"  \"owner\"",[289,439,440],{"class":404},": {\n",[289,442,443,446,448,452],{"class":291,"line":317},[289,444,445],{"class":410},"    \"kind\"",[289,447,414],{"class":404},[289,449,451],{"class":450},"sZZnC","\"agent\"",[289,453,420],{"class":404},[289,455,456,459,461,464],{"class":291,"line":323},[289,457,458],{"class":410},"    \"name\"",[289,460,414],{"class":404},[289,462,463],{"class":450},"\"implementation-agent\"",[289,465,420],{"class":404},[289,467,468,471,473],{"class":291,"line":329},[289,469,470],{"class":410},"    \"session_id\"",[289,472,414],{"class":404},[289,474,475],{"class":450},"\"session-uuid\"\n",[289,477,478],{"class":291,"line":335},[289,479,480],{"class":404},"  },\n",[289,482,483,486,488,491],{"class":291,"line":341},[289,484,485],{"class":410},"  \"branch\"",[289,487,414],{"class":404},[289,489,490],{"class":450},"\"codex\u002Fissue-123-project-team-hybrid\"",[289,492,420],{"class":404},[289,494,495,498,500,503],{"class":291,"line":347},[289,496,497],{"class":410},"  \"base_branch\"",[289,499,414],{"class":404},[289,501,502],{"class":450},"\"main\"",[289,504,420],{"class":404},[289,506,507,510,512,515],{"class":291,"line":353},[289,508,509],{"class":410},"  \"base_sha\"",[289,511,414],{"class":404},[289,513,514],{"class":450},"\"commit-sha\"",[289,516,420],{"class":404},[289,518,519,522,525,528],{"class":291,"line":359},[289,520,521],{"class":410},"  \"allowed_paths\"",[289,523,524],{"class":404},": [",[289,526,527],{"class":450},"\"tools\u002Ftask-workflow\u002F**\"",[289,529,530],{"class":404},"],\n",[289,532,533,536],{"class":291,"line":365},[289,534,535],{"class":410},"  \"shared_resources\"",[289,537,538],{"class":404},": [],\n",[289,540,542,545,547,550],{"class":291,"line":541},14,[289,543,544],{"class":410},"  \"started_at\"",[289,546,414],{"class":404},[289,548,549],{"class":450},"\"2026-08-22T00:00:00.000Z\"",[289,551,420],{"class":404},[289,553,555,558,560,563],{"class":291,"line":554},15,[289,556,557],{"class":410},"  \"heartbeat_at\"",[289,559,414],{"class":404},[289,561,562],{"class":450},"\"2026-08-22T01:00:00.000Z\"",[289,564,420],{"class":404},[289,566,568,571,573,576],{"class":291,"line":567},16,[289,569,570],{"class":410},"  \"lease_expires_at\"",[289,572,414],{"class":404},[289,574,575],{"class":450},"\"2026-08-22T05:00:00.000Z\"",[289,577,420],{"class":404},[289,579,581,584,586,589],{"class":291,"line":580},17,[289,582,583],{"class":410},"  \"pr\"",[289,585,414],{"class":404},[289,587,588],{"class":410},"456",[289,590,420],{"class":404},[289,592,594,597,599],{"class":291,"line":593},18,[289,595,596],{"class":410},"  \"pr_head_sha\"",[289,598,414],{"class":404},[289,600,601],{"class":450},"\"commit-sha\"\n",[289,603,605],{"class":291,"line":604},19,[289,606,607],{"class":404},"}\n",[22,609,610,611,614,615,618],{},"Do not store Project Status or PR Draft\u002FReady state in this record. ",[26,612,613],{},"pr"," and ",[26,616,617],{},"pr_head_sha"," are not progress indicators. They verify that the registered PR still points to the expected task-branch revision when the task is finished.",[22,620,621],{},"Only allow fast-forward updates to the coordination branch. Use the head SHA that was read as the expected ref value. If another agent updates the branch first, do not force-push. Read the latest state and run conflict detection again.",[14,623,625],{"id":624},"delegate-supported-transitions-to-github-projects","Delegate supported transitions to GitHub Projects",[22,627,628],{},"Built-in GitHub Projects workflows can handle these transitions without custom code.",[106,630,631,641],{},[109,632,633],{},[112,634,635,638],{},[115,636,637],{},"Trigger",[115,639,640],{},"Action",[125,642,643,651,661,670,679,688],{},[112,644,645,648],{},[130,646,647],{},"A matching open Issue is created or updated",[130,649,650],{},"Add it to the Project",[112,652,653,656],{},[130,654,655],{},"An item is added to the Project",[130,657,658,659],{},"Set ",[26,660,56],{},[112,662,663,666],{},[130,664,665],{},"A PR is linked to an Issue",[130,667,658,668],{},[26,669,60],{},[112,671,672,675],{},[130,673,674],{},"An item is closed",[130,676,658,677],{},[26,678,64],{},[112,680,681,684],{},[130,682,683],{},"A PR is merged",[130,685,658,686],{},[26,687,64],{},[112,689,690,693],{},[130,691,692],{},"An item is reopened",[130,694,658,695],{},[26,696,56],{},[22,698,699,700,703],{},"Put a closing keyword such as ",[26,701,702],{},"Closes #123"," in the PR body. This explicitly links the PR and Issue and automatically closes the Issue when the PR is merged into the default branch.",[14,705,707],{"id":706},"divide-responsibilities-between-taskstart-and-open","Divide responsibilities between task:start and Open",[22,709,710,712,713,715],{},[26,711,97],{}," checks for a clean worktree, parses the Issue contract, detects conflicts with active tasks, acquires the lease, and prepares the task branch. It does not update the Project; the Status remains ",[26,714,56],{}," until a PR is linked to the Issue.",[22,717,718,719,721],{},"Because work start is not duplicated in the Project, the workflow needs neither a browser interaction nor a Project API token and Project, field, or option IDs. The Project shows the review and completion boundaries to people, while ",[26,720,41],{}," exposes the active owner, session, and lease to machines. Keeping these two levels intentionally different prevents the visible lifecycle and the execution claim from drifting apart.",[14,723,725],{"id":724},"keep-tasklink-pr-focused-on-validation","Keep task:link-pr focused on validation",[22,727,728],{},"After creating a PR, the coordination command should verify only that:",[48,730,731,734,737,740],{},[51,732,733],{},"the PR head repository is the expected repository;",[51,735,736],{},"the PR head branch matches the active record;",[51,738,739],{},"the PR base branch matches the planned base branch; and",[51,741,742],{},"the PR head SHA matches both the local and remote task-branch revision.",[22,744,745],{},"Store the matching PR number and head SHA. GitHub already exposes Draft and Ready state, so do not copy those states to the custom registry. If new commits are pushed, run the validation again and update the stored head SHA.",[14,747,749],{"id":748},"design-failure-and-recovery-first","Design failure and recovery first",[22,751,752],{},"Interrupted work is more important than the happy path in a multi-agent workflow.",[48,754,755,758,761,764,767,770],{},[51,756,757],{},"Do not automatically take an expired lease. Inspect the Issue, branch, PR, and last heartbeat before an explicit takeover.",[51,759,760],{},"If the coordination ref update conflicts, never force-push. Retry from the latest state.",[51,762,763],{},"If GitHub deletes the PR head branch after merge, finish only when the saved PR head SHA still matches the local revision.",[51,765,766],{},"Record the reason in the Issue before releasing an aborted claim.",[51,768,769],{},"Do not infer file ownership from Project Status alone.",[51,771,772,773,775],{},"Do not report product progress from ",[26,774,41],{}," alone.",[14,777,779],{"id":778},"introduce-the-model-in-stages","Introduce the model in stages",[22,781,782],{},"When adding this model to an existing Issue and PR workflow:",[784,785,786,796,801,809,817,820,827],"ol",{},[51,787,788,789,57,791,61,793,795],{},"Create ",[26,790,56],{},[26,792,60],{},[26,794,64],{}," in the Project.",[51,797,798,799,77],{},"Auto-add matching open Issues, and set added or reopened items to ",[26,800,56],{},[51,802,803,804,806,807,77],{},"Move linked PRs to ",[26,805,60],{}," and closed or merged work to ",[26,808,64],{},[51,810,811,812,814,815,77],{},"Add ",[26,813,41],{}," leases and path exclusion, and acquire them through ",[26,816,97],{},[51,818,819],{},"Remove duplicated Project Status, Draft, and Ready states from the custom registry.",[51,821,822,823,826],{},"Reduce ",[26,824,825],{},"task:link-pr"," to PR and branch-revision validation.",[51,828,822,829,831],{},[26,830,269],{}," to merge verification, main synchronization, and lease release.",[22,833,834],{},"This order lets the team compare GitHub's visible state with actual work at every stage and roll back a small change if necessary.",[14,836,838],{"id":837},"caveats","Caveats",[48,840,841,846,857,860,863,866],{},[51,842,843,845],{},[26,844,41],{}," is not a GitHub standard. It is an optional coordination registry for multi-agent development and may be unnecessary for solo work or low-conflict teams.",[51,847,848,850,851,853,854,856],{},[26,849,56],{}," alone does not distinguish unclaimed work from active implementation. Inspect ",[26,852,41],{}," or ",[26,855,265],{}," for the current claim.",[51,858,859],{},"A lease does not provide an operating-system file lock or eliminate Git conflicts. Validate changed paths again before commit.",[51,861,862],{},"Auto-add workflows apply to new or updated matching items after the workflow is enabled. Existing items may need to be added separately.",[51,864,865],{},"A closing keyword closes the Issue when the linked PR is merged into the repository's default branch.",[51,867,868],{},"Project fields and workflows can change. Periodically compare the operating guide with the actual Project configuration.",[14,870,872],{"id":871},"related-resources","Related resources",[48,874,875,884,891,898,905],{},[51,876,877],{},[878,879,883],"a",{"href":880,"rel":881},"https:\u002F\u002Fdocs.github.com\u002Fissues\u002Fplanning-and-tracking-with-projects\u002Flearning-about-projects\u002Fabout-projects",[882],"nofollow","About GitHub Projects",[51,885,886],{},[878,887,890],{"href":888,"rel":889},"https:\u002F\u002Fdocs.github.com\u002Fissues\u002Fplanning-and-tracking-with-projects\u002Fautomating-your-project\u002Fusing-the-built-in-automations",[882],"Using built-in Project automations",[51,892,893],{},[878,894,897],{"href":895,"rel":896},"https:\u002F\u002Fdocs.github.com\u002Fissues\u002Fplanning-and-tracking-with-projects\u002Fautomating-your-project\u002Fadding-items-automatically",[882],"Adding items to a Project automatically",[51,899,900],{},[878,901,904],{"href":902,"rel":903},"https:\u002F\u002Fdocs.github.com\u002Fissues\u002Ftracking-your-work-with-issues\u002Fusing-issues\u002Flinking-a-pull-request-to-an-issue",[882],"Linking a Pull Request to an Issue",[51,906,907],{},[878,908,911],{"href":909,"rel":910},"https:\u002F\u002Fdocs.github.com\u002Fissues\u002Ftracking-your-work-with-issues\u002Fusing-issues\u002Flinking-a-pull-request-to-an-issue#using-keywords-to-link-a-pull-request-to-an-issue",[882],"Using keywords to close an Issue",[913,914,915],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":252,"searchDepth":298,"depth":298,"links":917},[918,919,920,921,922,923,924,925,926,927,928,929,930],{"id":16,"depth":298,"text":17},{"id":45,"depth":298,"text":46},{"id":100,"depth":298,"text":101},{"id":196,"depth":298,"text":197},{"id":276,"depth":298,"text":277},{"id":381,"depth":298,"text":382},{"id":624,"depth":298,"text":625},{"id":706,"depth":298,"text":707},{"id":724,"depth":298,"text":725},{"id":748,"depth":298,"text":749},{"id":778,"depth":298,"text":779},{"id":837,"depth":298,"text":838},{"id":871,"depth":298,"text":872},"A task workflow that keeps the human-facing lifecycle in GitHub while using a custom .team registry only for active leases and path-conflict prevention.","md",{},"\u002Fknowledge\u002Fweb\u002Fgithub\u002Fgithub-projects-issues-prs-team-coordination","2026-08-22",{"title":5,"description":931},"published","knowledge\u002Fweb\u002Fgithub\u002Fgithub-projects-issues-prs-team-coordination",[940,941,942,943,944],"github-projects","issue-driven-development","pull-request","multi-agent","task-coordination",[946,947,948],"github","git","ai-agent","2026-09-05","eu-t7Vi_Sx2z8_4ugDvtRr9_FLDCbRZP3h8STUB2rZU",{"ja":301,"en":301},1791891818854]