Author agents
You can create a Fontana agent outside Flow, as a folder, and upload it on AI → Agent packages (/ai/agents). The folder holds AGENT.md (YAML frontmatter plus a Markdown system prompt). Optional files are schedules.json and an image under avatars/. Every agent package lives in a Fontana Files namespace, under its agents/ folder.
Package layout
Section titled “Package layout”The directory name is the agent slug (lowercase, hyphenated). AGENT.md sits directly inside it, and no folder inside the package holds another AGENT.md or a SKILL.md.
nav-analyst/├── AGENT.md # Required├── schedules.json # Optional└── avatars/ └── avatar.png # Optional; frontmatter icon points hereUpload folder on the agents/ folder of a namespace you created. Fontana writes the tree into that namespace in Fontana Files, and the agent appears once the files sync, usually within a few seconds. The id is the namespace plus the folder path, for example finance/agents/nav-analyst when you upload this folder into finance/agents/.
Fontana’s own agents live in system. Upload your packages into a namespace you created. When a default namespace is still present, leave that one alone as well.
The folder path is the identity. Frontmatter omits id and name. A namespace is named exactly as you name it, for example client-service, and Fontana Files shows that name.
Upload
Section titled “Upload”- Open AI → Agent packages (
/ai/agents). - Select the
agents/folder of a namespace you created. - Choose Upload folder and select the package directory (the one that contains
AGENT.md). - Open the imported package and confirm the title, abilities, and prompt.
Saving AGENT.md in the explorer, or in File System (/files), registers the same way. If the file cannot be parsed, the agent keeps its last good version and the error shows on the agent page. Open Agent schedules when the package includes schedules.json.
Author AGENT.md
Section titled “Author AGENT.md”AGENT.md starts with YAML frontmatter and continues with the system prompt. The body is the operating manual the agent follows.
| Key | Required | What you set |
|---|---|---|
| title | Yes | Display name in chat |
| description | Yes | Short catalog summary |
| vectorSource | Yes | Keywords for routing: role, domain nouns, deliverable names |
| role | No | Short job title |
| model | No | An approved model id, or "" for the deployment default |
| scopes | No | Where you can pick the agent. Omitted means chat |
| abilities | No | Built-in abilities keyed by ability id, each with enabled and its settings |
| skills | No | Skill namespaces the agent may open, for example [system, finance], or ["*"] for every namespace |
| skillAutoLoad | No | Per-skill auto-load overrides keyed by catalog id, for example finance/skills/report: true |
| autoDiscoverSkills | No | false stops the skills catalog running on the first turn. Omitted means on |
| permissions | No | Allow-list. Omitted means every catalog permission (["*"]) |
| isActive | No | true so the agent can be picked |
| reasoningEffort | No | none, minimal, low, medium, high, or xhigh |
| callSettings | No | temperature, maxOutputTokens, topP, topK, presencePenalty, frequencyPenalty, stopSequences, seed |
| icon | No | Path under avatars/, for example avatars/avatar.png |
| accentColor | No | One palette name: orange, amber, yellow, lime, green, teal, cyan, sky, blue, indigo, violet, purple, pink, rose, slate |
scopes values are chat, workflow (AI node), kg-extract, eval, icon, and internal. A new agent starts in chat. An explicit list contains at least one of those values.
Abilities
Section titled “Abilities”abilities maps an ability id to enabled plus that ability’s settings. enabled: true turns the ability on. An entry with enabled: false keeps its settings for later.
abilities: knowledge-graph: enabled: true namespaces: - "*" agents: enabled: true agents: - system/agents/fontana-agentknowledge-graph loads on the first turn. Add a skillAutoLoad entry (system/<ability>: true) for another ability only when it must be present from the first message.
| Ability id | Settings |
|---|---|
knowledge-graph |
namespaces, autoSearchKg, kbInjectionScoreThreshold |
agents |
agents (ids, or *) |
workflows |
autoSearchWorkflows (Workspaces) |
email |
allowReceive, allowSend, receiveWhitelist, sendWhitelist |
messaging |
Slack: messagingWhitelist, slackInstallationId, toolSubset |
teams |
channelWhitelist, freeResponseChannels, requireMentionInThread, allowBots |
coding |
allowInternet, toolSubset |
fontana-browser |
toolSubset |
files, data, workflow-documents, system-one |
none |
mcp-<slug> |
toolSubset, for an MCP connection already in the workspace |
Include system/agents/fontana-agent under agents when the persona should hand Fontana product questions back to Fontana agent. Canvas editing stays on the canvas agent; hand that work off through agents.
Skills
Section titled “Skills”skills lists the skill namespaces the agent may open; ["*"] on its own grants every namespace, present and future. Every package in a granted namespace is available on demand. The agent discovers them with skills_listSkillsCatalog, which runs on the first turn unless autoDiscoverSkills: false. skillAutoLoad overrides a package’s own auto-load flag. See Skills.
skills: - system - financeskillAutoLoad: finance/skills/report: trueThese older keys fail ingest. Put the same choices on the abilities above: tools, subagents, handoffAgents, knowledgeGraphNamespaces, autoSearchKg, autoSearchWorkflows, kbInjectionScoreThreshold, emailSendWhitelist, messagingWhitelist. A skills mapping keyed by catalog id fails ingest the same way; list namespaces instead. The image key is icon.
permissions: ["*"] matches the allow-list a new agent starts with. Invocation still uses the overlap of that list and the person’s role. See Roles and RBAC.
Tool calls and MCP
Section titled “Tool calls and MCP”Enabling an ability grants the calls below. A chat agent already has the first table, so those calls are not abilities entries. An MCP call id is mcp_<connection-slug>_<tool-name>. The same list is what an external AI tool follows in the agent authoring skill.
Calls every chat agent already has
Section titled “Calls every chat agent already has”| Call | What it does |
|---|---|
system_renderUrl |
Show a link the person can open. It does not browse the page. |
system_updateThreadTitle |
Set the chat thread title. |
system_createTaskTree |
Start a task list for this turn. |
system_addSubtasksUnderActiveTask |
Add subtasks under the task that is active now. |
system_addSubtasksUnderParent |
Add subtasks under a named open task. |
system_closeTask |
Close one task. Closing a parent cancels unfinished child tasks. |
system_compactThreadContext |
Fold older thread history into a summary. |
system_evictContext |
Drop stale tool results from later turns. |
system_wait |
Pause, then continue, when a page or a browser session is not ready yet. One call can wait up to seven days. |
icon_generateIcon |
Draw a minimal SVG icon from a text prompt. The package image is a file under avatars/. |
skills_listSkillsCatalog |
List the skills this agent may activate, for one namespace or all of them (*). Runs on the first turn when autoDiscoverSkills is on. |
skills_activateSkill |
Turn a skill on for this turn. |
skills_closeSkill |
Turn that skill off. |
skills_readSkillFile |
Read a file inside an active skill. |
hitl_askHuman |
Ask the person a structured question in chat. |
agents_createSubAgentThread |
Open a side thread with an agent on the agents ability’s allow-list. |
agents_continueSubAgentThread |
Continue that side thread. |
agents_handoffThread |
Hand this thread to an agent on that allow-list. |
agents_delegateExternalAgent |
Ask a peer agent connected through Agent Interop. |
Delegation still needs the agents ability with the target ids in its agents setting.
Calls an ability adds
Section titled “Calls an ability adds”knowledge-graph searches the namespaces you set. The four knowledge_ calls write the graph. Use them only for extraction or curation you asked for.
| Call | What it does |
|---|---|
mcp_knowledge-graph_kg_search |
Hybrid search. Returns capped chunk packages. |
mcp_knowledge-graph_kg_open |
Open one chunk, section, entity, or file. |
mcp_knowledge-graph_kg_hop |
Step to a neighbouring chunk, entity, or outline section. |
mcp_knowledge-graph_kg_outline |
A file’s section index. |
mcp_knowledge-graph_kg_ontology |
Published entity types and relation types. |
mcp_knowledge-graph_kg_entity_search |
Find an entity by name. |
mcp_knowledge-graph_kg_file_entities |
Entities mentioned in one file. |
mcp_knowledge-graph_kg_file_triples |
Typed relations stated inside one file. |
mcp_knowledge-graph_kg_namespaces |
Namespaces the caller may search. |
mcp_knowledge-graph_kg_collections |
Collections in a namespace and their folders. |
mcp_knowledge-graph_kg_files |
Find files by folder, path glob, or content pattern. |
mcp_knowledge-graph_kg_file |
Read one file: metadata, a text window, a table query, or a JSON query. |
mcp_knowledge-graph_kg_cypher |
One read-only query for an exact word, a figure, or a known path. At most 50 rows. Cite the file path and the chunk text. |
knowledge_upsertKgInstanceTriples |
Write instance triples. |
knowledge_setKgEntityTypeMembership |
Set an entity’s type. |
knowledge_applyKgOntologyProposals |
Apply proposed type changes. |
knowledge_mergeKgEntities |
Merge two entities. |
files reads and writes workspace files and Fontana Files.
| Call | What it does |
|---|---|
vfs_grep |
Find a workspace file by its contents. |
vfs_file_info |
Size and type before a read. |
vfs_read |
Read a text range. |
vfs_update |
Write a new version of a text file. |
data: data_listResources lists what a workflow run produced, data_queryData queries those rows, and data_queryWorkflow reads one part of the workflow configuration (the Workspace file, or a saved template). That query is read-only. Each call needs the workflow id from the conversation, not a placeholder.
workflows: workflow_listUserWorkflows resolves a workflow you own, workflow_searchWorkflows finds templates, and workflow_startWorkflowRun starts a run you asked for.
workflow-documents: create, read, update, rename, and delete the markdown tabs on a workflow (workflow_createWorkflowDocument, workflow_readWorkflowDocument, workflow_updateWorkflowDocumentContent, workflow_renameWorkflowDocument, workflow_deleteWorkflowDocument).
agents adds package and schedule admin: list and edit agent files, namespaces, and schedules (agents_listAgents, agents_readAgentFileContent, agents_upsertAgentFileText, agents_listAgentSchedules, agents_activateAgentSchedule, agents_triggerAgentSchedule, and the matching list, move, and delete calls). These calls write the package files in Fontana Files; the agent catalog updates once the file syncs. The agents setting is who this agent may hand work to.
email: email_listInbox, email_search, and email_read obey the receive whitelist. email_draft holds a message for you to review. email_send sends only to addresses on the send whitelist.
messaging is Slack.
| Call | What it does |
|---|---|
mcp_slack-channels_list_installations |
List Slack installations. |
mcp_slack-channels_list_conversations |
List channels the bot can see. |
mcp_slack-channels_get_conversation_history |
Read recent messages. |
mcp_slack-channels_post_message |
Post or reply as the Fontana bot. |
mcp_slack-channels_list_users |
List people in the workspace. |
mcp_slack-channels_get_user |
Read one Slack profile. |
hitl_slackBlocks |
Ask for an Approve or Reject decision in Slack. |
voice_generateSpeech |
Speak a short answer aloud. |
teams: mcp_teams-channels_list_installations lists this agent’s Teams bot, and mcp_teams-channels_post_message posts into a channel where that app is already installed.
coding is the agent’s computer. The ability card is Computer. In chat the agent calls it “my computer”. mcp_session_open starts that computer with no network access. mcp_session_exec runs a command, and mcp_session_close deletes it. Each command has 120 seconds and 1 MiB of stdout plus 1 MiB of stderr. A computer that sits idle for 30 minutes ends, and none last more than 4 hours. It does not see your Fontana data unless the agent passes that data in, or opens with a named bucket and writes as a signed-in user. Read access includes the bucket’s git history. Set allowInternet: true to also grant mcp_session_open_online: that computer reaches the public internet on TCP 80 and 443 and includes curl and wget. Fetched pages can carry instructions. Anything on the computer, including an attached bucket, can leave over the network. Live web pages are fontana-browser, which the agent calls “my browser”.
fontana-browser is the agent’s browser for live pages. In chat the agent calls it “my browser”. Shell, files, and scripts are coding. Read-only calls are mcp_fontana-browser_steel_scrape, mcp_fontana-browser_steel_screenshot, and mcp_fontana-browser_steel_pdf. A session uses mcp_fontana-browser_steel_session_create, mcp_fontana-browser_steel_navigate, mcp_fontana-browser_steel_snapshot, mcp_fontana-browser_steel_act, and mcp_fontana-browser_steel_session_release. The agent authoring skill lists the rest of the session calls. The steel connection exposes the same tools with the prefix mcp_steel_.
Memory needs no ability and no setup. Every agent can call knowledge_addMemory to save a durable fact as a markdown file, and knowledge_forgetMemory to delete one. Do not add a memory entry under abilities. Each user has one private memory store in Fontana Files. Every agent you run writes to it, so your agents share what they learn about your work. The bucket is granted to you alone. File admins keep the access they have to every bucket. Your memory bucket appears as My memory in Fontana Files and KG Studio; a file admin sees other people’s as Memory · name.
- Path: the agent files each memory by topic, so all your agents reach the same file for the same fact. Names are lowercase kebab-case and the path ends in
.md. - Folders: every memory goes under one of six folders. A path outside them is rejected.
personal/holds facts and preferences about you, such aspersonal/food-preferences.md.working-style/holds how you want agents to work: tone, format, approvals.people/holds colleagues, clients and contacts.projects/<project>/holds decisions and context for one piece of work.how-to/holds procedures and fixes that worked.agents/<agent-name>/holds notes only that agent needs about its own job.
- One topic per file: the file is named after the topic, and the agent adds to it instead of starting another. The file records which agent saved it.
- Overwrite: when the path already holds a memory, the write is rejected and the agent gets the existing text back. It then sends one consolidated memory to the same path with
overwrite: true, which replaces the file. - Reading: once the file is indexed, every agent you run recalls matching memories automatically at the start of a turn, whatever namespaces are assigned to it. An agent with the Knowledge Graph ability can also search your memory on request.
- Forget in chat: a saved memory shows a Forget memory button on its tool card. It deletes that memory from your own memory store.
Namespace names that start with memory- are reserved for these memory stores. A scheduled run saves to the memory of the user it runs as. Turns that run without a person, such as workflow steps, share one system memory that only file admins can browse. Memory is not used in shared channel threads or evaluation runs: agents neither save nor recall it there.
system-one: systemone_ask asks TypeSafe System One one question and returns a decision with a confidence.
MCP you already connected
Section titled “MCP you already connected”The abilities above already cover the connections Fontana ships: knowledge-graph, ffs, slack-channels, teams-channels, session, steel, and fontana-browser.
Any other connection on AI → Tools is the ability mcp-<slug>, using that connection’s slug. enabled: true with no toolSubset loads every tool the connection has discovered. toolSubset limits Slack, Computer, Fontana Browser, and these extra connections to the mcp_<slug>_<tool> ids you name.
Fontana page skills, including system/skills/mcp-admin and system/skills/skills-admin, come with the system namespace and stay on Fontana agent. Leave system out of a specialist package’s skills.
System prompt
Section titled “System prompt”After the frontmatter, write the brief the agent follows: role, who it serves, responsibilities, how it separates fact from recommendation, the steps it takes, the markdown it returns, and when it hands off to system/agents/fontana-agent. Keep the brief about the job. Fontana adds runtime context when the abilities are on.
Example
Section titled “Example”---title: NAV Analystrole: NAV analystdescription: Reviews NAV packs and explains breaks in plain language for the fund accounting team.vectorSource: NAV analyst net asset value breaks reconciliationmodel: ""scopes: - chatabilities: knowledge-graph: enabled: true namespaces: - "*" agents: enabled: true agents: - system/agents/fontana-agentisActive: truepermissions: - "*"reasoningEffort: highcallSettings: temperature: 0---
## Role
You are a NAV analyst for the fund accounting team. You explain breaks in plain language.
## Handoff
Hand Fontana product and navigation questions to `system/agents/fontana-agent`.Schedules
Section titled “Schedules”schedules.json is optional. It holds shared definitions the operator activates later. Cron triggers use expr for the UTC expression. See Agent schedules for event and manual shapes.
{ "schedules": [ { "id": "daily-digest", "name": "Daily digest", "prompt": "Summarise overnight activity.", "schedule": { "kind": "cron", "expr": "0 8 * * *" } } ]}Related
Section titled “Related”- Agents - what a package controls after upload
- Skills - the namespaces you grant in
skills - Agent schedules -
schedules.json - Agent authoring skill - the file external AI tools follow