pilotswarm-portal-builder
Skill14 starsChanged 8 months agoMITView on GitHub
Use when creating or updating a browser portal on top of PilotSwarm. Covers portal branding, plugin.json.portal, named-agent exposure, auth add-ons, and remote deployment wiring.
We split this skill into the rules it gives an agent
36 rules. About 0 are common, 19 are distinctive, and 17 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈19
Distinctive · estimate
This author's own choices. Worth a look.
17
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 51
Run a guided intake before scaffolding.
- Very specific: line 52
Prefer plugin.json.portal for browser branding and sign-in copy.
- Very specific: line 53
Use plugin.json.tui as a fallback or shared source only when the user wants the portal and TUI aligned.
- Very specific: line 55
If the portal is deployed remotely, wire PLUGIN_DIRS in the portal environment.
- Distinctive: line 56
Treat authentication as a provider-based add-on, not a built-in Entra assumption.
- Distinctive: line 57
If auth is enabled, separate browser sign-in UX, token acquisition, and server-side validation clearly.
- Distinctive: line 58
Add local launch guidance and remote rollout guidance that match the actual repository layout.
- Distinctive: line 62
Before generating files, ask:
- Distinctive: line 65
Should the portal reuse the TUI title and splash, or have its own branding?
- Very specific: line 67
ask for a checked-in path such as plugin/assets/logo.svg
- Distinctive: line 68
ask whether the browser tab icon should reuse that same asset or use a separate favicon
- Distinctive: line 74
If auth is enabled, what should the sign-in title and helper copy say?
- Distinctive: line 77
Do not guess these answers when they materially affect the scaffold.
- Very specific: line 98
Put browser-specific branding under plugin.json.portal.
- Very specific: line 99
Prefer nested portal config: portal.branding, portal.ui, and portal.auth.
- Distinctive: line 100
Keep page title, splash text, loading copy, and sign-in copy in plugin metadata instead of hardcoding them into app code.
- Distinctive: line 101
Keep the logo path in plugin metadata so the splash screen, signed-in header, and browser tab icon stay in sync.
- Very specific: line 102
Use plugin.json.tui only when the user explicitly wants the same title/splash across TUI and portal.
- Very specific: line 103
Keep agent prompts and personas in plugin/agents/*.agent.md, not inside portal UI files.
- Very specific: line 104
Every generated .agent.md must include schemaVersion: 1 and a version string.
- Very specific: line 135
keep logo assets inside the plugin directory so the remote portal image can package them with plugin.json
- Very specific: line 139
Treat none as a valid first-class choice.
- Very specific: line 140
Keep auth provider selection explicit with PORTAL_AUTH_PROVIDER.
- Very specific: line 147
Use only the canonical PORTAL_AUTH_* and PORTAL_AUTHZ_* env vars.
- Distinctive: line 148
If the user wants another provider such as AWS IAM, do not force Entra-specific language into the scaffold.
- Very specific: line 164
When session-policy.json.creation.bundledAgents is used, verify the portal bootstrap exposes the bundled agent in creatableAgents.
- Very specific: line 165
When documenting Kubernetes secrets for portal settings, prefer kubectl create secret generic ...
- Distinctive: line 175
Do more than write files: run a local portal build when practical.
- Very specific: line 176
Verify the portal can load branding from plugin.json.portal.
- Distinctive: line 177
Verify named-agent creation appears in the browser UI when the plugin and session policy are present.
- Distinctive: line 178
If auth is enabled, verify the portal-config/bootstrap path advertises the selected provider correctly.
- Very specific: line 183
Do not hardcode PilotSwarm branding into app-specific portal code when plugin metadata can drive it.
- Distinctive: line 184
Do not assume the portal can infer named agents from remote workers alone.
- Distinctive: line 185
Do not assume Entra ID is mandatory.
- Distinctive: line 186
Do not invent app-specific auth protocols when the user really wants auth disabled.
- Distinctive: line 187
Keep portal UX copy, prompt layers, auth wiring, and deployment packaging as separate concerns.
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
PilotSwarm Portal Builder
Build browser portal experiences on top of the shipped PilotSwarm web portal.
Canonical References
- Source quickstart:
https://github.com/microsoft/PilotSwarm/blob/main/docs/quickstart/local.md - Portal guide:
https://github.com/microsoft/PilotSwarm/blob/main/packages/app/web/README.md - SDK guide:
https://github.com/microsoft/PilotSwarm/blob/main/docs/developer/building/sdk-apps.md - Plugin architecture:
https://github.com/microsoft/PilotSwarm/blob/main/docs/developer/building/plugins.md - AKS deployment:
https://github.com/microsoft/PilotSwarm/blob/main/docs/developer/deploy/aks.md - DevOps sample:
https://github.com/microsoft/PilotSwarm/tree/main/examples/devops-command-center
Personal multi-session workspaces
The shipped portal includes Master of Agents (MoA): up to five personal
chat/canvas dashboards, split panels, a shared focused composer, and focus mode.
It uses the same branding and session permissions. No plugin setting is needed.
Desktop tabs can be reordered, with order and layouts saved in the user profile.
Visited views are cached only in browser memory and refresh only while visible.
Mobile shows one panel at a time, a proportional panel map, and a triangle-only
dashboard picker in the session header; it does not support tab dragging.
MoA has no sharing links and is unavailable in the native TUI.
See docs/user-guide/master-of-agents.md for behavior and keyboard controls.
Preferred Structure
my-app/
├── plugin/
│ ├── plugin.json
│ ├── assets/
│ ├── agents/
│ └── skills/
├── deploy/
│ ├── Dockerfile.portal
│ └── k8s/
│ └── portal-deployment.yaml
├── scripts/
│ └── run-portal.sh
└── README.mdWorkflow
- Run a guided intake before scaffolding.
- Prefer
plugin.json.portalfor browser branding and sign-in copy. - Use
plugin.json.tuias a fallback or shared source only when the user wants the portal and TUI aligned. - Make named-agent availability explicit by packaging the app plugin for the portal process.
- If the portal is deployed remotely, wire
PLUGIN_DIRSin the portal environment. - Treat authentication as a provider-based add-on, not a built-in Entra assumption.
- If auth is enabled, separate browser sign-in UX, token acquisition, and server-side validation clearly.
- Add local launch guidance and remote rollout guidance that match the actual repository layout.
Guided Intake Questions
Before generating files, ask:
- What should the portal be called?
- Should the portal reuse the TUI title and splash, or have its own branding?
- What logo asset should the portal use?
- ask for a checked-in path such as
plugin/assets/logo.svg - ask whether the browser tab icon should reuse that same asset or use a separate favicon
- ask for a checked-in path such as
- Which named agents should be creatable from the portal?
- Which auth provider should the portal use?
noneentra- another provider described by the user
- If auth is enabled, what should the sign-in title and helper copy say?
- Will the portal run locally only, or also in AKS / remote deployment?
Do not guess these answers when they materially affect the scaffold. If the user wants a fast default, offer:
- matching TUI + portal branding
- a shared portal logo at
plugin/assets/logo.svg - generic sign-in copy
noneorentrafor auth- plugin-driven packaging with
PLUGIN_DIRS
Web API Guidance
- The portal server hosts the deployment's Web API (
/api/v1+ WS) — the single surface every client rides (browser UI, TUI remote, SDK apps, MCP, custom UXes onpilotswarm-sdk/api). - Named agents reach all clients via
GET /api/v1/bootstrap(creatableAgents); that is why portal images must package the app plugin and setPLUGIN_DIRS. - Validate a portal rollout with
GET /api/v1/healthandGET /api/v1/auth/config.
Portal Config Guidance
- Put browser-specific branding under
plugin.json.portal. - Prefer nested portal config:
portal.branding,portal.ui, andportal.auth. - Keep page title, splash text, loading copy, and sign-in copy in plugin metadata instead of hardcoding them into app code.
- Keep the logo path in plugin metadata so the splash screen, signed-in header, and browser tab icon stay in sync.
- Use
plugin.json.tuionly when the user explicitly wants the same title/splash across TUI and portal. - Keep agent prompts and personas in
plugin/agents/*.agent.md, not inside portal UI files. - Every generated
.agent.mdmust includeschemaVersion: 1and aversionstring. Useversion: 1.0.0for new agents by default, and bumpversionwhen editing an existing agent's prompt behavior, tools, workflow guidance, or metadata. - Use
session-policy.jsonwhen the user wants the portal to offer only a curated agent roster instead of generic sessions. To expose SDK-bundled optional agents such as the generic crawler, add"bundledAgents": ["generic-crawler"]undercreation; the portal bootstrap must see that policy throughPLUGIN_DIRSsocreatableAgentsincludes the bundled agent.
Example:
{
"name": "waldemort",
"description": "Operations workspace",
"portal": {
"branding": {
"title": "Waldemort",
"pageTitle": "Waldemort Portal",
"logoFile": "./assets/logo.svg",
"faviconFile": "./assets/favicon.png"
},
"ui": {
"loadingMessage": "Preparing your command center"
},
"auth": {
"signInTitle": "Sign in to Waldemort",
"signInMessage": "Use your organization account to open the browser workspace."
}
}
}Logo notes:
branding.logoFileis the preferred checked-in asset path- the same logo is used on the loading splash, sign-in gate, signed-in header, and browser tab icon unless
branding.faviconFileoverrides it - keep logo assets inside the plugin directory so the remote portal image can package them with
plugin.json
Auth Guidance
- Treat
noneas a valid first-class choice. - Keep auth provider selection explicit with
PORTAL_AUTH_PROVIDER. - For the shipped Entra provider, document:
PORTAL_AUTH_PROVIDER=entraPORTAL_AUTH_ENTRA_TENANT_IDPORTAL_AUTH_ENTRA_CLIENT_IDPORTAL_AUTHZ_ADMIN_GROUPS/PORTAL_AUTHZ_USER_GROUPSas comma-delimited email allowlists when admission gating is requested- redirect URI registration for the portal host
- Use only the canonical
PORTAL_AUTH_*andPORTAL_AUTHZ_*env vars; do not document or scaffold legacyENTRA_*fallbacks. - If the user wants another provider such as AWS IAM, do not force Entra-specific language into the scaffold.
- For custom providers, separate:
- browser-side sign-in initiation
- token acquisition/storage
- server-side request validation
Local And Remote Launch Guidance
- For local usage, prefer a checked-in script such as
scripts/run-portal.sh. - Local launch guidance should use
pilotswarm-web --plugin ./pluginor the equivalent app wrapper. - For remote deployments, package the app plugin into the portal image or mount it into the portal pod.
- Set
PLUGIN_DIRSin the portal deployment so the web process can resolve:plugin.json.portalplugin.json.tuiplugin/agents/*session-policy.json
- When
session-policy.json.creation.bundledAgentsis used, verify the portal bootstrap exposes the bundled agent increatableAgents; seeing the worker logLoaded: ... generic-crawleris not sufficient for the browser picker. - When documenting Kubernetes secrets for portal settings, prefer
kubectl create secret generic ... --from-env-file=...for env files that may contain shell-significant characters.
Validation Guidance
- For opt-in live reasoning/answer previews, set
PILOTSWARM_LIVE_TURN=1on workers (also the portal for embedded local workers). Use the shipped live plane and shared UI; do not persist raw deltas or create a parallel chat stream. Custom clients should followdocs/architecture/live-plane.mdand keep durable event replay authoritative. - Do more than write files: run a local portal build when practical.
- Verify the portal can load branding from
plugin.json.portal. - Verify named-agent creation appears in the browser UI when the plugin and session policy are present.
- If auth is enabled, verify the portal-config/bootstrap path advertises the selected provider correctly.
- For remote deployments, verify
GET /api/healthandGET /api/portal-configagainst the live ingress host.
Guardrails
- Do not hardcode PilotSwarm branding into app-specific portal code when plugin metadata can drive it.
- Do not assume the portal can infer named agents from remote workers alone.
- Do not assume Entra ID is mandatory.
- Do not invent app-specific auth protocols when the user really wants auth disabled.
- Keep portal UX copy, prompt layers, auth wiring, and deployment packaging as separate concerns.
In this repository50 other files it gives its agents.
- packages/sdk/examples/repo-workspaces/seed/home/AGENTS.mdAGENTS.md
- .github/copilot-instructions.mdCopilot instructions
- agent-repair-loopSkill
- duroxide-orchestration-versioningSkill
- editorial-standardsSkill
- finance-research-standardsSkill
- valuation-methodsSkill
- pilotswarm-architectureSkill
- deployment-safetySkill
- incident-responseSkill
- add-activitySkill
- add-eventSkill
- add-testSkill
- add-toolSkill
- agent-versioningSkill
- azure-ps-test-runner-vmSkill
- debug-orchestrationSkill
- debug-testSkill
- horizondb-idiosyncrasiesSkill
- horizon-facts-eval-sweepSkill
- investigate-duroxide-runtimeSkill
- pilotswarm-aks-deploySkill
- pilotswarm-aks-resetSkill
- pilotswarm-new-env-deploySkill
- pilotswarm-perfSkill
- pilotswarm-portal-app-regSkill
- pilotswarm-portal-auth-assignmentsSkill
- pilotswarm-releaseSkill
- pilotswarm-tuiSkill
- pilotswarm-vpn-client-profileSkill
- schema-migrationSkill
- notesSkill
- share-a-fileSkill
- cost-latency-analysisSkill
- graph-debugSkill
- orchestration-session-lifecycleSkill
- resourcemgrSkill
- sweeperSkill
- canvas-appsSkill
- html-visualsSkill
- pilotswarm-agent-versioningSkill
- pilotswarm-aks-identitySkill
- pilotswarm-azure-deployerSkill
- pilotswarm-azure-lessonsSkill
- pilotswarm-cli-builderSkill
- pilotswarm-duroxide-versioningSkill
- pilotswarm-hybrid-datastoreSkill
- pilotswarm-knowledge-harvesterSkill
- pilotswarm-sdk-builderSkill
- pilotswarm-three-tierSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

