agentleFS
MicrosoftKnown publishermicrosoft/rayfin/samples/universal-app/template/.agents/skills/capability-router/SKILL.md

capability-router

Skill646 starsChanged 36 days agoMITView on GitHub

Start here for build and feature requests. Resolve the intended data source, select only the required Universal App capabilities, and hand the implementation to one owning skill per capability.

  • Installs packages

4 other projects use a version of this.

Adopted by

Most recently taken up by

The file

Show its rules and text

We split this skill into the rules it gives an agent

21 rules. 0 are common, 14 are distinctive, and 7 are very specific to this project.

  • 0

    Common

    Most of the 3 edited versions we read keep these.

  • 14

    Distinctive

    This author's own choices. Worth a look.

  • 7

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Do not select a pack from words such as "dashboard" or "workflow" alone.

    line 17
  2. Distinctive:

    Never fabricate identifiers, schemas, query output, or business values.

    line 29
  3. Distinctive:

    Do not ask the user to describe a discoverable schema.

    line 30
  4. Distinctive:

    Use the installed tools and version-matched docs to inspect it.

    line 31
  5. Distinctive:

    Run pack commands serially because they mutate workspace manifests, root scripts, and service configuration.

    line 54
  6. Very specific:

    Use data-modeling for records the app owns.

    line 56
  7. Very specific:

    Use connectors for records that already exist in a supported Fabric source.

    line 57
  8. Very specific:

    Use visuals for rendering, regardless of whether rows come from sample data, Rayfin data, or analytics.

    line 58
  9. Very specific:

    Use functions only for trusted code, secrets, app identity connections, or server-side calls.

    line 59
  10. Distinctive:

    When several packs are selected, you may avoid a separate install after each pack without inventing a multi-pack command:

    line 66
  11. Very specific:

    Run each selected npm run pack:add -- <name> --no-install command serially.

    line 69
  12. Distinctive:

    After all packs apply cleanly, run one install from the workspace root:

    line 72
  13. Distinctive:

    Run pack and lifecycle commands from the workspace root.

    line 84
  14. Distinctive:

    Do not create nested lockfiles or install dependencies separately inside workspace packages.

    line 91
  15. Distinctive:

    Do not import decorated entity classes into frontend code.

    line 92
  16. Very specific:

    If a pack preserves an existing file, report it and stop instead of assuming the pack's contract is installed.

    line 97
  17. Very specific:

    Use --force-seeds only with explicit user approval.

    line 98
  18. Distinctive:

    Read the owning skill for each selected capability.

    line 102
  19. Distinctive:

    Read the relevant seed files and exact installed package documentation in parallel where independent.

    line 103
  20. Distinctive:

    Verify real query or operation output before writing code that consumes its fields.

    line 105
  21. Distinctive:

    Do not fan out a tiny app or tightly coupled flow merely because parallel agents are available.

    line 109

“Common” is measured: kept by at least 6 in 10 of the 3 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Capability Router

The base workspace contains dynamic authentication, theming, an error boundary, an authenticated welcome view, and three packages: frontend, data, and shared. It has no live data source, persistence, charting, or trusted server-side logic until a capability pack adds it.

Decide the source first

Preserve what the user asked to use. Do not select a pack from words such as "dashboard" or "workflow" alone.

User intent or evidenceDecision
A named semantic model, dataset, or report matches one verified sourceUse that source with analytics
A supplied Fabric or Power BI URL or explicit IDsExtract the workspace and item IDs, verify them, and use them
Several sources could matchAsk the user to select the intended source
A named source cannot be foundAsk which source they meant; do not substitute sample data or another model
No source is namedSearch a relevant catalog when available, then ask a focused source-or-sample question if still unresolved
The user requested sample data or a mock-upUse visuals and label the sample data visibly
The user supplied a static file for bundlingReview it and emit typed rows; do not imply that the file is a live source

Never fabricate identifiers, schemas, query output, or business values. Do not ask the user to describe a discoverable schema. Use the installed tools and version-matched docs to inspect it.

A declared semantic-model app needs its intended model. Sample data is a separate, user-confirmed route, not a fallback for a missing model.

Select the capabilities

NeedPack commandSeed or implementation anchorOwning skill
Read an existing Power BI semantic modelnpm run pack:add -- connectors, then npm run pack:add -- analyticspackages/frontend/src/lib/connectors.ts, packages/frontend/src/hooks/use-semantic-model-query.ts, packages/frontend/src/queries/analytics
Chart semantic-model resultsnpm run pack:add -- visuals after analyticsfrontend visuals kit and typed visual specificationsvisuals
Chart sample data or app-owned recordsnpm run pack:add -- visualsfrontend visuals kit and typed visual specificationsvisuals
Create and own recordsnpm run pack:add -- data-modelingpackages/data/src/Item.ts, packages/data/src/index.ts, packages/shared/src/index.tsdata-modeling
Read an existing warehouse, SQL database, or Lakehouse SQL endpointnpm run pack:add -- connectorsrayfin/rayfin.yml, rayfin/connectors/<alias>/connectors
Call an external API, webhook, or custom model endpointnpm run pack:add -- functionspackages/functions/src/function_app.tsfunctions-capability
Use a secret or trusted operationnpm run pack:add -- functionspackages/functions/src/function_app.tsfunctions-capability
Call a published Fabric data agentnpm run pack:add -- functionspackages/functions/src/function_app.tsfunctions-capability
Bundle a supplied CSV or spreadsheetno packa typed module in the owning workspace packagethis skill
Use Kusto or KQLunavailable in this releasenoneconnectors

Capabilities compose. An app that stores records, reads a semantic model, charts results, and calls a trusted API needs four separate pack invocations. The current scaffolder accepts one pack per invocation. Run pack commands serially because they mutate workspace manifests, root scripts, and service configuration.

Use data-modeling for records the app owns. Use connectors for records that already exist in a supported Fabric source. Use visuals for rendering, regardless of whether rows come from sample data, Rayfin data, or analytics. Use functions only for trusted code, secrets, app identity connections, or server-side calls.

Kusto and KQL are not supported in this release. Say so and stop rather than swapping in another source.

Optional consolidated install

When several packs are selected, you may avoid a separate install after each pack without inventing a multi-pack command:

  1. Run each selected npm run pack:add -- <name> --no-install command serially.
  2. Inspect every result for preserved files and stop if any pack reports one.
  3. After all packs apply cleanly, run one install from the workspace root:
npm install --ignore-scripts --no-audit --no-fund

This is a manual authoring optimization, not durable pack caching. The consolidated install does not write the per-pack success markers, so a later ordinary pack reapply may install again.

Preserve workspace ownership

Run pack and lifecycle commands from the workspace root. The pack manifest selects the package manifest that owns its dependencies:

  • Frontend and connector dependencies belong in packages/frontend/package.json.
  • Decorated entities belong in packages/data, while browser-safe record contracts belong in packages/shared.
  • The functions pack creates packages/functions and composes it into the root build and typecheck scripts.

Do not create nested lockfiles or install dependencies separately inside workspace packages. Do not import decorated entity classes into frontend code.

Apply and hand off

Apply selected packs before editing files they seed. If a pack preserves an existing file, report it and stop instead of assuming the pack's contract is installed. Use --force-seeds only with explicit user approval.

After routing:

  1. Read the owning skill for each selected capability.
  2. Read the relevant seed files and exact installed package documentation in parallel where independent.
  3. Establish a runnable shell in packages/frontend with honest loading states, preserving protected hosting and the dynamic auth gate.
  4. Verify real query or operation output before writing code that consumes its fields.
  5. Integrate data, interactions, and polish, then follow AGENTS.md for final validation and deployment.

Substantial independent discovery or implementation may be delegated behind a clear interface. Do not fan out a tiny app or tightly coupled flow merely because parallel agents are available.

Download now (ZIP)

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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.