CopilotAtelier
5.0.0-preview0011
Portable GitHub Copilot customization library. Ships custom agents, auto-applied instructions, on-demand skills, prompt templates, and lifecycle hooks, and installs them into the well-known ~/.copilot discovery folders that VS Code, the GitHub Copilot CLI, and Claude Code read.
Minimum PowerShell version
5.1
See the version list below for details.
Installation Options
Owners
Copyright
(c) raandree. All rights reserved.
Package Details
Author(s)
- raandree
Tags
Copilot GitHubCopilot VSCode Agents Skills Prompts Instructions Hooks AI Windows Linux MacOS
Functions
Get-CopilotAtelierVersion Install-CopilotAtelier Update-CopilotAtelier
Dependencies
This module has no dependencies.
Release Notes
## [5.0.0-preview0011] - 2026-09-04
### Removed
- **The `.github/hooks` smoke-test probe, which had been failing on every turn since it was committed** (2026-09-02). `stop-probe.json` and `Test-HookLoaded.ps1` were scratch: a `Stop` hook that appended one line to `%TEMP%\workspace-hook-probe.log` to prove the workspace hook location loads at all. They answered that question on 2026-08-10 and the answer is written into [`com.github.copilot/hooks/README.md`](com.github.copilot/hooks/README.md) and the changelog entry below — the files themselves had no further job.
They were not merely idle. The `windows` override hardcoded `D:\Git\CopilotAtelier\.github\hooks\Test-HookLoaded.ps1`, the drive the repository sat on when the probe was written, and on Windows that override wins. Every turn on any other machine ended with *"The argument … to the -File parameter does not exist"*. The POSIX `command` was no better in principle: `./.github/hooks/Test-HookLoaded.ps1` is relative, and the same README says VS Code does not guarantee the working directory, which is why every shipped hook resolves its own path.
Nothing caught it because nothing looked. The `Hook configuration` suite in [`tests/Hooks.Tests.ps1`](tests/Hooks.Tests.ps1) — which asserts exactly this, that a hook command resolves to a script that exists and carries no shell-interpolated token — is scoped to `com.github.copilot/hooks/hooks.json`. A second hook file one directory away was outside every gate the repository owns. That suite now enumerates every tracked `*.json` sitting directly inside a folder named `hooks` and requires the shipped configuration to be the only one, so the next stray hook file fails the build instead of the chat. The guard was proven by planting one and watching it go red.
### Added
- **Interactive browser access for every web-capable Custom agent**
(2026-09-04). Replace the remaining preview-only `openSimpleBrowser` entries
with VS Code's built-in `browser` tool while keeping the Contoso profile
browser-free.
- **Semantic Custom agent contract tests** (2026-09-04). Validate every
handoff target, required delegation surface, DevOps composition contract,
role-specific Memory Bank namespace, browser tool, cross-client README
caveat, and the 30,000-character prompt limit with a shrink-only baseline for
the four existing oversized agents.
- **Interactive web-application troubleshooting in the Software Engineer agent** (2026-09-04). Replace the preview-only `openSimpleBrowser` entry with VS Code's built-in `browser` tool set so the agent can navigate and exercise its product, inspect page content, console errors, and screenshots, verify affected desktop and mobile viewports, fix defects, and repeat the original flow. Browser checks default to agent-opened ephemeral sessions on loopback origins; authenticated state is available only when the user explicitly shares a tab. Session evidence complements rather than replaces repository regression tests, and the Contoso overlay continues to omit browser access.
- **A Prompt-led specification completion workflow for any spec-driven
repository** (2026-09-02). `/complete-specifications` inventories acceptance
criteria, milestone exits, Decision gates, local gaps, test evidence, and an
optional local issue snapshot into a frozen closure matrix. A restricted
controller creates one isolated work item per missing behavior, dispatches one
test-first implementer for each, and sends every result to a fresh read-only
reviewer before integration.
Four percentages prevent "implemented" from silently meaning "proven":
implementation, passing unit and integration tests, live verification, and
total specification closure each keep their own numerator and denominator.
Every non-duplicate engineering row stays in the primary denominator. Live
validation defaults to off; enabling it requires a direct containment-profile
digest and a hash-pinned, data-isolated live runner. A pinned append-only
appender hash-chains review and accounting records outside repository
processes' writable roots, and changed build commands cannot run until their
control review passes. Shared and production mutation is prepared as a
supervised procedure and never counted as live evidence. The package has no
web, issue-mutation, or push path, caps work items, Custom agent calls,
concurrency, fix rounds, and run time, and leaves every branch local.
- **A session clock, so Post-flight closes with the chat's measured elapsed duration** (2026-09-02). The user asked for two more facts at the end of the checklist: when the turn closed, and how long the whole chat had run. The first half already existed — [`com.github.copilot/hooks/scripts/Add-SessionContext.ps1`](com.github.copilot/hooks/scripts/Add-SessionContext.ps1) injects `Session started at <UTC>` and Pre-flight opens every reply with it — which made this look like a formatting change.
It is not, because a model has no clock. The opening timestamp is right only because a hook measured it; a closing one composed by the model would drift by the length of the turn, which is the very quantity being reported, and after a compaction the model no longer knows when the session began. The obvious fix is unavailable: VS Code's `UserPromptSubmit` supports the common output format only, with no `additionalContext` field — the same limitation already documented for `PreCompact`. The events that *can* inject context are `SessionStart`, which fires once, and `PreToolUse`/`PostToolUse`, which would spend tokens on every tool call of every turn and fold a timing concern into the security guardrail.
So the number is measured on disk and read back by the one party that can print it inside the reply. `Add-SessionContext` now also writes the session start to `<LocalApplicationData>/CopilotAtelier/sessions/session-<key>.json` — on disk, so it survives compaction — and hands the agent the absolute path of a new reader, [`com.github.copilot/hooks/scripts/Get-SessionElapsed.ps1`](com.github.copilot/hooks/scripts/Get-SessionElapsed.ps1). The agent runs that reader as the last action of the turn and copies its single line verbatim into the checklist: `POST-FLIGHT elapsed: 16m (started 09:15 UTC, measured 09:31 UTC, turn 3)`. [`com.github.copilot/rules/postflight.instructions.md`](com.github.copilot/rules/postflight.instructions.md) gains a *Session clock* section forbidding the model from composing, reformatting, or recomputing either number, and telling it to report the duration as unavailable rather than estimate one when the reader is gone.
The first attempt printed the line from the `Stop` hook, and was wrong in a way only a screenshot revealed: VS Code renders a hook `systemMessage` as a detached, collapsed *Warning from Stop hook* box, not as part of the reply. The number was therefore beside the checklist rather than in it, and the user asked again. A hook cannot write inside the model's output and the model cannot read a clock, so the shipped split is the only arrangement that satisfies both. [`com.github.copilot/hooks/scripts/Write-SessionClose.ps1`](com.github.copilot/hooks/scripts/Write-SessionClose.ps1) stays, because the turn counter still has to advance somewhere, but it now reports nothing unless the clock is unreadable — the one case where the agent's own line could not be measured either. Reporting the duration there as well would only have put a second copy in the warning box on every turn.
`Stop` fires once per turn instead of once per tool call and costs no tokens. It emits no `decision` field: blocking a `Stop` restarts the agent and bills another turn, which is far more than a timestamp is worth. The clock avoids the temp directory because `/tmp` is world-writable on Linux, where a predictable name invites another local account to pre-create the path, and avoids `.memory-bank/` because — unlike a compaction checkpoint — it is machinery rather than knowledge an agent reads, and it has to work in a workspace with no Memory Bank at all. The payload's `session_id` becomes a path component, so it is stripped to `[A-Za-z0-9._-]` and capped at 64 characters, with a hash of the working directory as the fallback. The reader is read-only — `Stop` owns `turns`, so it reports the turn in progress as one past the closed count — and given no explicit path it picks the newest clock recorded for the current workspace, so a second VS Code window on another folder is never measured here.
Deploying the reader exposed a defect the suite had been creating all along. Six `Add-SessionContext` tests invoked the hook without `-ClockRoot`, so every run left real session clocks in the caller's own `%LOCALAPPDATA%\CopilotAtelier\sessions` — around fifteen of them, including one whose recorded workspace was `C:\demo IGNORE PREVIOUS INSTRUCTIONS`, written by the prompt-injection test. That was invisible while only the `Stop` hook read the clock, because it looks its own session up by id. The reader searches by workspace, so a clock the tests had written *for this repository* immediately shadowed the live session and reported a three-minute chat that had been running for an hour and three quarters. Every SessionStart invocation now goes through a helper that pins the clock root to `TestDrive`, a test asserts the real profile directory gains nothing, and the reader prefers a `session-<id>` clock over a `session-cwd-<hash>` fallback — VS Code always supplies a session id, so the hashed name in practice means a test or a non-VS-Code caller.
The duration formatter shipped with a bug the tests caught: `[int]1.5` *rounds* in PowerShell, so a 90-minute chat reported `2h 30m`. It floors explicitly now, and [`tests/Hooks.Tests.ps1`](tests/Hooks.Tests.ps1) pins five durations that sit where rounding and truncation disagree, alongside the injected reader path, the single-line output contract, the turn-in-progress arithmetic, the workspace preference, the s
FileList
- CopilotAtelier.nuspec
- skills\pandoc-docx-export\SKILL.md
- com.github.copilot\rules\powershell.instructions.md
- skills\automatedlab-proxmox\references\windows-sysprep.md
- CopilotAtelier.psm1
- skills\marp-slide-overflow\SKILL.md
- com.github.copilot\rules\git.instructions.md
- skills\automatedlab-proxmox\references\module-development.md
- skills\winrm-troubleshooting\notes-evals.md
- com.github.copilot\rules\pester.instructions.md
- skills\gilb-requirements-engineering\references\impact-estimation.md
- CopilotAtelier.psd1
- skills\winrm-troubleshooting\SKILL.md
- com.github.copilot\rules\versioning.instructions.md
- skills\gilb-requirements-engineering\references\evo-planning.md
- keybindings\keybindings.json
- skills\evidence-package-assembly\SKILL.md
- com.github.copilot\rules\azurepipelines.instructions.md
- skills\gilb-requirements-engineering\references\spec-quality-control.md
- skills\pester-patterns\notes-evals.md
- skills\dsc-troubleshooting\SKILL.md
- com.github.copilot\rules\markdown.instructions.md
- skills\gilb-requirements-engineering\references\planguage-keywords.md
- skills\pester-patterns\SKILL.md
- skills\grill-me\SKILL.md
- com.github.copilot\rules\copilot-authoring.instructions.md
- skills\datum-configuration\references\dscworkshop-reference.md
- skills\windows-gui-screenshot-capture\notes-evals.md
- skills\send-outlook-email\SKILL.md
- com.github.copilot\rules\powershell-execution-safety.instructions.md
- skills\datum-configuration\references\datum-yml-reference.md
- skills\windows-gui-screenshot-capture\SKILL.md
- skills\agent-evals\SKILL.md
- skills\pester-patterns\references\mocking-external-dependencies.md
- skills\datum-configuration\references\common-tasks.md
- skills\german-tax-research\SKILL.md
- skills\elster-form-capture\SKILL.md
- skills\pester-patterns\references\testing-powershell-constructs.md
- skills\datum-configuration\references\projectdagger-patterns.md
- skills\memory-bank\notes-evals.md
- skills\mecm-dsc-deployment\SKILL.md
- skills\pester-patterns\references\migrating-pester-v4-to-v5.md
- skills\skill-creator\references\authoring-patterns.md
- skills\memory-bank\SKILL.md
- com.github.copilot\hooks\hooks.json
- skills\pester-patterns\scripts\Find-PesterV4Pattern.ps1
- skills\skill-creator\references\scripts-and-evaluation.md
- skills\automatedlab-deployment\SKILL.md
- com.github.copilot\hooks\README.md
- skills\windows-gui-screenshot-capture\references\engine-recipes.md
- skills\long-running-job-monitor\references\out-of-band-verification.md
- skills\sampler-migration\SKILL.md
- com.github.copilot\agents\tax-researcher.agent.md
- skills\windows-gui-screenshot-capture\references\external-win32-executables.md
- skills\long-running-job-monitor\references\heartbeat-protocol.md
- skills\sampler-framework\SKILL.md
- com.github.copilot\agents\software-engineer.agent.md
- skills\windows-gui-screenshot-capture\scripts\WindowCapture.ps1
- skills\long-running-job-monitor\scripts\Start-JobHeartbeat.ps1
- skills\outlook-email-export\SKILL.md
- com.github.copilot\agents\spec-work-implementer.agent.md
- skills\windows-gui-screenshot-capture\scripts\DialogCapture.ps1
- skills\long-running-job-monitor\scripts\Start-JobMonitor.ps1
- skills\xlsx-to-markdown\SKILL.md
- com.github.copilot\agents\career-coach.agent.md
- skills\german-tax-research\references\vorlagen.md
- skills\long-running-job-monitor\scripts\Start-DetachedPowerShell.ps1
- skills\subagent-dispatch\SKILL.md
- com.github.copilot\agents\technical-writer.agent.md
- skills\german-tax-research\references\belegaufforderung-antwort.md
- skills\brand-logo-system\scripts\Export-BrandLogoSet.ps1
- skills\whisper-pyannote-transcription\diarize.py
- com.github.copilot\agents\spec-completion-reviewer.agent.md
- skills\german-tax-research\references\vermietung-und-afa.md
- skills\authenticated-web-extraction\bootstrap\package.json
- skills\whisper-pyannote-transcription\transcribe-segment.py
- com.github.copilot\agents\software-architect.agent.md
- skills\german-tax-research\references\kennzahlen.md
- skills\marp-slide-overflow\references\overflow-detector.md
- skills\whisper-pyannote-transcription\transcribe.py
- com.github.copilot\agents\research-analyst.agent.md
- skills\german-tax-research\references\werbungskosten-und-abzuege.md
- skills\marp-slide-overflow\references\png-verification.md
- skills\whisper-pyannote-transcription\SKILL.md
- com.github.copilot\agents\training-writer.agent.md
- skills\german-tax-research\references\fristen-und-verfahren.md
- skills\marp-slide-overflow\references\speaker-note-guard.md
- skills\pswritehtml-reporting\SKILL.md
- com.github.copilot\agents\qc-inspector.agent.md
- skills\german-tax-research\scripts\Get-SteuerFrist.ps1
- skills\marp-slide-overflow\references\mermaid-prerender.md
- skills\docx-to-markdown\SKILL.md
- com.github.copilot\agents\spec-completion-controller.agent.md
- skills\memory-bank\evals\routing-cases.json
- skills\winrm-troubleshooting\references\post-restart-readiness.md
- skills\german-legal-research\SKILL.md
- com.github.copilot\agents\troubleshooter.agent.md
- skills\memory-bank\scripts\Invoke-MemoryBankRouteSelectionEval.ps1
- skills\winrm-troubleshooting\references\advanced-diagnostics.md
- skills\pdf-to-markdown\SKILL.md
- com.github.copilot\agents\legal-researcher.agent.md
- skills\memory-bank\scripts\Test-MemoryBankHealth.ps1
- skills\evidence-package-assembly\scripts\merge-and-verify.py
- skills\microsoft-todo-tasks\SKILL.md
- com.github.copilot\agents\software-engineer-contoso.agent.md
- skills\memory-bank\scripts\Initialize-MemoryBank.ps1
- skills\evidence-package-assembly\scripts\Build-EvidencePackage.ps1
- skills\sampler-build-debug\SKILL.md
- com.github.copilot\agents\README.md
- skills\memory-bank\scripts\Test-MemoryBankRouting.ps1
- skills\agent-evals\references\eval-artifacts.md
- skills\doc-coauthoring\SKILL.md
- com.github.copilot\agents\security-reviewer.agent.md
- skills\automatedlab-deployment\references\troubleshooting.md
- skills\agent-evals\scripts\run-evals.ps1
- skills\test-driven-development\notes-evals.md
- com.github.copilot\agents\devops-training-writer.agent.md
- skills\automatedlab-deployment\references\post-deployment-operations.md
- skills\agent-evals\scripts\run-trigger-evals.ps1
- skills\test-driven-development\SKILL.md
- com.github.copilot\commands\lab-deploy.prompt.md
- skills\automatedlab-deployment\references\cmdlet-reference.md
- skills\agent-evals\assets\trigger-queries.pester-patterns.json
- skills\automatedlab-proxmox\notes-evals.md
- com.github.copilot\commands\brand-logo.prompt.md
- skills\automatedlab-deployment\references\vm-operations.md
- skills\agent-evals\assets\trigger-queries.elster-form-capture.json
- skills\automatedlab-proxmox\SKILL.md
- com.github.copilot\commands\usage.prompt.md
- skills\automatedlab-deployment\references\lab-management.md
- skills\agent-evals\assets\trigger-queries.test-driven-development.json
- skills\mcp-builder\SKILL.md
- com.github.copilot\commands\audit-case-file.prompt.md
- skills\automatedlab-deployment\references\networking.md
- skills\agent-evals\assets\trigger-queries.sampler-build-debug.json
- skills\gilb-requirements-engineering\SKILL.md
- com.github.copilot\commands\pr-description.prompt.md
- skills\automatedlab-deployment\references\roles-and-services.md
- skills\agent-evals\assets\trigger-queries.brand-logo-system.json
- skills\debugging-and-error-recovery\notes-evals.md
- com.github.copilot\commands\refactor.prompt.md
- skills\sampler-framework\references\troubleshooting.md
- skills\agent-evals\assets\trigger-queries.sampler-migration.json
- skills\debugging-and-error-recovery\SKILL.md
- com.github.copilot\commands\complete-specifications.prompt.md
- skills\sampler-framework\references\dsc-datum.md
- skills\agent-evals\assets\evals.output.sample.json
- skills\social-signal-sweep\SKILL.md
- com.github.copilot\commands\export-emails.prompt.md
- skills\sampler-framework\references\multi-module.md
- skills\agent-evals\assets\evals.sample.json
- skills\grammar-check\SKILL.md
- com.github.copilot\commands\module-scaffold.prompt.md
- skills\sampler-framework\references\dependency-resolution.md
- skills\agent-evals\assets\trigger-queries.copilot-usage-stats.json
- skills\copilot-usage-stats\SKILL.md
- com.github.copilot\commands\session-handoff.prompt.md
- skills\sampler-framework\references\vscode-integration.md
- skills\agent-evals\assets\trigger-queries.sample.json
- skills\datum-configuration\SKILL.md
- com.github.copilot\commands\peer-review.prompt.md
- skills\sampler-framework\references\ci-cd-pipelines.md
- skills\agent-evals\assets\trigger-queries.sampler-framework.json
- skills\skill-creator\SKILL.md
- com.github.copilot\commands\sync-project-emails.prompt.md
- skills\sampler-framework\references\build-yaml.md
- skills\agent-evals\assets\trigger-queries.skill-creator.json
- skills\code-review-and-quality\notes-evals.md
- com.github.copilot\commands\deadline-action-handoff.prompt.md
- skills\sampler-framework\references\community-files.md
- skills\elster-form-capture\references\feldkarte-est.md
- skills\code-review-and-quality\SKILL.md
- com.github.copilot\commands\code-review.prompt.md
- skills\sampler-framework\references\module-manifest.md
- com.github.copilot\hooks\scripts\Block-RemoteMutation.ps1
- skills\agent-security-review\SKILL.md
- com.github.copilot\rules\changelog.instructions.md
- skills\sampler-framework\references\custom-build-tasks.md
- com.github.copilot\hooks\scripts\Get-SessionElapsed.ps1
- skills\devils-advocate-review\SKILL.md
- com.github.copilot\rules\yaml.instructions.md
- skills\sampler-framework\references\gitversion.md
- com.github.copilot\hooks\scripts\Write-CompactionCheckpoint.ps1
- skills\long-running-job-monitor\notes-evals.md
- com.github.copilot\rules\postflight.instructions.md
- skills\sampler-framework\references\dependency-management.md
- com.github.copilot\hooks\scripts\Add-SessionContext.ps1
- skills\long-running-job-monitor\SKILL.md
- com.github.copilot\rules\json.instructions.md
- skills\sampler-framework\references\project-structure.md
- com.github.copilot\hooks\scripts\Write-SessionClose.ps1
- skills\create-outlook-draft\SKILL.md
- com.github.copilot\rules\preflight.instructions.md
- skills\sampler-framework\references\testing-patterns.md
- skills\authenticated-web-extraction\bootstrap\scripts\open.mjs
- skills\brand-logo-system\SKILL.md
- com.github.copilot\rules\ubiquitous-language.instructions.md
- skills\sampler-framework\references\bootstrap.md
- skills\authenticated-web-extraction\bootstrap\scripts\extract.mjs
- skills\authenticated-web-extraction\SKILL.md
- com.github.copilot\rules\csharp.instructions.md
- skills\sampler-framework\references\commands-reference.md
- skills\authenticated-web-extraction\bootstrap\tasks\dump-cookies.mjs
- skills\outlook-calendar-export\SKILL.md
- com.github.copilot\rules\sampler.instructions.md
- skills\automatedlab-proxmox\references\evidence-and-readiness.md
- skills\authenticated-web-extraction\bootstrap\tasks\check-logins.mjs
- skills\citation-integrity\SKILL.md