Copy the selected finished asset without generating or customizing source. This workflow writes one new project folder.
Use the bundled templates.json in this skill directory for the exact IDs,
project filenames, and three smoke-case IDs. A platform handoff supplies the
selected template ID:
| ID | Data and experience |
|---|---|
release-evidence-reviewer |
Markdown release evidence; contextual review chat and New review |
docs-qa |
Markdown Q&A; source-scoped questions and follow-ups (local lexical RAG) |
operations-data-analyst |
Mock CSV; ask questions, inspect KPIs, and change the dashboard view |
ticket-triage |
JSON inbox and Markdown policy; questions and temporary intake scenarios |
Honor the requested ID or unambiguous display name. An explicitly unknown
template is an error, not a request to invent one. If no template is specified,
preserve the release-evidence-reviewer default. The default target is ./<id>.
Do not ask domain/design questions or route to the custom builder.
Workflow
-
Require the .NET 10 SDK. Locate this skill's own directory and read the selected catalog entry. Run its package-free .NET file-based helper:
dotnet run --file <skill-directory>/scripts/copy-template.cs -- --template <id> --target <target>The copier accepts only a missing target or a real empty directory. It must succeed before continuing. Do not work around a refusal, overwrite content, or reconstruct the asset from memory. This customer workflow does not require Python.
--listprints the catalog without creating a project. -
Resolve the copied project directory to an absolute path (
<absolute-target>). Rundotnet build "<absolute-target>/<catalog-project>". Do not modify the copied source to make the build pass; report an asset defect if the unchanged template fails. -
Never source or copy a parent
.env. The app reads local settings from .NET user-secrets as documented in the copied README. Run all three local cases withdotnet run --project "<absolute-target>/<catalog-project>" -- --smoke. Parse the single-lineSMOKE_REPORT=<json>marker and require overallpassplus exactly the three passing case IDs from the selected catalog entry. Do not accept skipped tests, another template's cases, or a report from an earlier run.Preserve each exact trace ID emitted by the runner. Azure OpenAI settings (
AzureOpenAI:Endpoint,AzureOpenAI:Deployment, and the optionalAzureOpenAI:ApiKeywhen local Azure identity is not used) andProgress:Observability:ApiKey(an Integration credential) are app inputs. If configuration is missing, name only the missing keys and point to the copied README's user-secrets commands; never request, inspect, or print credential values. Let the app report missing configuration: do not rundotnet user-secrets list, read secret-store files, or dump the environment as a prerequisite check. Mock data describes bundled business fixtures, not a mock model: smoke cases and UI actions call configured Azure OpenAI. A successful run used available app configuration; never infer that credentials or model access are unnecessary.Preserve the bundled tracing setup: Progress exports agent/chat
UseOpenTelemetryspans, with tool executions under their agent invocation. Tool-only responses may have empty Output text; their structured calls are recorded by the SDK.Progress:Observability:RecordInputsandProgress:Observability:RecordOutputsdefault totrue. Setting either flag tofalsedisables both directions of agent/chat/tool content; use the README's process-specific overrides when requested. SDK exception text remains outside these switches. -
Start the already-built web app on an OS-assigned loopback port. Use the same absolute target so this command works from any working directory:
dotnet run --project "<absolute-target>/<catalog-project>" --no-build -- --urls http://127.0.0.1:0Keep that process running and actively read its own standard
Now listening on: http://127.0.0.1:<port>line. Use the host's persistent terminal or background-process mechanism with readable stdout and stderr. Once launched, immediately read that process's output in the same turn unless the URL is already present. Use short bounded reads for at most 30 seconds total and stop if the process exits. Do not wait for the server command to complete, because a healthy server remains running, and do not end the turn with a passive "Waiting..." status. If process output is not directly readable, use one combined launch log beside the requested target, never a shared/tmpfilename. Disclose if the process cannot outlive the session.Verify
/api/healthonly at the exact reported URL. Never guess, scan, or reuse a default or nearby port. A process exit or missing listening line at the deadline fails the health gate. Never start a replacement because an output read was incomplete, and never restart an already healthy process. Require HTTP 200 withstatus=readyfrom/api/healthand HTTP 200 from/; a degraded health response is not a pass. Read HTTP results directly without creating health-check files (for example,curl --fail --silent --show-error <actual-url>/api/health). If browser tools are available, also exercise the selected page's main action and inspect its result/error state. Never claim a browser interaction was checked when only HTTP was used. -
Return exactly one Progress Observability Tracing page link:
https://observability.progress.com/observations. Do not resolve, construct, or list per-trace deep links.
Report success only after copy, build, all three smoke cases, and UI health pass. Return the absolute project path, verified local UI link, one Progress Observability Tracing page link, and the three smoke-case results with their emitted trace IDs. Those IDs are local execution evidence; this workflow does not verify backend ingestion. State explicitly that backend trace ingestion is not independently verified by this workflow. On a failure, report the failed gate and the smallest safe retry; do not claim the template is ready.
Append this note verbatim to the successful handoff:
Development use only: This agent is in a local development environment. .NET user-secrets stores credentials unencrypted in a JSON file in your user profile. For production deployment, inject credentials through environment variables backed by your deployment’s secret manager. If you used user-secrets or entered credentials directly in terminal commands, I can guide you through removing the saved development credentials and relevant shell-history entries when you finish testing.
Keep the cleanup offer conditional: a successful run does not establish that
user-secrets were used. Do not inspect secret-store contents or shell history
to decide. Perform cleanup only when requested, after testing; explain that
Progress.AgentBuilder.Mvp is shared across all five agents before removing
settings. Refer to the copied README for targeted removal and shell-specific
guidance; do not automatically clear the store or unrelated shell history.