GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — feat: delete chat projects and clean up their chats in the background by f0ssel · Pull Request #30683 · coder/coder

Conversation

@f0ssel

@f0ssel f0ssel commented Oct 13, 2026 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Member

Deleting a chat project now removes its chats, including chats started by people it is shared with. Before this, deleting a project detached its chats, and #30479 and #30439 keep that behavior.

  • Request: DELETE /chats/projects/{project} locks the project, sets chat_projects.deleted (a one-way tombstone), deletes the project's memories, instructions and skills, and returns 204; a repeat returns 404. It takes no chat locks, so it can't fail or ask the caller to retry. Only the project delete is audited.
  • Hidden right away: project queries, chat lists (including by workspace), ExtractChatParam, and file download skip a deleted project and its chats. Root chat creation, moves into or out of a project, unarchives, and memory and instructions writes hold the project FOR SHARE (skill inserts FOR NO KEY UPDATE, the mode the skill limit trigger takes), so a racing one either finishes before the delete (and is cleaned up with the rest) or gets 404. Audit entries show the chats as deleted.
  • Background cleanup: after the tombstone commits, Server.ScheduleDeletedChatProjectCleanup runs chatstate.ArchiveDeletedChatProject. In one transaction it locks the project's unarchived root chats, archives every unarchived chat in the project with no worker or runner, clears their queues, and reads every chat in the project. It then publishes chat:update (runners stop mid-turn), schedules debug-data cleanup, and publishes a new project_deleted watch event for every chat in the project, archived ones included (sidebars evict the chat). Running chats keep generating until the cleanup runs.
  • Retries: each chat worker sweeps every minute for deleted projects that still have unarchived chats (GetDeletedChatProjectIDsWithUnarchivedChats). The sweep covers cleanups that failed, for example on a deadlock with a chat purge or an agent context push, or never ran because the replica stopped. A second pass leaves chats that are already archived alone, so their retention clock doesn't restart.
  • Retention: archived chats follow chat retention (kept forever when retention is 0). dbpurge then deletes the empty project row.
  • Membership: sub-chats now carry their root's project_id. Migration 000630 backfills it and adds an insert trigger that sets it, and moving a root chat moves its sub-chats too, so project queries match on that column alone. A sub-chat stays in its project even if retention deletes its root first.
  • UI: both delete dialogs say the memories, instructions and skills are deleted now, that every chat in the project (sharees' included) is stopped and can't be opened again, and that the chats are permanently deleted only if conversation retention is enabled. Deleting from the sidebar leaves the project's page or an open chat of the project.
Decision log
  • Earlier rounds did the whole archive inside the request transaction, with a retry and a 409 when deadlocks repeated. @f0ssel asked that a delete request never fail or need a retry: either do everything in one go, or mark it and clean up later. This PR marks and cleans up later.
  • Running chats may keep going until the cleanup stops them (@f0ssel), so worker acquisition and heartbeat renewal have no extra deleted-project filter.
  • The cleanup archives with one bulk statement instead of a per-chat ChatMachine transition, to keep the root locks short; its SET list mirrors UpdateChatExecutionState.
  • Deleted-project filtering stays per query rather than a chats_expanded column, to avoid a project join on every chat read.
  • Deleted projects' chats follow chat retention rather than being hard-deleted (@f0ssel).
  • The cleanup runs in chatd (in-process right after the delete, plus the worker sweep) because chatd has the pubsub needed to stop runners and update sidebars. With no chat daemon (AI Gateway off), no chats run. The chats stay hidden and unarchived until a replica with a daemon sweeps them.
  • The delete locks the project before the tombstone statement because a statement's snapshot predates any lock wait inside it; without the separate lock, content committed by a writer it waited for would survive the delete.
  • After main added project moves (feat: move a chat family between projects in chatd #30893, feat: move chats between projects through the chat update API #30894), SetFamilyProject updates every family member's project_id instead of only the root's, so the cleanup's project_id match still covers sub-chats.
  • deleteChatProject resets cached chat entities in onSuccess, not mutationFn, so a mutation function only performs the request (frontend review). The sidebar reads the open chat's entity in onMutate, since a project_deleted event can reset it before the response, to decide whether to leave the page.

Generated by Coder Agents.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
f0ssel added 30 commits October 6, 2026 18:22
@f0ssel
feat: share chat projects with users, groups, and organizations
6f198a2
@f0ssel
feat(coderd): add chat project sharing database layer
850c7f0
@f0ssel
test(coderd/database): keep nolint on its test
abca8ba
@f0ssel
Merge branch 'f0ssel/chat-projects-acl-db' into f0ssel/chat-projects-acl
c7156cf
@f0ssel
fix: address chat project sharing database review feedback
7e04612
@f0ssel
Merge branch 'f0ssel/chat-projects-acl-db' into f0ssel/chat-projects-acl
4d10d76
@f0ssel
fix: address chat project sharing API review feedback
c0c39cb
@f0ssel
refactor(coderd/database): batch chat project deletion queries
8cc6c4e
@f0ssel
fix: address second round of chat project sharing review feedback
43b9800
@f0ssel
fix(coderd): address chat project sharing database review feedback
2ed5a28
@f0ssel
Merge branch 'f0ssel/chat-projects-acl-db' into f0ssel/chat-projects-acl
d7d1763
@f0ssel
docs(docs/ai-coder/agents): note chat project sharing in the disable …
acb913e
…flag
@f0ssel
Merge branch 'f0ssel/chat-projects-acl-db' into f0ssel/chat-projects-acl
fd8391d
@f0ssel
docs(coderd/x/chatd): document chat project sharing and deletion
c3e4698
@f0ssel
docs(coderd): clarify the chat project cap covers owned projects only
21e9b9b
@f0ssel
fix: lock project sub-chats in a separate statement and address review
5044782
@f0ssel
Merge branch 'f0ssel/chat-projects-acl-db' into f0ssel/chat-projects-acl
b8127e7
@f0ssel
fix: address chat project sharing API review
75fc512
@f0ssel
fix: share the chat project delete lock sequence and address review
f35d6fa
@f0ssel
Merge branch 'f0ssel/chat-projects-acl-db' into f0ssel/chat-projects-acl
a42b8c7
@f0ssel
fix: restrict chat project grants to sharees and address review
4dc8d17
@f0ssel
fix(coderd): offer chat project sharing only to callers who can grant
15d611f
@f0ssel
refactor(coderd/database): lock a whole chat project for deletion
02fc436
@f0ssel
test(coderd/database): fix chat project delete test wording
c4a9a0f
@f0ssel
Merge branch 'f0ssel/chat-projects-acl-db' into f0ssel/chat-projects-acl
48d7d4f
@f0ssel
feat: delete chat projects in one transaction, stopping running chats
508f87f
@f0ssel
test(coderd): drop an empty line
10ab142
@f0ssel
refactor(coderd/database): own the chat project delete transaction
e38f922
@f0ssel
Merge branch 'f0ssel/chat-projects-acl-db' into f0ssel/chat-projects-acl
1142f73
@f0ssel
refactor(coderd/x/chatd): use the shared chat project delete transaction
aff1f30
coder-agents-review[bot]
coder-agents-review Bot reviewed Oct 19, 2026
View reviewed changes

@coder-agents-review coder-agents-review Bot left a comment

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Round 5 of the chat project delete review: the round 4 fixes hold (several checked by breaking the line and rerunning the test), the onSuccess placement dispute is closed, and this round adds 1 P2, 1 P3, 9 P4, and 2 Nit findings.

Most of these are tests and docs that did not follow the round 4 lock changes: the skill lock mode, the memory writer lock, and the docs that describe them.

🤖 This review was automatically generated with Coder Agents.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread site/src/pages/AgentsPage/components/ChatsSidebar/ChatsSidebar.tsx Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread coderd/database/queries/skills.sql Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread coderd/x/chatd/chattool/memory.go Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread coderd/x/chatd/chattool/memory.go Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread coderd/x/chatd/chattool/memory.go Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread coderd/database/queries/chatprojects.sql Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread coderd/x/chatd/chatstate/family.go Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread coderd/x/chatd/chatstate/family.go Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread coderd/x/chatd/chattool/memory.go Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread coderd/x/chatd/memory.go Resolved

Uh oh!

There was an error while loading. Please reload this page.

@f0ssel
fix: read the open chat before deleting its project and cover the ski…
b4c949e
…ll lock
@f0ssel

f0ssel commented Oct 19, 2026

Copy link
Copy Markdown
Member Author

/coder-agents-review

coder-agents-review[bot] reacted with rocket emoji
All reactions
  • 🚀 1 reaction

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

coder-agents-review[bot]
coder-agents-review Bot reviewed Oct 19, 2026
View reviewed changes

@coder-agents-review coder-agents-review Bot left a comment

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Round 6 of the chat project delete review: the round 5 fixes hold (checked by mutation), the memory lock dispute is closed, and this round adds 1 P2, 4 P4, and 1 Nit, plus one item reopened below.

Reopened: the ConsolidateMemory deleted-project response still has no test (reply on the memory.go:532 thread). If that thread still shows as resolved, it is because unresolving it failed again; the reply is current.

Two of the new findings are in the lock-wait probes of the new race tests, which count waiters from parallel subtests and can let a subtest pass without testing its own lock.

🤖 This review was automatically generated with Coder Agents.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread coderd/x/chatd/chatstate/family.go Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread coderd/database/querier_test.go Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread coderd/database/querier_test.go Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread site/src/pages/AgentsPage/components/ChatsSidebar/ChatsSidebar.tsx Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread coderd/x/chatd/chattool/memory.go Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread coderd/x/chatd/chatstate/family.go Resolved

Uh oh!

There was an error while loading. Please reload this page.

@f0ssel
test: scope lock-wait probes and cover sidebar delete navigation
150a804
@f0ssel

f0ssel commented Oct 19, 2026

Copy link
Copy Markdown
Member Author

/coder-agents-review

coder-agents-review[bot] reacted with rocket emoji
All reactions
  • 🚀 1 reaction

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

coder-agents-review[bot]
coder-agents-review Bot reviewed Oct 19, 2026
View reviewed changes

@coder-agents-review coder-agents-review Bot left a comment

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Round 7 of the chat project delete review: every round 6 finding is verified fixed, most by breaking the fixed line and rerunning its test, and reviewers found no production defects. This round adds 2 P2 comment findings, 2 P4 test gaps, and 1 Nit.

🤖 This review was automatically generated with Coder Agents.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread coderd/x/chatd/chattool/memory.go Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread coderd/database/querier_test.go Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread site/src/pages/AgentsPage/components/ChatsSidebar/ChatsSidebar.test.tsx Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread coderd/exp_chats.go Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread coderd/exp_chats.go Resolved

Uh oh!

There was an error while loading. Please reload this page.

@f0ssel
test(coderd): cover move-out and unarchive after a mid-request projec…
36ba869
…t delete
@f0ssel

f0ssel commented Oct 19, 2026

Copy link
Copy Markdown
Member Author

/coder-agents-review

coder-agents-review[bot] reacted with rocket emoji
All reactions
  • 🚀 1 reaction

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

coder-agents-review[bot]
coder-agents-review Bot reviewed Oct 19, 2026
View reviewed changes

@coder-agents-review coder-agents-review Bot left a comment

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Round 8 of the chat project delete review: every round 7 finding is verified fixed, the two new 404 tests fail when their branches are removed, and reviewers found no production defects. This round adds 1 P2 test comment finding and 3 P4 cleanups.

🤖 This review was automatically generated with Coder Agents.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread coderd/chat_projects_test.go Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread coderd/x/chatd/chattool/memory.go Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread coderd/database/querier_test.go Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread coderd/exp_chats.go Resolved

Uh oh!

There was an error while loading. Please reload this page.

coder-agents-review[bot]
coder-agents-review Bot reviewed Oct 19, 2026
View reviewed changes

@coder-agents-review coder-agents-review Bot left a comment

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Round 9 is blocked: the head is still 36ba869, the commit reviewed in round 8, and none of the four round 8 threads has a reply, so no reviewers ran.

Needed before the next round, as a fix in this PR or a reply on the thread explaining why not:

  • coderd/chat_projects_test.go:356 (P2, CRF-144): the table comment says "source project" and "the chat is gone too", which are wrong for the unarchive case.
  • coderd/x/chatd/chattool/memory.go:53 (P4, CRF-145): the writeProjectMemories doc does not say what the returned int64 is.
  • coderd/database/querier_test.go:2376 (P4, CRF-146): lockWaitCount returns 0 when its query fails, so a broken probe times out as a locking regression.
  • coderd/exp_chats.go:1736 and :2945 (P4, CRF-147): the ForeignKeyChatsProjectID check is unreachable now that create and move hold the project FOR SHARE.

No production defects are open.

🤖 This review was automatically generated with Coder Agents.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@f0ssel
chore(coderd): drop unreachable project FK checks and tighten test he…
6a77bb8
…lpers
@f0ssel

f0ssel commented Oct 19, 2026

Copy link
Copy Markdown
Member Author

/coder-agents-review

coder-agents-review[bot] reacted with rocket emoji
All reactions
  • 🚀 1 reaction

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

coder-agents-review[bot]
coder-agents-review Bot reviewed Oct 19, 2026
View reviewed changes

@coder-agents-review coder-agents-review Bot left a comment

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Round 10 of the chat project delete review: all four round 8 findings are verified fixed in 6a77bb8, and the affected Postgres and HTTP tests pass. Reviewers found no production defects. This round adds 1 Nit.

Out of scope (needs a ticket or explicit acceptance by a human):

  • coderd/exp_chats.go:2944: "between the check and the move" does not name validateChatProjectSelection, which runs about 200 lines earlier; the comment and its sibling at line 1735 exist at the base commit.

🤖 This review was automatically generated with Coder Agents.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread coderd/x/chatd/chattool/memory.go Resolved

Uh oh!

There was an error while loading. Please reload this page.

@f0ssel
docs(coderd/x/chatd/chattool): rewrap writeProjectMemories doc
7145b4a
@f0ssel

f0ssel commented Oct 19, 2026

Copy link
Copy Markdown
Member Author

/coder-agents-review

coder-agents-review[bot] reacted with rocket emoji
All reactions
  • 🚀 1 reaction

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

coder-agents-review[bot]
coder-agents-review Bot reviewed Oct 19, 2026
View reviewed changes

@coder-agents-review coder-agents-review Bot left a comment

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Round 11 of the chat project delete review: CRF-149 is verified fixed in 7145b4a. A wildcard reviewer found two P4 issues in code that has not changed since round 4, both about sub-chats carrying their root's project.


coderd/x/chatd/project_instructions.go:17

P4 [CRF-153] "Subagent chats do not carry a project" is false after this PR. (Knov)

Migration 000630 backfills sub-chats, its trigger sets their project on insert, and SetFamilyProject now moves every member, so a sub-chat's own ProjectID is the source of truth. Rewrite the sentence to say sub-chats carry their root's project. Once CRF-152's trigger is in place, the root lookup at lines 29 to 41 only costs one GetChatByID per turn for sub-chats outside a project and can be removed.

🤖

🤖 This review was automatically generated with Coder Agents.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread coderd/database/migrations/000630_chat_project_deletion.up.sql Resolved

Uh oh!

There was an error while loading. Please reload this page.

@f0ssel
refactor(coderd/x/chatd): read project instructions from the sub-chat…
ce93a26
…'s own project
@f0ssel

f0ssel commented Oct 19, 2026

Copy link
Copy Markdown
Member Author

/coder-agents-review

coder-agents-review[bot] reacted with rocket emoji
All reactions
  • 🚀 1 reaction

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

coder-agents-review[bot]
coder-agents-review Bot reviewed Oct 19, 2026
View reviewed changes

@coder-agents-review coder-agents-review Bot left a comment

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Round 12 of the chat project delete review: CRF-153 is verified fixed in ce93a26, and the CRF-152 defense is accepted. This round adds 2 P4 cleanups in the code ce93a26 touched.

🤖 This review was automatically generated with Coder Agents.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread coderd/x/chatd/project_instructions_internal_test.go Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread coderd/x/chatd/project_instructions.go Resolved

Uh oh!

There was an error while loading. Please reload this page.

@f0ssel
refactor(coderd/x/chatd): drop redundant project instructions local a…
3c6508d
…nd test
@f0ssel

f0ssel commented Oct 19, 2026

Copy link
Copy Markdown
Member Author

/coder-agents-review

coder-agents-review[bot] reacted with rocket emoji
All reactions
  • 🚀 1 reaction

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

coder-agents-review[bot]
coder-agents-review Bot reviewed Oct 19, 2026
View reviewed changes

@coder-agents-review coder-agents-review Bot left a comment

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Round 13 of the chat project delete review: CRF-156 and CRF-157 are verified fixed in 3c6508d, and TestResolveProjectInstructions passes. No new findings in the PR's changes, and no findings are open.

Out of scope (needs a ticket or explicit acceptance by a human):

  • coderd/x/chatd/project_instructions.go:20: the doc's second paragraph repeats the failure cases from the usableChatProject doc (projects.go:51); the paragraph is unchanged from the base commit.

🤖 This review was automatically generated with Coder Agents.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
jaaydenh added a commit that referenced this pull request Oct 20, 2026
@jaaydenh
revert(site/src/pages/AgentsPage): drop the root-chat project fallbac…
b0a3bbc
…k for subagent chats

The subagent chat fallback from #30840 is dropped; #30683 gives subagent
chats their root chat's project_id, so chat.project_id covers them.
nickvigilante
nickvigilante reviewed Oct 20, 2026
View reviewed changes

@nickvigilante nickvigilante left a comment

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Docs LGTM

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
jaaydenh added a commit that referenced this pull request Oct 21, 2026
@jaaydenh
feat: load project skills in chats (#30838)
3216580
Chats that belong to a chat project now get the project's skills, next
to personal, organization and workspace skills. They show up in the
model's skill list, load through `read_skill`, and appear in a "Project
skills" group in the `/` menu.

- `coderd/x/skills` adds the `project` source. `MergeSkills` now takes a
list of sources in merge order (personal, organization, project,
workspace). Bare names stay bare unless two sources share a name, in
which case they get `project/<name>` style aliases.
- chatd loads project skills only when the chat owner owns the project
or the project is shared with them. Role grants don't count. This is the
same `usableChatProject` check that project instructions and memory use,
and one check per turn covers both instructions and skills. Disabled
skills are skipped. A failed load logs a warning and the turn continues
without them. Subagents use their root chat's project; that lookup is
now a helper shared with project instructions.
- The site loads project skills for the composer on the project page and
in project chats, behind the `chat-projects` experiment. `/clear` and
`/compact` defer to a project skill with the same name, as they already
do for other sources. When the user can't use the project, the site
treats it as no project skills, like chatd, so those commands keep
working and the `/` menu shows no retry prompt for project skills. That
covers a 403 or 404 from the project skills request and a project
missing from the user's project list, which holds only owned and shared
projects, so an administrator role that can read the project doesn't
count. Other failures are retried and leave the list unknown. A cached
project list is also unknown while it refetches or after a failed
refetch, so a share revoked since it was cached keeps those commands
pending instead of deferring to stale project skills.
- Docs gain a "Project skills" section in the extending agents page.
`coderd/x/chatd/ARCHITECTURE.md` gains a paragraph on project skills.

Dogfood UAT on this branch passed: project skills appear in the project
page `/` menu and in project chats, `read_skill` loads them, disabled
and deleted skills report not found, chats outside the project don't see
them, and a subagent gets them through its root chat. The site reads
project skills from the chat's own `project_id`, so subagent chats show
them in the composer once sub-chats carry their root's project (#30683).

| Project page `/` menu | `read_skill` in a project chat |
| --- | --- |
| <img alt="Project skills group in the project page slash menu"
src="https://raw.githubusercontent.com/coder/coder/assets/pr-30838-project-skills/pr/project-page-slash-menu.png"
width="600" /> | <img alt="read_skill loading a project skill in a
project chat"
src="https://raw.githubusercontent.com/coder/coder/assets/pr-30838-project-skills/pr/project-chat-read-skill.png"
width="600" /> |

Stack (merge top to bottom):
- #30838 👈
- #30854
- #30855
- #30856
- #30861
- #30880
- #30881
- #30882
- #30884
- #31122
@f0ssel f0ssel mentioned this pull request Oct 26, 2026
docs(docs): add Coder Agents projects page #30684
Merged
f0ssel added a commit that referenced this pull request Oct 28, 2026
@f0ssel
docs(docs): add Coder Agents projects page (#30684)
a135a34
Adds `docs/ai-coder/agents/projects.md`, a short page for Coder Agents
projects, linked under Coder Agents as early access.

The page covers:
- What a project provides.
- Ownership: organization-scoped, private to the creator, 100 per user,
audited.
- Creating, editing, and deleting projects.
- Adding chats to a project: project page, composer picker, **Move to
project**, drag onto a folder, and `PATCH /api/v2/chats/{chat}`.
- Instructions, with a link to the existing Project skills section for
skills.
- Memory: tools, behavior, limits, and the API.

It also links `extending-agents.md#project-skills` to the new page.

The page documents projects as early access with no experiment flag.
Merge it only once `chat-projects` no longer gates the feature. The
memory and skill APIs it mentions still live under `/api/experimental`.

Project sharing is left out until its UI lands (#31246, #31245).

Open PRs that will make parts of this page stale:
- #30683 changes project deletion.
- #30754, #30756, and #30898 add project templates.

> Generated by Coder Agents on behalf of @f0ssel.
@f0ssel f0ssel closed this Oct 28, 2026
@github-actions github-actions Bot locked and limited conversation to collaborators Oct 28, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Reviewers

@nickvigilante nickvigilante nickvigilante left review comments
+1 more reviewer
@coder-agents-review coder-agents-review[bot] coder-agents-review[bot] requested changes
Reviewers whose approvals may not affect merge requirements

Uh oh!

There was an error while loading. Please reload this page.

Assignees

@f0ssel f0ssel

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Uh oh!

There was an error while loading. Please reload this page.

2 participants

@f0ssel @nickvigilante
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.