agentleFS
MicrosoftKnown publishermicrosoft/rayfin-fabricator/website/AGENTS.md

rayfin-fabricator / website

AGENTS.md2 starsChanged 33 days agoMITView on GitHub

This folder is the documentation site for Fabricator, the desktop app for building Rayfin apps by chatting with GitHub Copilot. It is published at <https://spatney.github.io/rayfin-fabricator/>. This file is the authoring contract: read it before you add or change a page. Many readers are analysts and makers rather than professional developers, and many are opening Fabricator for the first time. Write so they can follow along without help. Every page must read the same as HTML and as Markdown. Appending .md…

  • Installs packages
  • Where files are headingNew AGENTS.md files have more rules about keeping secrets out of the code, and fewer about code style.

    Of the AGENTS.md files we read, the 31,439 first seen in the last six months, against the older ones: the kind of rule that gained most share, and the kind that lost most. About files like this in general, not this one, and an estimate, since a kind is a pattern in the words.

  • In this repositoryOne other file it gives its agents.

The file

We split this AGENTS.md into the rules it gives an agent

11 rules. About 0 are common, 8 are distinctive, and 3 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈8

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 3

    Very specific

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

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Every page needs title and description.

    line 43
  2. Distinctive:

    Do not repeat the title as an H1 in the body.

    line 55
  3. Distinctive:

    Plain language: Use short sentences, address the reader as "you", write in the present tense, and use active voice.

    line 62
  4. Distinctive:

    Numbered steps for procedures: Use one action per step and start with the verb ("Select", "Type", "Choose").

    line 65
  5. Distinctive:

    Bring in their changes: Check them in the code; don't paraphrase them.

    line 70
  6. Distinctive:

    Quote messages exactly: When the app shows a message, quote its exact text so search finds it: You see "Couldn't read the semantic model".

    line 71
  7. Distinctive:

    No marketing: Avoid "simply", "just", "easy", "powerful", "seamless" and exclamation marks.

    line 79
  8. Very specific:

    Only shipped behavior: Document the Fabricator release in the repo-root package.json, and ground every statement in the source code …

    line 86
  9. Distinctive:

    Fabricator is a personal project: Never imply that Microsoft makes, endorses or supports it.

    line 102
  10. Very specific:

    When a page needs a screenshot that doesn't exist yet, mark the spot with an MDX comment on its own line and capture the image before …

    line 135
  11. Distinctive:

    Don't write "ask Copilot to do X" in prose.

    line 215

≈ “Common” is an estimate: at least 1 in 5 of the 40,246 AGENTS.md 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.

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

Writing the Fabricator docs

This folder is the documentation site for Fabricator, the desktop app for building Rayfin apps by chatting with GitHub Copilot. It is published at https://spatney.github.io/rayfin-fabricator/. This file is the authoring contract: read it before you add or change a page.

Many readers are analysts and makers rather than professional developers, and many are opening Fabricator for the first time. Write so they can follow along without help.

The one rule that governs everything

Every page must read the same as HTML and as Markdown.

Appending .md to any page URL returns that page as raw Markdown, and the same text feeds /llms.txt and /llms-full.txt. Anything that only exists as a React component disappears for agents. Express rich content with Markdown primitives that the renderer upgrades:

NeedAuthor asRenders asIn .md
Something to paste into Fabricator's chat```prompt title="…" fencePrompt card with Copyintact fence
Note, tip, warningGFM alert > [!NOTE], > [!TIP], > [!IMPORTANT], > [!WARNING], > [!CAUTION]Calloutintact alert
Diagram```mermaid fenceDiagramintact fence
Command or file contentfenced block with a language, plus title="…" when it belongs in a fileHighlighted block with copy buttonintact fence
ComparisonGFM tableTabletable
Screenshot![Alt text](/screenshots/<id>.webp)Imageimage link

Allowed MDX components: <Steps> / <Step>, <Tabs> / <Tab>, <Cards> / <Card>. Nothing else. Keep them shallow, so the content still makes sense when it is flattened into Markdown. Prefer plain numbered lists to <Steps> unless a procedure has sub-content.

Mermaid diagrams tag nodes with semantic classes, for example class Repo,Branch store: actor, service, store, external and experimental. The site injects theme-aware styles for these, so never add classDef, style or colors to a fence. check-docs rejects them.

MDX pitfalls: a bare { starts an expression and a bare < starts a tag. Put code, paths, placeholders and anything with braces or angle brackets in backticks (`<project>/rayfin.yml`), or escape them (\{, &lt;).

Frontmatter

Every page needs title and description. npm run check:docs enforces both.

---
title: Publish to Microsoft Fabric
description: Publish your app to a Fabric workspace, choose whether chat turns publish it automatically, and manage the workspaces it's published to.
---
  • title is sentence case and names the task or the thing.
  • description is one sentence, at most 200 characters. It must make sense out of context, because it is what search results, social cards and /llms.txt show.
  • Do not repeat the title as an H1 in the body. The page renders the title for you, so the body starts with an introduction paragraph or an H2.

Voice and style

  • Task-first. Open with what the reader is trying to do and what they'll end up with. Introduce concepts only when the task needs them.
  • Plain language. Use short sentences, address the reader as "you", write in the present tense, and use active voice. Define jargon the first time you use it or link to the glossary.
  • Numbered steps for procedures. Use one action per step and start with the verb ("Select", "Type", "Choose"). Say where something is before saying what to do with it: "In the status bar, select Report an issue."
  • UI labels in bold, exactly as on screen. Match the capitalization and punctuation in the app's source, for example Run deep review, Refresh Fabric authentication, Bring in their changes. Check them in the code; don't paraphrase them.
  • Quote messages exactly. When the app shows a message, quote its exact text so search finds it: You see "Couldn't read the semantic model".
  • One idea per heading. Headings are sentence case with no trailing punctuation. Agents and search chunk the content on headings.
  • Link with absolute site paths, such as /docs/ship/deploy or /docs/troubleshooting/deploy#a-deploy-failed. Never use relative ./page links. Rayfin's own docs are at https://rayfin.ai; link there for Rayfin SDK, CLI or Fabric app concepts instead of re-explaining them.
  • No marketing. Avoid "simply", "just", "easy", "powerful", "seamless" and exclamation marks.
  • Windows first, macOS noted. Fabricator runs on Windows 10/11 and macOS (Apple Silicon). Call out a macOS difference inline, or use <Tabs> when the steps differ.

What to document

  • Only shipped behavior. Document the Fabricator release in the repo-root package.json, and ground every statement in the source code (src/renderer/src/**, src/shared/**, src-tauri/src/**) or in README.md. If you can't verify something, leave it out.
  • No internals in task pages. Rust, IPC, Tauri and file formats belong only in /docs/reference/how-it-works. Never document development-only switches such as FABRICATOR_DEV_DATA_DIR.
  • Experimental features carry this callout at the top of the page, adjusted to the feature:

    > [!WARNING]
    > Team workspaces are an experiment. Turn them on in **Settings → Experiments**. They may
    > change or be removed in a future update.
  • Fabricator is a personal project. Never imply that Microsoft makes, endorses or supports it. The FAQ and the site footer carry the disclaimer.

Naming

  • Fabricator is the product. The installer and app bundle are named "Rayfin Fabricator"; use that name only when you refer to those files or to the installed app's name in the OS.
  • Rayfin is Microsoft's backend platform that Fabricator apps are built on.
  • Microsoft Fabric on first mention, then Fabric. Use Fabric workspace and Fabric capacity.
  • GitHub Copilot on first mention, then Copilot.
  • Microsoft Entra ID, never "Azure AD".
  • team workspace in lowercase in prose. The setting is labelled Team workspaces.

Screenshots

Screenshots are captured from a real Fabricator instance with a sample project ("Contoso Expenses"), or rendered from the app's components with sample data. Personal details (names, emails, tenant, workspace and repository names, paths) are replaced with sample values before capture. Never add an image that shows real personal data. The tooling and procedure are in scripts/docs-screenshots/.

Images are WebP files in public/screenshots/. Every screenshot has two captures of the same screen: <id>.webp in Fabricator's dark theme and <id>.light.webp in its light theme, with the sample app in the preview in the same theme. Pages link only the dark capture; the site shows the one that matches the reader's theme, and npm run check:docs fails when a light capture is missing. The alt text describes what the image shows for someone who can't see it:

![The publish control's panel for the Development published app, with its address, workspace and account, Publish after each chat turn, and Publish to another workspace](/screenshots/deployments.webp)

When a page needs a screenshot that doesn't exist yet, mark the spot with an MDX comment on its own line and capture the image before publishing. Comments are invisible on the page and in .md.

{/* screenshot: team-members */}
ImageWhat it showsUsed on
workbenchBuild view: a finished chat turn and the published sample app in the preview (sample data)/docs, /docs/start/tour, /docs/start/first-app, landing page
setupSetup with all three steps complete, including the optional Sign in to Azure, and the You're all set block (sample data)/docs/start/setup
accountsAccounts with the sample accounts signed in to each service (sample data)/docs/start/accounts
helpThe Help assistant answering why publishing failed, with its action button and citation (sample data)/docs/troubleshooting/help
searchSearch with "deploy" typed, over the workbench: one ranked list of actions and docs led by Publish 3 changes, Use "deploy" with…, and the action bar (sample data)/docs/start/search
homeHome with the project actions and recent projects/docs/start/tour, /docs/build/projects
new-projectNew project screen with a name entered/docs/start/first-app, /docs/build/projects
first-deployThe Publish your app step new projects had before apps ran on this computer first, with a workspace picked. No longer in the app: kept for the Learn Rayfin with Ray video lesson 02none (video lesson 02 only)
deploy-progressThe publish screen during a publish: Ray and the steps so far (sample data)/docs/ship/deploy
chat-workingChat during a turn, with the live work log and the live preview/docs/build/chat, /docs/start/first-app
chat-doneA finished turn with the "Worked for …" summary and changed-file chips/docs/build/chat
chat-diffThe diff for one changed file, opened from its chip/docs/build/chat
model-pickerThe chat composer's model picker with Auto off and the model list open, including Your API keys (sample data)/docs/build/chat, /docs/build/your-own-api-keys
model-providersAccounts → Model providers with an Anthropic key saved and an OpenAI key being added (sample data)/docs/build/your-own-api-keys
add-menuThe chat composer's + menu with Fabric data open beside it, listing the kinds of data (sample data)/docs/build/chat
pluginsThe chat composer's Plugins & tools panel, 1 enabled: Fabric IQ on and Work IQ, marked Experiment, off, under Plugins, marked Read-only; the Plugins button names Fabric IQ (sample data)/docs/build/fabric-iq-and-work-iq
mcp-pluginsThe chat composer's Plugins & tools panel, 2 enabled: Fabric IQ on, and an MCP servers section, marked Experiment: Charts on, Microsoft Learn (Read-only) and Issue tracker off, and Manage MCP servers… (sample data)/docs/build/mcp-servers
mcp-serversMCP servers with Microsoft Learn (read-only) and Charts checked, each listing its tools, and an issue tracker that signs in when used (sample data)/docs/build/mcp-servers
connect-dataAdd Fabric data on the Finance analytics workspace: recent workspaces first, three items already connected and two picked (sample data)/docs/build/data-model
data-chipsThe chat composer with the two items picked in connect-data waiting as chips for the next message (sample data)/docs/build/data-model
planA proposed plan waiting for approval/docs/build/chat
preview-toolbarThe default preview toolbar above the published sample app (sample data)/docs/build/preview
preview-localThe sample app's preview on this computer: Local and Published, Preview as, and Output open below the app (sample data)/docs/build/local-development, /docs/build/preview
preview-asThe Preview as menu open over the sample app on this computer: You, two test users, Signed out and Add test user… (sample data)/docs/build/preview
designDesign mode with an element selected and its change card open/docs/build/design
design-themeDesign mode's Theme panel/docs/build/design
codeCode view with the file tree and the editor/docs/build/code-and-history
historyThe History tab with a version per request, one selected and a file's diff open/docs/build/code-and-history
blueprintBlueprint's Architecture view of the sample app (sample data)/docs/build/data-model
modelBlueprint's Data model view with the entity diagram/docs/build/data-model
model-relationsBlueprint's Data model view with four related entities and a join entity (sample data)/docs/build/data-model
model-accessThe same Data model view with one entity left without a permission decorator: its amber access dot and Harden (sample data)/docs/build/data-model
local-dataBlueprint's Data explorer of the sample app's local data, with Load seed data and Save as seed data in its toolbar (sample data)/docs/build/data-model
seed-offerThe note above the sample app's preview on this computer offering its seed data while its local data is empty, with Load seed data (sample data)/docs/build/local-development
skillsThe Skills view/docs/build/skills
secretsThe Secrets view: Local value and Published value, and a secret selected (sample data)/docs/build/secrets
deploymentsThe publish control's panel, open on the sample app's published app, with Publish after each chat turn off (sample data)/docs/ship/deploy
shareThe share dialog/docs/ship/share
advisorThe Advisor: grade, check strip, summary and issues/docs/ship/advisor
advisor-findingAn open Advisor issue with its fix actions/docs/ship/advisor
goalsThe sample app's Goals tab after a run: 3 passed, 1 failed and 1 not proven, with Copilot's summary, what the app is for, and the failed check open on what Copilot found and the calls it made (sample data)/docs/ship/goals
rayfin-versionThe Rayfin version control with an update available/docs/ship/rayfin-versions
settingsThe Settings dialog: General (with API keys and Chat defaults), Appearance and the start of Diagnostics (sample data)/docs/reference/settings
chat-defaultsChat defaults: Claude Opus 5.5 at High, with Fabric IQ and the Charts MCP server on, and Work IQ, Microsoft Learn and Issue tracker off (sample data)/docs/reference/settings
settings-experimentsSettings' Experiments section with Team workspaces, Migrate Power BI reports, Work IQ, MCP servers, Export as an app and Goals, all off (sample data)/docs/team, /docs/build/migrate-power-bi, /docs/build/fabric-iq-and-work-iq, /docs/build/mcp-servers, /docs/ship/app-files, /docs/ship/goals
migrate-reportMigrate a Power BI report with a report picked: its workspace, semantic model, pages and the three checks, all passing (sample data)/docs/build/migrate-power-bi
migration-cardThe Migration card above the chat composer after the first page, with Migrate next page and Migrate the rest (sample data)/docs/build/migrate-power-bi
app-galleryThe App gallery with the sample user's apps, and the sample app's details open beside them (sample data)/docs/build/app-gallery
account-menuThe account menu with Refresh Fabric authentication and Settings, beside the publish control (sample data)/docs/start/tour, /docs/troubleshooting/deploy
deploy-errorRay above the preview after a failed publish, offering Find out why and View logs (sample data)/docs/troubleshooting/deploy
port-conflictThe dialog shown when the live preview's port is in use/docs/troubleshooting/preview
team-homeHome's team workspaces section/docs/team
team-createThe create team workspace dialog/docs/team/create
team-overviewThe workspace overview (sample data)/docs/team/overview
team-publishThe team app menu next to Publish (sample data)/docs/team/publish

Prompts

A prompt fence is text the reader pastes into Fabricator's chat box. Write it in plain English as the outcome you want, with the details a good result needs. It must make sense on its own, with no surrounding context.

```prompt title="Track team expenses"
Build an expense tracker for my team. Employees submit expenses with a date, amount,
category and a short note. Managers see everything their team submitted and can approve or
reject each expense with a comment. Show a dashboard with this month's total by category.
```

Don't write "ask Copilot to do X" in prose. Write the prompt instead.

Troubleshooting pages

  • Each problem is an H2 phrased as the symptom the reader sees, such as "## A deploy failed", not as the cause.
  • Structure each one as: what you see, which quotes the exact message → why it happens, in one or two sentences → how to fix it, as numbered steps → a link to Report a problem if it still fails.
  • Stable anchors. The app links to pages and headings listed in src/shared/docs-links.json, and the troubleshooting overview links to every heading below. Don't rename these headings; if you must, update src/shared/docs-links.json in the same change (npm run verify:app-links fails the build otherwise). Fabricator's Rust core also links to windows-blocked-rayfin-local directly (BLOCKED_DOCS_URL in src-tauri/src/services/local_backend/binary.rs), so renaming that heading means changing it there too. Releases of the app already installed keep linking to these headings, so a heading such as "A deploy failed" keeps its wording even though the app now says Publish:

    PageHeading
    /docs/troubleshooting/setup-and-sign-inA tool shows as missing or failed
    /docs/troubleshooting/setup-and-sign-inGitHub Copilot sign-in doesn't work
    /docs/troubleshooting/setup-and-sign-inCopilot asks you to sign in again
    /docs/troubleshooting/setup-and-sign-inFabric sign-in doesn't complete
    /docs/troubleshooting/previewAll preview ports are busy
    /docs/troubleshooting/previewWindows blocked rayfin-local
    /docs/troubleshooting/deployA deploy failed
    /docs/troubleshooting/deployAutomatic redeploy stopped
    /docs/troubleshooting/teamSetup needs an administrator

    Heading anchors are the GitHub-style slug of the heading text, for example #github-copilot-sign-in-doesnt-work.

Commands

npm install
npm run dev            # http://localhost:3000
npm run check:docs     # frontmatter, fences, links, images, component allowlist
npm run build          # static export to out/ plus the agent surface
npm run verify:agent   # every page has a valid .md mirror
npm run verify:app-links  # every page and heading the app links to exists
npm run typecheck

See README.md in this folder for the build, base path and deployment details.

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.