Skip to content

Default ClientMode::Empty to no built-in skills - #2410

Merged
roji merged 6 commits into
mainfrom
roji-sdk-empty-included-builtin-skills
Aug 26, 2026
Merged

Default ClientMode::Empty to no built-in skills#2410
roji merged 6 commits into
mainfrom
roji-sdk-empty-included-builtin-skills

Conversation

@roji

@roji roji commented Aug 26, 2026

Copy link
Copy Markdown
Collaborator

This is the SDK side of https://github.com/github/copilot-agent-runtime/pull/16774, defaulting includedBuiltinSkills to empty when ClientMode::Empty is specified while preserving an explicit caller allowlist.

Related to https://github.com/github/copilot-sdk-internal/issues/237

Summary

ClientMode::Empty should provide the same deny-by-default, explicit-opt-in behavior for runtime-bundled skills that it provides for other built-in capabilities. Now that the runtime protocol exposes includedBuiltinSkills, this change applies that policy in the fail-closed post-create and post-resume options patch.

The behavior is consistent across Node.js, Python, Go, .NET, Java, and Rust:

  • Empty mode defaults includedBuiltinSkills to [].
  • A caller-provided built-in skill allowlist overrides that default on create and resume.
  • Custom skills remain independently available through enableSkills and skillDirectories.
  • Copilot CLI mode omits the field unless the caller explicitly supplies it.
  • Session cleanup remains fail-closed when the options patch fails.

Focused tests cover default isolation, explicit allowlists on create and resume, custom skill opt-in, wire serialization, and Copilot CLI omission/pass-through. The skills and multi-tenancy documentation describe the deny-by-default behavior.

Validation

  • Node.js: typecheck, formatting, 6 focused tests
  • Python: Ruff, 69 tests
  • Go: targeted Empty-mode tests
  • .NET: 7 targeted Empty-mode tests
  • Java: Spotless, 9 targeted tests
  • Rust: formatting, 13 targeted tests