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/.
Package layout
Section titled “Package layout”The directory name is the agent slug (lowercase, hyphenated). AGENT.md sits directly inside it.
nav-analyst/├── AGENT.md # Required├── schedules.json # Optional└── avatars/ └── avatar.png # Optional; frontmatter icon points hereUpload folder on a namespace you created. Fontana keeps the tree and registers the agent. The id is <namespace>/<folder>, for example finance/nav-analyst when you upload this folder into finance.
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.
Upload
Section titled “Upload”- Open AI → Agent packages (
/ai/agents). - Select 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 registers the same way. 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 |
| skills | No | Abilities and skills you enable, with their settings |
| 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”skills maps a catalog id to that ability’s settings. Listing the id turns it on.
skills: system/knowledge-graph: {} system/agents: agents: - system/fontana-agentsystem/knowledge-graph loads on the first turn. Add autoLoad: true on another entry only when that package must be present from the first message.
| Catalog id | Settings |
|---|---|
system/knowledge-graph |
namespaces, autoSearchKg, kbInjectionScoreThreshold |
system/agents |
agents (ids, or *) |
system/workflows |
autoSearchWorkflows (Projects) |
system/email |
allowReceive, allowSend, receiveWhitelist, sendWhitelist |
system/messaging |
Slack: messagingWhitelist, slackInstallationId, toolSubset |
system/teams |
channelWhitelist, freeResponseChannels, requireMentionInThread, allowBots |
system/coding, system/fontana-browser |
toolSubset |
system/files, system/data, system/agent-memory, system/workflow-documents, system/system-one |
none ({}) |
system/mcp-<slug> |
{} or toolSubset, for an MCP connection already in the workspace |
<namespace>/<your-skill> |
Settings that skill declares. See Skills |
Include system/fontana-agent under system/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 system/agents.
These older keys fail ingest. Put the same choices on the abilities above: tools, subagents, handoffAgents, knowledgeGraphNamespaces, autoSearchKg, autoSearchWorkflows, kbInjectionScoreThreshold, emailSendWhitelist, messagingWhitelist. 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”Listing an ability grants the calls below. A chat agent already has the first table, so those calls are not skills 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 skills this agent may activate. |
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 system/agents 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 system/agents with the target ids in agents.
Calls an ability adds
Section titled “Calls an ability adds”system/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. |
system/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. |
mcp_ffs_ffs_list_collections |
List Fontana Files collections you can read. |
mcp_ffs_ffs_create_collection |
Create a collection. |
mcp_ffs_ffs_delete_collection |
Delete a collection. |
mcp_ffs_ffs_read_file |
Read a text file in a collection. |
mcp_ffs_ffs_write_file |
Write or replace a file. |
mcp_ffs_ffs_list_files |
List files and folders. |
mcp_ffs_ffs_delete_file |
Delete a file or an empty folder. |
mcp_ffs_ffs_history_log |
History for a path or a collection. |
mcp_ffs_ffs_history_show |
Show one commit. |
mcp_ffs_ffs_history_revert_path |
Restore a path to an earlier commit. |
mcp_ffs_ffs_history_revert_collection |
Restore a whole collection. |
system/data: data_listResources lists what a workflow run produced, data_queryData queries those rows, and data_queryWorkflow reads one part of the workflow configuration. Each call needs the workflow id from the conversation, not a placeholder.
system/workflows: workflow_listUserWorkflows resolves a workflow you own, workflow_searchWorkflows finds templates, and workflow_startWorkflowRun starts a run you asked for.
system/workflow-documents: create, read, update, rename, and delete the markdown tabs on a workflow (workflow_createWorkflowDocument, workflow_readWorkflowDocument, workflow_updateWorkflowDocumentContent, workflow_renameWorkflowDocument, workflow_deleteWorkflowDocument).
system/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). The agents setting is who this agent may hand work to.
system/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.
system/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. |
system/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.
system/coding runs code in an isolated sandbox. mcp_session_open starts one, 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 session that sits idle for 30 minutes ends, and none last more than 4 hours. The sandbox does not see your Fontana data unless the agent passes that data in.
system/fontana-browser reads and drives live pages. 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_.
system/agent-memory: knowledge_addMemory remembers a durable fact for this agent, and knowledge_forgetMemory removes one.
system/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 system/mcp-<slug>, using that connection’s slug. An empty settings object loads every tool the connection has discovered. toolSubset limits Slack, Coding, Fontana Browser, and these extra connections to the mcp_<slug>_<tool> ids you name.
Page abilities, including system/mcp-admin and system/skills-admin, stay on Fontana agent. Leave them off a specialist package.
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/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: - chatskills: system/knowledge-graph: {} system/agents: agents: - system/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/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 - playbooks you assign in
skills - Agent schedules -
schedules.json - Agent authoring skill - the file external AI tools follow