
ae-system
AE Agent system administration CLI for root and agent administrators. Use when the user asks to manage Agent members, sandboxes and shared tools, company model visibility/defaults/pricing, usage statistics and exports, cost quotas, balance alerts, IM channels, channel routing, WhatsApp Web linking, or Feishu user bindings. Must use ae-cli system commands, discover real IDs before writes, and never attempt to bypass a permission denial.
- Installs
- 744
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/thinkingaiagenticengine/ae-cli --skill ae-system- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads ae-system automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
ae-system
Use the system domain for Agent system administration:
ae-cli system +<command> [options]
ae-cli system <resource> <action> [options]
Mandatory Rules
- These commands are only for users whose Agent role is
rootoragent_admin. - The te-agent
/api/admin/**and/api/cli/channel/v1/**endpoints are the final authorization boundaries. A member receives a permission error (HTTP 403). Do not retry login or attempt a different endpoint after a 403. - Run
ae-cli auth login --host <host>before using this domain. System administration requires a valid user CLI-token session; sandbox identity headers are not an authorization substitute. +npm-installis the exception that must also run inside a Linux te-agent sandbox because it packages the installed Linux files. It still requires the logged-in user to berootoragent_admin.- Discover real IDs with a list command before any update or delete. Never guess a user, sandbox, model, quota rule, or channel ID.
- Before every write, run
--dry-run, show the target and effect, and obtain explicit user confirmation. The CLI itself prompts only forhigh-risk-write;--yescan bypass that prompt and is not a security boundary. - Use
--dry-runto inspect method, path, query, and redacted body without executing. - JSON inputs accept inline JSON,
@file, or-for stdin. Prefer@filefor channel credentials and other sensitive values. - Successful output is JSON by default. Use
--format tableonly when a human-readable table is more useful. - After each command, check stderr and
_notice.host_compat. If present, show the version warning and its update commands before the business result. - Do not treat an absent ae-cli command as proof that an HTTP endpoint is unreachable. An Agent with Bash/network access can construct requests directly; server authentication, role checks, company isolation, and resource ownership are the actual controls.
- Do not call
DELETE /api/admin/members?openId=...or/api/internal/sandboxes/**through ad-hoc HTTP. They are intentionally excluded from this Skill because other systems own those integration contracts.
Command Groups
Members
| Command | Risk | Purpose |
|---|---|---|
+list-member-candidates | read | List AE company users that can be added. |
+list-members | read | List Agent members in the current company. |
+add-members | write | Add one or more AE users, optionally binding a quota rule or creating sandboxes. |
+set-member-status | write | Enable or disable a member. |
+set-member-role | write | Change a non-root member between agent_admin and member. |
+remove-member | high-risk-write | Remove a non-root member. |
+get-member-stats | read | Get one member's token usage and recent conversation count. |
Examples:
ae-cli system +list-members --status enabled --page 1 --page-size 20
ae-cli system +add-members \
--members '[{"openId":"ou_x","loginName":"alice","displayName":"Alice"}]' \
--create-sandbox true
ae-cli system +set-member-role --user-id <user-id> --role agent_admin
+list-members filters:
--q: login/display name search.--status:all | enabled | disabled.--page,--page-size: page size is 1-100.--all: return all matches.--sort-field periodUsedAmount,--sort-dir asc|desc: central usage sort.
+add-members --members schema:
[
{
"openId": "required",
"loginName": "optional",
"displayName": "optional"
}
]
Optional flags are --rule-id and --create-sandbox true|false.
Sandboxes
| Command | Risk | Purpose |
|---|---|---|
+list-sandboxes | read | List company sandboxes. |
+get-sandbox-config | read | Read feature status and create/active seat limits. |
+batch-create-sandboxes | write | Create personal sandboxes for 1-100 users. |
+update-sandbox | write | Update a sandbox description. |
+set-sandbox-enabled | write | Enable or disable a sandbox. |
+start-sandbox | write | Start a sandbox container. |
+stop-sandbox | write | Stop a sandbox container. |
+list-sandbox-users | read | List users bound to a sandbox. |
+bind-sandbox-user | write | Bind a member to a sandbox. |
+unbind-sandbox-user | high-risk-write | Remove a sandbox user binding. |
+remove-sandbox | high-risk-write | Delete a sandbox and its bindings. |
Examples:
ae-cli system +batch-create-sandboxes \
--user-ids '["<user-id-1>","<user-id-2>"]' \
--description "Data team"
ae-cli system +set-sandbox-enabled --id <sandbox-id> --enabled true
ae-cli system +bind-sandbox-user --id <sandbox-id> --user-id <user-id>
Use Agent database user IDs from +list-members, not AE openIds, for sandbox commands.
Shared Sandbox Tools
| Command | Risk | Purpose |
|---|---|---|
+upload-sandbox-tool | write | Validate, ZIP, and upload an existing tool directory. |
+npm-install | write | Install one exact npm CLI version in a temporary sandbox directory, generate tool.json, and upload it. |
+list-sandbox-tools | read | List preset and custom tools for the current company. |
+sync-sandbox-tools | write | Synchronize preset tools from the server manifest. |
+get-sandbox-tool-distribution | read | Read the sandboxes currently receiving one tool. |
+set-sandbox-tool-enabled | write | Enable or disable one registered tool. |
+remove-sandbox-tool | high-risk-write | Delete a fully reclaimed tool registration. |
+activate-sandbox-tools | write | Activate selected commands on selected or all running sandboxes. |
+deactivate-sandbox-tools | write | Remove managed command shims from selected or all running sandboxes. |
+refresh-sandbox-tool-status | write | Refresh observed tool state on target sandboxes. |
+list-sandbox-tool-operations | read | List activation/deactivation history. |
Uploaded tools are registered for the current company with enabled=false. Upload does not activate the tool in any running sandbox. Review and enable/activate it through sandbox tool management after upload.
For activate/deactivate/status operations:
ae-cli system +activate-sandbox-tools \
--target-mode selected \
--sandbox-ids '["<sandbox-id>"]' \
--tool-ids '["<tool-id>"]'
--target-mode selectedrequires 1-50--sandbox-ids;all-runningforbids them.--tool-idscontains 1-20 real IDs from+list-sandbox-tools.--command-names-by-tool-idoptionally limits an operation to named commands.--expected-tool-snapshots-by-idcarries the version/package/command snapshot returned by the server for optimistic concurrency checks.- JSON maps accept inline JSON,
@file, or stdin. Use dry-run and user confirmation before distribution changes.
Preferred npm Flow
Run this inside the target Linux te-agent sandbox:
ae-cli auth login --host <host>
ae-cli system +npm-install --package eslint@9.32.0
For a scoped package or a custom shared-tool identifier:
ae-cli system +npm-install \
--package @scope/example-cli@1.2.3 \
--name example-cli
Requirements and behavior:
--packagemust be an exact registry package version. Tags, ranges, URLs, Git sources, npm aliases, and local paths are rejected.- The installed package must expose at least one
package.jsonbinentry. Each bin becomes one tool command. - The default tool name is the unscoped package name. Use
--nameonly when a different valid lowercase tool identifier is required. - npm lifecycle scripts are disabled with
--ignore-scriptsby default. Use--allow-scripts trueonly after reviewing and trusting the package and all transitive dependencies. - The command calls the admin upload-policy endpoint before starting npm. A disabled feature, expired session, or non-admin role fails before installation.
- Installation uses a temporary prefix with development dependencies omitted. Temporary installation and ZIP files are removed whether upload succeeds or fails.
- npm-created
node_modules/.binsymlinks are converted to regular executable wrappers in the ZIP. All other symlinks, special files, and links resolving outside the package root are rejected. - Pure JavaScript Node.js CLIs are the supported baseline. Packages that require native addons, downloaded platform binaries, build tools, system libraries, or lifecycle setup may fail when scripts are disabled or when activated in a different runtime image.
- If lifecycle scripts are necessary, install and upload from the same Linux sandbox image family that will execute the tool. Upload never makes an incompatible native artifact portable.
Existing Directory Flow
Use the low-level command when the tool is already installed or assembled:
ae-cli system +upload-sandbox-tool --path /absolute/path/to/tool-root
The directory root must contain exactly one tool.json. An external manifest is allowed only when the root has no tool.json:
ae-cli system +upload-sandbox-tool \
--path /absolute/path/to/tool-root \
--manifest /absolute/path/to/tool.json
Minimal manifest:
{
"schemaVersion": 1,
"name": "example-cli",
"displayName": "Example CLI",
"description": "Optional description",
"version": "1.2.3",
"commands": [
{
"name": "example",
"entry": "node_modules/example-cli/bin/example.js",
"runtime": "node"
}
]
}
Upload contract:
nameand command names must start with a lowercase letter and contain only lowercase letters, numbers,.,_, or-, with a maximum length of 64.- Command names must not replace reserved runtime commands such as
node,npm,npx,bash,python,git,curl, orsudo. - Every command
entrymust be a regular file under the upload root. Useruntime: "node"for JavaScript entry files andruntime: "native"only for an executable compatible with the sandbox Linux image. - Paths must be relative and normalized. Absolute paths,
.., backslashes, control characters, empty segments, and acurrentpath segment are rejected. - ZIP limits are 50 MB compressed, 500 MB unpacked, 50 MB per file, and 10,000 files. The server publishes only after independently validating the same boundaries.
- Do not pre-create or write
/data/app/te_agent_ta/share/toolsfrom a sandbox. Sandboxes are read-only for that directory; the authenticated te-agent upload endpoint owns the final write and registration. - A tool name can be registered only once per company in this first static-version flow. Choose the final name and version before upload.
Models
| Command | Risk | Purpose |
|---|---|---|
+list-system-models | read | List system models and company visibility. |
+set-system-model-enabled | write | Toggle a system model for the current company. |
+get-model-sync-settings | read | Read the default visibility policy for newly synchronized system models. |
+set-model-sync-settings | write | Update the new-system-model visibility policy. |
+get-system-model-price-rules | read | Read one managed system model's stored pricing snapshot. |
+list-company-models | read | List company models, including disabled models. |
+set-company-model-enabled | write | Toggle a company model for all company users. |
+get-default-models | read | Read the AE_AGENT and AI_QA default slots. |
+set-default-model | write | Set one default model slot. |
+clear-default-model | high-risk-write | Clear one default model slot. |
Examples:
ae-cli system +list-system-models
ae-cli system +set-system-model-enabled --model-id <model-id> --enabled false
ae-cli system +set-default-model --model-id <model-id> --biz-type AE_AGENT
--biz-type is AE_AGENT | AI_QA and defaults to AE_AGENT. Use the database id returned by a model list, not the provider model name.
Usage
| Command | Risk | Purpose |
|---|---|---|
+get-usage-summary | read | Get token/cost summary for a relative or absolute range. |
+get-usage-details | read | Get paginated usage grouped by user, model, date, or application type. |
+get-agent-tool-calls | read | Get Agent tool-call count for a range, optionally refreshing the cache. |
+get-usage-combinations | read | Drill one parent group into the remaining dimensions. |
+export-usage | read | Stream filtered one-dimension usage groups to CSV. |
+export-usage-details | read | Stream full or drill-down multi-dimension details to CSV. |
Examples:
ae-cli system +get-usage-summary --days 30
ae-cli system +get-usage-summary --days 30 --refresh true
ae-cli system +get-usage-details \
--start-date 2026-07-01 \
--end-date 2026-07-24 \
--group-by user \
--page 1 \
--page-size 20
ae-cli system +get-usage-combinations \
--start-date 2026-07-01 \
--end-date 2026-07-24 \
--parent-dimension user \
--open-id <open-id>
ae-cli system +export-usage \
--start-date 2026-07-01 \
--end-date 2026-07-24 \
--group-by user \
--output ./system-usage.csv
Summary range:
- Use
--days 1..365, or provide both--start-dateand--end-date. - Dates use
YYYY-MM-DD. - Do not combine
--dayswith an absolute date pair. --refresh trueis available on+get-usage-summaryand+get-agent-tool-callsand bypasses the overview cache.
Details flags:
--start-dateand--end-dateare required.--group-by:user | model | date | app_type.- Optional filters:
--search,--open-id,--model-id,--model-scope,--app-type. --model-scoperequires--model-id.--sort-by:totalTokens | cost | share | requestCount.--sort-dir:asc | desc.
Combination drill-down requires exactly one parent selector:
user→--open-idonly.model→--model-idand--model-scopeonly.app_type→--app-typeonly.date→--dateonly, inside the selected range.
CSV exports require an explicit --output. The target is created exclusively: an existing file is never overwritten, and an HTTP or stream failure removes the incomplete file. The JSON result reports the absolute local path, bytes written, server filename, and content type.
Cost Control
| Command | Risk | Purpose |
|---|---|---|
+get-cost-summary | read | Get company cost, quota, and usage summary. |
+get-balance | read | Get the current model account balance and currency. |
+list-over-limit-users | read | List members over cost or token quota limits. |
+get-balance-alert | read | Get balance alert config and current status. |
+set-balance-alert | write | Enable, update, or disable the balance alert. |
+list-quota-rules | read | List cost/token quota rules. |
+create-quota-rule | write | Create a company or user quota rule. |
+update-quota-rule | write | Update a quota rule. |
+remove-quota-rule | high-risk-write | Delete a quota rule. |
+bind-quota-rule-user | write | Bind a quota rule to a AE user openId. |
Examples:
ae-cli system +set-balance-alert --enabled true --threshold 100
ae-cli system +create-quota-rule --rule @quota-rule.json
ae-cli system +bind-quota-rule-user --id <rule-id> --open-id <open-id>
Quota rule JSON:
{
"name": "Daily user quota",
"subjectType": "USER",
"periodType": "DAY",
"quotaType": "TOKEN",
"totalTokens": "10",
"allowedModels": ["<model-id>"],
"modelLimits": [
{
"modelId": "<model-id>",
"limitTokens": "5"
}
],
"openIds": ["<open-id>"]
}
Rules:
subjectType:USER | COMPANY.periodType:DAY | WEEK | MONTH.quotaType:COST | TOKEN.- COST uses
budgetAmount; TOKEN usestotalTokens. Token values are expressed in millions. allowedModelsandmodelLimitsare optional according to the server rule type.- Update accepts a partial rule object.
Channels
For channel setup, routing, WhatsApp Web linking, or Feishu user binding, read references/channel-management.md before taking action. It defines the two confirmation phases and the ae-cli plus Feishu OpenAPI MCP workflow.
| Command | Risk | Purpose |
|---|---|---|
+list-channels | read | List all configured channels. |
channel get | read | Read one channel, its verification state, and endpoints. |
+create-channel | write | Create one channel. |
+update-channel | write | Update channel settings, credentials, model, prompt, or enabled state. |
+remove-channel | high-risk-write | Delete a channel, unbind users, and stop its connection. |
channel verify | write | Verify credentials and discover endpoints. |
channel routing get | read | Read one endpoint's group message routing. |
channel routing set | write | Replace one endpoint's group message routing. |
channel whatsapp-web status | read | Read a WhatsApp Web link state and QR data. |
channel whatsapp-web start | write | Start or resume WhatsApp Web QR linking. |
channel whatsapp-web unlink | high-risk-write | Unlink WhatsApp Web and remove stored credentials. |
channel binding list | read | List channel user bindings. |
channel binding bind-feishu | write | Bind one Feishu user. |
+bind-feishu-users | write | Bind 1-100 Feishu users and optionally assign Agents. |
channel binding unbind | high-risk-write | Delete one channel user binding. |
channel binding set-agent | write | Set or clear one binding's private-chat default Agent. |
Use canonical snake_case request fields. The four original commands also accept their legacy camelCase JSON fields for compatibility. Always use @file for credentials and batch rosters:
ae-cli system +create-channel --channel @channel.json
ae-cli system +update-channel --id <channel-id> --channel @channel-update.json
ae-cli system +bind-feishu-users \
--channel-id <channel-id> \
--endpoint-id <endpoint-id> \
--bindings @bindings.json
Permission Errors
A permission response looks like:
{
"ok": false,
"error": {
"type": "permission",
"message": "..."
}
}
On this response:
- Do not retry with another admin path.
- Do not recommend re-login unless the server returned 401 instead.
- Tell the user that
rootoragent_adminis required.
An authenticated root or agent_admin is still scoped to their own company. The current service checks the database role and company against the session, and audited member, channel, sandbox-tool, and sandbox-management routes apply company/resource ownership checks. Never use that statement as a claim that every unreviewed admin route is safe.
Transport Status
This is a Transitional domain backed by te-agent /api/admin/** and /api/cli/channel/v1/**.
- Maintainer: te-agent admin/channel-management routes and
src/commands/te-system/**. - Migration target: system and channel Capability Gateways.
- Review date: 2026-10-24.
- Exit condition: migrate after equivalent gateway schema, auth, risk, dry-run, and output contracts are stable.
FAQ
What does the ae-system skill do?
AE Agent system administration CLI for root and agent administrators. Use when the user asks to manage Agent members, sandboxes and shared tools, company model visibility/defaults/pricing, usage statistics and exports, cost quotas, balance alerts, IM channels, channel routing, WhatsApp Web linking, or Feishu user bindings. Must use ae-cli system commands, discover real IDs before writes, and never attempt to bypass a permission denial.
How do I install ae-system?
Run npx skills add https://github.com/thinkingaiagenticengine/ae-cli --skill ae-system in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/ae-system/ (personal) or .claude/skills/ae-system/ (project).
Which AI agents can use ae-system?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is ae-system safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains ae-system?
It is published by thinkingaiagenticengine in thinkingaiagenticengine/ae-cli. It has 744 recorded installs.
More from thinkingaiagenticengine/ae-cli
ae-analysis
thinkingaiagenticengine/ae-cli
Use ae-cli for AE analysis-side data questions, asset operations, and asset governance: reports, analysis boards, BI dashboards, ad-hoc models, drilldown, detail data, alerts, clusters, tags, metrics, metadata discovery, project configuration, tracking plans, local input-file upload, governance asset lists/rules/lineage/impact/dependency, batch asset operations, projects, and resource links. Use when the user asks to query data, explain a change, export evidence, inspect/create/update/govern analysis assets, recommend project assets for certification/authentication, review asset-certification recommendations, review metric recommendations, or build/update/refresh/sync a project semantic knowledge base from a governed asset package.
ae-dataops
thinkingaiagenticengine/ae-cli
Use ae-cli for DataOps warehouse tables/views and fields, recycling, workflow configuration and release, execution troubleshooting, backfill, SQL queries, and data integration.
ae-engage
thinkingaiagenticengine/ae-cli
AE Engage capability gateway: config center, flows, push/config channels, strategies, templates, task management, operation activities, and query lifecycle. Trigger words: config center, scene config, push channel, config channel, operation strategy, operation task, operation activity, query lifecycle, template, config item, Engage, Hermes, engage-scene, engage-setting, engage-flow, engage-task, engage-activity, engage-query.
ae-community
thinkingaiagenticengine/ae-cli
AE community analysis and data reporting for posts, comments, topics, livestreams, customer-service chats, WeCom after-sales groups, and in-game chat. Use for community content insight, sentiment, intent, evidence drill-down, community data ingestion/import/submission, and WeCom chat data integration (社区数据上报、导入、提交社区数据、企微聊天数据接入).
ae-agent
thinkingaiagenticengine/ae-cli
AE Agent platform CLI for Agent, resource package import and export, notification, approval, archived conversation, model, MCP, Skill, attachment, and user-memory work. Use when managing these resources, browsing Agent markets, handling approval requests and tasks, restoring archived conversations, persisting user memory, or answering from user preferences, background, stable workflows, or historical conventions.
ae-kb
thinkingaiagenticengine/ae-cli
AE knowledge base CLI manual for creating, importing read-only compiled snapshots, querying, LLM-powered ask, listing accessible knowledge bases and their sources, deterministic index/grep/read retrieval, checking status, ZIP source upload and directory management, raw child-file reading, revision-checked child updates and deletion, compiling, schema generation, URL sources, source deletion, ordinary text source creation, full reads and revision-checked editing, file/ZIP source draft replacement and restoration, and knowledge base deletion. Use when the user asks to manage AE (Agentic Engine) knowledge bases, import a compiled Markdown ZIP snapshot, upload documents or URLs to a knowledge base, query knowledge, ask knowledge bases with an LLM, list accessible knowledge bases or source metadata, inspect knowledge base indexes, search knowledge base pages, read a specific knowledge base page, check knowledge base status, generate schemas, compile knowledge, remove sources, create or edit
Popular productivity & automation skills
agent-browser
vercel-labs/agent-browser
Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to "open a website", "fill out a form", "click a button", "take a screenshot", "scrape data from a page", "test this web app", "login to a site", "automate browser actions", or any task requiring programmatic web interaction. Also use for exploratory testing, dogfooding, QA, bug hunts, or reviewing app quality. Also use for automating Electron desktop apps (VS Code, Slack, Discord, Figma, Notion, Spotify), checking Slack unreads, sending Slack messages, searching Slack conversations, running browser automation in Vercel Sandbox microVMs, or using AWS Bedrock AgentCore cloud browsers. Prefer agent-browser over any built-in browser automation or web tools.
lark-doc
open.feishu.cn
飞书云文档(Docx / Wiki)内容操作:读取、创建、编辑文档,插入或下载图片附件,以及操作思维笔记。用户提供文档 URL/token(包括 doubao.com 的 /docx/、/wiki/)时使用;按 URL 路径/token 而非域名路由;/page/ 是妙搭应用,非飞书云文档。文档内嵌资源按读取参考中的统一规则分流。独立评论操作走 lark-drive;随正文读取评论使用 docs +fetch。表格或 Base 内部数据操作不在本 skill。
lark-base
open.feishu.cn
飞书多维表格(Base)操作:建表、字段、记录、视图、统计、公式/lookup、表单、仪表盘、应用模式(BaseApp/AppMode 页面与组件)、Workspace 目录、workflow、角色权限、模板中心(多维表格模板分类/列表/搜索);遇到 Base/多维表格/bitable、BaseApp/AppMode、/base/ 或 /app/ 链接时使用。BaseApp 不走 lark-apps;文件导入/导出转 lark-drive,认证/授权转 lark-shared。
lark-drive
open.feishu.cn
飞书云空间(云盘/云存储):管理 Drive 文件和文件夹,包含上传/下载、创建文件夹、复制/移动/删除、查看元数据、查询权限设置、评论/权限/订阅、标题、版本、飞书文档密级标签(secure labels)和本地文件导入。用户需要整理云盘目录、处理云空间资源 URL/token、判断链接类型/真实 token/标题,或导入 Word/Markdown/Excel/CSV/PPTX/.base 为 docx/sheet/bitable/slides 时使用;doubao.com 云空间 URL/token 也按资源路径和 token 路由,不回退 WebFetch。不负责:文档内容编辑(走 lark-doc)、表格/Base 表内数据操作(走 lark-sheets/lark-base)、知识空间节点/成员管理(走 lark-wiki)、原生 Markdown 文件读写/patch/diff(走 lark-markdown)。
lark-shared
open.feishu.cn
Use for lark-cli setup/auth tasks: auth login/status/logout, user vs bot identity, business-domain permissions (--domain, including all/docs/drive), missing scopes, revoking authorization, or handling notice JSON.
lark-im
open.feishu.cn
飞书即时通讯:收发消息和管理群聊。发送和回复消息、搜索聊天记录、管理群聊成员、上传下载图片和文件、管理表情回复、发送应用内/短信/电话加急、发送和处理交互卡片(Interactive Card)、监听卡片按钮回调(card.action.trigger)。当用户需要发消息、查看或搜索聊天记录、下载聊天中的文件、查看群成员、搜索群、创建群聊或话题群、管理标记数据、管理 Feed 置顶(添加/移除/查询置顶会话)、管理标签数据、处理卡片回调时使用。