Skip to content

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.

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 here

Upload 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.

  1. Open AI → Agent packages (/ai/agents).
  2. Select the agents/ folder of a namespace you created.
  3. Choose Upload folder and select the package directory (the one that contains AGENT.md).
  4. 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.

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 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-agent

knowledge-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 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
- finance
skillAutoLoad:
finance/skills/report: true

These 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.

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.

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.

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 as personal/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.

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.

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.

---
title: NAV Analyst
role: NAV analyst
description: Reviews NAV packs and explains breaks in plain language for the fund accounting team.
vectorSource: NAV analyst net asset value breaks reconciliation
model: ""
scopes:
- chat
abilities:
knowledge-graph:
enabled: true
namespaces:
- "*"
agents:
enabled: true
agents:
- system/agents/fontana-agent
isActive: true
permissions:
- "*"
reasoningEffort: high
callSettings:
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.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 * * *" }
}
]
}