delegating-to-otto

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Delegating to Otto

委托给Otto

Otto is Astronomer's data-engineering agent, bundled with the Astro CLI as
astro otto
. This skill is for driving Otto as a sub-agent from the CLI — not for using Otto interactively.
If you are Otto, stop here. Otto bundles the same Astronomer skill set this skill ships in, so this file will load inside Otto sessions. Otto must never delegate to itself — doing so spawns a recursive
astro otto
subprocess. Ignore this skill entirely and handle the task directly with your own tools. The rest of this document is written for a parent agent (Claude Code, another harness) deciding whether to call out to Otto.
Otto是Astronomer的数据工程代理,作为
astro otto
集成在Astro CLI中。本技能用于从CLI驱动Otto作为子代理——而非交互式使用Otto。
**如果你是Otto,请在此停止。**Otto内置了与本技能相同的Astronomer技能集,因此本文件会在Otto会话中加载。Otto绝不能委托给自己——否则会产生递归的
astro otto
子进程。请完全忽略此技能,直接使用自身工具处理任务。本文档其余部分是为父代理(如Claude Code或其他 harness)编写,用于判断是否调用Otto。

When delegating pays off

何时委托更划算

Signals that favor delegating:
  • Airflow upgrades, migrations, runtime/provider compat questions. Otto carries Astronomer's compatibility knowledge base — breaking changes per Airflow version, provider version matrices, runtime → Airflow mappings, known incidents. Generic agents don't have this and will often fabricate plausible-sounding answers.
  • Live-Airflow investigation. Production failure diagnosis, run-history analysis, log triage. Otto's
    af
    tooling against a connected Airflow is wired up and bundled with debugging skills; replicating it ad-hoc in the parent session is wasteful.
  • Long, self-contained subtasks. Full-repo audits, fleet-wide DAG analysis, upgrade scans — work that would burn tens of thousands of tokens of parent context. Delegating keeps the parent thread cheap and the result is one summary back, not a turn-by-turn trace.
  • Parallel branches. Use
    --fork
    to explore an alternative ("what if we used Cosmos here?") without polluting the main thread.
  • Tasks that lean on team memory. Otto reads
    .astro/memory/
    (committed) and
    ~/.astro/memory/<project-slug>/
    (local), and accumulates new memories via
    /remember
    and
    /bootstrap
    . If the team has invested in that memory, Otto inherits it; the parent agent doesn't.
Signals against delegating:
  • The task is small or single-tool — direct execution is cheaper than a session round-trip.
  • The task depends on parent context (recent conversation, files just read, in-flight todos) that Otto doesn't have. Briefing Otto would cost more than just doing the work.
  • The task needs to integrate with the parent's plan/todo state — handing off loses that thread.
  • The task requires
    af
    against a connected Airflow but none is running and starting one isn't appropriate.
When a task hits multiple favoring signals (e.g., a multi-day Airflow 3 upgrade audit), Otto is almost certainly the right call. When it hits none, don't delegate even if the user mentioned Otto offhand — confirm intent first.
倾向于委托的信号:
  • **Airflow升级、迁移、运行时/提供商兼容性问题。**Otto拥有Astronomer的兼容性知识库——包含各Airflow版本的破坏性变更、提供商版本矩阵、运行时与Airflow的映射关系、已知事件等。通用代理不具备这些知识,往往会编造看似合理的错误答案。
  • **在线Airflow排查。**生产故障诊断、运行历史分析、日志分类。Otto针对已连接Airflow的
    af
    工具已集成调试技能;在父会话中临时复制这些功能十分低效。
  • **冗长且独立的子任务。**全仓库审计、集群级DAG分析、升级扫描——这类工作会消耗父代理数万token的上下文。委托可降低父线程成本,最终仅返回一份总结,而非逐轮交互记录。
  • **并行分支任务。**使用
    --fork
    探索替代方案(如“如果我们在这里使用Cosmos会怎样?”),而不会污染主线程。
  • **依赖团队记忆的任务。**Otto会读取
    .astro/memory/
    (已提交)和
    ~/.astro/memory/<project-slug>/
    (本地),并通过
    /remember
    /bootstrap
    积累新记忆。如果团队已投入精力构建这些记忆,Otto可继承;而父代理无法获取。
不建议委托的信号:
  • 任务规模小或仅需单一工具——直接执行比会话往返更便宜。
  • 任务依赖父代理上下文(近期对话、刚读取的文件、进行中的待办事项),而Otto无法获取。向Otto传达这些信息的成本高于直接完成任务。
  • 任务需要与父代理的计划/待办状态集成——委托会丢失该线程。
  • 任务需要针对已连接Airflow运行
    af
    命令,但当前无Airflow运行,且启动Airflow并不合适。
当任务符合多个委托信号时(例如,为期多天的Airflow 3升级审计),Otto几乎肯定是正确选择。当任务不符合任何委托信号时,即使用户偶然提及Otto,也不要直接委托——先确认用户意图。

How to use this skill: check what else is loaded first

如何使用本技能:先检查已加载的其他技能

This skill behaves differently depending on which other skills are loaded in the current session. Scan the loaded skills list before deciding.
本技能的行为取决于当前会话中加载的其他技能。请先扫描已加载技能列表再做决定。

When sibling skills are loaded

已加载同属技能时

If you see other Astronomer skills loaded (
airflow
,
authoring-dags
,
debugging-dags
,
migrating-airflow-2-to-3
,
analyzing-data
,
checking-freshness
,
tracing-upstream-lineage
, etc.), the user has the full
astronomer-data
plugin. Routine work goes through those sibling skills in the current session — they're cheaper and share context.
Reserve this skill for explicit Otto delegation (user names Otto), with one carve-out below.
User intentUse this skill?Use instead
"What DAGs are broken?"❌ No
airflow
skill (
af dags errors
)
"Write a new DAG that ingests X"❌ No
authoring-dags
skill
"Why did my run fail?"❌ No
debugging-dags
skill
"Plan the Airflow 3 upgrade"⚠️ Offer Otto firstSee carve-out below
"Use Otto to plan the AF3 upgrade"✅ YesThis skill
"Delegate the AF3 audit to Otto"✅ YesThis skill
"Fork an Otto session to try a different approach"✅ YesThis skill
如果看到其他Astronomer技能已加载(如
airflow
authoring-dags
debugging-dags
migrating-airflow-2-to-3
analyzing-data
checking-freshness
tracing-upstream-lineage
等),说明用户已安装完整的
astronomer-data
插件。常规工作应通过当前会话中的这些同属技能完成——它们成本更低且共享上下文。
仅在用户明确要求委托给Otto时使用本技能(用户提及Otto),以下情况除外。
用户意图是否使用本技能?替代方案
“哪些DAG已损坏?”❌ 否
airflow
技能(
af dags errors
“编写一个新的DAG来导入X”❌ 否
authoring-dags
技能
“我的任务为什么失败了?”❌ 否
debugging-dags
技能
“规划Airflow 3升级”⚠️ 优先推荐Otto见下方例外情况
“使用Otto规划AF3升级”✅ 是本技能
“将AF3审计委托给Otto”✅ 是本技能
“分叉Otto会话以尝试不同方法”✅ 是本技能

Carve-out: Airflow 2 → 3 migrations

例外情况:Airflow 2 → 3迁移

Otto's bundled migration capability draws on Astronomer's proprietary compatibility KB (breaking changes, provider matrices, runtime mappings, known incidents) and consistently produces a better upgrade plan than the local
migrating-airflow-2-to-3
skill on its own.
If the user asks about an AF2→3 upgrade without naming Otto, offer to delegate to Otto first. Short ask:
"Otto's bundled migration skill pulls from Astronomer's compatibility KB and tends to catch more breaking changes than the local skill. Want me to run this through Otto?"
If they accept, use this skill. If they decline, fall back to
migrating-airflow-2-to-3
.
Otto内置的迁移功能基于Astronomer的专有兼容性知识库(包含破坏性变更、提供商矩阵、运行时映射、已知事件),相比单独使用本地的
migrating-airflow-2-to-3
技能,能始终生成更优质的升级计划。
**如果用户询问AF2→3升级但未提及Otto,优先推荐委托给Otto。**简短询问话术:
“Otto内置的迁移技能基于Astronomer的兼容性知识库,相比本地技能能发现更多破坏性变更。需要我通过Otto来执行这项任务吗?”
如果用户同意,使用本技能。如果用户拒绝,回退到
migrating-airflow-2-to-3
技能。

When sibling skills aren't loaded

未加载同属技能时

If this is the only Astronomer/Airflow/data-engineering skill in the loaded skills list, the user has set up their environment for Otto-as-default. Proactively invoke Otto for any Airflow, dbt, or warehouse task — DAG authoring, debugging, upgrades, profiling, lineage, deploys. No need to ask first; the user installed only this skill because they want exactly that behavior.
如果本技能是当前会话中唯一的Astronomer/Airflow/数据工程技能,说明用户已将Otto设置为默认工具。主动调用Otto处理所有Airflow、dbt或仓库任务——包括DAG编写、调试、升级、分析、血缘追踪、部署等。无需事先询问;用户仅安装本技能,正是希望获得这种行为。

Quick invocation

快速调用

bash
undefined
bash
undefined

Default: one-shot, plain text output to stdout

默认:一次性任务,向stdout输出纯文本

astro otto --mode text "your prompt here"
astro otto --mode text "your prompt here"

Read-only / planning sandbox — safest for audits and investigations

只读/规划沙箱——最适合审计和排查

astro otto --mode text --permission-mode plan "audit this DAG"
astro otto --mode text --permission-mode plan "audit this DAG"

Narrow tool surface — Otto only sees what's in the allowlist

限定工具范围——Otto仅能访问允许列表中的工具

astro otto --mode text --allowed-tools af,bash,read,grep "diagnose dag X"
astro otto --mode text --allowed-tools af,bash,read,grep "diagnose dag X"

Machine-parseable events for scripting and chaining

可机器解析的事件,用于脚本编写和任务链

astro otto --mode json "your prompt here"

For session continuity (`-c`, `--fork`, `--session`, `--no-session`), see [Session control](#session-control). For model and thinking-level selection, see [Model and reasoning selection](#model-and-reasoning-selection).
astro otto --mode json "your prompt here"

有关会话连续性(`-c`、`--fork`、`--session`),请参见[会话控制](#session-control)。有关模型和思考级别选择,请参见[模型与推理选择](#model-and-reasoning-selection)。

Session control

会话控制

Sessions persist on disk per working directory.
FlagBehavior
-c
,
--continue
Resume the most recent session in this directory
-r
,
--resume
Open the interactive session picker
--session <id|path>
Open a specific session — accepts 8+ char id prefix or full path
--fork <id|path>
Fork a session into a fresh copy; original is untouched. Use to try an alternative approach without polluting the main thread.
--no-session
In-memory only, leaves no trace on disk. Use for one-off questions.
--export <id|path>
Render an existing session to HTML and exit
会话按工作目录持久化存储在磁盘上。
参数行为
-c
,
--continue
恢复当前目录中最近的会话
-r
,
--resume
打开交互式会话选择器
--session <id|path>
打开特定会话——接受8位以上的ID前缀或完整路径
--fork <id|path>
将会话分叉为全新副本;原会话不受影响。用于在不污染主线程的情况下尝试替代方法。
--no-session
仅在内存中运行,不在磁盘留下痕迹。用于一次性问题。
--export <id|path>
将现有会话渲染为HTML并退出

Mode selection

模式选择

FlagWhen to use
--mode text
Default. Streams plain text to stdout.
--mode json
Machine-parseable events for scripting or chaining.
For text mode, streaming auto-detects by TTY. Force with
--stream
/
--no-stream
.
参数使用场景
--mode text
默认模式。向stdout流式输出纯文本。
--mode json
可机器解析的事件,用于脚本编写或任务链。
对于文本模式,流式输出会自动检测TTY。可使用
--stream
/
--no-stream
强制开启或关闭。

Permission modes

权限模式

Otto can write files and run shell commands. Match the permission mode to the task's risk profile.
ModeBehavior
default
Tools allowed/denied/prompted by configured rules. Otto asks before destructive
astro
/
af
commands.
plan
Read-only sandbox. Blocks
edit
and
write
entirely. Restricts
bash
to a read-only allowlist (
ls
,
cat
,
git
,
rg
,
af
,
astro
, etc.). Use this for audits, planning, and investigation.
acceptEdits
Auto-allows
edit
and
write
inside the project folder. Other tools fall through to normal rules.
confirmEdits
Prompts before every
edit
,
write
, or non-read-only
bash
. Allow rules can't bypass the prompt.
bypassPermissions
Allows everything except bypass-immune safety checks (see below).
Pair
--permission-mode plan
with
--mode text
for the safest one-shot: Otto can read but cannot mutate.
--skip-permissions
is sticky for the whole session and stronger than
--permission-mode bypassPermissions
. Avoid unless the user explicitly asks.
Otto可写入文件并运行shell命令。请根据任务的风险等级匹配权限模式。
模式行为
default
根据配置规则允许/拒绝/提示使用工具。Otto在执行破坏性
astro
/
af
命令前会询问用户。
plan
**只读沙箱。**完全阻止
edit
write
操作。将
bash
限制为只读允许列表(如
ls
cat
git
rg
af
astro
等)。用于审计、规划和排查。
acceptEdits
自动允许在项目文件夹内执行
edit
write
操作。其他工具遵循常规规则。
confirmEdits
在每次执行
edit
write
或非只读
bash
操作前提示用户。允许规则无法绕过该提示。
bypassPermissions
允许所有操作,除了无法绕过的安全检查(见下文)。
--permission-mode plan
--mode text
搭配使用,是最安全的一次性任务模式:Otto仅能读取,无法修改。
--skip-permissions
在整个会话中生效,且优先级高于
--permission-mode bypassPermissions
。除非用户明确要求,否则避免使用。

Bypass-immune safety checks

无法绕过的安全检查

These fire even in
bypassPermissions
mode and even with
--skip-permissions
:
  • Reads/writes to sensitive files:
    .env*
    ,
    ~/.ssh/**
    ,
    ~/.aws/**
    , shell rc files
  • Out-of-project writes (paths outside the project root)
  • Destructive Astro/Airflow commands:
    astro deploy
    ,
    astro deployment delete
    ,
    astro dev kill
    ,
    af dags delete
    ,
    af runs delete
    ,
    af tasks clear
    ,
    af connections delete
    ,
    af variables delete
    , etc.
Don't assume
--skip-permissions
makes Otto fully unattended.
即使在
bypassPermissions
模式或使用
--skip-permissions
时,以下检查仍会触发:
  • 读取/写入敏感文件:
    .env*
    ~/.ssh/**
    ~/.aws/**
    、shell配置文件
  • 向项目外写入(路径超出项目根目录)
  • 破坏性Astro/Airflow命令:
    astro deploy
    astro deployment delete
    astro dev kill
    af dags delete
    af runs delete
    af tasks clear
    af connections delete
    af variables delete
不要假设
--skip-permissions
能让Otto完全无人值守运行。

Tool allowlists

工具允许列表

--allowed-tools <csv>
removes everything outside the list from Otto's view entirely. Useful for narrow tasks:
bash
undefined
--allowed-tools <csv>
会移除Otto视野中列表以外的所有工具。适用于限定范围的任务:
bash
undefined

Only let Otto query Airflow and read files

仅允许Otto查询Airflow和读取文件

astro otto --mode text --allowed-tools af,read,grep,find
"diagnose why model_orders failed yesterday"
astro otto --mode text --allowed-tools af,read,grep,find
"diagnose why model_orders failed yesterday"

Only let Otto run af and shell — no editing

仅允许Otto运行af和shell命令——不允许编辑

astro otto --mode text --allowed-tools af,bash
"list all paused production DAGs and their owners"
undefined
astro otto --mode text --allowed-tools af,bash
"list all paused production DAGs and their owners"
undefined

Structured output

结构化输出

Force Otto to emit a typed final answer with
--output-schema
:
bash
astro otto --mode json --output-schema @schema.json \
  "find DAGs with import errors and return as JSON"
Requires
--mode text
or
--mode json
. Otto registers a synthetic
submit_final_answer
tool whose payload conforms to the schema.
使用
--output-schema
强制Otto输出符合类型定义的最终答案:
bash
astro otto --mode json --output-schema @schema.json \
  "find DAGs with import errors and return as JSON"
需要搭配
--mode text
--mode json
使用。Otto会注册一个合成的
submit_final_answer
工具,其负载符合指定的schema。

Model and reasoning selection

模型与推理选择

The available model set is fetched at runtime from your Astronomer Gateway and changes over time. Don't hardcode model names — list what's available first:
bash
astro otto --list-models                  # full list
astro otto --list-models anthropic        # filter by substring

astro otto --model <id> --mode text "..."
astro otto --thinking <off|minimal|low|medium|high|xhigh> --mode text "..."
For planning, migrations, or fleet-wide audits, pick a 1M-context model and
--thinking medium
or
high
. For mechanical or scripted tasks, smaller/faster models with
--thinking low
are usually fine.
Defaults persist in
~/.astro/otto/settings.json
.
可用模型集在运行时从Astronomer Gateway获取,且会随时间变化。不要硬编码模型名称——先列出可用模型:
bash
astro otto --list-models                  # 完整列表
astro otto --list-models anthropic        # 按子字符串过滤

astro otto --model <id> --mode text "..."
astro otto --thinking <off|minimal|low|medium|high|xhigh> --mode text "..."
对于规划、迁移或集群级审计,选择1M上下文窗口的模型,并设置
--thinking medium
high
。 对于机械性或脚本化任务,较小/较快的模型搭配
--thinking low
通常足够。
默认设置保存在
~/.astro/otto/settings.json
中。

MCP servers and extensions

MCP服务器与扩展

  • MCP: pass
    --mcp-config /path/to/mcp.json
    to wire in user-configured servers (warehouse, ticketing, etc.). Otto's Airflow tooling (
    af
    ) is built in — no MCP needed for that.
  • Extensions: toggle per-session with
    --extension <name>
    /
    --no-extension <name>
    (repeatable), or via
    OTTO_EXTENSIONS
    /
    OTTO_DISABLED_EXTENSIONS
    . Persistent settings live in
    ~/.astro/otto/extensions.json
    and
    .astro/otto/extensions.json
    .
  • MCP:传递
    --mcp-config /path/to/mcp.json
    以接入用户配置的服务器(如数据仓库、工单系统等)。Otto的Airflow工具(
    af
    )已内置——无需MCP即可使用。
  • 扩展:通过
    --extension <name>
    /
    --no-extension <name>
    (可重复使用)在会话中切换,或通过
    OTTO_EXTENSIONS
    /
    OTTO_DISABLED_EXTENSIONS
    环境变量配置。持久化设置保存在
    ~/.astro/otto/extensions.json
    .astro/otto/extensions.json
    中。

Common delegation patterns

常见委托模式

Plan-only investigation

仅规划排查

bash
astro otto --mode text --permission-mode plan --thinking medium \
  "your investigation prompt"
bash
astro otto --mode text --permission-mode plan --thinking medium \
  "your investigation prompt"

Scripted pipeline with structured output

带结构化输出的脚本化流水线

bash
astro otto --mode json --output-schema @schema.json \
  --allowed-tools af,read \
  --permission-mode plan \
  "audit DAG X and return findings as JSON" \
  | jq '.final_answer'
For multi-turn delegation, kick off once and resume with
-c
. For parallel branches, see
--fork
in Session control.
bash
astro otto --mode json --output-schema @schema.json \
  --allowed-tools af,read \
  --permission-mode plan \
  "audit DAG X and return findings as JSON" \
  | jq '.final_answer'
对于多轮委托,启动一次后使用
-c
恢复会话。对于并行分支任务,请参见会话控制中的
--fork

Cost and latency

成本与延迟

Each invocation spins up a fresh agent with its own context window. Two rules cover most cases:
  • Prefer
    -c
    /
    --session
    over re-prompting from scratch — preserves cache and prior findings.
  • Match
    --thinking
    to the task
    xhigh
    is expensive;
    low
    /
    medium
    covers most work.
每次调用都会启动一个全新的代理,拥有独立的上下文窗口。以下规则适用于大多数情况:
  • **优先使用
    -c
    /
    --session
    **而非从头重新发起请求——可保留缓存和之前的发现。
  • 根据任务匹配
    --thinking
    级别
    ——
    xhigh
    成本高昂;
    low
    /
    medium
    可覆盖大多数工作。

What Otto auto-detects

Otto自动检测的内容

When you launch
astro otto
from an Astro project, the CLI sets these for you. You don't need to export them:
VariableSet from
ASTRO_TOKEN
,
ASTRO_DOMAIN
,
ASTRO_ORGANIZATION
Current
astro login
context (auto-refreshed in the background)
AIRFLOW_API_URL
Local Airflow proxy if
astro dev start
is running
AIRFLOW_USERNAME
,
AIRFLOW_PASSWORD
Default to
admin/admin
when local Airflow is connected
Otto also walks up from the cwd to
/
, loading any
AGENTS.md
or
CLAUDE.md
it finds (plus
~/.astro/otto/AGENTS.md
). When both files exist in the same folder,
AGENTS.md
wins. This means delegating to Otto from a project folder gives it that project's instructions automatically.
当你从Astro项目中启动
astro otto
时,CLI会自动设置以下变量。无需手动导出:
变量设置来源
ASTRO_TOKEN
,
ASTRO_DOMAIN
,
ASTRO_ORGANIZATION
当前
astro login
上下文(后台自动刷新)
AIRFLOW_API_URL
如果
astro dev start
正在运行,则为本地Airflow代理地址
AIRFLOW_USERNAME
,
AIRFLOW_PASSWORD
连接本地Airflow时默认设置为
admin/admin
Otto还会从当前工作目录向上遍历至
/
,加载找到的所有
AGENTS.md
CLAUDE.md
文件(包括
~/.astro/otto/AGENTS.md
)。如果同一文件夹中同时存在这两个文件,
AGENTS.md
优先级更高。这意味着从项目文件夹委托给Otto时,它会自动获取该项目的指令。

Caveat:
af
requires a connected Airflow

注意事项:
af
需要已连接的Airflow

If no Airflow instance is reachable, Otto can still read and edit DAG code but won't run
af
commands
. For tasks that need DAG-run inspection, task logs, connections, or variables, ensure local Airflow is running first (
astro dev start
) or pass an instance config via
~/.af/config.yaml
.
如果无法访问Airflow实例,Otto仍可读取和编辑DAG代码,但无法运行
af
命令
。对于需要检查DAG运行、任务日志、连接或变量的任务,请确保本地Airflow已运行(
astro dev start
),或通过
~/.af/config.yaml
传递实例配置。

Auto DAG validation

自动DAG验证

The
dag-validation
extension is on by default. After Otto edits or writes any
dags/*.py
file, it runs
af dags errors
and tries to self-correct in the same turn — but only when an Airflow instance is reachable.
This is convenient for delegated DAG edits, but means:
  • Delegated edits without a running Airflow won't be auto-validated.
  • Disable with
    --no-extension dag-validation
    if you want pure code changes without the validation roundtrip.
dag-validation
扩展默认开启。Otto编辑或写入任何
dags/*.py
文件后,会运行
af dags errors
并尝试在同一轮次中自我修正——但仅当存在已连接的Airflow实例时才会执行。
这对于委托的DAG编辑十分便利,但意味着:
  • 如果没有运行中的Airflow,委托的编辑不会自动验证。
  • 如果希望仅修改代码而不进行验证往返,可使用
    --no-extension dag-validation
    禁用该功能。

Subagent extension (off by default)

子代理扩展(默认关闭)

Otto can fan out to its own subprocesses via the
subagent
extension. Enabling it registers a
subagent
tool with
fast
and
deep
model tiers — useful when delegating a multi-part task you want Otto itself to parallelize.
bash
astro otto --mode text --extension subagent "audit each DAG in dags/ and report findings"
Configure tier models in
.astro/otto/extensions.json
.
Otto可通过
subagent
扩展生成自身的子进程。启用该扩展后,会注册一个带有
fast
deep
模型层级的
subagent
工具——适用于委托需要Otto自身并行处理的多部分任务。
bash
astro otto --mode text --extension subagent "audit each DAG in dags/ and report findings"
可在
.astro/otto/extensions.json
中配置层级模型。

Settings precedence

设置优先级

Otto resolves config in this order (earlier wins):
  1. CLI flag (
    --model
    ,
    --allowed-tools
    ,
    --no-extension
    , etc.)
  2. Environment variable (
    OTTO_DISABLED_EXTENSIONS
    , etc.)
  3. Project file (
    .astro/otto/permissions.json
    ,
    .astro/otto/extensions.json
    ,
    .astro/config.yaml
    )
  4. User file (
    ~/.astro/otto/settings.json
    ,
    ~/.astro/config.yaml
    )
  5. Built-in default
For full reference see Otto settings.
Otto按以下顺序解析配置(优先级从高到低):
  1. CLI参数(如
    --model
    --allowed-tools
    --no-extension
    等)
  2. 环境变量(如
    OTTO_DISABLED_EXTENSIONS
    等)
  3. 项目文件(
    .astro/otto/permissions.json
    .astro/otto/extensions.json
    .astro/config.yaml
  4. 用户文件(
    ~/.astro/otto/settings.json
    ~/.astro/config.yaml
  5. 内置默认值
完整参考请参见Otto设置

Verifying Otto is available

验证Otto是否可用

bash
astro otto version    # installed Otto version + update check
astro otto --help     # full flag reference
astro otto update     # pull latest Otto release
Otto auto-updates by default (once-per-day check, applied on next launch). Opt out with
astro config set -g otto.auto_update false
.
If
astro otto
isn't recognized, the user needs Astro CLI v1.42+. Recommend
brew upgrade astro
or whatever installer they used.
bash
astro otto version    # 已安装的Otto版本 + 更新检查
astro otto --help     # 完整参数参考
astro otto update     # 获取最新Otto版本
Otto默认自动更新(每日检查一次,下次启动时应用)。可通过
astro config set -g otto.auto_update false
关闭自动更新。
如果
astro otto
无法被识别,用户需要安装Astro CLI v1.42+。建议使用
brew upgrade astro
或用户原本使用的安装程序进行升级。

Authoritative references

权威参考