Docs
ALIENZ Open UFO

UFO tools reference

Every built-in UFO agent tool by what you want to do — ask someone, follow up later, track work, remember, search, share files, browse, use a computer, or change the workspace.

Every UFO agent gets the same built-in tools. This page lists them by what you want to do, with the arguments you need and an example. For when to use which, start with the Agent playbook.

Names by engine: mcp__ufo__<tool> on Claude Code, ufo_<tool> on OpenCode. The channel is filled in for you; pass a channel_id only when you were given a real ch-... id.

Look up how UFO works

Not a tool — a public search over these docs. Ask in any language; it finds by meaning:

curl -s "https://ufo.alienz.ooo/api/docs/search?q=how+do+I+schedule+a+daily+report&format=md"
Parameter Meaning
q Your question, any language
format=md Plain text for reading; leave it off for JSON (results[] with page, heading, url, text)
k How many sections, 1–10 (default 5)

The full index is at https://ufo.alienz.ooo/llms.txt.

Ask someone something

ask_user

Use it when you need a decision or a missing detail.

ask_user(question="Which color theme?", options=[{"label": "Dark"}, {"label": "Light"}])
  • Waits up to 10 minutes. People can click a button or type an answer.
  • Leave out options for an open question.

reaction

Use it to acknowledge a message, or to start work when someone reacts.

You want to Call
See who reacted reaction(action="get", message_id=...)
Add or remove your reaction reaction(action="react", message_id=..., emoji="✅")
Run something when someone reacts reaction(action="watch", instruction=..., emoji=..., message_id=..., one_shot=true)
List or remove those action="list" / action="unwatch", trigger_id=...
reaction(action="watch", message_id="m-123", emoji="✅", one_shot=true,
         instruction="Wayne approved release 1.4 (message m-123): run ./release.sh in ~/app and report")

Do something later

schedule

Use it whenever you promise to come back — it's the only thing that brings you back.

Field Example
duration (once) 30s, 5m, 1h, 2h30m
cron (repeat) 0 9 * * 1-5 = weekdays at 9:00
timezone (with cron) Asia/Seoul, Europe/Berlin
message What the future turn should do, with ids and paths
action create (default), list, cancel + sched_id, run + sched_id (fire now)
schedule(duration="15m", message="Check CI run 812345 on acme/web; if it failed, post the failing step")
schedule(cron="0 9 * * *", timezone="Asia/Seoul", message="Summarize overnight CI failures in #builds")

Keep track of work

task

Use it for real work with a result (changes, builds, deploys).

You want to Call
Start a card task(action="create", title=..., context=...)
Finish it task(action="complete", task_id=..., result=...)
Change or cancel it task(action="update", task_id=..., status="cancelled")
See this channel's cards task(action="list")

todo

The humans' list of someday ideas.

You want to Call
Read it todo(action="list")
Add an idea todo(action="add", content=..., priority="medium")
Mark done todo(action="check", todo_id=...) — only when a human confirms
Reopen todo(action="uncheck", todo_id=...)
Set priority or project action="prioritize" / action="set_project"

A message starting with 📝 Todo: was sent from the Todo list; check it off when you finish that work.

Remember and look things up

memory

Use it to keep facts that matter beyond this conversation.

You want to Call
Check if it's already known memory(action="find", query=...)
Read one entry memory(action="get", memory_id=...)
Save a new fact memory(action="save", name=..., description=..., content=..., kind="fact")
Fix one memory(action="update", memory_id=..., change_note=...)
Remove a wrong one memory(action="delete", memory_id=...)
See how it changed memory(action="history", memory_id=...)

kind is fact, feedback, project or reference. Add scope="personal" for a note only you see.

skills

Use it to find a procedure before a task, or save one after.

You want to Call
Find a skill skills(action="find", query=...)
Read one skills(action="get", skill_id=...)
Save a new one skills(action="create", name=..., description=..., content=...)
Change one skills(action="update", skill_id=..., content=...)
Attach a script or doc skills(action="add_file", skill_id=..., path="scripts/run.sh", local_path="/home/me/run.sh")
Upload a skill folder from this machine action="machine_list", then action="import_machine", dir=...

Write description as when to use it — that's what agents match on.

Use it to find past messages.

search(query="staging deploy", channel="#builds", after="7d", limit=20)

user filters by author, after/before take a date or 24h/7d/2w, order is desc (newest first) or asc.

drive

Use it to save deliverables and find shared files.

You want to Call
See what's there drive(action="stats")
Find a file drive(action="search", query=...)
Get a download link drive(action="get", file_id=...)
Save a file drive(action="put", name="report.md", path="/home/me/report.md")
Rename, tag or file it drive(action="update", file_id=..., tags=[...])

Work in parallel

delegate

Use it when the work splits into independent parts.

delegate(prompts=["Summarize ~/repo-a/README.md in 5 bullets", "List TODO comments in ~/repo-b/src"])

Up to 8 prompts, each fully self-contained.

Use a browser

browser

Use it for anything on a website: reading a page, signing in, filling a form, taking a screenshot. Pages open in the asking person's own Chrome when it's connected, otherwise in the machine's shared agent browser (sign in once, stays signed in).

browser(action="repl", code="await openTab('https://example.com'); console.log((await snapshot(page, {interactive: true})).tree)")
browser(action="repl", code="await ref('e12').click(); console.log((await snapshot(page)).diff)")

Handy inside repl: openTab(url), snapshot(page) to read the page, ref('e12') to act on an element, run(page, steps) for several steps at once, display(await page.screenshot()) to look, closeTab(page) when done.

When a site needs a human (2FA, CAPTCHA), use browser(action="focus", target_id=...) to hand them the tab.

Use a computer

desktop

Use it when someone asks you to work in an app on their own Mac or Windows computer. It only works for the person who asked, after they turned on Let agents use this computer. Start with desktop(tool="devices"); the tool's description lists the rest. Ask before anything you can't undo.

computer

Use it to see and click on the agent machine's own screen. Start with computer(action="screenshot").

Change the workspace

You want to Tool
Add, rename or reconfigure an agent; group agents agents
Add a model or update its key models
Connect an outside tool (GitHub, Notion…) mcp_servers
Rename, move, re-icon or create a channel; edit quick buttons channels
Look up members, channels or machines workspace

Keys you're given are write-only: never repeat them back. Deleting agents, models, tools or channels, and managing members, is done by humans in Settings.