Skip to content

feat: load project skills in chats - #30838

Open
jaaydenh wants to merge 26 commits into
mainfrom
chat-project-skills/chatd
Open

jaaydenh wants to merge 26 commits into
mainfrom
chat-project-skills/chatd

Conversation

@jaaydenh

@jaaydenh jaaydenh commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

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 reads project skills with the chat owner's own permissions, so they follow project access, and skips disabled skills. 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.
  • Docs gain a "Project skills" section in the extending agents page. coderd/x/chatd/ARCHITECTURE.md only gets a TODO for the author.

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 side of subagent chats inheriting their root chat's project is in #30840.

Project page / menu read_skill in a project chat
Project skills group in the project page slash menu read_skill loading a project skill in a project chat

Stack (merge top to bottom):

Add sqlc queries for skills owned by a chat project and authorize them
through the parent project in dbauthz: reading needs chat_project:read
and writing needs chat_project:update. Skill.RBACObject keeps denying
project rows so any unwrapped path fails closed.

Add the chat_project_skill audit resource type and
AuditableChatProjectSkill so the upcoming project skill API can record
audit entries.
Add experimental routes to list, create, read, update and delete skills
on a chat project. Reading needs read on the project and writes need
update; callers who lack the permission get a 404 like the project
instructions routes. The handlers reuse the shared skill create and
update path, map the per-project cap and name index to 409, and audit
every write as a chat_project_skill.

Add matching ExperimentalClient methods.
Chats in a project now get the project's enabled skills as a new
"project" skill source, read as the chat owner each turn. Subagents use
the root chat's project. read_skill loads project skill bodies, and
MergeSkills takes sources in merge order so new sources do not change
its signature.
The "/" menu offers the skills of the chat's project, next to personal,
organization and workspace skills, and /clear and /compact defer to a
project skill with the same name. Documents project skills.
…g in the slash menu

Organization and project skills load through one hook, and the menu
renders its skill groups from one ordered list. Adds project loading and
error stories.
Cover the project-only skill tool check in the integration test, the
project skill body loader's not-found mapping, and the chat-projects
experiment gate in the composer.
@github-actions

github-actions Bot commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

Docs preview

Check off each page once it's been reviewed. If a page changes in a later push, its checkbox clears automatically so it gets a fresh look. Pages not yet wired into the docs navigation aren't listed here.

@jaaydenh

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 15, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-15T12:06:34.392175Z 2a72a92 Manual request
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 681b37465f

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread site/src/pages/AgentsPage/AgentChatPage.tsx
Comment thread coderd/x/chatd/ARCHITECTURE.md
Comment thread site/src/pages/AgentsPage/components/AgentChatInput.test.tsx Outdated
@jaaydenh

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Nice work!

Reviewed commit: 2a72a92635

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@pr-queue-manager
pr-queue-manager Bot requested a review from jakehwll October 16, 2026 12:13

@nickvigilante nickvigilante left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Docs LGTM

# Conflicts:
#	coderd/x/chatd/chatd.go
#	coderd/x/chatd/generation_preparer.go
Add experimental routes to list, create, read, update and delete skills
on a chat project. Reading needs read on the project and writes need
update; callers who lack the permission get a 404 like the project
instructions routes. The handlers reuse the shared skill create and
update path, map the per-project cap and name index to 409, and audit
every write as a chat_project_skill.

Add matching ExperimentalClient methods.
jaaydenh added a commit that referenced this pull request Oct 18, 2026
Adds the storage and authorization layer for chat project skills. The
`skills` table already allows a `project_id` owner (migration 000621);
this adds the queries for it and authorizes them through the parent chat
project, the same way project instructions work.

- New queries in `skills.sql`: insert, get by name, list metadata,
update (COALESCE on description, content and enabled), delete, and
`GetProjectSkillByIDForUpdate` for the shared update lock.
- dbauthz checks `chat_project:read` on the project for reads and
`chat_project:update` for writes. `authorizeChatProjectInstructions`
became `authorizeChatProjectConfig`, shared by instructions and skills.
`Skill.RBACObject()` still denies project rows so nothing reaches them
without going through the project.
- Audit: new `chat_project_skill` resource type (enum-only migration
000624), `AuditableChatProjectSkill`, and the usual
diff/request/table/FriendlyString/AuditFilter wiring. The API that emits
these entries comes in the next PR.

Stack (merge top to bottom):
- #30826 👈
- #30827
- #30838
- #30840
- #30854
- #30855
- #30856
- #30861
- #30880
- #30881
- #30882
- #30884
Base automatically changed from chat-project-skills/api to main October 18, 2026 06:16
jaaydenh added a commit that referenced this pull request Oct 18, 2026
Adds experimental routes for managing a chat project's skills under
`/api/experimental/organizations/{organization}/chats/projects/{project}/skills`:
list, create, get, update (PATCH) and delete by skill name.

The handlers reuse the shared skill create and update path from the
personal and organization skill APIs. Reading needs `chat_project:read`
on the project and writing needs `chat_project:update`; callers without
access get 404, matching the project instructions routes. Duplicate
names and the 100-skill-per-project cap return 409. Writes are audited
as `chat_project_skill` with the skill name as the target. The SDK gains
the matching `ExperimentalClient` methods.

Stack (merge top to bottom):
- #30826
- #30827 👈
- #30838
- #30840
- #30854
- #30855
- #30856
- #30861
- #30880
- #30881
- #30882
- #30884

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants