Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ jobs:
"$smoke_root/wheel-venv/bin/python" -c "import experiments.local_agent_dispatch"
"$smoke_root/wheel-venv/bin/python" -I -c "import dyro.continuation"
"$smoke_root/wheel-venv/bin/python" -I -c "from dyro.console.assets import validate_assets; validate_assets()"
"$smoke_root/wheel-venv/bin/python" -I -c "from importlib.resources import files; root=files('dyro.integrations').joinpath('assets'); assert root.joinpath('dyro-control-plane','SKILL.md').is_file(); assert root.joinpath('dyro-control-plane','agents','openai.yaml').is_file(); assert root.joinpath('dyro-dispatch','SKILL.md').is_file(); assert root.joinpath('dyro-dispatch','agents','openai.yaml').is_file(); assert not root.joinpath('dyro-readonly').is_dir()"
"$smoke_root/wheel-venv/bin/python" -I -c "from importlib.resources import files; root=files('dyro.integrations').joinpath('assets'); assert root.joinpath('dyro-control-plane','SKILL.md').is_file(); assert root.joinpath('dyro-control-plane','agents','openai.yaml').is_file(); assert root.joinpath('dyro-dispatch','SKILL.md').is_file(); assert root.joinpath('dyro-dispatch','agents','openai.yaml').is_file(); assert root.joinpath('dyro-executor','SKILL.md').is_file(); assert root.joinpath('dyro-executor','agents','openai.yaml').is_file(); assert root.joinpath('dyro-board','SKILL.md').is_file(); assert root.joinpath('dyro-board','agents','openai.yaml').is_file(); assert not root.joinpath('dyro-readonly').is_dir()"
test -x "$smoke_root/wheel-venv/bin/dyro"
test ! -e "$smoke_root/wheel-venv/bin/dyro-bridge"
test ! -e "$smoke_root/wheel-venv/bin/dyro-mcp"
Expand All @@ -96,7 +96,7 @@ jobs:
"$smoke_root/sdist-venv/bin/pip" install "${sdist_artifact}"
"$smoke_root/sdist-venv/bin/python" -I -c "import dyro.continuation"
"$smoke_root/sdist-venv/bin/python" -I -c "from dyro.console.assets import validate_assets; validate_assets()"
"$smoke_root/sdist-venv/bin/python" -I -c "from importlib.resources import files; root=files('dyro.integrations').joinpath('assets'); assert root.joinpath('dyro-control-plane','SKILL.md').is_file(); assert root.joinpath('dyro-control-plane','agents','openai.yaml').is_file(); assert root.joinpath('dyro-dispatch','SKILL.md').is_file(); assert root.joinpath('dyro-dispatch','agents','openai.yaml').is_file(); assert not root.joinpath('dyro-readonly').is_dir()"
"$smoke_root/sdist-venv/bin/python" -I -c "from importlib.resources import files; root=files('dyro.integrations').joinpath('assets'); assert root.joinpath('dyro-control-plane','SKILL.md').is_file(); assert root.joinpath('dyro-control-plane','agents','openai.yaml').is_file(); assert root.joinpath('dyro-dispatch','SKILL.md').is_file(); assert root.joinpath('dyro-dispatch','agents','openai.yaml').is_file(); assert root.joinpath('dyro-executor','SKILL.md').is_file(); assert root.joinpath('dyro-executor','agents','openai.yaml').is_file(); assert root.joinpath('dyro-board','SKILL.md').is_file(); assert root.joinpath('dyro-board','agents','openai.yaml').is_file(); assert not root.joinpath('dyro-readonly').is_dir()"
test -x "$smoke_root/sdist-venv/bin/dyro"
test ! -e "$smoke_root/sdist-venv/bin/dyro-bridge"
test ! -e "$smoke_root/sdist-venv/bin/dyro-mcp"
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/pypi-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ jobs:
"$smoke_root/wheel-venv/bin/pip" install "$GITHUB_WORKSPACE"/dist/dyro-*.whl
"$smoke_root/wheel-venv/bin/python" -c "import experiments.local_agent_dispatch"
"$smoke_root/wheel-venv/bin/python" -I -c "from dyro.console.assets import validate_assets; validate_assets()"
"$smoke_root/wheel-venv/bin/python" -I -c "from importlib.resources import files; root=files('dyro.integrations').joinpath('assets'); assert root.joinpath('dyro-control-plane','SKILL.md').is_file(); assert root.joinpath('dyro-control-plane','agents','openai.yaml').is_file(); assert root.joinpath('dyro-dispatch','SKILL.md').is_file(); assert root.joinpath('dyro-dispatch','agents','openai.yaml').is_file()"
"$smoke_root/wheel-venv/bin/python" -I -c "from importlib.resources import files; root=files('dyro.integrations').joinpath('assets'); assert root.joinpath('dyro-control-plane','SKILL.md').is_file(); assert root.joinpath('dyro-control-plane','agents','openai.yaml').is_file(); assert root.joinpath('dyro-dispatch','SKILL.md').is_file(); assert root.joinpath('dyro-dispatch','agents','openai.yaml').is_file(); assert root.joinpath('dyro-executor','SKILL.md').is_file(); assert root.joinpath('dyro-executor','agents','openai.yaml').is_file(); assert root.joinpath('dyro-board','SKILL.md').is_file(); assert root.joinpath('dyro-board','agents','openai.yaml').is_file()"
"$smoke_root/wheel-venv/bin/python" -I -c "import importlib.util; assert importlib.util.find_spec('dyro.bridge') is None"
test -x "$smoke_root/wheel-venv/bin/dyro"
test ! -e "$smoke_root/wheel-venv/bin/dyro-bridge"
Expand All @@ -161,7 +161,7 @@ jobs:
"$smoke_root/sdist-venv/bin/pip" install "$GITHUB_WORKSPACE"/dist/dyro-*.tar.gz
"$smoke_root/sdist-venv/bin/python" -c "import experiments.local_agent_dispatch"
"$smoke_root/sdist-venv/bin/python" -I -c "from dyro.console.assets import validate_assets; validate_assets()"
"$smoke_root/sdist-venv/bin/python" -I -c "from importlib.resources import files; root=files('dyro.integrations').joinpath('assets'); assert root.joinpath('dyro-control-plane','SKILL.md').is_file(); assert root.joinpath('dyro-control-plane','agents','openai.yaml').is_file(); assert root.joinpath('dyro-dispatch','SKILL.md').is_file(); assert root.joinpath('dyro-dispatch','agents','openai.yaml').is_file()"
"$smoke_root/sdist-venv/bin/python" -I -c "from importlib.resources import files; root=files('dyro.integrations').joinpath('assets'); assert root.joinpath('dyro-control-plane','SKILL.md').is_file(); assert root.joinpath('dyro-control-plane','agents','openai.yaml').is_file(); assert root.joinpath('dyro-dispatch','SKILL.md').is_file(); assert root.joinpath('dyro-dispatch','agents','openai.yaml').is_file(); assert root.joinpath('dyro-executor','SKILL.md').is_file(); assert root.joinpath('dyro-executor','agents','openai.yaml').is_file(); assert root.joinpath('dyro-board','SKILL.md').is_file(); assert root.joinpath('dyro-board','agents','openai.yaml').is_file()"
"$smoke_root/sdist-venv/bin/python" -I -c "import importlib.util; assert importlib.util.find_spec('dyro.bridge') is None"
test -x "$smoke_root/sdist-venv/bin/dyro"
test ! -e "$smoke_root/sdist-venv/bin/dyro-bridge"
Expand Down
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,13 @@

## Unreleased

- First-party Skill seats now include `dyro-executor` and `dyro-board` beside
the existing control-plane and dispatch Skills. Setup and an opted-in
control plane install or sync the whole first batch. Each seat auto-loads
from context; loading a seat is not consent to mutate. Opening a task
prints the executor seat; opening a line prints the navigator seat.
`dyro-reviewer` and personal skill directories stay out.

## 0.7.3 - 2026-08-18

- Console home no longer treats empty attention as idle. The overview
Expand Down
12 changes: 7 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -288,11 +288,13 @@ python3 -m pip install --user --upgrade dyro
```

Interactive `dyro setup` can install the first-party Skill bundle during personal
preferences. That one opt-in installs both `dyro-control-plane` and the separate
`dyro-dispatch` Skill. Existing managed control-plane installations automatically
gain the Dispatch companion on the next interactive launch or package refresh, and
both managed Skills then stay synchronized with Dyro updates. Machines that have
never opted into a Dyro Skill are not modified silently.
preferences. That one opt-in installs the first-batch seats: `dyro-control-plane`,
`dyro-executor`, `dyro-board`, and `dyro-dispatch`. Existing managed control-plane
installations automatically gain the new companions on the next interactive
launch or package refresh, and managed Skills then stay synchronized with Dyro
updates. Machines that have never opted into a Dyro Skill are not modified
silently. Each seat auto-loads from context; loading a seat is not consent to
mutate.

Multi-harness delegation remains separate from the read-only control plane so its
process/network effects are explicit. Manual installation is still available:
Expand Down
9 changes: 5 additions & 4 deletions README.zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -285,10 +285,11 @@ dyro --version
python3 -m pip install --user --upgrade dyro
```

交互式 `dyro setup` 可在个人偏好步骤一次启用第一方 Skill 套件,同时安装
`dyro-control-plane` 与独立的 `dyro-dispatch`。已经托管控制面 Skill 的用户会在下次
交互启动或包更新后自动补装 Dispatch,此后两项都会随 Dyro 自动同步;从未启用过
Dyro Skill 的机器不会被后台静默写入。
交互式 `dyro setup` 可在个人偏好步骤一次启用第一方 Skill 套件,同时安装首批座位:
`dyro-control-plane`、`dyro-executor`、`dyro-board` 与 `dyro-dispatch`。已经托管
控制面 Skill 的用户会在下次交互启动或包更新后自动补装新座位,此后都会随 Dyro
自动同步;从未启用过 Dyro Skill 的机器不会被后台静默写入。座位按情景自动戴上,
戴上不等于同意突变。

多 Harness 委派仍与只读控制面隔离,确保 Provider 进程与网络副作用需要明确请求。
也可手动运行 `dyro integration install dispatch --dry-run` 预览,再用
Expand Down
2 changes: 1 addition & 1 deletion docs/adr/0006-delivery-physics-and-capability-plane.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@

- 产品叙事从「启动 agent」转为「核验完成」。
- `0.7.0` 落地 Proof、Capability Card、Host Compiler 与 `verify-bundle`。`trusted_usage` 默认 `false`;生产 `BudgetUsage` / `BudgetRequest` 从 Card 读取该字段。`objective tick` 对 automatic Objective 做预算预览(`automatic=True`),受监督 apply 仍 `automatic=False`。未信任用量只在存在 `workspace.max_provider_usage` 时硬停。Proof 仍不接入 `no_progress`。Console summary 保持 `proof_inspection=not_inspected`,不探 Git / Proof;`dyro objective attention` 走完整快照,可报 `PROOF_DECAYED`。两套入口不得写成同一套 Proof 展示。
- Console 独立 inspect、`trigger_observation`、陌生人核验与叙事锁已在 `0.7.1` 落地。`0.7.2` 收口换工具 briefing 与 Console「现在需要你」。`0.7.3` 把空关注收回未读,并去掉首页与 `next` repair 的路径泄漏。后续功能与产品面收口继续开发和上线,版本号保持 `0.7.x`。
- Console 独立 inspect、`trigger_observation`、陌生人核验与叙事锁已在 `0.7.1` 落地。`0.7.2` 收口换工具 briefing 与 Console「现在需要你」。`0.7.3` 把空关注收回未读,并去掉首页与 `next` repair 的路径泄漏。第一方 Skill 首批座位是控制面、执行、评审板与 Dispatch:按情景自动戴上,戴上不是突变授权;不扫描用户 skill 目录。后续功能与产品面收口继续开发和上线,版本号保持 `0.7.x`。
- 可携带核验的对外承诺仍是:陌生人拿着 Proof Bundle 和自己提供的 git 对象,能得到与源机**相同的完整性结论**(字节仍在、钉死 SHA 可解析)。这不是身份证明,也不是「现在工作区还能 merge」。`schema_version = 1` 的合同在 `0.7.x` 锁住语义;冻结成 `1.0.0` 身份号须另做产品决定。
- 实施成本是新的投影层与兼容层,而不是第二套调度器。

Expand Down
2 changes: 1 addition & 1 deletion docs/agent-orchestration-discipline.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ Agent 输出永远是**建议**;进入交付链必须经过 Dyro 契约与独

## 3. 对抗评审记录协议(摘要)

完整模板见 [可选本地 Agent 派发设计 §6](designs/optional-local-agent-dispatch.md#6-对抗评审记录协议)。
第一方座位 `dyro-board` 在用户提出会审 / 对抗 / Go/No-Go 时自动戴上;记录仍不是 Proof。完整模板见 [可选本地 Agent 派发设计 §6](designs/optional-local-agent-dispatch.md#6-对抗评审记录协议)。

硬规则:

Expand Down
2 changes: 1 addition & 1 deletion docs/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -241,6 +241,6 @@ Dyro 的交付拓扑与之**实质相近**:TaskGraph(`depends_on` / conflict

未来的 adapter、通知、签名规则、发布平台与审批系统应使用 Python entry point 或独立 Profile 扩展包接入;不要把某个组织的策略加入 core 默认行为。

`0.7.0` 把已有证据物理学抽成可复验的 Proof,并把 argv adapter 升级为 Capability Card,再把定律编译为只收缩权威的宿主投影。衰减与现有 merge / 下游检查同真值;`proof verify` 看当前工作区,`verify-bundle` 只核完整性,两套结论不得混称。Console summary 与 `dyro objective attention` 不是同一套 Proof 展示。Console 独立 inspect、`trigger_observation` 与可携带核验门禁已在 `0.7.1` 落地。`0.7.2` 把换工具后的开场白收成事项加一条只读下一步,不另开会话层。`0.7.3` 把 Console 空关注收回未读,并不再在首页和下一条修复命令里漏本地路径。后续功能继续在 `0.7.x` 开发和上线,不另开 `0.8.0` / `0.9.0` / `1.0.0` 功能号。可携带核验是 Proof Bundle 加调用方提供的 git 对象,核验完整性而不是身份,也不承诺与当前 merge 同一套 `live`。这不另造 TaskGraph 或完成状态机;见 [`交付物理学`](designs/delivery-physics.md) 与 [`ADR-0006`](adr/0006-delivery-physics-and-capability-plane.md)。
`0.7.0` 把已有证据物理学抽成可复验的 Proof,并把 argv adapter 升级为 Capability Card,再把定律编译为只收缩权威的宿主投影。衰减与现有 merge / 下游检查同真值;`proof verify` 看当前工作区,`verify-bundle` 只核完整性,两套结论不得混称。Console summary 与 `dyro objective attention` 不是同一套 Proof 展示。Console 独立 inspect、`trigger_observation` 与可携带核验门禁已在 `0.7.1` 落地。`0.7.2` 把换工具后的开场白收成事项加一条只读下一步,不另开会话层。`0.7.3` 把 Console 空关注收回未读,并不再在首页和下一条修复命令里漏本地路径。第一方 Skill 首批座位是控制面、执行、评审板与 Dispatch:按情景自动戴上,戴上不等于同意突变;不扫描用户 skill 目录。后续功能继续在 `0.7.x` 开发和上线,不另开 `0.8.0` / `0.9.0` / `1.0.0` 功能号。可携带核验是 Proof Bundle 加调用方提供的 git 对象,核验完整性而不是身份,也不承诺与当前 merge 同一套 `live`。这不另造 TaskGraph 或完成状态机;见 [`交付物理学`](designs/delivery-physics.md) 与 [`ADR-0006`](adr/0006-delivery-physics-and-capability-plane.md)。

开发者侧的可选本地多 Agent 派发(五段式任务契约、注入前机密守卫、locator 核验、隔离 patch)与上述控制面分层并列,随 `dyro` 安装包分发(`dyro dispatch` / `import experiments.local_agent_dispatch`),但**不**替代 gates/合并。同时写多块走 Core Peer Wave(task worktree + `conflict_group`),见 [`peer-wave-execution.md`](designs/peer-wave-execution.md)、[`ADR-0002`](adr/0002-optional-local-agent-dispatch.md)、[`多智能体编排纪律`](agent-orchestration-discipline.md) 与 [`可选本地 Agent 派发设计`](designs/optional-local-agent-dispatch.md)。
20 changes: 12 additions & 8 deletions docs/updates.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,9 @@ After a successful `dyro update` or patch auto-update, Dyro best-effort syncs
the managed bundle through the fresh `dyro` entry point. Interactive `dyro`,
`dyro home`, and `dyro start` launches also repair outdated managed Skills.
The control-plane opt-in covers first-party companions, so an existing managed
control plane automatically gains `dyro-dispatch`. A machine with no prior Dyro
Skill ownership remains untouched. Manual control-plane commands are:
control plane automatically gains `dyro-dispatch`, `dyro-executor`, and
`dyro-board`. A machine with no prior Dyro Skill ownership remains untouched.
Manual control-plane commands are:

```bash
dyro integration install skill --dry-run
Expand All @@ -72,17 +73,20 @@ dyro integration sync skill --yes # upgrade-only; skips absent installs

(`codex` is an alias for `skill`.)

The outbound `dyro-dispatch` Skill keeps independent ownership state from the
read-only control-plane Skill. One `dyro setup` opt-in installs both. An existing
managed control-plane installation also gains the Dispatch companion on the next
interactive launch or post-update refresh; after that, both stay synchronized.
Hosts with no prior Dyro Skill opt-in remain untouched. Manual lifecycle commands
are still available:
The outbound `dyro-dispatch`, executor, and board Skills keep independent
ownership state from the read-only control-plane Skill. One `dyro setup` opt-in
installs the first-batch seat bundle. An existing managed control-plane
installation also gains those companions on the next interactive launch or
post-update refresh; after that they stay synchronized. Hosts with no prior
Dyro Skill opt-in remain untouched. Manual lifecycle commands are still
available:

```bash
dyro integration install dispatch --dry-run
dyro integration install dispatch --yes
dyro integration sync dispatch --yes
dyro integration install executor --yes
dyro integration install board --yes
```

Editable source installations are deliberately rejected. Update those through
Expand Down
4 changes: 4 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,10 @@ packages = [
"assets/dyro-control-plane/agents/openai.yaml",
"assets/dyro-dispatch/SKILL.md",
"assets/dyro-dispatch/agents/openai.yaml",
"assets/dyro-executor/SKILL.md",
"assets/dyro-executor/agents/openai.yaml",
"assets/dyro-board/SKILL.md",
"assets/dyro-board/agents/openai.yaml",
]

[tool.unittest]
Expand Down
Loading