Atlas Tracker Skill
Atlas Tracker (app.redforester.com) is a graph-based knowledge system combining mindmaps, Kanban, and structured properties. This skill covers working with it via the OpenClaw AT plugin tools.
Setup
This skill requires two components to be installed and running:
1. AT MCP Server
A local Node.js server that proxies requests to the Atlas Tracker REST API.
The AT MCP server is maintained by the Atlas Tracker / RedForester team.
Contact @gmdidro (Telegram) or visit app.redforester.com to request access.
Once you have the server files:
CODEBLOCK0
The server listens on http://localhost:3222 by default.
Required environment variables (set in the service file or .env):
CODEBLOCK1
2. OpenClaw Plugin
Copy the plugin file to your OpenClaw extensions directory:
CODEBLOCK2
Then configure the plugin in your openclaw.json:
CODEBLOCK3
OpenClaw will hot-reload the plugin automatically. Verify with:
openclaw status
You should see
at_read_branch,
at_create_branch,
at_update_branch,
at_get_node_types,
at_read_attachments listed as available tools.
Core Concepts
- - Map — a mindmap, identified by
mapId (full UUID) - Node — a single item in the map; has
id, title (HTML), optional typeId, typeProperties, INLINECODE13 - Branch — a node + all its descendants
- Node type — a schema defining available properties (enum, text, htmltext, file, user, date, etc.)
- Title format — always HTML:
<p>My title</p>, never plain text
Tool URLs
All tools take a nodeUrl in format:
https://app.redforester.com/mindmap?mapid=<UUID>&nodeid=<UUID>
Both
mapid and
nodeid must be
full UUIDs (e.g.
3d7340e8-c763-4c9e-b049-4e900b7cf565), never partial.
Workflow
Reading a branch
Always read before modifying — never assume structure:
CODEBLOCK6
Finding the right node
If you don't know a nodeId, search via AT REST API:
CODEBLOCK7
Creating branches
at_create_branch(parentNodeUrl, data)
data must include
children: [] even for leaf nodes — required field.
Updating branches
at_update_branch(nodeUrl, delete[], update[], create[])
- -
create items: INLINECODE22 - INLINECODE23 items: INLINECODE24
- All three arrays required (pass
[] if unused)
Node Types
Call at_get_node_types(nodeUrl) once per map session — types vary per map.
Common types: Идея, Задача, Заметка, Категория, Проект, Этап, Заявка, Лид.
For typed nodes, typeProperties keys must exactly match the property names from at_get_node_types.
Critical Rules
- 1. Full UUIDs only — partial IDs (e.g.
b319f356) will return 404 children: [] required — omitting it causes validation error on create- HTML titles — wrap in
<p>...</p>; use <ul><li>...</li></ul> for lists - Read before write — always
at_read_branch first to get current state and node IDs - 403 = permission denied — you can only write nodes owned by your AT account; read access may be broader
- Large maps are slow — avoid full subtree reads on large maps; use search + targeted node reads instead
Common Patterns
Add children to existing node
- 1.
at_read_branch to get parent nodeId and confirm it exists - INLINECODE35 with INLINECODE36
Batch create a solution tree
Use
at_create_branch with nested
children[] to create the full tree in one call.
Update node content
- 1.
at_read_branch to get current node id and properties - INLINECODE40 with INLINECODE41
Create a link node (shortcut/reference)
A link node is a reference to an existing node — it appears in the map as a shortcut to the original. Useful for showing the same node in multiple places without duplicating it.
at_create_link_node(nodeUrl, originalNodeId)
- -
nodeUrl — URL of the parent where the link node should appear - INLINECODE43 — UUID of the existing node to reference
Example: place a reference to node abc-123 under parent node def-456:
CODEBLOCK11
Upload a file to a node
Attach any file (PDF, Excel, Word, image) to an AT node:
at_upload_file(nodeUrl, filePath)
- -
filePath — absolute local path to the file - Uploads via
PUT /api/files, then attaches as a type_id=10 property - Adds to existing files — does not overwrite
Work with comments
at_get_comments(nodeUrl) → list all comments (with thread structure)
at_add_comment(nodeUrl, text, replyToCommentId?) → add comment or reply to thread
at_update_comment(nodeUrl, commentId, text) → edit comment text
at_delete_comment(nodeUrl, commentId) → delete comment
Reference Files
- - api-patterns.md — REST API search, auth, node fetch patterns (read when you need to search nodes or call AT API directly)
- node-types-guide.md — property type reference (htmltext, enum, file, user, date, etc.) and how to set them (read when creating/updating typed nodes)
Atlas Tracker 技能
Atlas Tracker (app.redforester.com) 是一个基于图形的知识系统,结合了思维导图、看板和结构化属性。本技能涵盖通过 OpenClaw AT 插件工具使用该系统。
设置
本技能需要安装并运行两个组件:
1. AT MCP 服务器
一个本地 Node.js 服务器,用于代理请求到 Atlas Tracker REST API。
AT MCP 服务器由 Atlas Tracker / RedForester 团队维护。
联系 @gmdidro (Telegram) 或访问 app.redforester.com 请求访问权限。
获取服务器文件后:
bash
cd at-mcp/
yarn install
yarn build
直接运行
node build/index.js
或作为 systemd 用户服务运行(推荐)
cp at-mcp.service ~/.config/systemd/user/
systemctl --user daemon-reload
systemctl --user enable --now at-mcp
服务器默认监听 http://localhost:3222。
所需环境变量(在服务文件或 .env 中设置):
ATBASEURL=https://app.redforester.com/api
AUTH_HEADER=Basic
API_KEY=
PORT=3222
2. OpenClaw 插件
将插件文件复制到您的 OpenClaw 扩展目录:
bash
mkdir -p ~/.openclaw/extensions/atlas-tracker/
cp index.ts ~/.openclaw/extensions/atlas-tracker/
cp openclaw.plugin.json ~/.openclaw/extensions/atlas-tracker/
然后在您的 openclaw.json 中配置插件:
json
{
plugins: {
atlas-tracker: {
serverUrl: http://localhost:3222,
apiKey:
}
}
}
OpenClaw 将自动热重载插件。使用以下命令验证:
bash
openclaw status
您应该会看到 atreadbranch、atcreatebranch、atupdatebranch、atgetnodetypes、atread_attachments 列为可用工具。
核心概念
- - 地图 — 思维导图,由 mapId(完整 UUID)标识
- 节点 — 地图中的单个项目;具有 id、title(HTML)、可选的 typeId、typeProperties、children[]
- 分支 — 一个节点及其所有后代
- 节点类型 — 定义可用属性的模式(枚举、文本、HTML文本、文件、用户、日期等)
- 标题格式 — 始终为 HTML:
我的标题
,绝不能是纯文本
工具 URL
所有工具都接受以下格式的 nodeUrl:
https://app.redforester.com/mindmap?mapid=&nodeid=
mapid 和 nodeid 必须是完整 UUID(例如 3d7340e8-c763-4c9e-b049-4e900b7cf565),绝不能是部分 UUID。
工作流程
读取分支
修改前务必先读取——切勿假设结构:
atreadbranch(nodeUrl) → 返回包含子节点、类型和属性的节点树
查找正确的节点
如果您不知道 nodeId,通过 AT REST API 搜索:
bash
POST /api/search body: {query: ..., map_ids: [
]}
返回 hits[].id — 然后对每个候选节点执行 atreadbranch 以验证标题
创建分支
atcreatebranch(parentNodeUrl, data)
data 必须包含 children: [],即使是叶节点也需要——这是必填字段。
更新分支
atupdatebranch(nodeUrl, delete[], update[], create[])
- - create 项:{parentNodeId, data: {title, typeId?, typeProperties?, children: []}}
- update 项:{id, title?, typeProperties?, customProperties?}
- 三个数组都是必填的(如果不使用则传入 [])
节点类型
每个地图会话调用一次 atgetnode_types(nodeUrl)——类型因地图而异。
常见类型:想法、任务、笔记、类别、项目、阶段、申请、线索。
对于有类型的节点,typeProperties 的键必须与 atgetnode_types 中的属性名称完全匹配。
关键规则
- 1. 仅使用完整 UUID — 部分 ID(例如 b319f356)将返回 404
- children: [] 为必填 — 省略会导致创建时验证错误
- HTML 标题 — 用
...
包裹;列表使用 - 先读后写 — 始终先执行 atreadbranch 以获取当前状态和节点 ID
- 403 = 权限拒绝 — 您只能写入您的 AT 账户拥有的节点;读取权限可能更广
- 大地图速度慢 — 避免对大地图进行完整子树读取;使用搜索加目标节点读取代替
常见模式
向现有节点添加子节点
- 1. atreadbranch 获取父节点 ID 并确认其存在
- atupdatebranch 使用 create: [{parentNodeId: , data: {..., children: []}}]
批量创建解决方案树
使用 atcreatebranch 并嵌套 children[] 一次调用创建完整树。
更新节点内容
- 1. atreadbranch 获取当前节点 ID 和属性
- atupdatebranch 使用 update: [{id, typeProperties: {key: }}]
创建链接节点(快捷方式/引用)
链接节点是对现有节点的引用——它在地图中显示为原始节点的快捷方式。用于在不复制节点的情况下在多个位置显示同一节点。
atcreatelink_node(nodeUrl, originalNodeId)
- - nodeUrl — 链接节点应出现的父节点 URL
- originalNodeId — 要引用的现有节点的 UUID
示例:将节点 abc-123 的引用放在父节点 def-456 下:
atcreatelink_node(
https://app.redforester.com/mindmap?mapid=&nodeid=def-456,
abc-123
)
向节点上传文件
将任何文件(PDF、Excel、Word、图片)附加到 AT 节点:
atuploadfile(nodeUrl, filePath)
- - filePath — 文件的绝对本地路径
- 通过 PUT /api/files 上传,然后作为 type_id=10 属性附加
- 添加到现有文件——不会覆盖
处理评论
atgetcomments(nodeUrl) → 列出所有评论(含线程结构)
ataddcomment(nodeUrl, text, replyToCommentId?) → 添加评论或回复线程
atupdatecomment(nodeUrl, commentId, text) → 编辑评论文本
atdeletecomment(nodeUrl, commentId) → 删除评论
参考文件