Agent Skills › dartsim/dart

dartsim/dart

GitHub

执行DART只读分析工作流,在不编辑文件或进行外部变更的前提下,通过检查仓库证据、区分事实与推断来回答技术问题。

80 skills 1,162

Install All Skills

npx skills add dartsim/dart --all -g -y
More Options

List skills in collection

npx skills add dartsim/dart --list

Skills in Collection (80)

执行DART只读分析工作流,在不编辑文件或进行外部变更的前提下,通过检查仓库证据、区分事实与推断来回答技术问题。
用户请求代码库分析或问题排查 需要只读查看仓库状态和证据
.agents/skills/dart-analyze/SKILL.md
npx skills add dartsim/dart --skill dart-analyze -g -y
SKILL.md
Frontmatter
{
    "name": "dart-analyze",
    "description": "DART Analyze: analyze repository evidence without editing"
}

dart-analyze

Use this skill in Codex to run the DART dart-analyze workflow. The editable workflow source lives in .claude/commands/; this file is its generated adapter in the shared .agents/skills/ catalog.

Invocation

  • Claude Code/OpenCode: /dart-analyze <arguments>
  • Codex: $dart-analyze <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Analyze repository evidence without editing: $ARGUMENTS

Required Reading

@AGENTS.md @docs/ai/principles.md @docs/ai/workflows.md @docs/ai/verification.md @docs/onboarding/ai-tools.md

Workflow

  1. Restate the question and the read-only boundary. Do not edit files, stage changes, or perform GitHub, CI, branch, or review-thread mutations.
  2. Inspect local state enough to avoid misreading user work:
    git status --short --branch
    git diff --stat
    
  3. Build an evidence set from repository files, tests, docs, generated artifacts, and command output. Load task-specific docs from AGENTS.md when the question names a subsystem.
  4. Separate direct evidence from inference and unknowns. Do not present an inference as a fact, and do not turn a read-only answer into an implementation plan.
  5. Rank explanations, risks, or options by confidence when multiple readings are plausible. Use concrete file and line references for material claims.
  6. If current external documentation or standards are needed for correctness, gather source-backed evidence and label date/version context explicitly.
  7. Stop when the synthesis answers the question with enough evidence, or report the exact proof source that is unavailable.

Output

Report:

  • the question answered and the scope inspected;
  • ranked synthesis with confidence;
  • evidence, inference, and unknowns as separate sections;
  • any discriminating read-only probe that would reduce remaining uncertainty;
  • confirmation that no local edits or external mutations were performed.
提供DART 7多物理场、多求解器、多后端仿真架构概览。明确World、Solver、Coupler等核心组件职责,指导用户在多轴选择中配置方法族与策略,并指引查阅设计文档以对齐实现状态与规范。
需要理解DART 7整体架构或组件归属时 开发涉及World、Solver、物理域或计算后端的任务时 查询多物理场/多求解器/多后端仿真设计原则时
.agents/skills/dart-architecture/SKILL.md
npx skills add dartsim/dart --skill dart-architecture -g -y
SKILL.md
Frontmatter
{
    "name": "dart-architecture",
    "description": "DART Architecture: the DART 7 multi-physics, multi-solver, multi-backend simulation pipeline and where each abstraction is owned"
}

DART 7 Architecture

Load this skill when working on the DART 7 simulation World, on solvers/physics domains/compute backends, or whenever a task needs the big-picture map of how DART 7 is generalized for multi-physics, multi-solver, and multi-backend simulation.

The design in one sentence

The World owns topology, time, and a configured set of solvers; each solver advances the dynamics of the entities in its physics domain, and couplers mediate interactions between domains — with parallelizable work expressed as compute-graph nodes that any backend executor runs. Users configure method families and policies, never solver registries, component storage, or execution backends.

Why three axes of choice

  • Research, apples-to-apples. A new paper's algorithm should be reproducible and benchmarkable inside DART against baselines on shared foundations, not in a fork. New methods enter through DART-owned solver families.
  • End-user choice. Users pick the solver method and (internally) backend that fit their accuracy/speed/platform needs.
  • Auto-configuration. Defaults are selected from scene content so the easy path stays trivial; the backend seam is designed for later platform/scene-scale awareness without changing the public API.

Design vs current state (read both)

docs/readthedocs/architecture.md is the single-page map of the design and the options at each seam, with honest status markers. docs/design/dart7_architecture_assessment.md is the verified record of where the implementation still diverges from that design (no internal solver contract yet, conceptual-only Model/State split, executor seam unused by dynamics stages, missing apples-to-apples substrate) and owns the standing rule: new solver families enter only through docs/plans/solver-family-intake.md, including contract conformance and machine-recorded solver identity in all benchmark evidence. PLAN-091 retired the first living hardening packet plan; current follow-up work routes through docs/plans/dashboard.md, the intake checklist, and the durable owner docs named in the assessment. Do not write new code that copies a pattern the assessment still lists as a verified finding.

Key owner documents

The architecture page's Source-of-truth map is the single owner of the full topic → owner-doc mapping (solver, API, extension, compute, differentiable, clean-break, north-star). The docs an agent most often needs inline:

Topic Document
Solver abstraction, domain assignment, coupling, schedule docs/design/simulation_solver_architecture.md
Verified findings, standing rule, competitor lessons docs/design/dart7_architecture_assessment.md
Public C++ / dartpy API shape and promotion rules docs/design/simulation_cpp_api.md, docs/design/simulation_python_api.md
CPU / SIMD / GPU decision framework docs/design/scalable_compute_decisions.md
DART 7 vs DART 6 topology · live progress / parity gates docs/design/dart7_clean_break_strategy.md, docs/plans/dashboard.md

Public-facade rules (do not violate)

  • Do not expose Solver, Coupler, PhysicsDomain, ECS storage, component types, executor/backend types, or solver registries as public API.
  • Select behavior by documented method-family names and policy value objects.
  • Backend names (CUDA, Taskflow, SIMD ISA) may appear in build flags, diagnostics, and benchmarks — never in public types, namespaces, or required configuration.
  • Keep the easy path (World + addRigidBody/addMultibody + step) free of solver vocabulary.
  • Fallbacks must never silently substitute algorithms: validate capabilities at finalize or record the substitution in diagnostics.

Verification

Use docs/ai/verification.md to select the docs-only or code gate set for the change. Implementation work that realizes parts of this architecture also follows the gates in docs/design/simulation_solver_architecture.md, the solver-family intake checklist, and any active owner plan named in docs/plans/dashboard.md.

用于审计并修复AI代理未能发现或遵守已记录规则的问题。通过定位规则、诊断遗漏原因(如文档结构问题),优化可见性,并结合自动化验证确保合规性,降低重复风险。
用户报告代理未遵循既定规则 发现文档规则未被代理正确识别或执行 需要检查AI工作流对规则的遵从度
.agents/skills/dart-audit-agent-compliance/SKILL.md
npx skills add dartsim/dart --skill dart-audit-agent-compliance -g -y
SKILL.md
Frontmatter
{
    "name": "dart-audit-agent-compliance",
    "description": "DART Audit Agent Compliance: audit and fix gaps when agents miss or cannot discover documented rules"
}

dart-audit-agent-compliance

Use this skill in Codex to run the DART dart-audit-agent-compliance workflow. The editable workflow source lives in .claude/commands/; this file is its generated adapter in the shared .agents/skills/ catalog.

Invocation

  • Claude Code/OpenCode: /dart-audit-agent-compliance <arguments>
  • Codex: $dart-audit-agent-compliance <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Audit agent compliance issue: $ARGUMENTS

Required Reading

@AGENTS.md @docs/ai/principles.md @docs/ai/verification.md @docs/ai/components.md @docs/onboarding/ai-tools.md @docs/onboarding/contributing.md

Incident Inputs

  • Rule violated: $1
  • Where documented: $2
  • Actual behavior: $3
  • Expected behavior: $4

Treat missing positional values as details to infer from the user request or ask about before editing.

Workflow

  1. Locate the exact existing rule and confirm it is still correct.
  2. Diagnose why it was missed:
    • buried in prose
    • wrong file for the task type
    • weak emphasis
    • duplicated or conflicting guidance
    • not referenced from relevant commands or skills
  3. Prefer restructuring existing docs over adding duplicate content.
  4. Improve visibility with one or more focused changes:
    • move the rule to a loaded file
    • make it scannable with a checklist or mandatory marker
    • consolidate duplicate guidance
    • add cross-references from relevant commands or skills
  5. Run the principle audit from docs/ai/principles.md and use docs/ai/verification.md to map audit results to evidence.
  6. Run the relevant gate set from docs/ai/verification.md. For AI workflow changes, that includes generated adapter sync/checks, docs policy, spell, Markdown checks, and pixi run lint.

Output

  • Root cause for the missed rule
  • Files changed and why
  • Which audit items were proven by automation vs manual inspection
  • Confidence level that the recurrence risk is reduced
用于将已合并到main的PR或提交回溯移植到DART发布分支。流程包括验证源状态、检查冲突、 cherry-pick、运行CI及changelog更新,并需人工审批后创建PR。
需要将main的功能或修复移植到特定发布版本 执行DART项目的代码回溯移植工作流
.agents/skills/dart-backport-pr/SKILL.md
npx skills add dartsim/dart --skill dart-backport-pr -g -y
SKILL.md
Frontmatter
{
    "name": "dart-backport-pr",
    "description": "DART Backport PR: backport a merged main PR to a release branch"
}

dart-backport-pr

Use this skill in Codex to run the DART dart-backport-pr workflow. The editable workflow source lives in .claude/commands/; this file is its generated adapter in the shared .agents/skills/ catalog.

Invocation

  • Claude Code/OpenCode: /dart-backport-pr <arguments>
  • Codex: $dart-backport-pr <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Backport PR or commits: $ARGUMENTS

Required Reading

@AGENTS.md @docs/onboarding/contributing.md @docs/onboarding/release-management.md @docs/onboarding/changelog.md

Workflow

For a source change involving model/scene structure, physics behavior, or GUI output, use the target branch's dart-verify-sim workflow to preserve the text oracle and assessed visual evidence. Document a visual exception when the target branch cannot render the claim.

  1. Verify the source PR or commit is merged to main:
    gh pr view <SOURCE_PR> --json state,mergedAt,baseRefName,mergeCommit
    
  2. Check whether an equivalent change already exists on the release branch:
    git fetch origin <RELEASE_BRANCH> main
    git cherry -v --abbrev=40 origin/<RELEASE_BRANCH> origin/main | grep <COMMIT_HASH>
    
  3. For AI-infra or workflow-doc backports, compare the release branch capability inventory and adapter directories against main. If the release branch has a smaller workflow surface, adapt to the release branch instead of importing main-only workflows.
  4. Create a release branch from the release target:
    git checkout -B backport/<SOURCE_PR>-to-<RELEASE_BRANCH> origin/<RELEASE_BRANCH>
    
  5. Cherry-pick with provenance: git cherry-pick -x <COMMIT_HASH>.
  6. Resolve conflicts minimally; stop and ask if conflicts are broad or change behavior.
  7. Run the dart-changelog routine for the release-target decision before opening the backport PR.
  8. Run pixi run lint and the smallest relevant release-branch checks.
  9. Ask for explicit maintainer/user approval before pushing or opening the PR. After approval, open the PR against the release branch with milestone matching that release branch and use the PR template.

Output

  • Backport PR URL
  • Source PR/commit
  • Conflicts resolved, if any
  • Changelog decision
  • Checks run and CI status
用于在 Codex 中运行 DART 基准测试数据包工作流。该技能协助识别所属计划、构建并运行基准测试以生成证据包,随后验证数据包有效性。适用于需要创建或刷新基准测试证据的场景,确保测量结果符合规范且可追溯。
用户请求生成或更新基准测试证据包 用户提到需要验证基准测试结果
.agents/skills/dart-benchmark-packet/SKILL.md
npx skills add dartsim/dart --skill dart-benchmark-packet -g -y
SKILL.md
Frontmatter
{
    "name": "dart-benchmark-packet",
    "description": "DART Benchmark Packet: author or refresh a benchmark evidence packet for an owning plan"
}

dart-benchmark-packet

Use this skill in Codex to run the DART dart-benchmark-packet workflow. The editable workflow source lives in .claude/commands/; this file is its generated adapter in the shared .agents/skills/ catalog.

Invocation

  • Claude Code/OpenCode: /dart-benchmark-packet <arguments>
  • Codex: $dart-benchmark-packet <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Author or refresh a benchmark evidence packet: $ARGUMENTS

Required Reading

@AGENTS.md @docs/onboarding/profiling.md

Also read the owning plan file named by the packet (for example docs/plans/<NNN>-<slug>.md) and its packet convention.

Workflow

  1. Identify the owning plan and its packet convention: the packet checker (for example pixi run check-avbd-packets) and the packet generator (for example scripts/write_*_packet.py) that the plan names.
  2. Build the benchmark target and run the benchmark that feeds the packet, following docs/onboarding/profiling.md for a stable measurement setup.
  3. Run the packet writer to record the machine-generated evidence packet with its provenance and resolved configuration.
  4. Validate the packet with the plan's packet checker; treat a failing checker as incomplete evidence and fix the packet, not the checker.
  5. Prepare the owning plan's row or link update that task-specific gates require, but leave editing the plan file to the plan's own workflow — this command prepares and validates the packet. This is a local task; do not push or open PRs without explicit maintainer/user approval.

Output

  • Owning plan, packet ID, and the checker/generator used
  • Benchmark command run and the measurement setup
  • Packet file written and checker result
  • Whether the packet is new or refreshed, and any remaining gap
用于分析或清理 DART 仓库中过期的 Git 分支。支持分析和操作两种模式,默认仅分析。流程包括获取最新引用、识别陈旧远程分支、检查合并状态及关联工作树安全性,在获得明确授权后方可删除分支,确保操作安全。
用户需要清理项目中的过期或废弃 Git 分支 用户希望分析本地和远程分支的合并状态及陈旧情况
.agents/skills/dart-branch-cleanup/SKILL.md
npx skills add dartsim/dart --skill dart-branch-cleanup -g -y
SKILL.md
Frontmatter
{
    "name": "dart-branch-cleanup",
    "description": "DART Branch Cleanup: analyze or clean stale repository branches"
}

dart-branch-cleanup

Use this skill in Codex to run the DART dart-branch-cleanup workflow. The editable workflow source lives in .claude/commands/; this file is its generated adapter in the shared .agents/skills/ catalog.

Invocation

  • Claude Code/OpenCode: /dart-branch-cleanup <arguments>
  • Codex: $dart-branch-cleanup <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Analyze or clean branches: $ARGUMENTS

Required Reading

@AGENTS.md @docs/onboarding/ci-cd.md @docs/onboarding/contributing.md

Modes

  • analyze: inspect only, no deletions
  • action: prepare follow-up, or delete only after ownership/safety are clear and the maintainer/user gives explicit approval for each local or remote branch deletion

Default to analyze if the requested mode is ambiguous.

Workflow

  1. git fetch --all --no-prune
  2. List stale remote-tracking refs without deleting them:
    git remote prune origin --dry-run
    
    If origin uses SSH and port 22 is unavailable, keep the check read-only and use a temporary HTTPS rewrite instead of changing repository config:
    git -c url.https://github.com/.insteadOf=git@github.com: \
      fetch --all --no-prune
    git -c url.https://github.com/.insteadOf=git@github.com: \
      remote prune origin --dry-run
    
    To confirm that a remote PR branch was deleted without updating refs, query GitHub directly over HTTPS:
    git ls-remote --heads https://github.com/dartsim/dart.git <BRANCH>
    
  3. Determine target branch, usually origin/main.
  4. For each branch:
    git rev-list --left-right --count <TARGET>...<BRANCH>
    git log --oneline <TARGET>..<BRANCH>
    git diff --stat <TARGET>..<BRANCH>
    git cherry -v <TARGET> <BRANCH>
    
  5. Before any explicitly approved local branch deletion, check whether the branch is checked out by a linked worktree:
    git worktree list --porcelain
    git -C <WORKTREE> status --short --branch
    
    Dirty linked worktrees must not be removed, detached, or reset during branch cleanup. Only after explicit maintainer/user approval, switch that worktree to a preservation branch at the same commit to free the obsolete branch name before deleting the merged branch.
  6. The command git branch --merged may not prove ancestry for PR branches that landed through a squash or merge commit. Use the merged PR state plus an empty tree diff or equivalent git cherry -v output as the deletion signal; if the history relationship is unclear, keep the branch.
  7. Classify recommendations only; deleting a candidate requires explicit maintainer/user approval:
    • ahead=0: safe deletion candidate
    • equivalent commits already landed: deletion candidate
    • no-PR branch whose fix may already be solved differently on the target: confirm supersession with a focused A/B or content check before deciding; superseded is a deletion candidate, otherwise keep or open a follow-up
    • small, current, useful diff: keep or rebase into PR
    • large or unclear diff: document follow-up before action
  8. Ask for explicit maintainer/user approval before pruning refs or deleting any local or remote branch, even when ownership, branch purpose, and remote impact look clear.

Output

  • Branch summary with ahead/behind count and last commit date
  • Useful commits or risks
  • Recommendation: delete, keep, rebase, or needs follow-up
  • Actions taken after explicit maintainer/user approval, if action mode was explicitly requested
指导 DART 项目的构建流程,涵盖 CMake 配置、Pixi 依赖管理及测试命令。提供常见问题解决方案、CUDA 环境注意事项及锁文件管理规范,辅助开发者高效完成编译与验证。
DART 项目构建 CMake 配置问题 Pixi 依赖管理 CUDA 编译错误 运行测试或 lint
.agents/skills/dart-build/SKILL.md
npx skills add dartsim/dart --skill dart-build -g -y
SKILL.md
Frontmatter
{
    "name": "dart-build",
    "description": "DART Build: CMake, pixi, dependencies, and build troubleshooting"
}

DART Build System

Load this skill when working with DART's build system.

Quick Commands

pixi run config       # Configure CMake
pixi run build        # Build
pixi run test         # Run tests
pixi run test-all     # Full validation (lint + build + tests)
pixi run -e cuda test-all # CUDA-enabled full validation on Linux CUDA hosts
pixi run lint         # Format code

Full Documentation

For complete build instructions, read: docs/onboarding/building.md

For build system internals (CMake, dependencies): docs/onboarding/build-system.md

Common Issues

Issue Solution
CMake not found pixi install
Missing dependency Check pixi.toml
Build failure pixi run config then pixi run build
Linking error Check CMakeLists.txt in relevant module

CUDA Notes

  • On Linux hosts with visible NVIDIA GPUs, the CUDA Pixi config auto-detects compute capabilities for DART_CUDA_ARCHITECTURES; set DART_CUDA_ARCHITECTURES=<arch> only when overriding that detected list.
  • If CUDA runtime tests fail with unsupported PTX/toolchain errors, verify the generated CUDA flags include the local GPU architecture before assuming a kernel bug.

Pixi Lockfiles

  • Do not edit pixi.lock by hand. Change dependency constraints in pixi.toml, then run a Pixi command such as pixi install to let Pixi regenerate the lockfile.
  • If pixi.lock changes format or has broad solver churn, keep the generated output and call it out in the PR rather than attempting to splice lockfile entries manually.

Filament GUI Visual Checks

  • For Filament GUI, scene, or simulation rendering changes, load dart-verify-sim. Pair a text correctness oracle with agent-capture, view assessment, and claim-relevant engine debug layers; inspect the artifact and sidecar instead of relying only on command success.
  • If the user explicitly asks for pixi run ex dartsim, also run that exact entry point and terminate it after confirming the GUI binary launches.

Key Files

  • pixi.toml - Package management
  • CMakeLists.txt - Build configuration
  • cmake/ - CMake modules
DART项目的变更日志管理技能,支持决定是否需要条目、起草、最终定稿及审计。通过不同模式协助维护CHANGELOG.md,确保风格一致并生成标准化决策报告。
需要判断变更是否需记录到CHANGELOG.md时 需要起草或修订变更日志条目时 PR发布后需添加链接或完善条目时 审计发布部分是否存在缺失或冗余条目时
.agents/skills/dart-changelog/SKILL.md
npx skills add dartsim/dart --skill dart-changelog -g -y
SKILL.md
Frontmatter
{
    "name": "dart-changelog",
    "description": "DART Changelog: decide, draft, finalize, or audit DART changelog entries"
}

dart-changelog

Use this skill in Codex to run the DART dart-changelog workflow. The editable workflow source lives in .claude/commands/; this file is its generated adapter in the shared .agents/skills/ catalog.

Invocation

  • Claude Code/OpenCode: /dart-changelog <arguments>
  • Codex: $dart-changelog <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Maintain DART changelog entries: $ARGUMENTS

Purpose

dart-changelog is the reusable changelog decision and writing routine. It is usually invoked by other DART workflows when they reach a changelog decision, not directly by users.

Use it to decide whether CHANGELOG.md needs an entry, draft an entry at the right level of detail, add a PR link after publication, or audit a release section for missing or over-detailed entries. Keep style, placement, evidence, and release-note density aligned with docs/onboarding/changelog.md.

Required Reading

@AGENTS.md @docs/onboarding/changelog.md @docs/onboarding/release-roadmap.md @docs/onboarding/release-management.md

Modes

Interpret $ARGUMENTS as one of these modes when present:

  • decide: determine whether the current change needs a changelog entry and record the reason for the PR checklist/body when no entry is needed.
  • draft: write or revise the entry before a PR number exists.
  • finalize: add the PR link or adjust the entry after a PR exists, keeping the follow-up local until explicit maintainer/user approval permits a push.
  • audit: scan a release section or PR set for missing, duplicate, over-detailed, misplaced, or stale entries.
  • release-audit: alias for audit when the caller is finalizing a release section through dart-release-packaging.

If no mode is given, infer the smallest mode that satisfies the caller's need.

Output Contract

Every run must leave the caller with a concise, pasteable decision note. Use this shape in the response, PR body draft, or handoff text:

Changelog decision:

- Mode: decide | draft | finalize | audit | release-audit
- Base evidence: <base ref or PR/release inspected>
- Scope evidence: <diff, PR, issue, or release section inspected>
- Decision: entry required | no entry required | entry deferred | audit only
- Target section: <release/category, or N/A>
- Entry text: <final or draft bullet, or N/A>
- PR-body note: <exact no-entry reason or follow-up, or N/A>
- Follow-up: <PR link, maintainer approval, release audit, or none>

For no entry required, the PR-body note must name the evidence-backed reason rather than just saying "not needed." For entry deferred, say exactly what is missing, usually the PR number or release target. For finalize, confirm the entry still matches nearby CHANGELOG.md style after adding the PR link.

Workflow

  1. Inspect the change and target:
    git status --short --branch
    git diff --stat
    git diff --cached --stat
    BASE_REF="$(gh pr view --json baseRefName --jq .baseRefName 2>/dev/null || true)"
    # If the caller or arguments name a release branch before PR creation, set
    # BASE_REF to that branch before falling back to automatic inference.
    if [ -z "$BASE_REF" ]; then
      CURRENT_BRANCH="$(git branch --show-current)"
      UPSTREAM_REF="$(git rev-parse --abbrev-ref --symbolic-full-name @{upstream} 2>/dev/null || true)"
      for REF in "$CURRENT_BRANCH" "${UPSTREAM_REF#origin/}"; do
        case "$REF" in
          main|release-*) BASE_REF="$REF"; break ;;
        esac
      done
    fi
    BASE_REF="${BASE_REF:-main}"
    git fetch origin "$BASE_REF"
    git diff --stat "origin/$BASE_REF...HEAD"
    gh pr diff --name-only 2>/dev/null || true
    gh pr list --head "$(git branch --show-current)"
    
    Use the base comparison or PR diff even when the worktree is clean. If a PR, issue, release, or target branch is named, inspect that live object before writing and prefer its base over the main fallback.
  2. Read docs/onboarding/changelog.md and the relevant CHANGELOG.md release section. Compare nearby bullets before drafting so wording, section choice, and level of detail match the current file.
  3. Decide whether an entry is required using the guide:
    • user-visible API, behavior, packaging, CI, docs workflow, AI-infra, simulation correctness, release, or migration impact usually needs an entry;
    • typo-only, formatting-only, generated-only, and tiny internal refactors usually do not.
  4. Record the decision with the Output Contract before modifying CHANGELOG.md or telling a caller to skip it. The decision must cite the diff, PR, issue, release section, or target branch that was inspected.
  5. When writing, start with the reader-visible outcome, not the implementation chore. Use one concise bullet, combine closely related changes, avoid author credits, and avoid one-bullet-per-PR diary style.
  6. Place the entry under the target branch's release section and nearest existing category. Do not create a new category for one PR unless the release shape genuinely needs it.
  7. Add the best evidence link:
    • if a PR number exists, use ([#1234](https://github.com/dartsim/dart/pull/1234));
    • if no PR number exists yet, draft without the link and leave the follow-up local until explicit approval permits another push or PR update.
  8. For release audits, consolidate noisy implementation ledgers, confirm breaking/removal/deprecation bullets name a migration or support lane, and preserve human-readable release notes over exhaustive history.
  9. Validate with the gate appropriate to the caller. For changelog-only edits, run the docs-only checks from docs/ai/verification.md; before any commit, run pixi run lint.

Caller Contract

Other workflows should call this routine whenever they touch behavior or docs that may need release notes. The caller keeps ownership of the overall task, validation, PR body, and approval boundary; dart-changelog owns the changelog decision, wording, placement, evidence-link hygiene, and the pasteable decision note that lets Claude, Codex, OpenCode, and manual contributors record the same outcome.

Output

Report:

  • the changelog decision note in the Output Contract shape above;
  • the drafted or finalized entry text and its CHANGELOG.md placement;
  • gates run (pixi run lint, docs-only checks) and their results;
  • any follow-up left local pending explicit maintainer/user approval.
用于调试DART项目的CI/CD失败及GitHub Actions工作流。提供快速监控、查看日志和重跑作业的CLI命令,列举格式化、Codecov及跨平台(FreeBSD/macOS/CUDA)常见故障的解决方案,并说明GPU Runner的安全策略。
调试CI流水线失败 排查GitHub Actions错误 解决跨平台构建问题
.agents/skills/dart-ci/SKILL.md
npx skills add dartsim/dart --skill dart-ci -g -y
SKILL.md
Frontmatter
{
    "name": "dart-ci",
    "description": "DART CI: GitHub Actions, cache debugging, and platform-specific failures"
}

DART CI/CD Troubleshooting

Load this skill when debugging CI failures or working with GitHub Actions.

When the failing claim depends on model/scene structure, physics behavior, or GUI/rendering output, also load dart-verify-sim and reproduce it with a text oracle plus assessed visual evidence. Document a visual exception when that renderer is unavailable or not applicable in the failing environment.

Quick Commands

# Monitor PR checks
gh pr checks <PR_NUMBER>
gh pr checks <PR_NUMBER> --watch --interval 30 --fail-fast

# View run details
gh run list --branch <BRANCH> -e pull_request -L 20
gh run watch <RUN_ID> --interval 30
gh run view <RUN_ID> --json status,conclusion,url

# Debug failures
gh run view <RUN_ID> --job <JOB_ID> --log-failed
gh run view <RUN_ID> --json jobs --jq '.jobs[] | {name, databaseId}'

# Rerun failed jobs only after explicit maintainer/user approval
gh run rerun <RUN_ID> --failed
gh run rerun <RUN_ID> --job <DATABASE_ID>

Full Documentation

For complete CI/CD guide: docs/onboarding/ci-cd.md

Common Failure Modes

Failure Type Solution
Formatting fails pixi run lint; push only after approval
Codecov patch fails Add tests for uncovered lines
FreeBSD RTTI fails Use type enums + static_cast instead of dynamic_cast
macOS ARM64 SEGFAULT Replace alloca()/VLAs with std::vector<T>
RTD build fails Use defensive .get(key, default) patterns
gz-physics fails Reproduce with pixi run -e gazebo test-gz

Workflow Architecture

Workflow Purpose Platforms
ci_lint.yml Formatting Ubuntu
ci_ubuntu.yml Build + test + coverage Ubuntu
ci_macos.yml Build + test macOS
ci_windows.yml Build + test Windows
ci_freebsd.yml Build + test (VM) FreeBSD
ci_gz_physics.yml Gazebo integration Ubuntu
ci_cuda.yml CUDA compile + smoke Ubuntu/GPU

CUDA Runner Policy

The project has a trusted ubuntu-latest-gpu runner for same-repository CUDA runtime validation, but it must never run untrusted fork-PR code. Consequences:

  • Same-repository PRs, protected branch pushes, and manual dispatches use the GPU runner and run pixi run --locked -e cuda test-cuda.
  • Fork PRs use a GitHub-hosted fallback and compile CUDA targets without running GPU-only steps.
  • Local CUDA validation is pixi run -e cuda test-all on Linux hosts with a visible NVIDIA CUDA runtime; local Pixi config auto-detects visible GPU compute capabilities for DART_CUDA_ARCHITECTURES.
  • pixi run check-phase5-cuda-workflow enforces the trusted-event GPU guard and fork-PR hosted fallback in ci_cuda.yml.

Fast Iteration Loop

  1. Identify failing step from job logs
  2. Reproduce locally with same build toggles
  3. Fix the smallest failing test
  4. Push only after explicit maintainer/user approval, then monitor: gh run watch <RUN_ID>

Caching And Timing

Use the cache policy, current timing guidance, and investigation steps in docs/onboarding/ci-cd.md. Treat observed job duration and cache diagnostics from the affected run as the current evidence; do not copy mutable timing or hit-rate estimates into this skill.

用于处理 GitHub Issue 关闭流程。通过检查 Issue 状态和修复证据,起草包含致谢与解决说明的关闭消息。仅在获得明确授权后执行评论和关闭操作,确保流程合规。
用户请求关闭特定 Issue 需要生成 Issue 关闭留言 验证并确认 Issue 已修复
.agents/skills/dart-close-issue/SKILL.md
npx skills add dartsim/dart --skill dart-close-issue -g -y
SKILL.md
Frontmatter
{
    "name": "dart-close-issue",
    "description": "DART Close Issue: draft and optionally post a GitHub issue closing message"
}

dart-close-issue

Use this skill in Codex to run the DART dart-close-issue workflow. The editable workflow source lives in .claude/commands/; this file is its generated adapter in the shared .agents/skills/ catalog.

Invocation

  • Claude Code/OpenCode: /dart-close-issue <arguments>
  • Codex: $dart-close-issue <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Close or prepare closing message for issue: $ARGUMENTS

Required Reading

@AGENTS.md @docs/onboarding/contributing.md

Workflow

  1. Inspect the issue: gh issue view <ISSUE_NUMBER> --comments.
  2. Verify the stated resolution:
    • fixed by merged PR
    • already fixed on main
    • no longer reproducible
    • out of scope or needs a different tracker
  3. Draft a concise closing message:
    • thank the reporter
    • state the concrete resolution
    • link the fixing PR or relevant docs when available
  4. Only post and close if the user explicitly requested action and explicit maintainer/user approval has been given:
    gh issue comment <ISSUE_NUMBER> --body "<message>"
    gh issue close <ISSUE_NUMBER>
    

Output

  • Closing message
  • Whether it was posted
  • Whether the issue was closed
指导DART项目代码贡献流程,涵盖分支命名规范、基于main或LTS分支的PR创建、lint与测试执行及PR描述撰写标准。
向DART项目提交代码 创建功能或修复bug的Pull Request 配置Git分支策略
.agents/skills/dart-contribute/SKILL.md
npx skills add dartsim/dart --skill dart-contribute -g -y
SKILL.md
Frontmatter
{
    "name": "dart-contribute",
    "description": "DART Contribute: branching, PRs, review workflow, and dual-PR bugfixes"
}

DART Contribution Workflow

Load this skill when contributing code to DART.

Full Documentation

For complete guide: docs/onboarding/contributing.md

For code style: docs/onboarding/code-style.md

Branch Naming

  • feature/<topic> - New features
  • fix/<topic> - Bug fixes
  • refactor/<topic> - Refactoring
  • docs/<topic> - Documentation

PR Workflow

# Features, docs, and non-bugfix refactors start from main
git checkout -b <type>/<topic> origin/main

# Bug fixes that apply to the current release line start from the active DART 6 LTS branch
DART6_LTS_BRANCH=$(git branch -r --list 'origin/release-6.*' | sed 's|.*/||' | sort -V | tail -1)
git checkout -b "fix/<topic>-${DART6_LTS_BRANCH#release-}" "origin/$DART6_LTS_BRANCH"

# Make changes, then
pixi run lint
pixi run test-all
# On Linux hosts with a visible NVIDIA CUDA runtime
pixi run -e cuda test-all

# After explicit maintainer/user approval, push and create PR
git push -u origin HEAD
gh pr create --draft --base <target-branch> --milestone "<milestone>"

Use --base main --milestone "DART 7.0" for main PRs and the branch-matching DART 6.x patch milestone for active DART 6 LTS PRs.

Rule of thumb: run pixi run lint before committing so auto-fixes are included.

Use .github/PULL_REQUEST_TEMPLATE.md and keep DART's default order: Summary, Motivation / Problem, Changes / Key Changes, optional Before / After, Testing, Breaking Changes, and Related Issues / PRs. Keep Summary first as the reviewer skim target. If the motivation is necessary to understand the outcome, make the first Summary sentence problem-oriented, then put the fuller why in Motivation / Problem rather than moving Motivation above Summary.

Write PR descriptions for a user or downstream maintainer who is not already familiar with the implementation. Lead Summary and Motivation with what changes for them, what stays compatible, how they opt in or migrate, and why the evidence matters; keep implementation mechanics in Changes unless they explain user-visible risk.

When a PR has meaningful user-facing API, workflow, behavior, or performance impact, add a concise Before / After section. Cover only relevant dimensions, phrase rows as user-visible before/after outcomes, and for performance claims name the baseline explicitly: CPU path, parent commit, main, or prior implementation, plus workload, metric, and important limitations.

Use plain descriptive commit messages and PR titles. Do not prefix them with agent tags such as [codex], [claude], or [opencode].

For already-published PRs, keep history inspectable with additive commits. If the PR branch needs the latest target branch, use explicit maintainer/user approval to update that published branch by merging the target branch and pushing normally. Do not rebase published PR branches by default because that invalidates existing CI runs and makes PR review/comment history harder to follow. Rebase or force-push only when the maintainer explicitly requests it.

Milestones (Required)

Always set a milestone when creating PRs after explicit maintainer/user approval:

Target Branch Milestone
main DART 7.0 (or next major)
Active DART 6 LTS release-6.* branch Branch-matching DART 6.x patch
# After explicit maintainer/user approval, set milestone on existing PR
gh pr edit <PR#> --milestone "DART 7.0"

# List available milestones
gh api repos/dartsim/dart/milestones --jq '.[] | .title'

CRITICAL: Bug Fix Dual-PR

Bug fixes require PRs to BOTH release lines:

  1. Active DART 6 LTS release-6.* branch - Current DART 6 maintenance line
  2. main - Next release

Steps:

  1. Fix on the active DART 6 LTS branch first
  2. Cherry-pick to main
  3. After explicit maintainer/user approval, create separate PRs for each

CHANGELOG (After Approved PR Exists)

Use the dart-changelog routine with docs/onboarding/changelog.md as the source of truth. After the approved PR exists, check if CHANGELOG.md needs updating:

Change Type Update CHANGELOG?
Bug fixes ✅ Yes
New features ✅ Yes
Breaking changes ✅ Yes (in Breaking Changes section)
Documentation improvements ✅ Yes (in Tooling and Docs)
CI/tooling changes ✅ Yes (in Tooling and Docs)
Refactoring (no behavior change) ⚠️ Maybe (if significant)
Dependency bumps ⚠️ Maybe (if user-facing)
Typo fixes ❌ No

Format: - Reader-visible outcome. ([#PR](https://github.com/dartsim/dart/pull/PR))

Keep entries concise. If details need more than a few wrapped lines, move the details to the owner doc, plan, or migration note and link that document. Do not add one bullet per PR when several PRs ship one reader-visible outcome; merge them into one human-readable release-note entry.

# Example entry in CHANGELOG.md under appropriate section:
- Added AI-native documentation with AGENTS.md and module-specific guides. ([#2446](https://github.com/dartsim/dart/pull/2446))

Code Review

  • Address all feedback
  • Keep changes minimal
  • Update tests if behavior changed
  • Run full validation, then ask for explicit maintainer/user approval before pushing fixes

CI Loop

gh run watch <RUN_ID> --interval 30

Fix failures until green.

用于处理 DART 项目的依赖维护和机器人 PR。自动列出 Dependabot 和 GitHub Actions 的 PR,审查 Diff 与 CI 状态,并在获得明确批准后合并,最后输出评审报告与建议。
用户请求处理 DART 依赖更新 需要审查或合并自动化维护 PR
.agents/skills/dart-deps/SKILL.md
npx skills add dartsim/dart --skill dart-deps -g -y
SKILL.md
Frontmatter
{
    "name": "dart-deps",
    "description": "DART Deps: triage and shepherd dependency and bot pull requests"
}

dart-deps

Use this skill in Codex to run the DART dart-deps workflow. The editable workflow source lives in .claude/commands/; this file is its generated adapter in the shared .agents/skills/ catalog.

Invocation

  • Claude Code/OpenCode: /dart-deps <arguments>
  • Codex: $dart-deps <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Triage and shepherd dependency and bot PRs: $ARGUMENTS

Required Reading

@AGENTS.md @docs/onboarding/ci-cd.md @docs/onboarding/contributing.md

Scope

Handle automated dependency and maintenance PRs: Dependabot GitHub Action version bumps and the scheduled lockfile PRs opened by update_lockfiles.yml. Default to read-only triage; merging any bot PR is an explicit approval gate.

Workflow

  1. List open bot PRs:
    gh pr list --repo dartsim/dart --state open \
      --search "author:app/dependabot OR author:app/github-actions" \
      --json number,title,headRefName,author
    
  2. For each PR, review the diff (gh pr diff <PR_NUMBER>):
    • Action bumps: confirm the new ref is a pinned commit SHA and sanity-check the upstream changelog for the bumped version.
    • Lockfile PRs: confirm the regenerated lockfile provenance matches the workflow that produced it and that no unrelated content changed.
  3. Confirm CI is green for the PR head: gh pr checks <PR_NUMBER>.
  4. Merge a reviewed, CI-green bot PR only after explicit maintainer/user approval, using the current head SHA and the repository merge method.
  5. Batch-report every triaged PR with its recommendation and status.

Output

  • Table of open bot PRs with kind (action bump or lockfile), CI state, and recommendation
  • Diff-review notes per PR
  • Which PRs were merged after explicit approval and which remain pending
用于更新 DART 项目的文档和 AI 指令可见性,不涉及代码变更。涵盖常规文档、AI 工作流源文件的编辑、分类、索引更新及 lint 验证,确保文档与 AI 工具的一致性。
需要更新项目文档结构或内容时 需要修改 AI 指令或技能定义时 需要同步 AI 命令配置时
.agents/skills/dart-docs-update/SKILL.md
npx skills add dartsim/dart --skill dart-docs-update -g -y
SKILL.md
Frontmatter
{
    "name": "dart-docs-update",
    "description": "DART Docs Update: update docs or AI instruction visibility without code changes"
}

dart-docs-update

Use this skill in Codex to run the DART dart-docs-update workflow. The editable workflow source lives in .claude/commands/; this file is its generated adapter in the shared .agents/skills/ catalog.

Invocation

  • Claude Code/OpenCode: /dart-docs-update <arguments>
  • Codex: $dart-docs-update <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Update documentation: $ARGUMENTS

Required Reading

@AGENTS.md @docs/README.md @docs/AGENTS.md @docs/information-architecture.md @docs/ai/principles.md @docs/ai/verification.md @docs/onboarding/ai-tools.md @docs/onboarding/changelog.md

Workflow

  1. Create a branch from the target branch: git checkout -b docs/<topic> origin/main
  2. Edit docs and AI workflow sources only:
    • Regular docs: docs/**, README.md, AGENTS.md, CONTRIBUTING.md, and CHANGELOG.md when dart-changelog requires a release-note entry
    • AI source files: .claude/commands/**, .claude/skills/**
  3. For AI workflow changes, run pixi run sync-ai-commands; do not hand-edit generated .opencode/ or .codex/ files
  4. Classify new or moved docs by lifecycle first, then audience, then topic, using docs/information-architecture.md. For AI docs, keep always-loaded entrypoints compact: improve owner placement or pointers instead of duplicating procedures.
  5. Update indexes and cross-references that point to changed docs
  6. Use docs/ai/verification.md to select the docs-only or AI docs/adapters gate set, then run pixi run lint before committing
  7. Invoke the dart-changelog routine for the CHANGELOG.md decision and any required entry.
  8. Ask for explicit maintainer/user approval before pushing or opening the PR. After approval, use .github/PULL_REQUEST_TEMPLATE.md and the proper milestone.

Output

  • Docs and AI workflow sources changed
  • Sync and verification commands run
  • Changelog decision
  • PR readiness, noting any external mutation that was explicitly approved
用于修复通过 gz-physics、Gazebo 或 gz-sim 上报的 DART 下游问题。处理崩溃、断言失败、NaN/Inf 传播及性能回归,遵循最小化修复原则,在 LTS 分支和 main 分支分别提交 PR,并包含回归测试与 CI 验证。
用户报告 Gazebo 或 gz-physics 中由 DART 引起的崩溃或异常行为 需要修复追溯至 DART 的 NaN/Inf 传播或缺乏验证的问题 请求对 DART 下游问题进行根因分析和补丁开发
.agents/skills/dart-downstream-fix/SKILL.md
npx skills add dartsim/dart --skill dart-downstream-fix -g -y
SKILL.md
Frontmatter
{
    "name": "dart-downstream-fix",
    "description": "DART Downstream Fix: fix a DART bug reported through gz-physics or Gazebo"
}

dart-downstream-fix

Use this skill in Codex to run the DART dart-downstream-fix workflow. The editable workflow source lives in .claude/commands/; this file is its generated adapter in the shared .agents/skills/ catalog.

Invocation

  • Claude Code/OpenCode: /dart-downstream-fix <arguments>
  • Codex: $dart-downstream-fix <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Fix downstream-reported DART issue: $ARGUMENTS

Required Reading

@AGENTS.md @docs/onboarding/contributing.md @docs/onboarding/ci-cd.md

When To Use

Use for downstream issues in gz-physics, Gazebo, or gz-sim that trace back to DART behavior: crashes, assertions, NaN/Inf propagation, missing validation, or DART performance regressions.

Workflow

If the downstream symptom depends on scene/model structure, simulation, collision/contact, or GUI output, route through dart-verify-sim: establish a text oracle, add assessed claim-tied visual evidence, or document a visual exception when rendering is unavailable or not applicable.

  1. Read the downstream issue, logs, stack traces, and reproduction steps.
  2. Identify the DART API, component, and invalid usage pattern involved.
  3. Search for related validation and recovery patterns in DART.
  4. Plan the smallest fix and the regression test location.
  5. Decide whether the bug applies to the active release line. For applicable bug fixes, implement on the active DART 6 LTS branch first, then cherry-pick or reapply to main for DART 7:
    • branch: fix/<downstream-project>-<issue-number>-<brief-description>-6-lts
    • add a regression test that reproduces the downstream symptom
    • keep the fix minimal; no unrelated refactors
  6. Run pixi run lint and relevant tests; use pixi run test-all when feasible, and also pixi run -e cuda test-all on Linux hosts with a visible NVIDIA CUDA runtime.
  7. Ask for explicit maintainer/user approval before pushing or creating PRs. After approval, create the release-branch PR with the branch-matching DART 6.x patch milestone and reference the downstream issue.
  8. Create the matching main PR with milestone DART 7.0; adapt API differences if needed.

Release-Line Differences

  • DART 7 commonly uses DART_WARN() and <dart/All.hpp>.
  • DART 6 LTS may use dtwarn << ..., <dart/dart.hpp>, and older test CMake patterns.

Output

  • Root cause and fix summary
  • Main PR URL and release PR URL, if applicable
  • Tests run and CI status
  • Link back to the downstream issue
在DART工作流中执行指定或自动选择的工作包。支持通过WP-ID精确执行、PLAN-NNN选择首包或空参数自动扫描可用包,并严格校验依赖、本地/远程标记及分支冲突以确保任务可用性。
用户要求执行特定工作包 用户要求按计划执行首个可用任务 需要自动发现和执行下一个待处理工作包
.agents/skills/dart-execute-packet/SKILL.md
npx skills add dartsim/dart --skill dart-execute-packet -g -y
SKILL.md
Frontmatter
{
    "name": "dart-execute-packet",
    "description": "DART Execute Packet: select and execute one orchestrator-authored work packet from a numbered plan"
}

dart-execute-packet

Use this skill in Codex to run the DART dart-execute-packet workflow. The editable workflow source lives in .claude/commands/; this file is its generated adapter in the shared .agents/skills/ catalog.

Invocation

  • Claude Code/OpenCode: /dart-execute-packet <arguments>
  • Codex: $dart-execute-packet <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Execute a work packet in DART: $ARGUMENTS

Required Reading

Read these files first: @AGENTS.md @docs/ai/orchestration.md @docs/ai/principles.md @docs/ai/verification.md @docs/plans/dashboard.md

Inputs

$ARGUMENTS is optional and takes one of three forms:

  • WP-<plan>.<n> (for example WP-091.13) — execute exactly that packet.
  • PLAN-NNN (for example PLAN-091) — select the first available packet in that plan.
  • empty — auto-select: walk docs/plans/dashboard.md top to bottom (document order is priority); for each Active entry whose owner doc is a numbered plan file containing #### WP- packet headings, take the first available packet by the availability rules below. State which packet was selected and why before starting.

If nothing resolves to an available packet, report what was checked (plans walked, packets skipped and the blocking signal for each) and stop; do not invent work.

Availability and conflict check

Run the full check from docs/ai/orchestration.md before claiming. A packet is available only when ALL of these hold:

  1. Dependencies — its Dependencies line is satisfied in full: every named packet is marked [done — ...], and every non-packet precondition (for example "maintainer direction on ..." or an accepted design note) has recorded evidence in the plan or the named owner doc. Treat any precondition you cannot verify as unmet and skip the packet.
  2. Local markers — its heading carries neither [done — ...] nor [claimed] in the local plan file.
  3. Remote markersgit fetch origin (a read-only sync), then check the plan file as it exists on the default branch (git show origin/main:docs/plans/<plan-file>.md) for a marker the local checkout does not have yet.
  4. Branch/PR signals — no one else is already working it: git ls-remote --heads origin shows no branch embedding the packet ID in the documented form (wp-<plan>-<n>-<slug>, for example wp-091-13-contact-assembly), and gh pr list --state open --search "WP-<plan>.<n>" returns no open PR carrying the ID in its title. These are read-only queries that mutate nothing; any push, PR creation, or other GitHub mutation still requires explicit maintainer/user approval.

If any signal says the packet is taken: in auto/plan mode skip to the next available packet; for an explicit packet ID, report the conflicting signal and stop.

Readiness check

Before claiming, inspect the packet text and named owner docs for the specification intake required by docs/ai/orchestration.md:

  • objective;
  • value or rationale;
  • scope;
  • non-goals;
  • assumptions and open decisions;
  • acceptance evidence;
  • gates; and
  • dependencies.

If objective, scope, non-goals, acceptance evidence, gates, or dependencies are missing or too vague to verify, report that the packet is not executable and stop. For older packets that lack an explicit value or assumptions field, proceed only when the owner docs make the value and assumptions unambiguous, and state those inferred fields before editing. If an unresolved decision would materially change public API, release compatibility, numerical correctness, benchmark claims, or roadmap scope, stop and ask the orchestrator to record an owner-local Decision needed block.

Workflow

  1. Locate the packet — open the owning numbered plan file linked from docs/plans/dashboard.md and read the packet's objective, scope, value/rationale, assumptions/open decisions, non-goals, acceptance evidence, gates, and dependencies.
  2. Claim — append [claimed] to the packet heading in the plan file and create the topic branch named wp-<plan>-<n>-<slug>. The branch name is the cross-machine claim signal once pushed; pushing it (like any GitHub mutation) requires explicit maintainer/user approval, so until then the marker and branch are local and the strongest remote signal stays the merged plan file.
  3. Load packet context — read the owner docs the plan names for that workstream plus the files in the packet's scope. Do not load the whole plan corpus; the packet defines the working set.
  4. Implement exactly the packet — stay inside scope and non-goals. If the real scope differs materially from the packet's stated scope, stop and report back with what was found; do not widen the packet. One packet, one branch, one verification story.
  5. Verify — run the packet's gates plus pixi run lint before any commit. Record each piece of acceptance evidence named by the packet (test names, command output, doc updates). Missing evidence means the packet is not complete — say so explicitly.
  6. Hand back — append an Evidence: bullet to the packet in the plan file listing the recorded evidence (or update the dev-task RESUME.md for multi-session packets), leave the [claimed] marker for the orchestrator to replace with [done — ...] on acceptance, then report completion with the evidence list for orchestrator review. Local commits are part of execution; pushes and PR creation require explicit maintainer/user approval first, and the PR title starts with the packet ID (WP-<plan>.<n>: ...) so the claim is searchable.

Rules

  • The packet's owner docs win over the packet text on any conflict; report the conflict rather than improvising.
  • Do not chain into adjacent packets, refactor outside scope, or "fix while here" — file findings back to the orchestrator instead.
  • Never remove another session's [claimed] marker or reuse its branch; stale-claim release is the orchestrator's call (see docs/ai/orchestration.md).
  • Behavior-preserving packets must prove preservation (golden trajectories or the tests the packet names), not assert it.
  • Solver-family work additionally honors the intake checklist in docs/plans/solver-family-intake.md.
  • The author of a packet's implementation does not approve it; acceptance is the orchestrator's or an independent reviewer's call.

Output

  • Selected packet ID and owning plan
  • Scope implemented and acceptance evidence recorded
  • Gates run and their results
  • Hand-back state (the [claimed] marker left for the orchestrator) and any blocker
  • Any external mutation that was explicitly approved
用于调试和修复DART项目CI检查失败的技能。支持识别分支、分析日志、本地复现问题并应用最小化修复,特别处理release分支的cherry-pick逻辑及物理仿真验证,确保代码合规与CI绿色。
用户请求修复CI构建失败 需要排查GitHub Actions运行错误 针对特定分支进行CI故障排除
.agents/skills/dart-fix-ci/SKILL.md
npx skills add dartsim/dart --skill dart-fix-ci -g -y
SKILL.md
Frontmatter
{
    "name": "dart-fix-ci",
    "description": "DART Fix CI: debug and fix failing CI checks on any base branch"
}

dart-fix-ci

Use this skill in Codex to run the DART dart-fix-ci workflow. The editable workflow source lives in .claude/commands/; this file is its generated adapter in the shared .agents/skills/ catalog.

Invocation

  • Claude Code/OpenCode: /dart-fix-ci <arguments>
  • Codex: $dart-fix-ci <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Fix CI failure: $ARGUMENTS

Required Reading

@AGENTS.md @docs/onboarding/ci-cd.md @docs/onboarding/release-management.md

Workflow

For a failure involving model/scene structure, physics behavior, or GUI output, use dart-verify-sim to reproduce the claim with text and assessed visual evidence. Document a visual exception when the relevant renderer is unavailable or not applicable.

  1. Identify the base branch. Default to main; use base=<branch> from $ARGUMENTS or the PR's own base when it is a release-* branch. For a release-* base, also read docs/onboarding/release-management.md and apply the release caveats called out below.
  2. Identify failing checks: gh pr checks <PR_NUMBER> or gh run view <RUN_ID>.
  3. Inspect the first real failure:
    gh run view <RUN_ID> --log-failed
    gh run view <RUN_ID> --job <JOB_ID> --log
    
  4. If a job is still in progress, wait for logs instead of guessing.
  5. Choose where to fix. Check whether an equivalent fix already exists on main. If continuing an existing PR, fetch and check out that PR branch instead of creating a new one. For a release-* base, branch from the release branch and prefer cherry-picking the proven main fix; keep any new fix release-scoped and minimal:
    git fetch origin <RELEASE_BRANCH>
    git checkout -B fix/<issue>-<release-branch> origin/<RELEASE_BRANCH>
    
  6. Reproduce locally with the smallest relevant command:
    • formatting: pixi run lint
    • tests: pixi run test, pixi run test-unit, or another existing focused pixi run ... test task
    • coverage: add targeted tests for uncovered changed lines
  7. Fix the root cause with minimal scope. Explain why the failure was not caught earlier and whether workflow coverage should change.
  8. If the failure is infrastructure-only, ask for explicit maintainer/user approval before rerunning the failed job or running:
    gh run rerun <RUN_ID> --failed
    
  9. Ask for explicit maintainer/user approval before pushing, CI re-triggers, or other GitHub mutations; after approval, push and watch CI until green. For a release-* base, use the current release milestone and the PR template when creating or updating the release-branch PR.

Output

  • Root cause
  • Fix or rerun action
  • Commands run
  • PR URL, when a PR was created or updated
  • Current CI status
  • Prevention recommendation, if any
用于在Codex中执行DART项目的GitHub Issue修复工作流。通过验证Issue、分类分支、编写最小化修复代码及回归测试,运行Lint和全套测试,最终创建包含Changelog的双PR(LTS与main分支),确保代码质量与版本同步。
用户要求修复DART项目的特定GitHub Issue 需要为DART项目生成包含回归测试的Bug修复PR
.agents/skills/dart-fix-issue/SKILL.md
npx skills add dartsim/dart --skill dart-fix-issue -g -y
SKILL.md
Frontmatter
{
    "name": "dart-fix-issue",
    "description": "DART Fix Issue: resolve a GitHub issue with a fix and regression test"
}

dart-fix-issue

Use this skill in Codex to run the DART dart-fix-issue workflow. The editable workflow source lives in .claude/commands/; this file is its generated adapter in the shared .agents/skills/ catalog.

Invocation

  • Claude Code/OpenCode: /dart-fix-issue <arguments>
  • Codex: $dart-fix-issue <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Fix GitHub issue: $ARGUMENTS

Required Reading

@AGENTS.md @docs/onboarding/contributing.md @docs/onboarding/changelog.md @docs/ai/verification.md

Workflow

If the issue's fix depends on model/scene structure, simulation, dynamics, collision/contact/constraints, or GUI output, route through dart-verify-sim: pair the focused behavioral oracle with assessed, claim-tied visual evidence, or document a visual exception when rendering is unavailable or not applicable.

  1. gh issue view $1 - Validate issue
  2. Classify whether the issue is a bug fix that applies to the active DART 6 LTS branch. For applicable bug fixes, start from the highest maintained origin/release-6.* branch; otherwise start from origin/main.
  3. Fix with minimal changes + add regression test. For dual-PR bug fixes, fix the active DART 6 LTS branch first, then cherry-pick or reapply to main.
  4. pixi run lint, then run the smallest relevant tests; use pixi run test-all before finalizing when feasible, and also pixi run -e cuda test-all on Linux hosts with a visible NVIDIA CUDA runtime
  5. Before PR creation, invoke the dart-changelog routine to decide whether CHANGELOG.md needs an entry, then fill .github/PULL_REQUEST_TEMPLATE.md.
  6. After explicit maintainer/user approval, git push -u origin HEAD && gh pr create --base <target-branch> --milestone "<milestone>"
  7. Before PR: If task used docs/dev_tasks/<task>/, remove the folder (include in this PR, not after merge)

CRITICAL: Dual-PR for Bug Fixes

PRs to BOTH the active DART 6 LTS branch AND main. See docs/onboarding/contributing.md.

Output

  • Issue number and classification (bug fix, dual-PR, or main-only)
  • Fix summary and regression test added
  • Gates run (lint, focused tests, pixi run test-all)
  • PR readiness for each target branch, noting any explicitly approved mutation
用于加载和解析机器人模型文件(URDF、SDF、MJCF),支持自动格式检测、包路径解析及指定格式读取,确保3D层级、变换和碰撞几何的正确性。
需要加载URDF、SDF或MJCF格式的机器人模型 处理ROS或Gazebo/MuJoCo兼容的机器人描述文件
.agents/skills/dart-io/SKILL.md
npx skills add dartsim/dart --skill dart-io -g -y
SKILL.md
Frontmatter
{
    "name": "dart-io",
    "description": "DART IO: URDF, SDF, MJCF parsers, and dart::io loading"
}

DART Model Loading (dart::io)

Load this skill when working with robot model files or parsers.

When correctness depends on the loaded model's 3D hierarchy, transforms, collision geometry, or simulated behavior, also load dart-verify-sim for a text scene/behavior oracle plus claim-tied visual corroboration.

Quick Start

#include <dart/io/read.hpp>

// Format auto-detection
auto skel = dart::io::readSkeleton("dart://sample/urdf/KR5/KR5 sixx R650.urdf");

Full Documentation

For complete I/O guide: docs/onboarding/io-parsing.md

For module-specific details: dart/io/AGENTS.md

Supported Formats

Format Extension Use Case
URDF .urdf ROS robots
SDF .sdf, .world Gazebo models
MJCF .xml MuJoCo models

Common Patterns

// URDF with package resolution
dart::io::ReadOptions options;
options.addPackageDirectory("my_robot", "/path/to/my_robot");
auto skel = dart::io::readSkeleton("package://my_robot/urdf/robot.urdf", options);

// Force specific format
options.format = dart::io::ModelFormat::Sdf;

Key Files

  • API: dart/io/read.hpp
  • Tests: tests/unit/io/test_read.cpp
管理DART项目的拉取请求,包括CI监控、冲突解决、审查意见处理及元数据修正。支持默认管理和维护者合并模式,需用户明确授权方可执行修改操作。
用户输入 manage <PR> 或 continue managing <PR> 需要管理DART拉取请求的CI、审查或合并流程
.agents/skills/dart-manage-pr/SKILL.md
npx skills add dartsim/dart --skill dart-manage-pr -g -y
SKILL.md
Frontmatter
{
    "name": "dart-manage-pr",
    "description": "DART Manage PR: manage an open DART pull request through CI, review, merge, and cleanup"
}

dart-manage-pr

Use this skill in Codex to run the DART dart-manage-pr workflow. The editable workflow source lives in .claude/commands/; this file is its generated adapter in the shared .agents/skills/ catalog.

Invocation

  • Claude Code/OpenCode: /dart-manage-pr <arguments>
  • Codex: $dart-manage-pr <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Manage an open DART pull request after explicit maintainer/user approval for mutations: $ARGUMENTS

Required Reading

@AGENTS.md @docs/onboarding/contributing.md @docs/onboarding/ci-cd.md @docs/onboarding/testing.md @docs/onboarding/ai-tools.md

Modes

  • mode=manage (default): run the full PR-management loop below to the next terminal state.
  • mode=merge: maintainer-only. Complete the local pre-merge validation in step 6 and merge a ready PR only after explicit maintainer/user approval for the merge.

Invocation Contract

When the user says manage <PR> or continue managing <PR> without limiting the request to status-only, treat that as approval to run the full PR-management loop to the next terminal state:

  • required policy metadata checked and corrected when stale;
  • CI monitored until green, failed, or blocked;
  • merge conflicts reproduced and resolved locally;
  • review comments addressed, pushed, resolved, and re-reviewed when appropriate;
  • PR body/testing evidence refreshed when it no longer matches the branch.

This explicit approval covers routine PR-maintenance mutations for that loop: additive fix commits and pushes, PR description/metadata corrections, resolving already-addressed review threads, rerunning failed CI jobs, and requesting a fresh AI review after follow-up fixes. It does not cover merging the PR into the target branch, force-pushes, branch deletion, PR closure, base-branch changes, or human reviewer requests; ask separately for those.

Do not call the PR managed just because checks are green. Continue until the PR is mergeable with required checks complete and addressed review threads resolved, or until a concrete blocker remains.

Identify the PR

Use the PR number or URL from $ARGUMENTS. If none is provided, infer the PR from the current branch:

gh pr view --json number,url,headRefName,baseRefName

Then inspect the full state:

gh pr view <PR_NUMBER> --json number,title,state,isDraft,baseRefName,headRefName,mergeStateStatus,milestone,url,reviewDecision,statusCheckRollup
gh pr checks <PR_NUMBER>

Workflow

  1. Confirm scope and policy:
    • Check that the base branch, title, and PR template are correct.
    • Verify the milestone is set before merge: DART 7.0 for a main base, the branch-matching DART 6.x patch milestone for a release-* base. If it is missing, set it only after explicit maintainer/user approval.
    • For bug fixes, verify the required DART 6 LTS + main dual-PR flow.
    • Confirm the PR body's testing/status section matches the current head and does not point reviewers to deleted dev-task evidence as still pending.
    • Confirm the PR body follows template order: Summary, Motivation / Problem, Changes / Key Changes, optional Before / After, Testing, Breaking Changes, and Related Issues / PRs. Keep Summary first as the skimmable outcome; fold leading problem context into Summary and keep the fuller why in Motivation.
    • When the PR has user-facing API, workflow, behavior, or performance impact, confirm a concise Before / After section compares old and new surfaces; for performance claims make the baseline explicit (CPU path, parent commit, main, or prior implementation) plus workload, metric, and limitations.
    • Ensure transient visual evidence (screenshots, headless renders, GIFs, videos) is hosted as GitHub PR/issue attachments rather than committed to the branch; if committed only for the PR body, replace it with an attachment URL or ask a maintainer to upload.
    • When the claim depends on 3D structure or behavior, accept an optional Visual verification subsection after Testing and verify it agrees with the text oracle, covers explicit claims, names what is not proved and any limitations, records view/debug layers, and includes reproduce commands.
    • Inspect local state before editing:
      git status --short --branch
      git diff --stat
      git diff --check
      
  2. Monitor CI:
    gh pr checks <PR_NUMBER> --watch --interval 30 --fail-fast
    
    If checks are still queued or running, report the current jobs and keep watching unless the user asked only for status. Also poll mergeability:
    gh pr view <PR_NUMBER> --json mergeStateStatus,headRefOid,isDraft,reviewDecision
    
    If GitHub reports conflicts, fetch the target branch and resolve them before treating green checks as sufficient.
  3. Fix failures:
    • Inspect the newest failed run or job, not an older cancelled run. Use the dart-fix-ci workflow for non-trivial CI debugging.
    • Reproduce locally with the relevant pixi run ... task or focused test.
    • Before committing fixes, run pixi run lint; also build or test when code or behavior changed. Commit only intended files.
    • Prefer additive follow-up commits for published PRs. Amend or force-push only after explicit maintainer/user approval and only when the user requests it or a clear reason exists (removing sensitive content, repairing branch history).
    • Merge the latest base branch into the PR branch before any push, and follow the base-merge, automated-review, and bot no-reply rules in docs/onboarding/ai-tools.md; each push, PR comment, review re-trigger, or thread resolution needs explicit maintainer/user approval.
  4. Address reviews:
    • Use the dart-review-pr workflow for substantive review feedback and the automated-review handling in docs/onboarding/ai-tools.md (no inline bot replies; verify claims locally; apply AI-review fixes silently).
    • For human reviewers, reply only when a response is useful after a fix or when a question needs clarification.
    • After an approved push that addressed Codex comments on a PR that already had a Codex review, post a fresh top-level @codex review; that PR comment needs explicit maintainer/user approval and must not duplicate an active trigger.
    • For substantive code PRs, an independent review session (a human, or a separate agent session running /dart-review-pr) must record findings before merge approval; docs-only and mechanical changes are exempt.
  5. Mark ready or merge only when appropriate:
    • Confirm review requirements are satisfied and local validation matches the intended transition.
    • If the PR is draft, mark it ready after explicit approval once Codex is clean and local validation passed on the current head: default pixi run test-all, plus pixi run -e cuda test-all on Linux hosts with a visible NVIDIA CUDA runtime. Hosted CI may still be pending.
    • Use the current head SHA when merging so a moved branch cannot be merged accidentally. Prefer squash/rebase over merge commits per repository settings; recent DART main PRs use single-parent PR-title commits.
  6. mode=merge gate (maintainer-only): before any merge, run local pre-merge validation on the current head after the latest pushed change: pixi run test-all and, on Linux hosts with a visible NVIDIA CUDA runtime, pixi run -e cuda test-all; do not substitute the default run for the CUDA run, and record a skip or blocker explicitly. Merge only after CI and review are green, the milestone is set, an independent review recorded findings, the PR is not draft, GitHub reports it mergeable, and explicit merge approval is given. PR comments, review re-triggers, thread resolution, reviewer requests, ready-for-review transitions, merges, and branch deletion are external mutations that require explicit maintainer/user approval.
  7. Clean up after merge:
    • Confirm the PR merged and identify the head branch before deleting.
    • After explicit maintainer/user approval, prefer merge-time deletion with the approved merge method and head SHA:
      gh pr merge <PR_NUMBER> --squash --match-head-commit <HEAD_SHA> --delete-branch
      
      Use --rebase or --merge instead of --squash when requested.
    • After explicit maintainer/user approval, otherwise delete only the PR branch after confirming it has landed:
      git push origin --delete <HEAD_BRANCH>
      git switch main
      git pull --ff-only
      git branch -D <HEAD_BRANCH>
      
      Squash and rebase merges do not preserve the branch tip in main ancestry, so force-delete locally only after confirming the PR branch landed and only after explicit maintainer/user approval.

Output

Report:

  • PR number, URL, base, head, draft state, milestone, and merge status.
  • CI summary: passing, failing, pending, or skipped checks.
  • Review summary, independent-review status, and whether @codex review ran.
  • Local pre-merge validation state when mode=merge ran.
  • Commits pushed, merge action, and branch cleanup action.
  • Remaining blockers or next action.
执行DART项目的行为保持机械重构。定义转换范围,创建分支,优先使用自动化脚本编辑,确保不改变程序行为且不混入新功能。重构后需更新构建配置并运行 lint、build 及单元测试等验证流程,最终在获得批准前提交 PR。
需要重构代码但不改变功能的行为 执行重复性的机械式代码调整 清理或重组文件结构
.agents/skills/dart-mechanical-refactor/SKILL.md
npx skills add dartsim/dart --skill dart-mechanical-refactor -g -y
SKILL.md
Frontmatter
{
    "name": "dart-mechanical-refactor",
    "description": "DART Mechanical Refactor: perform a behavior-preserving mechanical refactor"
}

dart-mechanical-refactor

Use this skill in Codex to run the DART dart-mechanical-refactor workflow. The editable workflow source lives in .claude/commands/; this file is its generated adapter in the shared .agents/skills/ catalog.

Invocation

  • Claude Code/OpenCode: /dart-mechanical-refactor <arguments>
  • Codex: $dart-mechanical-refactor <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Perform mechanical refactor: $ARGUMENTS

Required Reading

@AGENTS.md @CONTRIBUTING.md @docs/onboarding/code-style.md

Workflow

  1. Define the exact transformation and scope before editing.
  2. Create a branch from the target branch, usually origin/main.
  3. Prefer scriptable or automated edits when the transformation is repetitive.
  4. Keep behavior unchanged; do not mix in feature work or cleanup outside scope.
  5. If reorganizing files, update CMake, pixi tasks, generated indexes, and docs.
  6. Run focused checks first, then broader checks according to risk:
    • pixi run lint
    • pixi run build
    • pixi run test-unit
    • pixi run test-all when feasible
    • pixi run -e cuda test-all when feasible on Linux CUDA hosts
  7. Ask for explicit maintainer/user approval before pushing or opening a PR. After approval, open a PR with a clear scope statement and no behavior-change claim unless tested.

Output

  • Transformation summary
  • Files or areas changed
  • Verification run
  • Any residual risk
用于在DART项目中启动新功能、修复、重构等任务。涵盖理解需求、评估范围、分支管理、代码实现、验证测试及创建PR的全流程,支持多阶段任务和复杂决策记录。
用户需要开始新的开发任务 用户请求创建功能或修复Bug 涉及DART项目的任务初始化
.agents/skills/dart-new-task/SKILL.md
npx skills add dartsim/dart --skill dart-new-task -g -y
SKILL.md
Frontmatter
{
    "name": "dart-new-task",
    "description": "DART New Task: start a feature, bugfix, refactor, docs, build, or test task"
}

dart-new-task

Use this skill in Codex to run the DART dart-new-task workflow. The editable workflow source lives in .claude/commands/; this file is its generated adapter in the shared .agents/skills/ catalog.

Invocation

  • Claude Code/OpenCode: /dart-new-task <arguments>
  • Codex: $dart-new-task <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Start a new task in DART: $ARGUMENTS

Required Reading

Read these files first: @AGENTS.md @docs/onboarding/building.md @docs/onboarding/contributing.md @docs/onboarding/code-style.md @docs/dev_tasks/README.md @docs/information-architecture.md @docs/ai/sessions.md @docs/ai/principles.md @docs/ai/verification.md

Workflow

  1. Understand the task - Parse: goal, constraints, type (feature|bugfix|refactor|docs)
  2. Assess scope - Multi-phase or multi-session? Create docs/dev_tasks/<task>/ (see docs/dev_tasks/README.md for criteria). Team-scale work (multiple parallel lanes needing orchestrated worker agents) switches to dart-ultrawork instead. For multi-session, design-heavy, public API, solver/paper, release, or cross-module work, fill the dev-task specification intake before editing: value, scope, assumptions, traceability, non-goals, acceptance evidence, gates, and open decisions. If consequential ambiguity would change public API, release compatibility, numerical correctness, benchmark claims, or roadmap scope, record an owner-local Decision needed block instead of silently choosing.
  3. Setup - Choose the target branch before creating a topic branch:
    • features/docs/non-bugfix refactors: branch from origin/main
    • bug fixes that apply to the current release line: branch from the active DART 6 LTS origin/release-6.* branch first, then cherry-pick or reapply to main
  4. Implement - Keep commits focused, follow code style
  5. Verify - Run pixi run lint before committing, then pixi run test-all; on Linux hosts with a visible NVIDIA CUDA runtime, also run pixi run -e cuda test-all. If the claim depends on scene structure, simulation, dynamics, collision/contact, GUI output, or a visual example, route through dart-verify-sim: prove correctness with text first, then add assessed headless/debug-layer evidence or record why it is not applicable.
  6. PR - After explicit maintainer/user approval, git push -u origin HEAD then gh pr create --draft --base <target-branch> --milestone "<milestone>" (DART 7.0 for main, branch-matching DART 6.x patch milestone for the active DART 6 LTS branch); follow .github/PULL_REQUEST_TEMPLATE.md
  7. Cleanup - Before PR: if task used docs/dev_tasks/<task>/, first promote durable dashboards, evidence matrices, API inventories, migration maps, or long-lived decisions into the durable owner selected by docs/information-architecture.md. Then remove the dev-task folder completely (include the deletion in this PR, not after merge).

Type-Specific

  • Bugfix: Requires PRs to BOTH the active DART 6 LTS branch AND main
  • Refactor: No behavior changes
  • Feature: Add tests + docs
  • New solver/paper implementation: Before any implementation starts, record the full solver-family intake checklist in docs/plans/solver-family-intake.md — including its solver-contract conformance and solver-identity/metrics items; the standing rule in docs/design/dart7_architecture_assessment.md applies, and new families must not bypass the PLAN-091 contracts. Derive an evidence matrix from the paper, project page, reference source, videos, and demos. Do not call the task complete until DART implements all algorithms/features on required CPU and GPU backends, ports all experiments/demos into tests/benchmarks/py-demos, records benchmark JSON proving DART beats reference and paper numbers for every claimed case (with the resolved solver configuration machine-recorded in every packet), and performs any clean API/pipeline refactor needed for the long-term DART 7/8 architecture. For multi-session work, keep the active docs/dev_tasks/<task>/README.md and RESUME.md explicit about the latest completed slice, the next missing paper-parity gap, and why focused green tests are not a full solver/paper completion claim.

Output

  • Task type, scope, and whether a docs/dev_tasks/<task>/ folder was created
  • Files changed and gates run
  • Dev-task promotion and cleanup status when the task completed
  • PR readiness, noting any external mutation that was explicitly approved
用于在Codex中执行DART工作流,根据用户参数选择并运行下一个有界任务。支持select、execute、pr模式及size/focus约束,结合本地状态和文档优先级确定任务,确保变更安全可控。
用户请求执行下一个DART任务 调用 /dart-next 或 $dart-next 命令
.agents/skills/dart-next/SKILL.md
npx skills add dartsim/dart --skill dart-next -g -y
SKILL.md
Frontmatter
{
    "name": "dart-next",
    "description": "DART Next: select and execute the next bounded DART task"
}

dart-next

Use this skill in Codex to run the DART dart-next workflow. The editable workflow source lives in .claude/commands/; this file is its generated adapter in the shared .agents/skills/ catalog.

Invocation

  • Claude Code/OpenCode: /dart-next <arguments>
  • Codex: $dart-next <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Select and execute the next bounded DART task: $ARGUMENTS

Required Reading

@AGENTS.md @docs/ai/principles.md @docs/ai/north-star.md @docs/ai/workflows.md @docs/ai/verification.md @docs/plans/README.md @docs/plans/dashboard.md @docs/plans/north-star-roadmap.md @docs/dev_tasks/README.md @docs/onboarding/contributing.md @docs/onboarding/ci-cd.md @docs/onboarding/ai-tools.md

Arguments

Interpret $ARGUMENTS as optional constraints:

  • mode=select: choose one task and stop with evidence.
  • mode=execute: choose one task, make local changes, and verify locally. This is the default when the user asks to do the work.
  • mode=pr: execute locally and prepare PR text, then ask for explicit maintainer/user approval before any GitHub, PR, CI, branch, or review-thread mutation, including pushes, PR creation, PR comments, reviewer requests, review re-triggers, thread resolution, ready-for-review transitions, merges, CI reruns, or branch deletion.
  • size=tiny|small|medium|large or days=N: fit the chosen task to the requested scope. Default to small, meaning one focused local session.
  • focus=<topic>: prefer a focus area without making it the only allowed candidate. Examples: ai-native, easy-start, algorithm, compute, release, ci, docs, python, io, PLAN-020, world_split, dartpy, or a file path.
  • area=<dimension>: alias for focus=<dimension>.
  • Any issue, PR, branch, milestone, failing check, file path, or user-stated priority overrides the default dashboard order.

If constraints conflict or make the task unsafe to select, stop and ask one clarifying question.

Workflow

  1. Inspect local state before choosing work:
    git status --short --branch
    git diff --stat
    
  2. Build the candidate set from tracked evidence:
    • explicit user instruction in $ARGUMENTS;
    • current branch, local diff, or active docs/dev_tasks/<task>/ state;
    • docs/plans/dashboard.md, in priority order, especially Horizon: Now;
    • docs/ai/north-star.md gaps and readiness criteria;
    • issue, PR, or CI state named by the user or inferable from the branch.
  3. Exclude candidates that are blocked, larger than the requested size, missing enough evidence to start, likely to require unapproved GitHub mutations, or only bootstrap/maintain the dart-next workflow itself unless explicitly focused.
  4. Prefer the highest-value remaining candidate in this order:
    • user-specified issue, PR, failing check, or file path;
    • candidates matching focus=<topic> or area=<dimension>;
    • failing CI or review feedback on the current PR;
    • active dev task with a clear next local step;
    • first unblocked Horizon: Now dashboard item fitting the size;
    • issue triage or plan refinement when implementation evidence is missing.
  5. State the selected task before editing:
    • candidate and source evidence;
    • rejected higher-priority candidates and why they were not selected;
    • whether the preferred focus matched the selected task, and why if it did not;
    • size assumption and expected stopping point;
    • workflow to follow next;
    • verification gate from docs/ai/verification.md.

Execution Routing

After selection, follow the most specific DART workflow:

Selected work Route through
New implementation task $dart-new-task in Codex or /dart-new-task elsewhere
Existing dev task $dart-resume in Codex or /dart-resume elsewhere
Plan-only change $dart-plan-update in Codex or /dart-plan-update
Docs-only change $dart-docs-update in Codex or /dart-docs-update
GitHub issue fix $dart-fix-issue in Codex or /dart-fix-issue
Downstream bug $dart-downstream-fix or /dart-downstream-fix
Failing CI $dart-fix-ci in Codex or /dart-fix-ci
PR review or PR management $dart-review-pr / $dart-manage-pr or slash versions

If the selected task is multi-session or needs design tracking, create or update docs/dev_tasks/<task>/ according to docs/dev_tasks/README.md.

Local Work Cycle

  1. Load task-specific docs from AGENTS.md and the routed workflow.
  2. Make the smallest coherent local change that satisfies the selected task.
  3. Run the strongest relevant local gate:
    • docs/AI work: gates from docs/ai/verification.md;
    • C++ or Python behavior: pixi run lint, build, and focused tests;
    • CI work: local reproduction when possible plus the fixed check.
  4. Review the local diff before declaring completion:
    git diff --stat
    git diff --check
    
  5. Optimize or benchmark only when the selected objective is performance sensitive or the plan gate explicitly requires performance evidence.
  6. Update durable docs when the task changes project state, public workflow, or roadmap evidence.
  7. Run the completion audit from docs/ai/verification.md before finalizing.

PR And Review Management

Use $dart-pr or /dart-pr only after local verification is complete and the user requested PR preparation. Ask for explicit maintainer/user approval before any GitHub, PR, CI, branch, or review-thread mutation, including push, PR creation, PR comment, reviewer request, review re-trigger, review-thread resolution, ready-for-review transition, CI rerun, merge, or branch deletion.

After a PR exists and explicit approval covers PR management, use $dart-manage-pr or /dart-manage-pr for CI, review, and cleanup. For the first Codex review on a draft PR, prefer a top-level @codex review after explicit approval for PR comments; it can run while the PR remains draft. Once Codex is clean and local validation passes on the current head (default pixi run test-all, plus pixi run -e cuda test-all on Linux hosts with a visible NVIDIA CUDA runtime), the draft is ready to mark ready for human review after approval, while merge still waits for required hosted checks.

Output

Report:

  • selected task, size, evidence, and routed workflow;
  • files changed and verification commands run;
  • completion-audit result and any remaining blocker;
  • PR readiness status, without performing external mutations unless explicit approval was given.
用于讨论或更新DART生活计划。根据请求分类(讨论、编辑计划或派生任务),在修改前检查证据,确保计划管理规范并维护文档一致性。
用户希望讨论DART计划的选项、优先级或范围 用户要求修订docs/plans目录下的计划文件 需要将计划项转化为具体的实现或文档任务
.agents/skills/dart-plan-update/SKILL.md
npx skills add dartsim/dart --skill dart-plan-update -g -y
SKILL.md
Frontmatter
{
    "name": "dart-plan-update",
    "description": "DART Plan Update: discuss or update DART living plans"
}

dart-plan-update

Use this skill in Codex to run the DART dart-plan-update workflow. The editable workflow source lives in .claude/commands/; this file is its generated adapter in the shared .agents/skills/ catalog.

Invocation

  • Claude Code/OpenCode: /dart-plan-update <arguments>
  • Codex: $dart-plan-update <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Discuss or update DART living plans: $ARGUMENTS

Required Reading

@AGENTS.md @docs/ai/principles.md @docs/ai/north-star.md @docs/plans/README.md @docs/plans/dashboard.md @docs/plans/north-star-roadmap.md @docs/ai/verification.md

Workflow

  1. Classify the request:
    • discussion-only: compare options, priority, scope, or sequencing;
    • plan edit: revise docs/plans/** or related indexes;
    • task derivation: turn a plan item into a bounded implementation or docs task.
  2. Inspect current evidence before changing plan state. Use repo docs, code, tests, CI evidence, issue/PR state, benchmark data, or explicit maintainer direction.
    • For new solver/paper implementation plans, preserve the full paper-complete bar in docs/ai/verification.md: all algorithms/features, CPU and GPU paths, paper/site/video demos, benchmark JSON that beats reference and paper numbers, and clean long-term API/pipeline work.
    • For active multi-session solver/paper work, update the plan or dev-task resume surface with both the completed slice and the next missing paper-parity gap; do not let focused tests narrow the recorded objective. If the user names source demos, videos, or project pages, keep the corpus matrix explicit: which scenes/experiments are represented by tests, py-demos, visual artifacts, benchmark JSON, CPU reference comparisons, and GPU parity, and which rows remain missing.
  3. Keep the plan manageable:
    • revise an existing initiative before adding a duplicate;
    • use stable initiative IDs when renaming, splitting, consolidating, or parking work;
    • keep docs/plans/dashboard.md as the single source of truth for priority, status, horizon, dimension, next step, and gate.
    • when deriving packets or dev-task work, include the DART specification intake from docs/ai/orchestration.md: value, scope, non-goals, assumptions/open decisions, acceptance evidence, gates, and dependencies. Use owner-local Decision needed blocks for consequential ambiguity instead of silent defaults.
  4. For discussion-only requests, present the tradeoff and proposed plan delta; do not edit unless the user asks for an edit or the request already implies one.
  5. For plan edits, update docs/plans/dashboard.md for operating state, the detailed numbered initiative file or external owner document for rationale and workstreams, and docs/plans/north-star-roadmap.md only for strategic framing.
  6. If the plan item becomes implementation work, route to /dart-new-task in Claude/OpenCode or $dart-new-task in Codex, and use docs/dev_tasks/README.md when it is multi-session or needs design tracking.
  7. Verify with docs/ai/verification.md: use the docs-only gate for plan-only docs, and the AI docs/adapters gate set when AI docs, workflow sources, or generated adapters change.
  8. Do not perform GitHub or remote mutations without explicit maintainer/user approval.

Output

  • Request classification (discussion, plan edit, or task derivation)
  • Plan files changed and the operating-state updates made
  • Verification gate run
  • Any routed follow-up task or Decision needed block recorded
用于在DART项目中创建分支、提交代码、推送并打开Pull Request。需先阅读贡献指南,参考近期PR风格撰写标题和正文,遵循特定模板结构,并在测试环节列出具体命令或CI证据,确保PR质量符合规范。
用户请求创建DART项目的Pull Request 执行/dart-pr或$dart-pr命令以准备PR
.agents/skills/dart-pr/SKILL.md
npx skills add dartsim/dart --skill dart-pr -g -y
SKILL.md
Frontmatter
{
    "name": "dart-pr",
    "description": "DART PR: create a branch, commit, push, and open a DART pull request"
}

dart-pr

Use this skill in Codex to run the DART dart-pr workflow. The editable workflow source lives in .claude/commands/; this file is its generated adapter in the shared .agents/skills/ catalog.

Invocation

  • Claude Code/OpenCode: /dart-pr <arguments>
  • Codex: $dart-pr <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Prepare or open a DART pull request after explicit maintainer/user approval: $ARGUMENTS

Required Reading

@AGENTS.md @docs/onboarding/contributing.md @docs/onboarding/ai-tools.md @docs/onboarding/changelog.md @.github/PULL_REQUEST_TEMPLATE.md

Recent PR Patterns

When the expected PR style is unclear, inspect recently merged PRs before drafting the title or body:

gh pr list --repo dartsim/dart --state merged --base main --limit 10 \
  --json number,title,body,mergedAt

Use these practices:

  • Keep titles plain, scoped, and outcome-focused. Do not add agent prefixes.
  • Fill the PR template in DART's default order: Summary, Motivation / Problem, Changes / Key Changes, optional Before / After, Testing, Breaking Changes, and Related Issues / PRs. Keep Summary first because reviewers need the skimmable outcome before the rationale. If the motivation is necessary to understand the outcome, make the first Summary sentence problem-oriented, then keep the fuller why in Motivation / Problem rather than moving it above Summary.
  • Write Summary and Motivation for a user or downstream maintainer unfamiliar with the implementation: lead with what changes for them, what stays compatible, how they opt in or migrate, and why the evidence matters. Keep implementation mechanics in Changes unless they explain a user-visible outcome or risk.
  • When the change has user-facing API, workflow, behavior, or performance impact, add a concise ## Before / After section before Testing covering only relevant dimensions (public API, commands/workflows, behavior, migration, performance baseline). Phrase each row as a user-visible before/after, then name the mechanism as supporting context. For performance claims, name the baseline explicitly (CPU path, parent commit, main, or prior implementation) plus workload, metric, and limitations.
  • In Testing, list exact commands, targets, or test names that ran. For CI, performance, or infrastructure work, include evidence such as CI observations, timing, reruns, benchmark output, or why a skipped check is expected.
  • For model/scene, dynamics, collision/contact, simulation, rendering, mesh, texture, GUI, or visual-example changes, use dart-verify-sim: report the text correctness oracle and include assessed, claim-relevant visual/debug evidence when applicable (an image alone is not correctness proof):
    • Prefer an existing headless example path (--headless, --frames, --width, --height, --screenshot) over manual screenshots. Capture before and after with the same camera, dimensions, frame count, and renderer; restore the replaced sample/assets or use the base branch to capture the before image. Inspect the images yourself and include the commands and any software-rendering flags in the PR body.
    • Upload transient comparison images, GIFs, and videos through the GitHub PR/issue Markdown attachment flow so the body contains GitHub-hosted https://github.com/user-attachments/assets/... URLs. Do not commit transient visual evidence; commit visual files only when they are durable documentation, fixtures, or source assets.
    • The supported attachment flow is the web PR/issue editor; gh pr edit, gh pr comment, and the REST API do not provide a generic upload, and any command that edits or comments on a PR still requires explicit maintainer/user approval. If the current tool cannot upload attachments, keep the local artifact paths in the working note, ask a maintainer to upload them, then update the PR body with the returned URL after explicit maintainer/user approval. Do not fall back to committing evidence into docs/assets/.
    • If no headless path exists, add a narrowly scoped capture mode when it fits the example or document why visual comparison is not practical.
  • Mark non-applicable checklist items as "N/A" with a short reason, and mention related PRs, issues, backports, and follow-ups explicitly, including "None".

Workflow

  1. Inspect scope:

    git status --short --branch
    git diff --stat
    git diff --check
    
  2. Exclude unrelated dirty files unless the user explicitly includes them.

  3. Choose the target branch and milestone:

    Target Milestone
    main DART 7.0
    Active DART 6 LTS release-6.* Branch-matching DART 6.x patch
  4. For bug fixes, use the dual-PR flow: fix the active DART 6 LTS branch first, then cherry-pick or reapply to main.

  5. Before every commit, run pixi run lint. Also run pixi run build for C++ or Python changes and focused tests for behavior changes.

  6. Create or update a topic branch when needed:

    git checkout -b <type>/<topic> origin/<target-branch>
    
  7. Commit only intended files with a plain descriptive commit title.

  8. Merge the latest base branch into the PR branch before any push, and follow the base-merge and automated-review rules in docs/onboarding/ai-tools.md (no inline bot replies; @codex review re-triggers are throttled to one per approved review-fix round). Ask for explicit maintainer/user approval before pushing or opening the draft PR. After approval:

    git push -u origin HEAD
    gh pr create --draft --base <target-branch> --milestone "<milestone>" \
      --title "<plain title>" --body-file <filled-template-file>
    
  9. Prefer additive follow-up commits for updates to a published PR. Amend or force-push only after explicit maintainer/user approval and only when the user requests it or a clear reason exists (removing sensitive content, repairing branch history).

  10. Invoke the dart-changelog routine for the changelog decision, entry wording, and PR-link follow-up. If CHANGELOG.md needs the PR number, keep the follow-up changelog commit local until explicit maintainer/user approval is given for the additional push or PR update.

  11. Monitor CI: gh pr checks <PR_NUMBER>.

Output

  • Branch, target base, and milestone used
  • Commit titles and files included
  • PR URL and draft/ready state, or the prepared PR text awaiting approval
  • Changelog decision
  • CI status and any remaining blocker
提供DART Python绑定(dartpy)的开发指南,涵盖模型加载、动力学仿真及GUI渲染。包含快速启动代码、构建测试命令、轮子打包流程及命名规范,用于辅助AI进行Python绑定开发与验证。
需要加载或操作DART物理模型的Python代码 涉及dartpy绑定的开发、调试或构建任务 询问DART Python API用法或最佳实践
.agents/skills/dart-python/SKILL.md
npx skills add dartsim/dart --skill dart-python -g -y
SKILL.md
Frontmatter
{
    "name": "dart-python",
    "description": "DART Python: dartpy bindings, nanobind, wheels, and API patterns"
}

DART Python Bindings (dartpy)

Load this skill when working with Python bindings or dartpy.

When a binding exposes or changes model/scene loading, dynamics, collision/contact/constraints, simulation stepping, GUI/rendering output, or a visual example, also load dart-verify-sim. Pair a focused Python text/behavior oracle with an assessed, claim-tied headless capture; document a visual exception when rendering is unavailable or not applicable.

Quick Start

import dartpy as dart

world = dart.World()
skel = dart.io.read_skeleton("dart://sample/urdf/KR5/KR5 sixx R650.urdf")
world.add_skeleton(skel)

for _ in range(100):
    world.step()

Full Documentation

For complete Python bindings guide: docs/onboarding/python-bindings.md

For module-specific details: python/AGENTS.md

Quick Commands

pixi run build-py-dev    # Build for development
pixi run test-py         # Run Python tests
pixi run generate-stubs  # Generate type stubs

Wheel Building

pixi run -e py314-wheel wheel-build
pixi run -e py314-wheel wheel-repair  # Linux only
pixi run -e py314-wheel wheel-test

Key Patterns

  • snake_case preferred (camelCase emits DeprecationWarning)
  • NumPy arrays auto-convert to Eigen types
  • GUI requires DART_BUILD_GUI=ON

Key Files

  • Package config: pyproject.toml
  • Build system: python/dartpy/CMakeLists.txt
  • Type stubs: python/stubs/dartpy/
管理DART实验仿真世界的研究参考目录(论文、教材、标准、引擎),支持添加、更新和审计条目,规范引用格式及状态优先级判定。
添加或更新DART研究参考文献 审计研究参考目录
.agents/skills/dart-references/SKILL.md
npx skills add dartsim/dart --skill dart-references -g -y
SKILL.md
Frontmatter
{
    "name": "dart-references",
    "description": "DART References: manage the experimental simulation research catalog (papers, textbooks, engines) with status, priority, and verdict"
}

DART Research References

Load this skill when adding, updating, auditing, or citing research references (papers, textbooks, model-format standards, or comparative engines) for the DART experimental simulation world — its public API and its algorithms.

Catalog Location

docs/readthedocs/papers.md is the single source of truth and the published website page. It is a companion to the experimental API design docs:

  • docs/design/simulation_cpp_api.md
  • docs/design/simulation_python_api.md

Entry Schema

Each entry has an id, a full citation, and these properties:

Property Values
Type textbook, paper, standard, engine
Topic e.g. dynamics, kinematics, contact, integration, collision, terminology, model-format, api
Status referenced, planned, in-progress, implemented, deferred, rejected
Priority high, medium, low,
Verdict adopt, baseline, reference, evaluate, reject
Where used link to the design doc, code, or test that uses (or will use) it

Status is written from the experimental world's perspective. A method shipping in classic DART but not yet in the experimental world is planned, with the classic location noted in Notes.

Workflow: add or update an entry

  1. Ground the entry in real evidence — a design doc, code path, test, or an explicit project decision. Do not add aspirational references with no link.
  2. Write an accurate citation (authors, title, year, venue/publisher). Prefer an official URL; do not fabricate DOIs.
  3. Add a row to the matching summary table and a detail subsection with the full properties and a one-line rationale.
  4. Set Status from the experimental world's perspective; note classic-DART status separately in Notes.
  5. Set Verdict (adopt to build on, baseline to compare against, reference to cite, evaluate while undecided, reject with a reason).
  6. Fill Where used with the design-doc/code/test link.
  7. When the relationship changes (e.g. a planned algorithm becomes implemented, or an evaluate is decided), update Status/Verdict and the Where used link in the same change.

Rules

  • Prefer robotics/dynamics literature (textbooks, papers) over engine-specific names when a reference informs a terminology decision; record the grounding in the catalog's "Terminology Grounding" section.
  • Keep the catalog scoped to the experimental world for now; the schema is general and can extend to the rest of DART later.
  • Keep engine entries as baselines/comparisons, never as dependencies.
  • Use docs/ai/verification.md to select the docs-only or AI docs/adapters gate set, then run pixi run lint after edits.

Full Documentation

For the catalog and its rationale: docs/readthedocs/papers.md

For the API it supports: docs/design/simulation_cpp_api.md, docs/design/simulation_python_api.md

For DART's research focus: docs/ai/north-star.md

将DART活跃发布分支合并回main分支。自动检测版本,创建临时分支执行合并,依据规范解决冲突,运行检查并请求批准后提交PR及监控CI状态。
需要将发布分支代码同步到主分支 执行DART版本的正式发布流程
.agents/skills/dart-release-merge-main/SKILL.md
npx skills add dartsim/dart --skill dart-release-merge-main -g -y
SKILL.md
Frontmatter
{
    "name": "dart-release-merge-main",
    "description": "DART Release Merge Main: merge the active release branch back into main"
}

dart-release-merge-main

Use this skill in Codex to run the DART dart-release-merge-main workflow. The editable workflow source lives in .claude/commands/; this file is its generated adapter in the shared .agents/skills/ catalog.

Invocation

  • Claude Code/OpenCode: /dart-release-merge-main <arguments>
  • Codex: $dart-release-merge-main <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Merge release branch into main: $ARGUMENTS

Required Reading

@AGENTS.md @docs/onboarding/release-management.md @docs/onboarding/ci-cd.md

Workflow

  1. Auto-detect or confirm the active release branch and release version:
    git fetch origin
    git branch -r | grep -oE 'origin/release-[0-9]+\.[0-9]+' | sort -V | tail -1
    
  2. Verify the clone is not shallow and a merge base exists.
  3. Create merge/<release-branch>-into-main from origin/main.
  4. Merge the release branch with a title like Merge release-6.19 into main (v6.19.x).
  5. Resolve conflicts using docs/onboarding/release-management.md:
    • deleted in main, updated in release: keep deleted
    • added in both: prefer main unless release has unique needed content
    • content conflicts: prefer main modernization except for manually reviewed changelog entries
    • files only on release: keep if still relevant to main
  6. Verify no unresolved conflicts remain.
  7. Run pixi run lint and relevant checks.
  8. Ask for explicit maintainer/user approval before pushing or creating the PR. After approval, create a PR targeting main with milestone DART 7.0 and use the PR template.
  9. Monitor CI until green.

Output

  • PR URL and CI status
  • Release branch and release version
  • Conflict counts and resolution summary
  • Any manual changelog decisions
用于执行DART项目的发布打包工作流。自动创建版本升级和变更日志PR,包括版本确认、分支管理、文件更新及合规检查,并在推送前需人工审批。
用户请求创建DART新版本发布 需要生成版本升级和变更日志的Pull Request
.agents/skills/dart-release-packaging/SKILL.md
npx skills add dartsim/dart --skill dart-release-packaging -g -y
SKILL.md
Frontmatter
{
    "name": "dart-release-packaging",
    "description": "DART Release Packaging: create a release version bump and changelog PR"
}

dart-release-packaging

Use this skill in Codex to run the DART dart-release-packaging workflow. The editable workflow source lives in .claude/commands/; this file is its generated adapter in the shared .agents/skills/ catalog.

Invocation

  • Claude Code/OpenCode: /dart-release-packaging <arguments>
  • Codex: $dart-release-packaging <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Create release packaging PR after explicit maintainer/user approval: $ARGUMENTS

Required Reading

@AGENTS.md @docs/onboarding/release-management.md @docs/onboarding/contributing.md @docs/onboarding/changelog.md

Workflow

  1. Confirm the new version, for example 6.16.6.
  2. Derive the release branch: release-<major>.<minor>.
  3. Fetch and branch from the release branch:
    git fetch origin <RELEASE_BRANCH>
    git checkout -B release/<NEW_VERSION>-version-bump origin/<RELEASE_BRANCH>
    
  4. Bump versions in package.xml and pixi.toml.
  5. Update version requirements in examples/tutorials if needed.
  6. Invoke the dart-changelog routine in release-audit mode, then add or finalize the CHANGELOG.md release section with the release date, milestone link, release summary, and audit from docs/onboarding/changelog.md.
  7. Run pixi run lint and relevant packaging checks.
  8. Commit as Packaging <NEW_VERSION>.
  9. Ask for explicit maintainer/user approval before pushing, creating the PR, or setting milestones.
  10. After approval, create the PR against the release branch with the release milestone for that branch, for example the specific version milestone if available.

Output

  • PR URL
  • Version files changed
  • Changelog section added
  • Checks run
DART Resume技能用于恢复和完成未结束的开发任务。它作为以完成为导向的任务管理器,能构建执行计划、拆分工作包、基于证据决策并持续验证结果,直至任务完整交付或遇到阻塞。
用户希望恢复之前中断的工作会话 需要继续执行特定的开发任务或重构任务
.agents/skills/dart-resume/SKILL.md
npx skills add dartsim/dart --skill dart-resume -g -y
SKILL.md
Frontmatter
{
    "name": "dart-resume",
    "description": "DART Resume: continue work from a previous session"
}

dart-resume

Use this skill in Codex to run the DART dart-resume workflow. The editable workflow source lives in .claude/commands/; this file is its generated adapter in the shared .agents/skills/ catalog.

Invocation

  • Claude Code/OpenCode: /dart-resume <arguments>
  • Codex: $dart-resume <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Resume unfinished work: $ARGUMENTS

Objective

dart-resume is a completion-oriented task manager, not a status lookup or a single-slice helper by default. Resume the named or reconstructed work, build or refresh the execution plan, track progress in the repo-owned task surface, split independent work into verifiable packets, use subagents/sub-sessions only when the user explicitly requested delegation and the current AI surface permits it, verify every result, and keep going until the whole task is complete or a real blocker or approval boundary remains.

Decisions must be evidence-based. Before choosing between meaningful options, first improve or define the verification/debugging method so it can catch false positives and false negatives. Use repository inspection, focused tests, benchmarks, A/B comparisons, GUI or visual evidence, logs, and external resource searches as needed to decide from evidence instead of preference.

For a docs/dev_tasks/<task> target, full completion means all feasible task work is finished, durable decisions and deferred work are promoted, and the temporary dev-task folder is removed in the completing change. Do not stop after one successful slice unless the user explicitly requested a limited mode.

Argument Handling

Use $ARGUMENTS to identify the target, explicit scope limits, and execution modifiers. Interpret arguments in this order:

  1. Explicit scope-limited mode: if arguments include status, audit-only, plan-only, slice, or next-slice, honor that limit and state it in the plan. Without one of these limiters, do not downscope the session to a single slice.
  2. Execution modifiers: if arguments include no-subagents, run serially but keep the same whole-task completion objective. If arguments explicitly request subagents, parallel, delegation, or workers, use available AI-native delegation when the current surface permits it. Tool-use modifiers do not limit scope unless paired with an explicit scope-limited mode.
  3. Explicit target path: if an argument names docs/dev_tasks/<task> or a file under that folder, treat that dev task as the target and read its README.md and RESUME.md after recon. Resolve relative paths from the repo root discovered by git rev-parse --show-toplevel, not from the launch directory.
  4. Closeout wording: words such as complete, finish, retire, close out, or cleanup are accepted but not required for dev-task completion. Treat retire / close out as emphasis that the likely end state is durable-doc promotion plus folder removal.
  5. Branch/PR/issue hint: otherwise, treat arguments as a branch, PR, issue, topic, or free-form resume hint and reconstruct the task from live repo state.

Examples:

$dart-resume docs/dev_tasks/dart7_core_dynamics_perf_forwardport
$dart-resume docs/dev_tasks/dart7_core_dynamics_perf_forwardport --slice
$dart-resume PR 2991

Required Reading

@AGENTS.md @docs/dev_tasks/README.md @docs/ai/sessions.md @docs/ai/verification.md @docs/onboarding/ci-cd.md @docs/onboarding/contributing.md @docs/onboarding/changelog.md

Workflow

Recon (no changes)

git rev-parse --show-toplevel
git status -sb && git branch -vv && git log -10 --oneline --decorate
git diff --stat && git stash list
gh pr list --head "$(git branch --show-current)"
gh pr status

Reconstruct

If $ARGUMENTS names a docs/dev_tasks/<task> path, use that folder as the target and inspect its README.md, RESUME.md, and any directly referenced owner docs before choosing work. If the folder is already absent, verify whether it was retired on current main, identify the durable owner doc that replaced it, and report that no folder cleanup remains.

Otherwise infer the task from branch name, commits, diffs, issue/PR description, and any docs/dev_tasks/<task>/ state. If the goal is still unclear after recon, stop and ask.

Before editing, write explicit pass/fail criteria for the resumed task:

  • what exact dev-task folder, branch, PR, issue, or topic is being completed;
  • which remaining checklist items, decisions, or evidence must be resolved;
  • how progress will be tracked during this session and across any handoff;
  • which independent subtasks, if any, can be delegated when explicitly authorized or run as separate serial sessions without creating conflicting edits;
  • which verification/debugging method will make false positives and false negatives unlikely before implementation decisions are made;
  • which A/B tests, benchmarks, resource searches, GUI checks, or textual checks are needed to support consequential decisions;
  • which durable docs will own any surviving decision or deferred work;
  • whether the resumed change may need a changelog entry and how the dart-changelog decision will be recorded;
  • which verification commands prove the result.

Continue

  • Propose a 3-6 step plan before editing.
  • Continue with minimal scope and preserve existing user changes.
  • Verification comes first when the route is uncertain. Define the observable signal, build or select the smallest reproducer/check, run a control vs candidate comparison when possible, and only then choose the implementation path. If the existing verification is weak, improve the check or debugging surface before trusting the result.
  • For model/scene, simulation, dynamics, collision/contact, GUI, or visual behavior, route through dart-verify-sim: establish a text correctness oracle first, then capture assessed claim-tied images/debug layers or record an unavailable/not-applicable reason. Verify the expected pass path and a failure-sensitive condition when practical; a screenshot alone is not proof.
  • When the decision depends on behavior outside the repository, search the relevant upstream docs, papers, issues, standards, or release notes and record the source-backed conclusion in the task docs, durable owner doc, or PR evidence. Prefer primary sources.
  • If the task is large, decompose it into independently verifiable work items. Use available AI-native subagent, sub-session, or parallel-worker support only when the user explicitly requested delegation and the current surface permits it. Otherwise, keep the decomposition as a serial plan or explicit handoff packets. Validate and integrate every delegated result yourself; repo-tracked docs remain the source of truth even when agent-specific orchestration is available.
  • Keep progress tracking current in the task's README.md, RESUME.md, or durable owner doc after meaningful progress. If the current session cannot finish because of context, environment, approval, or a real blocker, leave the next session with exact current reality, remaining work, blockers, and gates.
  • For active solver/paper implementations, keep the plan or dev-task resume surface explicit about the completed slice, the next missing paper-parity gap, and why focused green tests are not a full paper-completion claim.
  • Run a completion audit before finalizing a dev-task target: identify the exact docs/dev_tasks/<task>/ folder, inspect it for remaining plans/evidence/decisions, promote any durable dashboard, evidence matrix, API inventory, migration map, long-lived decision, or deferred-but-real work into docs/plans/, docs/design/, or docs/onboarding/, update dashboard/plan progress when the task changes roadmap state, then remove the dev-task folder completely in the completing change.
  • In completion mode, do not leave the long-form resume prompt to carry decisions. Record the final decision or parked follow-up in the durable owner doc, then delete or update the dev-task folder according to docs/dev_tasks/README.md.
  • Before finalizing a resumed task that changes behavior, public API, packaging, CI, docs workflow, AI-infra workflow, release process, or user-visible docs, invoke the dart-changelog routine in decide or finalize mode. If no entry is needed, keep the reason in the local PR body/checklist draft or task evidence; if an entry is needed, prepare the local CHANGELOG.md edit and PR link when available. Pushing the changelog edit or updating the PR body still requires explicit maintainer/user approval.
  • If remaining work is real but blocked by a substantial design decision, maintainer direction, external dependency, or scope boundary that should not be resolved in the current session, ask the human before retiring the folder unless prior maintainer direction is already recorded. Record the parked or blocked work in the durable owner doc before deletion.
  • Do not call a dev task complete while docs/dev_tasks/<task>/ still exists. If implementation is done but the folder remains, the remaining work is the durable-doc promotion plus folder cleanup.
  • Run pixi run lint before committing. Run relevant tests; use pixi run test-all before done when feasible, and also pixi run -e cuda test-all on Linux hosts with a visible NVIDIA CUDA runtime.
  • Merge the latest base branch into any published PR branch before pushing, and follow the base-merge rules in docs/onboarding/ai-tools.md. Push with git push -u origin HEAD and create or update the PR only after explicit maintainer/user approval, preferring additive follow-up commits.

Safety

No destructive git commands (reset --hard, dropping stashes, deleting branches) without explicit maintainer/user approval.

Output

  • Reconstructed task and current branch/PR state
  • Plan followed and files changed
  • Verification commands run and their results
  • Completion-audit result: dev-task promotion/cleanup done or the remaining blocker
  • PR readiness, noting any external mutation that was explicitly approved
用于运行DART回顾工作流,捕获持久性经验教训。在更新文档前需检查现有内容,评估学习价值,优先修改而非新增文件,并确保可发现性。包含详细的执行步骤和验证流程。
用户需要总结项目或会话中的经验教训 发现新的模式、陷阱或故障模式并需记录
.agents/skills/dart-retro/SKILL.md
npx skills add dartsim/dart --skill dart-retro -g -y
SKILL.md
Frontmatter
{
    "name": "dart-retro",
    "description": "DART Retro: run a retrospective and capture durable lessons"
}

dart-retro

Use this skill in Codex to run the DART dart-retro workflow. The editable workflow source lives in .claude/commands/; this file is its generated adapter in the shared .agents/skills/ catalog.

Invocation

  • Claude Code/OpenCode: /dart-retro <arguments>
  • Codex: $dart-retro <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Run a retrospective and capture durable lessons: $ARGUMENTS

Required Reading

@AGENTS.md @docs/AGENTS.md @docs/ai/principles.md @docs/ai/components.md @docs/ai/verification.md @docs/onboarding/ai-tools.md

Skip If

Stop without editing when all are true:

  • no new patterns, gotchas, or failure modes were discovered
  • no workflow improvement is needed
  • the learning is too session-specific to help future agents or contributors
  • existing docs already cover what happened
  • the task was routine and left no durable insight

Routing

docs/ai/components.md owns routing for durable session learnings. Use this command as the hindsight workflow; do not duplicate the routing table here.

Workflow

  1. Search existing docs before adding content.
  2. Inventory the completed work before routing lessons. Consider domain/design choices, public API or package compatibility, CI/review failure modes, workflow friction, and cleanup or handoff steps separately so a late operational task does not hide feature-level learnings.
  3. Decide whether each lesson is general enough for shared AI infra. Do not update AI components after every session.
  4. Prefer update, remove, consolidate, or restructure over adding new files.
  5. Make every durable learning discoverable from its owner surface: update an existing owner doc when possible, and when a new durable file is justified, link it from the relevant owner index or plan before retiring temporary context.
  6. Keep docs/ai/principles.md compact; put procedures in the owner docs it links to.
  7. Avoid ephemeral branch, PR, commit, or username details.
  8. If adding a workflow command or skill, edit .claude/ source files and run pixi run sync-ai-commands.
  9. Run pixi run lint before committing. For AI docs or adapter changes, also run the verification gates from docs/ai/verification.md: pixi run lint-md, pixi run check-lint-md, pixi run sync-ai-commands, pixi run check-ai-commands, pixi run check-docs-policy, and pixi run check-lint-spell.

Output

  • What learning was captured
  • Where it was documented
  • Checks run
用于执行DART项目的PR审查与反馈处理工作流。支持代码风格、测试及3D行为验证审查,并指导如何安全地应用修复、合并分支、触发CI及重新发起审查,确保操作符合团队规范。
需要审查Pull Request时 需要回复或解决PR中的审查反馈时
.agents/skills/dart-review-pr/SKILL.md
npx skills add dartsim/dart --skill dart-review-pr -g -y
SKILL.md
Frontmatter
{
    "name": "dart-review-pr",
    "description": "DART Review PR: review a PR or address review feedback"
}

dart-review-pr

Use this skill in Codex to run the DART dart-review-pr workflow. The editable workflow source lives in .claude/commands/; this file is its generated adapter in the shared .agents/skills/ catalog.

Invocation

  • Claude Code/OpenCode: /dart-review-pr <arguments>
  • Codex: $dart-review-pr <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Review or respond to PR: $ARGUMENTS

Required Reading

@AGENTS.md @docs/onboarding/code-style.md @docs/onboarding/ai-tools.md (for AI-generated review handling) @docs/ai/verification.md

Workflow

Pick the sub-workflow from mode= in $ARGUMENTS, defaulting to review.

Review

gh pr view $1 && gh pr diff $1

Check code style, tests, docs, and focused commits. When a claim depends on 3D structure or behavior, require the dart-verify-sim text oracle and claim-relevant assessed visual/debug-layer evidence (or a justified replacement), and inspect both rather than accepting a screenshot alone. Record findings as read-only output; do not push, comment, resolve threads, or re-trigger review without explicit maintainer/user approval for that external mutation.

Address Feedback

gh pr view $1 --comments

Apply minimal fixes locally and verify. For published PRs, prefer a new follow-up commit so reviewers can inspect each round; amend or force-push only after explicit maintainer/user approval and only when the user requests it or a clear reason exists (removing sensitive content, repairing branch history).

  1. Make the local fix silently (no reply), then run the relevant local gates, including pixi run lint before any commit.
  2. Merge the latest base branch into the PR branch before any push, and follow the base-merge, automated-review, and bot no-reply rules in docs/onboarding/ai-tools.md. If the push is rejected because the remote head moved, fetch and compare it before retrying and validate an equivalent remote fix instead of pushing a duplicate.
  3. Ask for explicit maintainer/user approval before any push, PR comment, thread resolution, or review re-trigger. After approval, push silently, resolve only reviewed and addressed thread IDs via GraphQL, and — when the approved push addressed Codex comments — re-trigger once with gh pr comment $1 --body "@codex review".
  4. Apply the same no-inline-reply loop to github-code-quality[bot] findings; do not re-trigger Codex solely for non-Codex bot findings unless Codex comments were also addressed.
  5. Monitor CI (gh pr checks $1) and repeat until no actionable comments remain. For draft PRs, mark ready after explicit approval once Codex is clean and local validation passes on the current head (default pixi run test-all, plus pixi run -e cuda test-all on Linux hosts with a visible NVIDIA CUDA runtime); merge still waits for required hosted checks.

Output

  • PR number and whether the pass was a review or a feedback round
  • Findings or fixes applied, with file/line references
  • Which actions were local-only and which external mutations were explicitly approved
  • Codex/CI state and any remaining blocker
提供DART项目的测试指南,涵盖单元测试、集成测试及CI验证。包含Pixi命令、GoogleTest规范、调试方法及CUDA环境注意事项,并指引加载dart-verify-sim进行仿真视觉检查。
编写或调试DART测试 运行CI验证 排查测试失败 需要仿真端到端检查
.agents/skills/dart-test/SKILL.md
npx skills add dartsim/dart --skill dart-test -g -y
SKILL.md
Frontmatter
{
    "name": "dart-test",
    "description": "DART Test: unit tests, integration tests, CI validation, and debugging"
}

DART Testing

Load this skill when writing or debugging tests.

Quick Commands

pixi run test         # Quick test run
pixi run test-all     # Full validation
pixi run -e cuda test-all # CUDA-enabled full validation on Linux CUDA hosts
pixi run test-unit    # Unit tests
pixi run test-py      # Python tests

Full Documentation

For complete testing guide: docs/onboarding/testing.md

For CI/CD troubleshooting: docs/onboarding/ci-cd.md

Test Organization

  • Unit tests: tests/unit/
  • Integration tests: tests/integration/
  • Regression tests: Near the code they test

Writing Tests

  1. Follow existing patterns in the test directory
  2. Use GoogleTest framework
  3. Name tests descriptively: TEST(ClassName, MethodName_Condition_ExpectedResult)

CI Validation

Before submitting PR:

pixi run lint         # Must pass
pixi run test-all     # Must pass
pixi run -e cuda test-all # Must pass on Linux CUDA hosts

Debugging Test Failures

# Run the smallest existing Pixi test task that covers the failure
pixi run test-unit

# Get CI logs
gh run view <RUN_ID> --log-failed

Simulation And Visual End-to-End Checks

When a failure or change depends on scene structure, dynamics, collision/contact, simulation stepping, GUI output, or a visual example, also load dart-verify-sim. Use its text-first oracle and then an assessed headless capture with claim-relevant debug layers. Record a concrete no-visual reason only when that corroboration is unavailable or not applicable.

Gotchas

  • pixi run build builds libraries only, NOT the unit-test binaries. If you run ctest without building the test target first, you may execute stale binaries that silently pass. Build the test target before running its label, e.g. for the simulation suite: pixi run build-simulation-tests (target dart_simulation_tests) before ctest -L simulation.
  • pixi run test-all is the default-environment full gate. On Linux hosts with a visible NVIDIA CUDA runtime, also run pixi run -e cuda test-all; the CUDA run preserves the cuda Pixi environment and executes the CUDA CTest + benchmark smoke path when the runtime is detected.
  • The CUDA Pixi config auto-detects visible GPU compute capabilities for DART_CUDA_ARCHITECTURES; unsupported PTX/toolchain errors usually mean the generated CUDA architecture flags need to be checked before blaming test code.
用于对 GitHub Issue 进行分诊,检查其在主分支上是否仍有效,分类状态(如已修复、重复等),并输出结论、理由及后续操作建议。
用户要求对 GitHub Issue 进行分类或评估 需要判断 Bug 报告在当前代码库中是否仍然成立
.agents/skills/dart-triage-issue/SKILL.md
npx skills add dartsim/dart --skill dart-triage-issue -g -y
SKILL.md
Frontmatter
{
    "name": "dart-triage-issue",
    "description": "DART Triage Issue: triage a GitHub issue and recommend next action"
}

dart-triage-issue

Use this skill in Codex to run the DART dart-triage-issue workflow. The editable workflow source lives in .claude/commands/; this file is its generated adapter in the shared .agents/skills/ catalog.

Invocation

  • Claude Code/OpenCode: /dart-triage-issue <arguments>
  • Codex: $dart-triage-issue <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Triage issue: $ARGUMENTS

Required Reading

@AGENTS.md @docs/onboarding/contributing.md

Workflow

  1. Inspect the issue:
    gh issue view <ISSUE_NUMBER> --comments
    
  2. Determine whether the report is still valid on current origin/main.
  3. Classify status:
    • still valid
    • already fixed
    • needs more information
    • duplicate
    • out of scope
  4. If validity depends on behavior, reproduce or inspect the relevant code path.
  5. Do not close or comment unless the user explicitly asks for that action.

Output

  • Status
  • Rationale in 1-3 bullets
  • Recommended next step
  • Suggested reply text, if useful
启动DART大规模或自主任务的工作流。支持项目文档集成、决策访谈及编排执行,具备会话恢复、模式切换(访谈/简报/恢复)功能,作为协调者分解任务并监督执行。
需要启动大型或多会话的DART开发任务 要求AI以自主方式编排和执行复杂项目工作 需要从现有项目主页恢复中断的开发会话
.agents/skills/dart-ultrawork/SKILL.md
npx skills add dartsim/dart --skill dart-ultrawork -g -y
SKILL.md
Frontmatter
{
    "name": "dart-ultrawork",
    "description": "DART Ultrawork: kick off a large or autonomous DART task with project-home docs, an optional decision interview, and orchestrated execution"
}

dart-ultrawork

Use this skill in Codex to run the DART dart-ultrawork workflow. The editable workflow source lives in .claude/commands/; this file is its generated adapter in the shared .agents/skills/ catalog.

Invocation

  • Claude Code/OpenCode: /dart-ultrawork <arguments>
  • Codex: $dart-ultrawork <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Start a team-scale or autonomous DART task: $ARGUMENTS

Required Reading

@AGENTS.md @docs/ai/principles.md @docs/ai/north-star.md @docs/ai/orchestration.md @docs/ai/sessions.md @docs/ai/verification.md @docs/dev_tasks/README.md

Load additional owners only when the matching phase needs them:

  • placement or cleanup: docs/information-architecture.md;
  • numbered-plan selection or packet state: docs/plans/dashboard.md;
  • version control, changelog, tools, or review: docs/onboarding/{contributing,changelog,ai-tools}.md.

Arguments

$ARGUMENTS is a task brief plus optional mode flags:

  • mode=interview: ask one up-front batch of critical questions.
  • mode=brief: treat provided context as sufficient unless escalation applies.
  • mode=resume: start from the existing docs/dev_tasks/<task>/ project home and run the session-start protocol before changing files.
  • interview=skip: skip maintainer questions only when the brief already answers all consequential decisions.

The brief may be prose or a structured TASK / CONTEXT block. Extract north star, deliverable, acceptance criteria, constraints, risks, references, paths, issues/PRs/branches, commands, and first step when present.

Workflow

You are the orchestrator, supervisor, and steerer for the entire task: you decompose, delegate, review, and keep evidence honest. Workers implement. Follow the orchestrator/executor contract and packet sizing rules in docs/ai/orchestration.md. Use dart-new-task instead when the work is a bounded single-session task and the user did not ask for autonomous project handling.

  1. Session start and current reality - Locate the project home. For DART autonomous projects this is docs/dev_tasks/<task>/, not a parallel project directory. If it exists, read its README.md, RESUME.md, and any autonomous sidecars such as decisions.md, verification.md, or progress-log.md; then verify checkout state, current branch, and any branch/PR evidence named by the docs. Run pixi run ai-doctor when setup, discovery, instruction, agent, or hook state is uncertain. If the docs are stale, update the handoff/current-reality note before relying on them. If no project home exists and the task is multi-session, team-scale, design-heavy, risky, or explicitly autonomous, create docs/dev_tasks/<task>/ before implementation. If prior work exists elsewhere, first absorb or summarize it into the project home.
  2. Understand and scout - Restate the north star, final deliverable, acceptance criteria, quality bar, non-goals, constraints, risks, and target branch line (DART 7 main, DART 6 LTS, or both). Scout the territory first with named docs/code, read-only searches, a dart-analyze pass, the Codex dart_scout profile, or focused reference review; draft a candidate decomposition privately before asking anything.
  3. Interview decisions; self-resolve uncertainties - Ask at most one up-front batch of critical questions. Escalate before destructive operations, history rewrites, irreversible migrations, meaningful cost, security/credential/secret handling, legal or privacy-sensitive decisions, major product-direction choices not covered by the brief, conflicts with stated constraints, or any assumption whose wrong answer could cause significant harm. If input is unavailable, choose the safest reversible path, document the assumption, and continue only with non-blocked work. Then split consequential unknowns:
    • Maintainer decisions: preference, scope, public API, release, quality-bar, or roadmap calls that evidence cannot settle. Ask the human now in one batched interview (focused questions with 2-4 concrete options each, recommendation first). Do not start large work while a consequential decision is open. Skip this discretionary interview when mode=brief; also skip when interview=skip and the prompt already answers everything consequential. In both cases, still follow the escalation rules above.
    • Evidence-resolvable uncertainties: anything a focused A/B test, benchmark, throwaway spike, reference lookup, or blind-spot review can settle. Do not ask the human; schedule these as spike/research packets and record the method and result as evidence (see "Discovering unknowns before committing" in docs/ai/orchestration.md).
  4. Create or refresh the tracking surface - Populate the project home with value, north star, deliverable, scope, non-goals, assumptions, risks, acceptance evidence, gates, dependencies, milestone, next actions, and blockers. Claim-dependent physics/simulation, collision/contact, model, GUI, and visual-example work routes through dart-verify-sim: require a text oracle plus assessed visual/debug evidence, or a justified replacement. Keep RESUME.md as the handoff; add decisions.md, verification.md, and progress-log.md sidecars when they improve resumability or evidence.
  5. Set the goal contract - Express done-when as verifiable outcomes (files, tests, gates, artifacts). When the session supports a goal or stop-hook mode (for example /goal in Claude Code), set it to this contract so orchestration cannot stop early or loop forever. Stop once the acceptance criteria are satisfied, verification is recorded, docs are current, known gaps are documented, and unnecessary work has been removed or deferred. Every delegated packet gets its own contract: GOAL (one sentence), DONE WHEN (verifiable), EVIDENCE (what to record), RISKS, and NEXT STEP.
  6. Decompose and route to workers - Cut work packets per docs/ai/orchestration.md, then route by docs/ai/README.md. For Codex, use dart_scout for read-only territory mapping, built-in workers or dart-execute-packet for bounded implementation, dart_reviewer for independent acceptance review, and dart_release_auditor for branch adaptation. Without team tooling, execute packets sequentially. Use parallel writers only when file ownership is explicit and disjoint.
  7. Run the autonomous work/review cycle - For each meaningful chunk: plan, execute, verify, then run an independent/specialized review lane. Treat review findings as hypotheses: investigate, fix or record no-fix evidence, clean up, re-verify, and re-review. A packet is not done until the current post-fix state has at least two clean review passes recorded.
  8. Supervise and steer - Monitor progress; unblock, reassign, or re-cut packets on scope mismatch. Workers return Task, Summary, Files changed, Evidence/tests, Risks, and Recommended next step. Use another tool, an independent session, or the bounded specialist profiles when available; fall back to role-separated local review only when unavailable. Root-cause failures and fold newly discovered unknowns back into step 3.
  9. Update docs at each stopping point - Every meaningful cycle updates the project home: README.md for status/plan/risks, RESUME.md for the next fresh-session handoff, decisions.md if decisions changed, verification.md if checks ran or gaps were found, and progress-log.md for completed chunks when that sidecar exists. Keep docs current enough for a zero-context session to resume without hidden chat memory.
  10. Version-control and closeout - Keep commits and PRs coherent: separate feature work, bug fixes, refactors, docs, experiments, and AI-infra changes when practical; review the diff, remove unrelated changes, make the changelog decision, and run pixi run lint before commits. Run task-specific gates from docs/ai/verification.md, record evidence per packet, and complete the principle audit. A project is complete only when the north star and acceptance criteria are met, verification evidence is recorded, docs are current, known gaps are documented, unnecessary work is removed or deferred, and final state is summarized in RESUME.md or a durable owner. Promote durable artifacts out of docs/dev_tasks/<task>/ and remove the folder in the completing PR. GitHub mutations (push, PR, comments, re-triggers) only with explicit maintainer/user approval.

Kickoff Prompt Template

Canonical fresh-session prompt. TASK, context, and Done when are per-task; reuse the Logistics block verbatim.

TASK: <one-sentence objective>

<Per-task context: constraints, quality bar, must/never rules, and pointers
to the docs, code, branches, or references that define the territory.>

Done when:
- <verifiable outcome: a file, test, gate, benchmark, or artifact>
- <verifiable outcome>

Logistics:
- Run /dart-ultrawork with this task. You are the orchestrator,
  supervisor, and steerer: decompose, delegate, review, and keep evidence
  honest.
- Interview first: ask the maintainer only the consequential decisions that
  evidence cannot settle; resolve everything else yourself and record the
  evidence.
- Use docs/dev_tasks/<task>/ as the project home. Keep README.md,
  RESUME.md, and any decisions.md / verification.md / progress-log.md
  sidecars current enough for a zero-context session to resume.
- Prioritize correctness over speed, but stop once acceptance criteria are
  satisfied, verification is recorded, docs are current, and known gaps are
  documented. Manage resources responsibly; avoid endless exploration and
  low-value polishing.
- Route well-defined implementation packets to bounded workers with GOAL /
  DONE WHEN / EVIDENCE. Use team mode only when available and file ownership
  can stay disjoint. Keep authoring and review separate; use the strongest
  available reasoning for critical decisions, hard failures, and research
  synthesis.
- Set goal mode to Done-when; use Claude `/goal Run /dart-ultrawork with:
  <real prompt>` or Codex `/goal $dart-ultrawork <real prompt>`. Treat Claude
  goal text beginning `ulw:` or `ultrawok:` as shorthand for the same canonical
  `/dart-ultrawork` workflow, not as separate capabilities.
- Read docs/ai/principles.md, docs/ai/north-star.md,
  docs/ai/orchestration.md, and docs/ai/sessions.md before starting.
- Review loop: use specialized reviewers when available, investigate findings,
  and require two clean passes on the current state before done.
- Verification first: task-specific gates and dart-verify-sim evidence when
  applicable; pixi run lint before commits; GitHub mutations only with approval.

Output

  • Interview record, uncertainty-resolution evidence, and project-home path
  • Packet list, routing, goal contracts, gates, and review-loop status
  • Per-packet evidence, GUI/demo artifacts when relevant, and updated docs
  • Principle audit, cleanup status, and approved external mutations
用于验证DART 3D场景及物理仿真的正确性。采用文本优先策略,通过指标、场景差异和轨迹数据检测缺陷,辅以无头渲染图像进行视觉佐证,适用于调试动力学、碰撞及GUI输出。
验证DART 3D场景或物理仿真正确性 调试动力学、碰撞或接触问题 审查GUI渲染输出
.agents/skills/dart-verify-sim/SKILL.md
npx skills add dartsim/dart --skill dart-verify-sim -g -y
SKILL.md
Frontmatter
{
    "name": "dart-verify-sim",
    "description": "DART Verify Sim: text-first and visual checks for 3D scenes and physics (metrics, scene dump, trajectories, headless render, image verdict\/golden)"
}

DART Simulation Verification

Load this skill when verifying that a DART 3D scene or physics simulation is correct — implementing, debugging, benchmarking, or reviewing dynamics, collision, contact, or GUI output. DART's domains need 3D understanding that language models lack natively; this tooling makes it checkable without a GUI.

Lead with text, corroborate with images. Measured A/B evidence: per-step metrics and trajectories detect nearly all seeded physics defects; a rendered image alone misses static geometry defects (penetration, interpenetration). Decide correctness from text; use images for scene comprehension and gross dynamic failures.

Applicability contract

Use this skill for any task whose claim depends on 3D structure or behavior: model/scene loading, dynamics, collision/contact/constraints, simulation stepping, GUI/rendering, or visual examples. First run a text oracle (metrics, scene diff, trajectory/contact comparison, or focused behavioral test), then corroborate it end to end with an assessed headless view and only the debug layers needed by the claim. If rendering is unavailable or genuinely irrelevant, record why and name the replacement evidence; never treat an image as the sole correctness oracle.

Full documentation

docs/onboarding/agent-sim-verification.md — the durable guide. docs/ai/verification.md owns the gate policy; docs/onboarding/profiling.md owns text-first profiling.

Quick commands

Text (primary):

  • world.compute_step_metrics() — energy/momentum/penetration/contacts/residual
  • dartpy.dump_scene_json(world) / dump_scene_text(world) — "what is in this world?" (glTF/USD-flavored hierarchy + flat index)
  • pixi run scene-diff — structural JSON verdict for intended-vs-actual scene dumps
  • pixi run trajectory-record / pixi run trajectory-compare — per-body TSV + contact JSONL; bit-exact or tolerance diff with first-divergence

Visual (corroboration):

  • dart.gui.render(world, camera=None, size=(w, h), debug=(...layers...)) → headless image with optional world-derived debug layers (grid, world_frame, body_frames, coms, inertia_boxes, collision_bounds, velocities, contacts, labels; trajectories additionally requires a sampled dart.gui.TrajectoryTracker via debug_scene_for_world); dart.gui.render_annotated(...) composites label text; .png_bytes() for notebooks; dart.gui.orbit_camera(...) / look_at(...)
  • dart.gui.assess_view(world, camera, size, focus=...) → ViewReport with issues (cropped/too-far/too-close/occluded/ambiguous); dart.gui.select_viewpoints(...) picks deterministic best views; dart.gui.frame_body/frame_region reframe onto a subject. Assess first; fix flagged views before capturing evidence.
  • viewer camera flags: --view {three-quarter|front|side|top}, --camera-azimuth/-elevation/-distance/-target, --turntable N, --fit
  • pixi run py-demo-capture — headless PNG/MP4 capture from Python
  • pixi run agent-capture — deterministic evidence harness: auto/explicit cameras, debug layers, stills/turntable/motion video, reproducible sidecar
  • pixi run image-compose — side-by-side / blend / diff-heatmap composites
  • pixi run evidence-select — claim-driven artifact selection with recorded rationale; pixi run evidence-publish — PR "Visual verification" section with GitHub-hosted media (manual placeholders by default; gh-release upload only with --yes + maintainer approval)
  • pixi run image-verdict / image-golden / image-sheet — JSON verdict, golden diff, contact sheet (contrast is report-only; --require-contrast to gate)
  • pixi run image-ab-study — blind-judge detection deltas for single-view, multi-view, turntable, and annotated captures
  • pixi run image-ab-round2 — prepare a blinded round-2 packet and score completed judge observations

Opt-in:

  • pixi run render-golden-gate — opt-in golden gate (backend-specific golden, curated locally with -- --update; not default CI)
  • pixi run rerun-trajectory — rerun.io inspection (opt-in; graceful when rerun-sdk is absent)
  • pixi run verification-bundle — package text evidence plus still/grid images for a provider-neutral VLM or reviewer call

Default capture for agent review: one ~1280 px frame, UI hidden, 3/4 view; add a 9-frame grid for motion. Keep images as corroboration, never the sole oracle for static geometry.

DART 6 (release-6.20)

Equivalent capture over OpenSceneGraph: dart::gui::osg::setUpOffscreenViewer / captureOffscreen + dartpy bindings, pixi run capture (needs a real X server or Xvfb), the ported image tooling, and pixi run bm-boxes-headless for rendering-free determinism checksums.

提供DART 7多物理场、多求解器、多后端仿真架构概览。指导用户理解World、Solver、Domain及Compute-Graph设计,明确新求解器接入规范与文档所有权,辅助在相关模块开发时获取顶层设计与状态评估。
需要理解DART 7仿真架构顶层设计 涉及World、Solver或Compute Backend的开发 查询多物理场或多后端集成细节 确认新求解器家族的接入流程
.claude/skills/dart-architecture/SKILL.md
npx skills add dartsim/dart --skill dart-architecture -g -y
SKILL.md
Frontmatter
{
    "name": "dart-architecture",
    "description": "DART Architecture: the DART 7 multi-physics, multi-solver, multi-backend simulation pipeline and where each abstraction is owned"
}

DART 7 Architecture

Load this skill when working on the DART 7 simulation World, on solvers/physics domains/compute backends, or whenever a task needs the big-picture map of how DART 7 is generalized for multi-physics, multi-solver, and multi-backend simulation.

The design in one sentence

The World owns topology, time, and a configured set of solvers; each solver advances the dynamics of the entities in its physics domain, and couplers mediate interactions between domains — with parallelizable work expressed as compute-graph nodes that any backend executor runs. Users configure method families and policies, never solver registries, component storage, or execution backends.

Why three axes of choice

  • Research, apples-to-apples. A new paper's algorithm should be reproducible and benchmarkable inside DART against baselines on shared foundations, not in a fork. New methods enter through DART-owned solver families.
  • End-user choice. Users pick the solver method and (internally) backend that fit their accuracy/speed/platform needs.
  • Auto-configuration. Defaults are selected from scene content so the easy path stays trivial; the backend seam is designed for later platform/scene-scale awareness without changing the public API.

Design vs current state (read both)

docs/readthedocs/architecture.md is the single-page map of the design and the options at each seam, with honest status markers. docs/design/dart7_architecture_assessment.md is the verified record of where the implementation still diverges from that design (no internal solver contract yet, conceptual-only Model/State split, executor seam unused by dynamics stages, missing apples-to-apples substrate) and owns the standing rule: new solver families enter only through docs/plans/solver-family-intake.md, including contract conformance and machine-recorded solver identity in all benchmark evidence. PLAN-091 retired the first living hardening packet plan; current follow-up work routes through docs/plans/dashboard.md, the intake checklist, and the durable owner docs named in the assessment. Do not write new code that copies a pattern the assessment still lists as a verified finding.

Key owner documents

The architecture page's Source-of-truth map is the single owner of the full topic → owner-doc mapping (solver, API, extension, compute, differentiable, clean-break, north-star). The docs an agent most often needs inline:

Topic Document
Solver abstraction, domain assignment, coupling, schedule docs/design/simulation_solver_architecture.md
Verified findings, standing rule, competitor lessons docs/design/dart7_architecture_assessment.md
Public C++ / dartpy API shape and promotion rules docs/design/simulation_cpp_api.md, docs/design/simulation_python_api.md
CPU / SIMD / GPU decision framework docs/design/scalable_compute_decisions.md
DART 7 vs DART 6 topology · live progress / parity gates docs/design/dart7_clean_break_strategy.md, docs/plans/dashboard.md

Public-facade rules (do not violate)

  • Do not expose Solver, Coupler, PhysicsDomain, ECS storage, component types, executor/backend types, or solver registries as public API.
  • Select behavior by documented method-family names and policy value objects.
  • Backend names (CUDA, Taskflow, SIMD ISA) may appear in build flags, diagnostics, and benchmarks — never in public types, namespaces, or required configuration.
  • Keep the easy path (World + addRigidBody/addMultibody + step) free of solver vocabulary.
  • Fallbacks must never silently substitute algorithms: validate capabilities at finalize or record the substitution in diagnostics.

Verification

Use docs/ai/verification.md to select the docs-only or code gate set for the change. Implementation work that realizes parts of this architecture also follows the gates in docs/design/simulation_solver_architecture.md, the solver-family intake checklist, and any active owner plan named in docs/plans/dashboard.md.

提供DART项目的构建系统支持,涵盖CMake配置、Pixi依赖管理及故障排查。包含常用命令、CUDA注意事项及锁文件规范。新增Filament GUI视觉检查指引,指导结合文本验证与图像捕获进行渲染变更评估。
DART项目构建 CMake配置问题 Pixi依赖管理 CUDA编译错误 GUI渲染验证
.claude/skills/dart-build/SKILL.md
npx skills add dartsim/dart --skill dart-build -g -y
SKILL.md
Frontmatter
{
    "name": "dart-build",
    "description": "DART Build: CMake, pixi, dependencies, and build troubleshooting"
}

DART Build System

Load this skill when working with DART's build system.

Quick Commands

pixi run config       # Configure CMake
pixi run build        # Build
pixi run test         # Run tests
pixi run test-all     # Full validation (lint + build + tests)
pixi run -e cuda test-all # CUDA-enabled full validation on Linux CUDA hosts
pixi run lint         # Format code

Full Documentation

For complete build instructions, read: docs/onboarding/building.md

For build system internals (CMake, dependencies): docs/onboarding/build-system.md

Common Issues

Issue Solution
CMake not found pixi install
Missing dependency Check pixi.toml
Build failure pixi run config then pixi run build
Linking error Check CMakeLists.txt in relevant module

CUDA Notes

  • On Linux hosts with visible NVIDIA GPUs, the CUDA Pixi config auto-detects compute capabilities for DART_CUDA_ARCHITECTURES; set DART_CUDA_ARCHITECTURES=<arch> only when overriding that detected list.
  • If CUDA runtime tests fail with unsupported PTX/toolchain errors, verify the generated CUDA flags include the local GPU architecture before assuming a kernel bug.

Pixi Lockfiles

  • Do not edit pixi.lock by hand. Change dependency constraints in pixi.toml, then run a Pixi command such as pixi install to let Pixi regenerate the lockfile.
  • If pixi.lock changes format or has broad solver churn, keep the generated output and call it out in the PR rather than attempting to splice lockfile entries manually.

Filament GUI Visual Checks

  • For Filament GUI, scene, or simulation rendering changes, load dart-verify-sim. Pair a text correctness oracle with agent-capture, view assessment, and claim-relevant engine debug layers; inspect the artifact and sidecar instead of relying only on command success.
  • If the user explicitly asks for pixi run ex dartsim, also run that exact entry point and terminate it after confirming the GUI binary launches.

Key Files

  • pixi.toml - Package management
  • CMakeLists.txt - Build configuration
  • cmake/ - CMake modules
用于调试DART项目的CI失败及GitHub Actions工作流。提供快速命令、常见故障解决方案(如格式化、FreeBSD RTTI、macOS崩溃等)及多平台构建架构说明,涵盖CUDA运行策略与跨平台兼容性修复建议。
CI构建或测试失败 排查GitHub Actions工作流问题 处理特定平台编译错误 配置或优化CI/CD流程
.claude/skills/dart-ci/SKILL.md
npx skills add dartsim/dart --skill dart-ci -g -y
SKILL.md
Frontmatter
{
    "name": "dart-ci",
    "description": "DART CI: GitHub Actions, cache debugging, and platform-specific failures"
}

DART CI/CD Troubleshooting

Load this skill when debugging CI failures or working with GitHub Actions.

When the failing claim depends on model/scene structure, physics behavior, or GUI/rendering output, also load dart-verify-sim and reproduce it with a text oracle plus assessed visual evidence. Document a visual exception when that renderer is unavailable or not applicable in the failing environment.

Quick Commands

# Monitor PR checks
gh pr checks <PR_NUMBER>
gh pr checks <PR_NUMBER> --watch --interval 30 --fail-fast

# View run details
gh run list --branch <BRANCH> -e pull_request -L 20
gh run watch <RUN_ID> --interval 30
gh run view <RUN_ID> --json status,conclusion,url

# Debug failures
gh run view <RUN_ID> --job <JOB_ID> --log-failed
gh run view <RUN_ID> --json jobs --jq '.jobs[] | {name, databaseId}'

# Rerun failed jobs only after explicit maintainer/user approval
gh run rerun <RUN_ID> --failed
gh run rerun <RUN_ID> --job <DATABASE_ID>

Full Documentation

For complete CI/CD guide: docs/onboarding/ci-cd.md

Common Failure Modes

Failure Type Solution
Formatting fails pixi run lint; push only after approval
Codecov patch fails Add tests for uncovered lines
FreeBSD RTTI fails Use type enums + static_cast instead of dynamic_cast
macOS ARM64 SEGFAULT Replace alloca()/VLAs with std::vector<T>
RTD build fails Use defensive .get(key, default) patterns
gz-physics fails Reproduce with pixi run -e gazebo test-gz

Workflow Architecture

Workflow Purpose Platforms
ci_lint.yml Formatting Ubuntu
ci_ubuntu.yml Build + test + coverage Ubuntu
ci_macos.yml Build + test macOS
ci_windows.yml Build + test Windows
ci_freebsd.yml Build + test (VM) FreeBSD
ci_gz_physics.yml Gazebo integration Ubuntu
ci_cuda.yml CUDA compile + smoke Ubuntu/GPU

CUDA Runner Policy

The project has a trusted ubuntu-latest-gpu runner for same-repository CUDA runtime validation, but it must never run untrusted fork-PR code. Consequences:

  • Same-repository PRs, protected branch pushes, and manual dispatches use the GPU runner and run pixi run --locked -e cuda test-cuda.
  • Fork PRs use a GitHub-hosted fallback and compile CUDA targets without running GPU-only steps.
  • Local CUDA validation is pixi run -e cuda test-all on Linux hosts with a visible NVIDIA CUDA runtime; local Pixi config auto-detects visible GPU compute capabilities for DART_CUDA_ARCHITECTURES.
  • pixi run check-phase5-cuda-workflow enforces the trusted-event GPU guard and fork-PR hosted fallback in ci_cuda.yml.

Fast Iteration Loop

  1. Identify failing step from job logs
  2. Reproduce locally with same build toggles
  3. Fix the smallest failing test
  4. Push only after explicit maintainer/user approval, then monitor: gh run watch <RUN_ID>

Caching And Timing

Use the cache policy, current timing guidance, and investigation steps in docs/onboarding/ci-cd.md. Treat observed job duration and cache diagnostics from the affected run as the current evidence; do not copy mutable timing or hit-rate estimates into this skill.

指导DART项目代码贡献流程,涵盖分支命名、PR创建及LTS分支修复。强调提交前运行lint和测试,规范PR描述结构(摘要优先),禁止自动标签前缀,并规定已发布PR的更新策略以避免破坏CI和历史记录。
需要向DART项目提交代码或发起Pull Request 询问DART项目的分支命名规范或PR工作流程 涉及DART LTS版本的Bug修复流程
.claude/skills/dart-contribute/SKILL.md
npx skills add dartsim/dart --skill dart-contribute -g -y
SKILL.md
Frontmatter
{
    "name": "dart-contribute",
    "description": "DART Contribute: branching, PRs, review workflow, and dual-PR bugfixes"
}

DART Contribution Workflow

Load this skill when contributing code to DART.

Full Documentation

For complete guide: docs/onboarding/contributing.md

For code style: docs/onboarding/code-style.md

Branch Naming

  • feature/<topic> - New features
  • fix/<topic> - Bug fixes
  • refactor/<topic> - Refactoring
  • docs/<topic> - Documentation

PR Workflow

# Features, docs, and non-bugfix refactors start from main
git checkout -b <type>/<topic> origin/main

# Bug fixes that apply to the current release line start from the active DART 6 LTS branch
DART6_LTS_BRANCH=$(git branch -r --list 'origin/release-6.*' | sed 's|.*/||' | sort -V | tail -1)
git checkout -b "fix/<topic>-${DART6_LTS_BRANCH#release-}" "origin/$DART6_LTS_BRANCH"

# Make changes, then
pixi run lint
pixi run test-all
# On Linux hosts with a visible NVIDIA CUDA runtime
pixi run -e cuda test-all

# After explicit maintainer/user approval, push and create PR
git push -u origin HEAD
gh pr create --draft --base <target-branch> --milestone "<milestone>"

Use --base main --milestone "DART 7.0" for main PRs and the branch-matching DART 6.x patch milestone for active DART 6 LTS PRs.

Rule of thumb: run pixi run lint before committing so auto-fixes are included.

Use .github/PULL_REQUEST_TEMPLATE.md and keep DART's default order: Summary, Motivation / Problem, Changes / Key Changes, optional Before / After, Testing, Breaking Changes, and Related Issues / PRs. Keep Summary first as the reviewer skim target. If the motivation is necessary to understand the outcome, make the first Summary sentence problem-oriented, then put the fuller why in Motivation / Problem rather than moving Motivation above Summary.

Write PR descriptions for a user or downstream maintainer who is not already familiar with the implementation. Lead Summary and Motivation with what changes for them, what stays compatible, how they opt in or migrate, and why the evidence matters; keep implementation mechanics in Changes unless they explain user-visible risk.

When a PR has meaningful user-facing API, workflow, behavior, or performance impact, add a concise Before / After section. Cover only relevant dimensions, phrase rows as user-visible before/after outcomes, and for performance claims name the baseline explicitly: CPU path, parent commit, main, or prior implementation, plus workload, metric, and important limitations.

Use plain descriptive commit messages and PR titles. Do not prefix them with agent tags such as [codex], [claude], or [opencode].

For already-published PRs, keep history inspectable with additive commits. If the PR branch needs the latest target branch, use explicit maintainer/user approval to update that published branch by merging the target branch and pushing normally. Do not rebase published PR branches by default because that invalidates existing CI runs and makes PR review/comment history harder to follow. Rebase or force-push only when the maintainer explicitly requests it.

Milestones (Required)

Always set a milestone when creating PRs after explicit maintainer/user approval:

Target Branch Milestone
main DART 7.0 (or next major)
Active DART 6 LTS release-6.* branch Branch-matching DART 6.x patch
# After explicit maintainer/user approval, set milestone on existing PR
gh pr edit <PR#> --milestone "DART 7.0"

# List available milestones
gh api repos/dartsim/dart/milestones --jq '.[] | .title'

CRITICAL: Bug Fix Dual-PR

Bug fixes require PRs to BOTH release lines:

  1. Active DART 6 LTS release-6.* branch - Current DART 6 maintenance line
  2. main - Next release

Steps:

  1. Fix on the active DART 6 LTS branch first
  2. Cherry-pick to main
  3. After explicit maintainer/user approval, create separate PRs for each

CHANGELOG (After Approved PR Exists)

Use the dart-changelog routine with docs/onboarding/changelog.md as the source of truth. After the approved PR exists, check if CHANGELOG.md needs updating:

Change Type Update CHANGELOG?
Bug fixes ✅ Yes
New features ✅ Yes
Breaking changes ✅ Yes (in Breaking Changes section)
Documentation improvements ✅ Yes (in Tooling and Docs)
CI/tooling changes ✅ Yes (in Tooling and Docs)
Refactoring (no behavior change) ⚠️ Maybe (if significant)
Dependency bumps ⚠️ Maybe (if user-facing)
Typo fixes ❌ No

Format: - Reader-visible outcome. ([#PR](https://github.com/dartsim/dart/pull/PR))

Keep entries concise. If details need more than a few wrapped lines, move the details to the owner doc, plan, or migration note and link that document. Do not add one bullet per PR when several PRs ship one reader-visible outcome; merge them into one human-readable release-note entry.

# Example entry in CHANGELOG.md under appropriate section:
- Added AI-native documentation with AGENTS.md and module-specific guides. ([#2446](https://github.com/dartsim/dart/pull/2446))

Code Review

  • Address all feedback
  • Keep changes minimal
  • Update tests if behavior changed
  • Run full validation, then ask for explicit maintainer/user approval before pushing fixes

CI Loop

gh run watch <RUN_ID> --interval 30

Fix failures until green.

用于加载机器人模型文件(URDF、SDF、MJCF)及解析器。支持格式自动检测、包路径解析及强制指定格式,适用于ROS和Gazebo等场景的3D层级与碰撞几何处理。
需要加载URDF、SDF或MJCF格式的机器人模型 使用dart::io进行模型解析或包路径处理
.claude/skills/dart-io/SKILL.md
npx skills add dartsim/dart --skill dart-io -g -y
SKILL.md
Frontmatter
{
    "name": "dart-io",
    "description": "DART IO: URDF, SDF, MJCF parsers, and dart::io loading"
}

DART Model Loading (dart::io)

Load this skill when working with robot model files or parsers.

When correctness depends on the loaded model's 3D hierarchy, transforms, collision geometry, or simulated behavior, also load dart-verify-sim for a text scene/behavior oracle plus claim-tied visual corroboration.

Quick Start

#include <dart/io/read.hpp>

// Format auto-detection
auto skel = dart::io::readSkeleton("dart://sample/urdf/KR5/KR5 sixx R650.urdf");

Full Documentation

For complete I/O guide: docs/onboarding/io-parsing.md

For module-specific details: dart/io/AGENTS.md

Supported Formats

Format Extension Use Case
URDF .urdf ROS robots
SDF .sdf, .world Gazebo models
MJCF .xml MuJoCo models

Common Patterns

// URDF with package resolution
dart::io::ReadOptions options;
options.addPackageDirectory("my_robot", "/path/to/my_robot");
auto skel = dart::io::readSkeleton("package://my_robot/urdf/robot.urdf", options);

// Force specific format
options.format = dart::io::ModelFormat::Sdf;

Key Files

  • API: dart/io/read.hpp
  • Tests: tests/unit/io/test_read.cpp
提供DART Python绑定(dartpy)的开发指南,涵盖快速启动、构建测试命令、轮子打包及API规范。指导开发者处理模型加载、动力学仿真及GUI渲染,并关联dart-verify-sim技能以验证仿真行为。
需要加载或操作DART Python绑定时 进行dartpy相关的构建、测试或类型存根生成时 涉及DART仿真模型的动态加载或物理引擎交互时
.claude/skills/dart-python/SKILL.md
npx skills add dartsim/dart --skill dart-python -g -y
SKILL.md
Frontmatter
{
    "name": "dart-python",
    "description": "DART Python: dartpy bindings, nanobind, wheels, and API patterns"
}

DART Python Bindings (dartpy)

Load this skill when working with Python bindings or dartpy.

When a binding exposes or changes model/scene loading, dynamics, collision/contact/constraints, simulation stepping, GUI/rendering output, or a visual example, also load dart-verify-sim. Pair a focused Python text/behavior oracle with an assessed, claim-tied headless capture; document a visual exception when rendering is unavailable or not applicable.

Quick Start

import dartpy as dart

world = dart.World()
skel = dart.io.read_skeleton("dart://sample/urdf/KR5/KR5 sixx R650.urdf")
world.add_skeleton(skel)

for _ in range(100):
    world.step()

Full Documentation

For complete Python bindings guide: docs/onboarding/python-bindings.md

For module-specific details: python/AGENTS.md

Quick Commands

pixi run build-py-dev    # Build for development
pixi run test-py         # Run Python tests
pixi run generate-stubs  # Generate type stubs

Wheel Building

pixi run -e py314-wheel wheel-build
pixi run -e py314-wheel wheel-repair  # Linux only
pixi run -e py314-wheel wheel-test

Key Patterns

  • snake_case preferred (camelCase emits DeprecationWarning)
  • NumPy arrays auto-convert to Eigen types
  • GUI requires DART_BUILD_GUI=ON

Key Files

  • Package config: pyproject.toml
  • Build system: python/dartpy/CMakeLists.txt
  • Type stubs: python/stubs/dartpy/
用于管理DART实验仿真世界的研究参考目录(论文、教材、标准、引擎)。支持添加、更新和审计条目,规范引用格式、状态追踪及决策判定,确保参考文献与代码和设计文档的准确关联。
添加或更新研究参考文献 审计现有参考条目 在文档中引用学术资料
.claude/skills/dart-references/SKILL.md
npx skills add dartsim/dart --skill dart-references -g -y
SKILL.md
Frontmatter
{
    "name": "dart-references",
    "description": "DART References: manage the experimental simulation research catalog (papers, textbooks, engines) with status, priority, and verdict"
}

DART Research References

Load this skill when adding, updating, auditing, or citing research references (papers, textbooks, model-format standards, or comparative engines) for the DART experimental simulation world — its public API and its algorithms.

Catalog Location

docs/readthedocs/papers.md is the single source of truth and the published website page. It is a companion to the experimental API design docs:

  • docs/design/simulation_cpp_api.md
  • docs/design/simulation_python_api.md

Entry Schema

Each entry has an id, a full citation, and these properties:

Property Values
Type textbook, paper, standard, engine
Topic e.g. dynamics, kinematics, contact, integration, collision, terminology, model-format, api
Status referenced, planned, in-progress, implemented, deferred, rejected
Priority high, medium, low,
Verdict adopt, baseline, reference, evaluate, reject
Where used link to the design doc, code, or test that uses (or will use) it

Status is written from the experimental world's perspective. A method shipping in classic DART but not yet in the experimental world is planned, with the classic location noted in Notes.

Workflow: add or update an entry

  1. Ground the entry in real evidence — a design doc, code path, test, or an explicit project decision. Do not add aspirational references with no link.
  2. Write an accurate citation (authors, title, year, venue/publisher). Prefer an official URL; do not fabricate DOIs.
  3. Add a row to the matching summary table and a detail subsection with the full properties and a one-line rationale.
  4. Set Status from the experimental world's perspective; note classic-DART status separately in Notes.
  5. Set Verdict (adopt to build on, baseline to compare against, reference to cite, evaluate while undecided, reject with a reason).
  6. Fill Where used with the design-doc/code/test link.
  7. When the relationship changes (e.g. a planned algorithm becomes implemented, or an evaluate is decided), update Status/Verdict and the Where used link in the same change.

Rules

  • Prefer robotics/dynamics literature (textbooks, papers) over engine-specific names when a reference informs a terminology decision; record the grounding in the catalog's "Terminology Grounding" section.
  • Keep the catalog scoped to the experimental world for now; the schema is general and can extend to the rest of DART later.
  • Keep engine entries as baselines/comparisons, never as dependencies.
  • Use docs/ai/verification.md to select the docs-only or AI docs/adapters gate set, then run pixi run lint after edits.

Full Documentation

For the catalog and its rationale: docs/readthedocs/papers.md

For the API it supports: docs/design/simulation_cpp_api.md, docs/design/simulation_python_api.md

For DART's research focus: docs/ai/north-star.md

用于编写、调试DART项目测试及CI验证的助手。支持单元/集成测试运行、GoogleTest规范遵循、CUDA环境验证及失败排查,并在涉及仿真或视觉场景时联动dart-verify-sim进行端到端检查。
编写单元测试或集成测试 调试测试失败案例 执行CI预提交验证 需要仿真或视觉端到端检查
.claude/skills/dart-test/SKILL.md
npx skills add dartsim/dart --skill dart-test -g -y
SKILL.md
Frontmatter
{
    "name": "dart-test",
    "description": "DART Test: unit tests, integration tests, CI validation, and debugging"
}

DART Testing

Load this skill when writing or debugging tests.

Quick Commands

pixi run test         # Quick test run
pixi run test-all     # Full validation
pixi run -e cuda test-all # CUDA-enabled full validation on Linux CUDA hosts
pixi run test-unit    # Unit tests
pixi run test-py      # Python tests

Full Documentation

For complete testing guide: docs/onboarding/testing.md

For CI/CD troubleshooting: docs/onboarding/ci-cd.md

Test Organization

  • Unit tests: tests/unit/
  • Integration tests: tests/integration/
  • Regression tests: Near the code they test

Writing Tests

  1. Follow existing patterns in the test directory
  2. Use GoogleTest framework
  3. Name tests descriptively: TEST(ClassName, MethodName_Condition_ExpectedResult)

CI Validation

Before submitting PR:

pixi run lint         # Must pass
pixi run test-all     # Must pass
pixi run -e cuda test-all # Must pass on Linux CUDA hosts

Debugging Test Failures

# Run the smallest existing Pixi test task that covers the failure
pixi run test-unit

# Get CI logs
gh run view <RUN_ID> --log-failed

Simulation And Visual End-to-End Checks

When a failure or change depends on scene structure, dynamics, collision/contact, simulation stepping, GUI output, or a visual example, also load dart-verify-sim. Use its text-first oracle and then an assessed headless capture with claim-relevant debug layers. Record a concrete no-visual reason only when that corroboration is unavailable or not applicable.

Gotchas

  • pixi run build builds libraries only, NOT the unit-test binaries. If you run ctest without building the test target first, you may execute stale binaries that silently pass. Build the test target before running its label, e.g. for the simulation suite: pixi run build-simulation-tests (target dart_simulation_tests) before ctest -L simulation.
  • pixi run test-all is the default-environment full gate. On Linux hosts with a visible NVIDIA CUDA runtime, also run pixi run -e cuda test-all; the CUDA run preserves the cuda Pixi environment and executes the CUDA CTest + benchmark smoke path when the runtime is detected.
  • The CUDA Pixi config auto-detects visible GPU compute capabilities for DART_CUDA_ARCHITECTURES; unsupported PTX/toolchain errors usually mean the generated CUDA architecture flags need to be checked before blaming test code.
用于验证DART 3D场景及物理仿真的技能。遵循文本优先原则,通过指标、轨迹对比检测缺陷,辅以无头渲染图像进行视觉佐证,适用于动态、碰撞及GUI输出的调试与基准测试。
验证DART 3D场景或物理仿真正确性 调试动力学、碰撞接触或约束问题 性能基准测试或审查GUI输出
.claude/skills/dart-verify-sim/SKILL.md
npx skills add dartsim/dart --skill dart-verify-sim -g -y
SKILL.md
Frontmatter
{
    "name": "dart-verify-sim",
    "description": "DART Verify Sim: text-first and visual checks for 3D scenes and physics (metrics, scene dump, trajectories, headless render, image verdict\/golden)"
}

DART Simulation Verification

Load this skill when verifying that a DART 3D scene or physics simulation is correct — implementing, debugging, benchmarking, or reviewing dynamics, collision, contact, or GUI output. DART's domains need 3D understanding that language models lack natively; this tooling makes it checkable without a GUI.

Lead with text, corroborate with images. Measured A/B evidence: per-step metrics and trajectories detect nearly all seeded physics defects; a rendered image alone misses static geometry defects (penetration, interpenetration). Decide correctness from text; use images for scene comprehension and gross dynamic failures.

Applicability contract

Use this skill for any task whose claim depends on 3D structure or behavior: model/scene loading, dynamics, collision/contact/constraints, simulation stepping, GUI/rendering, or visual examples. First run a text oracle (metrics, scene diff, trajectory/contact comparison, or focused behavioral test), then corroborate it end to end with an assessed headless view and only the debug layers needed by the claim. If rendering is unavailable or genuinely irrelevant, record why and name the replacement evidence; never treat an image as the sole correctness oracle.

Full documentation

docs/onboarding/agent-sim-verification.md — the durable guide. docs/ai/verification.md owns the gate policy; docs/onboarding/profiling.md owns text-first profiling.

Quick commands

Text (primary):

  • world.compute_step_metrics() — energy/momentum/penetration/contacts/residual
  • dartpy.dump_scene_json(world) / dump_scene_text(world) — "what is in this world?" (glTF/USD-flavored hierarchy + flat index)
  • pixi run scene-diff — structural JSON verdict for intended-vs-actual scene dumps
  • pixi run trajectory-record / pixi run trajectory-compare — per-body TSV + contact JSONL; bit-exact or tolerance diff with first-divergence

Visual (corroboration):

  • dart.gui.render(world, camera=None, size=(w, h), debug=(...layers...)) → headless image with optional world-derived debug layers (grid, world_frame, body_frames, coms, inertia_boxes, collision_bounds, velocities, contacts, labels; trajectories additionally requires a sampled dart.gui.TrajectoryTracker via debug_scene_for_world); dart.gui.render_annotated(...) composites label text; .png_bytes() for notebooks; dart.gui.orbit_camera(...) / look_at(...)
  • dart.gui.assess_view(world, camera, size, focus=...) → ViewReport with issues (cropped/too-far/too-close/occluded/ambiguous); dart.gui.select_viewpoints(...) picks deterministic best views; dart.gui.frame_body/frame_region reframe onto a subject. Assess first; fix flagged views before capturing evidence.
  • viewer camera flags: --view {three-quarter|front|side|top}, --camera-azimuth/-elevation/-distance/-target, --turntable N, --fit
  • pixi run py-demo-capture — headless PNG/MP4 capture from Python
  • pixi run agent-capture — deterministic evidence harness: auto/explicit cameras, debug layers, stills/turntable/motion video, reproducible sidecar
  • pixi run image-compose — side-by-side / blend / diff-heatmap composites
  • pixi run evidence-select — claim-driven artifact selection with recorded rationale; pixi run evidence-publish — PR "Visual verification" section with GitHub-hosted media (manual placeholders by default; gh-release upload only with --yes + maintainer approval)
  • pixi run image-verdict / image-golden / image-sheet — JSON verdict, golden diff, contact sheet (contrast is report-only; --require-contrast to gate)
  • pixi run image-ab-study — blind-judge detection deltas for single-view, multi-view, turntable, and annotated captures
  • pixi run image-ab-round2 — prepare a blinded round-2 packet and score completed judge observations

Opt-in:

  • pixi run render-golden-gate — opt-in golden gate (backend-specific golden, curated locally with -- --update; not default CI)
  • pixi run rerun-trajectory — rerun.io inspection (opt-in; graceful when rerun-sdk is absent)
  • pixi run verification-bundle — package text evidence plus still/grid images for a provider-neutral VLM or reviewer call

Default capture for agent review: one ~1280 px frame, UI hidden, 3/4 view; add a 9-frame grid for motion. Keep images as corroboration, never the sole oracle for static geometry.

DART 6 (release-6.20)

Equivalent capture over OpenSceneGraph: dart::gui::osg::setUpOffscreenViewer / captureOffscreen + dartpy bindings, pixi run capture (needs a real X server or Xvfb), the ported image tooling, and pixi run bm-boxes-headless for rendering-free determinism checksums.

用于在不修改代码的情况下分析仓库证据。遵循只读原则,通过检查本地状态、构建证据集并区分事实与推断,提供带置信度的排名综述,确保不执行文件编辑或外部变更。
用户请求分析仓库状态或代码逻辑 需要只读审查而不进行代码修改
.codex/skills/dart-analyze/SKILL.md
npx skills add dartsim/dart --skill dart-analyze -g -y
SKILL.md
Frontmatter
{
    "name": "dart-analyze",
    "description": "DART Analyze: analyze repository evidence without editing"
}

dart-analyze

Use this skill in Codex to run the DART dart-analyze workflow. The editable workflow source currently lives in .claude/commands/, and this generated Codex skill is a generated Codex adapter entrypoint.

Invocation

  • Claude Code/OpenCode: /dart-analyze <arguments>
  • Codex: $dart-analyze <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Analyze repository evidence without editing: $ARGUMENTS

Required Reading

@AGENTS.md @docs/ai/principles.md @docs/ai/workflows.md @docs/ai/verification.md @docs/onboarding/ai-tools.md

Workflow

  1. Restate the question and the read-only boundary. Do not edit files, stage changes, or perform GitHub, CI, branch, or review-thread mutations.
  2. Inspect local state enough to avoid misreading user work:
    git status --short --branch
    git diff --stat
    
  3. Build an evidence set from repository files, tests, docs, generated artifacts, and command output. Load task-specific docs from AGENTS.md when the question names a subsystem.
  4. Separate direct evidence from inference and unknowns. Do not present an inference as a fact, and do not turn a read-only answer into an implementation plan.
  5. Rank explanations, risks, or options by confidence when multiple readings are plausible. Use concrete file and line references for material claims.
  6. If current external documentation or standards are needed for correctness, gather source-backed evidence and label date/version context explicitly.
  7. Stop when the synthesis answers the question with enough evidence, or report the exact proof source that is unavailable.

Output

Report:

  • the question answered and the scope inspected;
  • ranked synthesis with confidence;
  • evidence, inference, and unknowns as separate sections;
  • any discriminating read-only probe that would reduce remaining uncertainty;
  • confirmation that no local edits or external mutations were performed.
提供DART 7多物理场、多求解器及多后端仿真架构概览。涵盖World、求解器域、耦合器与计算图核心概念,指导用户配置方法族而非底层实现,并引用权威文档说明设计现状与合规要求。
需要了解DART 7整体架构设计时 开发或调试多物理场/多求解器仿真逻辑时 查询求解器家族引入规范或架构状态评估时
.codex/skills/dart-architecture/SKILL.md
npx skills add dartsim/dart --skill dart-architecture -g -y
SKILL.md
Frontmatter
{
    "name": "dart-architecture",
    "description": "DART Architecture: the DART 7 multi-physics, multi-solver, multi-backend simulation pipeline and where each abstraction is owned"
}

DART 7 Architecture

Load this skill when working on the DART 7 simulation World, on solvers/physics domains/compute backends, or whenever a task needs the big-picture map of how DART 7 is generalized for multi-physics, multi-solver, and multi-backend simulation.

The design in one sentence

The World owns topology, time, and a configured set of solvers; each solver advances the dynamics of the entities in its physics domain, and couplers mediate interactions between domains — with parallelizable work expressed as compute-graph nodes that any backend executor runs. Users configure method families and policies, never solver registries, component storage, or execution backends.

Why three axes of choice

  • Research, apples-to-apples. A new paper's algorithm should be reproducible and benchmarkable inside DART against baselines on shared foundations, not in a fork. New methods enter through DART-owned solver families.
  • End-user choice. Users pick the solver method and (internally) backend that fit their accuracy/speed/platform needs.
  • Auto-configuration. Defaults are selected from scene content so the easy path stays trivial; the backend seam is designed for later platform/scene-scale awareness without changing the public API.

Design vs current state (read both)

docs/readthedocs/architecture.md is the single-page map of the design and the options at each seam, with honest status markers. docs/design/dart7_architecture_assessment.md is the verified record of where the implementation still diverges from that design (no internal solver contract yet, conceptual-only Model/State split, executor seam unused by dynamics stages, missing apples-to-apples substrate) and owns the standing rule: new solver families enter only through docs/plans/solver-family-intake.md, including contract conformance and machine-recorded solver identity in all benchmark evidence. PLAN-091 retired the first living hardening packet plan; current follow-up work routes through docs/plans/dashboard.md, the intake checklist, and the durable owner docs named in the assessment. Do not write new code that copies a pattern the assessment still lists as a verified finding.

Key owner documents

The architecture page's Source-of-truth map is the single owner of the full topic → owner-doc mapping (solver, API, extension, compute, differentiable, clean-break, north-star). The docs an agent most often needs inline:

Topic Document
Solver abstraction, domain assignment, coupling, schedule docs/design/simulation_solver_architecture.md
Verified findings, standing rule, competitor lessons docs/design/dart7_architecture_assessment.md
Public C++ / dartpy API shape and promotion rules docs/design/simulation_cpp_api.md, docs/design/simulation_python_api.md
CPU / SIMD / GPU decision framework docs/design/scalable_compute_decisions.md
DART 7 vs DART 6 topology · live progress / parity gates docs/design/dart7_clean_break_strategy.md, docs/plans/dashboard.md

Public-facade rules (do not violate)

  • Do not expose Solver, Coupler, PhysicsDomain, ECS storage, component types, executor/backend types, or solver registries as public API.
  • Select behavior by documented method-family names and policy value objects.
  • Backend names (CUDA, Taskflow, SIMD ISA) may appear in build flags, diagnostics, and benchmarks — never in public types, namespaces, or required configuration.
  • Keep the easy path (World + addRigidBody/addMultibody + step) free of solver vocabulary.
  • Fallbacks must never silently substitute algorithms: validate capabilities at finalize or record the substitution in diagnostics.

Verification

Use docs/ai/verification.md to select the docs-only or code gate set for the change. Implementation work that realizes parts of this architecture also follows the gates in docs/design/simulation_solver_architecture.md, the solver-family intake checklist, and any active owner plan named in docs/plans/dashboard.md.

用于审计并修复AI代理未能发现或遵守已记录规则的问题。通过定位规则、诊断遗漏原因(如文档隐蔽或冲突),优化文档结构与可见性,并运行自动化验证以确保合规性降低复发风险。
AI代理违反或遗漏了既定规则 需要审查Agent对文档规则的遵循情况
.codex/skills/dart-audit-agent-compliance/SKILL.md
npx skills add dartsim/dart --skill dart-audit-agent-compliance -g -y
SKILL.md
Frontmatter
{
    "name": "dart-audit-agent-compliance",
    "description": "DART Audit Agent Compliance: audit and fix gaps when agents miss or cannot discover documented rules"
}

dart-audit-agent-compliance

Use this skill in Codex to run the DART dart-audit-agent-compliance workflow. The editable workflow source currently lives in .claude/commands/, and this generated Codex skill is a generated Codex adapter entrypoint.

Invocation

  • Claude Code/OpenCode: /dart-audit-agent-compliance <arguments>
  • Codex: $dart-audit-agent-compliance <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Audit agent compliance issue: $ARGUMENTS

Required Reading

@AGENTS.md @docs/ai/principles.md @docs/ai/verification.md @docs/ai/components.md @docs/onboarding/ai-tools.md @docs/onboarding/contributing.md

Incident Inputs

  • Rule violated: $1
  • Where documented: $2
  • Actual behavior: $3
  • Expected behavior: $4

Treat missing positional values as details to infer from the user request or ask about before editing.

Workflow

  1. Locate the exact existing rule and confirm it is still correct.
  2. Diagnose why it was missed:
    • buried in prose
    • wrong file for the task type
    • weak emphasis
    • duplicated or conflicting guidance
    • not referenced from relevant commands or skills
  3. Prefer restructuring existing docs over adding duplicate content.
  4. Improve visibility with one or more focused changes:
    • move the rule to a loaded file
    • make it scannable with a checklist or mandatory marker
    • consolidate duplicate guidance
    • add cross-references from relevant commands or skills
  5. Run the principle audit from docs/ai/principles.md and use docs/ai/verification.md to map audit results to evidence.
  6. Run the relevant gate set from docs/ai/verification.md. For AI workflow changes, that includes generated adapter sync/checks, docs policy, spell, Markdown checks, and pixi run lint.

Output

  • Root cause for the missed rule
  • Files changed and why
  • Which audit items were proven by automation vs manual inspection
  • Confidence level that the recurrence risk is reduced
用于将已合并至 main 的 PR 或提交反向移植到发布分支。验证源状态,检查重复变更,处理 AI 工作流兼容性,执行 cherry-pick、冲突解决及 CI 检查,并生成 Changelog 决策后创建 PR。
需要将功能从 main 分支反向移植到特定发布版本分支 用户请求执行 dart-backport-pr 命令以自动化反向移植流程
.codex/skills/dart-backport-pr/SKILL.md
npx skills add dartsim/dart --skill dart-backport-pr -g -y
SKILL.md
Frontmatter
{
    "name": "dart-backport-pr",
    "description": "DART Backport PR: backport a merged main PR to a release branch"
}

dart-backport-pr

Use this skill in Codex to run the DART dart-backport-pr workflow. The editable workflow source currently lives in .claude/commands/, and this generated Codex skill is a generated Codex adapter entrypoint.

Invocation

  • Claude Code/OpenCode: /dart-backport-pr <arguments>
  • Codex: $dart-backport-pr <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Backport PR or commits: $ARGUMENTS

Required Reading

@AGENTS.md @docs/onboarding/contributing.md @docs/onboarding/release-management.md @docs/onboarding/changelog.md

Workflow

  1. Verify the source PR or commit is merged to main:
    gh pr view <SOURCE_PR> --json state,mergedAt,baseRefName,mergeCommit
    
  2. Check whether an equivalent change already exists on the release branch:
    git fetch origin <RELEASE_BRANCH> main
    git cherry -v --abbrev=40 origin/<RELEASE_BRANCH> origin/main | grep <COMMIT_HASH>
    
  3. For AI-infra or workflow-doc backports, compare the release branch capability inventory and adapter directories against main. If the release branch has a smaller workflow surface, adapt to the release branch instead of importing main-only workflows.
  4. Create a release branch from the release target:
    git checkout -B backport/<SOURCE_PR>-to-<RELEASE_BRANCH> origin/<RELEASE_BRANCH>
    
  5. Cherry-pick with provenance: git cherry-pick -x <COMMIT_HASH>.
  6. Resolve conflicts minimally; stop and ask if conflicts are broad or change behavior.
  7. Run the dart-changelog routine for the release-target decision before opening the backport PR.
  8. Run pixi run lint and the smallest relevant release-branch checks.
  9. Ask for explicit maintainer/user approval before pushing or opening the PR. After approval, open the PR against the release branch with milestone matching that release branch and use the PR template.

Output

  • Backport PR URL
  • Source PR/commit
  • Conflicts resolved, if any
  • Changelog decision
  • Checks run and CI status
用于在 Codex 中运行 DART 基准测试证据包工作流。通过定位所属计划、构建并运行基准测试、生成机器生成的证据包,并使用检查器验证数据包的有效性,以准备或刷新基准测试证据。
需要生成或更新 DART 基准测试证据包时 执行 /dart-benchmark-packet 命令时
.codex/skills/dart-benchmark-packet/SKILL.md
npx skills add dartsim/dart --skill dart-benchmark-packet -g -y
SKILL.md
Frontmatter
{
    "name": "dart-benchmark-packet",
    "description": "DART Benchmark Packet: author or refresh a benchmark evidence packet for an owning plan"
}

dart-benchmark-packet

Use this skill in Codex to run the DART dart-benchmark-packet workflow. The editable workflow source currently lives in .claude/commands/, and this generated Codex skill is a generated Codex adapter entrypoint.

Invocation

  • Claude Code/OpenCode: /dart-benchmark-packet <arguments>
  • Codex: $dart-benchmark-packet <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Author or refresh a benchmark evidence packet: $ARGUMENTS

Required Reading

@AGENTS.md @docs/onboarding/profiling.md

Also read the owning plan file named by the packet (for example docs/plans/<NNN>-<slug>.md) and its packet convention.

Workflow

  1. Identify the owning plan and its packet convention: the packet checker (for example pixi run check-avbd-packets) and the packet generator (for example scripts/write_*_packet.py) that the plan names.
  2. Build the benchmark target and run the benchmark that feeds the packet, following docs/onboarding/profiling.md for a stable measurement setup.
  3. Run the packet writer to record the machine-generated evidence packet with its provenance and resolved configuration.
  4. Validate the packet with the plan's packet checker; treat a failing checker as incomplete evidence and fix the packet, not the checker.
  5. Prepare the owning plan's row or link update that task-specific gates require, but leave editing the plan file to the plan's own workflow — this command prepares and validates the packet. This is a local task; do not push or open PRs without explicit maintainer/user approval.

Output

  • Owning plan, packet ID, and the checker/generator used
  • Benchmark command run and the measurement setup
  • Packet file written and checker result
  • Whether the packet is new or refreshed, and any remaining gap
用于分析或清理 DART 仓库中陈旧的 Git 分支。支持只读分析和需审批的操作模式,通过检查合并状态和工作区状态安全识别并建议删除过时分支。
需要清理仓库中的陈旧分支时 检查哪些远程分支已合并或不再需要时
.codex/skills/dart-branch-cleanup/SKILL.md
npx skills add dartsim/dart --skill dart-branch-cleanup -g -y
SKILL.md
Frontmatter
{
    "name": "dart-branch-cleanup",
    "description": "DART Branch Cleanup: analyze or clean stale repository branches"
}

dart-branch-cleanup

Use this skill in Codex to run the DART dart-branch-cleanup workflow. The editable workflow source currently lives in .claude/commands/, and this generated Codex skill is a generated Codex adapter entrypoint.

Invocation

  • Claude Code/OpenCode: /dart-branch-cleanup <arguments>
  • Codex: $dart-branch-cleanup <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Analyze or clean branches: $ARGUMENTS

Required Reading

@AGENTS.md @docs/onboarding/ci-cd.md @docs/onboarding/contributing.md

Modes

  • analyze: inspect only, no deletions
  • action: prepare follow-up, or delete only after ownership/safety are clear and the maintainer/user gives explicit approval for each local or remote branch deletion

Default to analyze if the requested mode is ambiguous.

Workflow

  1. git fetch --all --no-prune
  2. List stale remote-tracking refs without deleting them:
    git remote prune origin --dry-run
    
    If origin uses SSH and port 22 is unavailable, keep the check read-only and use a temporary HTTPS rewrite instead of changing repository config:
    git -c url.https://github.com/.insteadOf=git@github.com: \
      fetch --all --no-prune
    git -c url.https://github.com/.insteadOf=git@github.com: \
      remote prune origin --dry-run
    
    To confirm that a remote PR branch was deleted without updating refs, query GitHub directly over HTTPS:
    git ls-remote --heads https://github.com/dartsim/dart.git <BRANCH>
    
  3. Determine target branch, usually origin/main.
  4. For each branch:
    git rev-list --left-right --count <TARGET>...<BRANCH>
    git log --oneline <TARGET>..<BRANCH>
    git diff --stat <TARGET>..<BRANCH>
    git cherry -v <TARGET> <BRANCH>
    
  5. Before any explicitly approved local branch deletion, check whether the branch is checked out by a linked worktree:
    git worktree list --porcelain
    git -C <WORKTREE> status --short --branch
    
    Dirty linked worktrees must not be removed, detached, or reset during branch cleanup. Only after explicit maintainer/user approval, switch that worktree to a preservation branch at the same commit to free the obsolete branch name before deleting the merged branch.
  6. The command git branch --merged may not prove ancestry for PR branches that landed through a squash or merge commit. Use the merged PR state plus an empty tree diff or equivalent git cherry -v output as the deletion signal; if the history relationship is unclear, keep the branch.
  7. Classify recommendations only; deleting a candidate requires explicit maintainer/user approval:
    • ahead=0: safe deletion candidate
    • equivalent commits already landed: deletion candidate
    • no-PR branch whose fix may already be solved differently on the target: confirm supersession with a focused A/B or content check before deciding; superseded is a deletion candidate, otherwise keep or open a follow-up
    • small, current, useful diff: keep or rebase into PR
    • large or unclear diff: document follow-up before action
  8. Ask for explicit maintainer/user approval before pruning refs or deleting any local or remote branch, even when ownership, branch purpose, and remote impact look clear.

Output

  • Branch summary with ahead/behind count and last commit date
  • Useful commits or risks
  • Recommendation: delete, keep, rebase, or needs follow-up
  • Actions taken after explicit maintainer/user approval, if action mode was explicitly requested
辅助处理DART项目的构建系统,涵盖CMake配置、Pixi依赖管理及编译排错。提供常用命令参考,解决链接错误等常见问题,并包含CUDA架构检测与Filament GUI可视化检查指南。
DART项目构建失败 CMake配置问题 Pixi依赖安装 CUDA编译错误 Filament渲染验证
.codex/skills/dart-build/SKILL.md
npx skills add dartsim/dart --skill dart-build -g -y
SKILL.md
Frontmatter
{
    "name": "dart-build",
    "description": "DART Build: CMake, pixi, dependencies, and build troubleshooting"
}

DART Build System

Load this skill when working with DART's build system.

Quick Commands

pixi run configure    # Configure CMake
pixi run build        # Build
pixi run test         # Run tests
pixi run test-all     # Full validation (lint + build + tests)
pixi run -e cuda test-all # CUDA-enabled full validation on Linux CUDA hosts
pixi run lint         # Format code

Full Documentation

For complete build instructions, read: docs/onboarding/building.md

For build system internals (CMake, dependencies): docs/onboarding/build-system.md

Common Issues

Issue Solution
CMake not found pixi install
Missing dependency Check pixi.toml
Build failure pixi run configure then pixi run build
Linking error Check CMakeLists.txt in relevant module

CUDA Notes

  • On Linux hosts with visible NVIDIA GPUs, the CUDA Pixi config auto-detects compute capabilities for DART_CUDA_ARCHITECTURES; set DART_CUDA_ARCHITECTURES=<arch> only when overriding that detected list.
  • If CUDA runtime tests fail with unsupported PTX/toolchain errors, verify the generated CUDA flags include the local GPU architecture before assuming a kernel bug.

Pixi Lockfiles

  • Do not edit pixi.lock by hand. Change dependency constraints in pixi.toml, then run a Pixi command such as pixi install to let Pixi regenerate the lockfile.
  • If pixi.lock changes format or has broad solver churn, keep the generated output and call it out in the PR rather than attempting to splice lockfile entries manually.

Filament GUI Visual Checks

  • For Filament GUI rendering changes, run a bounded headless capture through pixi run ex dartsim --headless --frames ... --width ... --height ... --screenshot .... Prefer at least 1280px width when judging visual quality.
  • Inspect the rendered image yourself; do not rely only on command success. The headless smoke analyzer under the private Filament test helpers is useful for a smoke signal, but it is not a substitute for visual inspection.
  • If the user explicitly asks for pixi run ex dartsim, also run that exact entry point and terminate it after confirming the GUI binary launches.

Key Files

  • pixi.toml - Package management
  • CMakeLists.txt - Build configuration
  • cmake/ - CMake modules
DART项目变更日志管理技能,支持决定、起草、定稿及审计CHANGELOG.md条目。通过decide/draft/finalize/audit模式辅助工作流,确保发布说明规范与证据对齐。
需要判断变更是否需记录到变更日志时 起草或修订尚未关联PR号的变更日志条目时 为已发布的PR添加链接并定稿条目时 审查发布章节是否存在缺失、重复或冗余条目时
.codex/skills/dart-changelog/SKILL.md
npx skills add dartsim/dart --skill dart-changelog -g -y
SKILL.md
Frontmatter
{
    "name": "dart-changelog",
    "description": "DART Changelog: decide, draft, finalize, or audit DART changelog entries"
}

dart-changelog

Use this skill in Codex to run the DART dart-changelog workflow. The editable workflow source currently lives in .claude/commands/, and this generated Codex skill is a generated Codex adapter entrypoint.

Invocation

  • Claude Code/OpenCode: /dart-changelog <arguments>
  • Codex: $dart-changelog <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Maintain DART changelog entries: $ARGUMENTS

Purpose

dart-changelog is the reusable changelog decision and writing routine. It is usually invoked by other DART workflows when they reach a changelog decision, not directly by users.

Use it to decide whether CHANGELOG.md needs an entry, draft an entry at the right level of detail, add a PR link after publication, or audit a release section for missing or over-detailed entries. Keep style, placement, evidence, and release-note density aligned with docs/onboarding/changelog.md.

Required Reading

@AGENTS.md @docs/onboarding/changelog.md @docs/onboarding/release-roadmap.md @docs/onboarding/release-management.md

Modes

Interpret $ARGUMENTS as one of these modes when present:

  • decide: determine whether the current change needs a changelog entry and record the reason for the PR checklist/body when no entry is needed.
  • draft: write or revise the entry before a PR number exists.
  • finalize: add the PR link or adjust the entry after a PR exists, keeping the follow-up local until explicit maintainer/user approval permits a push.
  • audit: scan a release section or PR set for missing, duplicate, over-detailed, misplaced, or stale entries.
  • release-audit: alias for audit when the caller is finalizing a release section through dart-release-packaging.

If no mode is given, infer the smallest mode that satisfies the caller's need.

Output Contract

Every run must leave the caller with a concise, pasteable decision note. Use this shape in the response, PR body draft, or handoff text:

Changelog decision:

- Mode: decide | draft | finalize | audit | release-audit
- Base evidence: <base ref or PR/release inspected>
- Scope evidence: <diff, PR, issue, or release section inspected>
- Decision: entry required | no entry required | entry deferred | audit only
- Target section: <release/category, or N/A>
- Entry text: <final or draft bullet, or N/A>
- PR-body note: <exact no-entry reason or follow-up, or N/A>
- Follow-up: <PR link, maintainer approval, release audit, or none>

For no entry required, the PR-body note must name the evidence-backed reason rather than just saying "not needed." For entry deferred, say exactly what is missing, usually the PR number or release target. For finalize, confirm the entry still matches nearby CHANGELOG.md style after adding the PR link.

Workflow

  1. Inspect the change and target:
    git status --short --branch
    git diff --stat
    git diff --cached --stat
    BASE_REF="$(gh pr view --json baseRefName --jq .baseRefName 2>/dev/null || true)"
    # If the caller or arguments name a release branch before PR creation, set
    # BASE_REF to that branch before falling back to automatic inference.
    if [ -z "$BASE_REF" ]; then
      CURRENT_BRANCH="$(git branch --show-current)"
      UPSTREAM_REF="$(git rev-parse --abbrev-ref --symbolic-full-name @{upstream} 2>/dev/null || true)"
      for REF in "$CURRENT_BRANCH" "${UPSTREAM_REF#origin/}"; do
        case "$REF" in
          main|release-*) BASE_REF="$REF"; break ;;
        esac
      done
    fi
    BASE_REF="${BASE_REF:-main}"
    git fetch origin "$BASE_REF"
    git diff --stat "origin/$BASE_REF...HEAD"
    gh pr diff --name-only 2>/dev/null || true
    gh pr list --head "$(git branch --show-current)"
    
    Use the base comparison or PR diff even when the worktree is clean. If a PR, issue, release, or target branch is named, inspect that live object before writing and prefer its base over the main fallback.
  2. Read docs/onboarding/changelog.md and the relevant CHANGELOG.md release section. Compare nearby bullets before drafting so wording, section choice, and level of detail match the current file.
  3. Decide whether an entry is required using the guide:
    • user-visible API, behavior, packaging, CI, docs workflow, AI-infra, simulation correctness, release, or migration impact usually needs an entry;
    • typo-only, formatting-only, generated-only, and tiny internal refactors usually do not.
  4. Record the decision with the Output Contract before modifying CHANGELOG.md or telling a caller to skip it. The decision must cite the diff, PR, issue, release section, or target branch that was inspected.
  5. When writing, start with the reader-visible outcome, not the implementation chore. Use one concise bullet, combine closely related changes, avoid author credits, and avoid one-bullet-per-PR diary style.
  6. Place the entry under the target branch's release section and nearest existing category. Do not create a new category for one PR unless the release shape genuinely needs it.
  7. Add the best evidence link:
    • if a PR number exists, use ([#1234](https://github.com/dartsim/dart/pull/1234));
    • if no PR number exists yet, draft without the link and leave the follow-up local until explicit approval permits another push or PR update.
  8. For release audits, consolidate noisy implementation ledgers, confirm breaking/removal/deprecation bullets name a migration or support lane, and preserve human-readable release notes over exhaustive history.
  9. Validate with the gate appropriate to the caller. For changelog-only edits, run the docs-only checks from docs/ai/verification.md; before any commit, run pixi run lint.

Caller Contract

Other workflows should call this routine whenever they touch behavior or docs that may need release notes. The caller keeps ownership of the overall task, validation, PR body, and approval boundary; dart-changelog owns the changelog decision, wording, placement, evidence-link hygiene, and the pasteable decision note that lets Claude, Codex, OpenCode, and manual contributors record the same outcome.

Output

Report:

  • the changelog decision note in the Output Contract shape above;
  • the drafted or finalized entry text and its CHANGELOG.md placement;
  • gates run (pixi run lint, docs-only checks) and their results;
  • any follow-up left local pending explicit maintainer/user approval.
用于调试 DART 项目的 CI/CD 失败及 GitHub Actions。提供监控 PR 检查、查看运行日志、重试失败作业等 CLI 命令,列出格式化、Codecov、平台特定崩溃等常见故障的解决方案,并说明各工作流架构及 CUDA Runner 的安全策略。
CI 构建或测试失败 需要查看或监控 GitHub Actions 运行状态 遇到 FreeBSD RTTI、macOS SEGFAULT 等平台特定问题 涉及 CUDA 编译或 GPU 运行时验证
.codex/skills/dart-ci/SKILL.md
npx skills add dartsim/dart --skill dart-ci -g -y
SKILL.md
Frontmatter
{
    "name": "dart-ci",
    "description": "DART CI: GitHub Actions, cache debugging, and platform-specific failures"
}

DART CI/CD Troubleshooting

Load this skill when debugging CI failures or working with GitHub Actions.

Quick Commands

# Monitor PR checks
gh pr checks <PR_NUMBER>
gh pr checks <PR_NUMBER> --watch --interval 30 --fail-fast

# View run details
gh run list --branch <BRANCH> -e pull_request -L 20
gh run watch <RUN_ID> --interval 30
gh run view <RUN_ID> --json status,conclusion,url

# Debug failures
gh run view <RUN_ID> --job <JOB_ID> --log-failed
gh run view <RUN_ID> --json jobs --jq '.jobs[] | {name, databaseId}'

# Rerun failed jobs only after explicit maintainer/user approval
gh run rerun <RUN_ID> --failed
gh run rerun <RUN_ID> --job <DATABASE_ID>

Full Documentation

For complete CI/CD guide: docs/onboarding/ci-cd.md

Common Failure Modes

Failure Type Solution
Formatting fails pixi run lint; push only after approval
Codecov patch fails Add tests for uncovered lines
FreeBSD RTTI fails Use type enums + static_cast instead of dynamic_cast
macOS ARM64 SEGFAULT Replace alloca()/VLAs with std::vector<T>
RTD build fails Use defensive .get(key, default) patterns
gz-physics fails Reproduce with pixi run -e gazebo test-gz

Workflow Architecture

Workflow Purpose Platforms
ci_lint.yml Formatting Ubuntu
ci_ubuntu.yml Build + test + coverage Ubuntu
ci_macos.yml Build + test macOS
ci_windows.yml Build + test Windows
ci_freebsd.yml Build + test (VM) FreeBSD
ci_gz_physics.yml Gazebo integration Ubuntu
ci_cuda.yml CUDA compile + smoke Ubuntu/GPU

CUDA Runner Policy

The project has a trusted ubuntu-latest-gpu runner for same-repository CUDA runtime validation, but it must never run untrusted fork-PR code. Consequences:

  • Same-repository PRs, protected branch pushes, and manual dispatches use the GPU runner and run pixi run --locked -e cuda test-cuda.
  • Fork PRs use a GitHub-hosted fallback and compile CUDA targets without running GPU-only steps.
  • Local CUDA validation is pixi run -e cuda test-all on Linux hosts with a visible NVIDIA CUDA runtime; local Pixi config auto-detects visible GPU compute capabilities for DART_CUDA_ARCHITECTURES.
  • pixi run check-phase5-cuda-workflow enforces the trusted-event GPU guard and fork-PR hosted fallback in ci_cuda.yml.

Fast Iteration Loop

  1. Identify failing step from job logs
  2. Reproduce locally with same build toggles
  3. Fix the smallest failing test
  4. Push only after explicit maintainer/user approval, then monitor: gh run watch <RUN_ID>

Caching

  • sccache/ccache reduces build time 50-70%
  • Check cache hit rates in workflow logs
  • Force cache bust by changing cache key if needed

Expected CI Times

Platform Cached Uncached
Ubuntu 20-30 min 45-60 min
macOS 15-25 min 30-45 min
Windows 15-20 min 25-35 min
用于在DART项目中处理GitHub Issue的关闭工作流。它检查Issue状态,验证修复情况,起草包含致谢和解决方案的关闭消息,并在获得明确批准后执行评论和关闭操作。
用户请求关闭特定的GitHub Issue 需要为已解决的Issue生成关闭说明
.codex/skills/dart-close-issue/SKILL.md
npx skills add dartsim/dart --skill dart-close-issue -g -y
SKILL.md
Frontmatter
{
    "name": "dart-close-issue",
    "description": "DART Close Issue: draft and optionally post a GitHub issue closing message"
}

dart-close-issue

Use this skill in Codex to run the DART dart-close-issue workflow. The editable workflow source currently lives in .claude/commands/, and this generated Codex skill is a generated Codex adapter entrypoint.

Invocation

  • Claude Code/OpenCode: /dart-close-issue <arguments>
  • Codex: $dart-close-issue <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Close or prepare closing message for issue: $ARGUMENTS

Required Reading

@AGENTS.md @docs/onboarding/contributing.md

Workflow

  1. Inspect the issue: gh issue view <ISSUE_NUMBER> --comments.
  2. Verify the stated resolution:
    • fixed by merged PR
    • already fixed on main
    • no longer reproducible
    • out of scope or needs a different tracker
  3. Draft a concise closing message:
    • thank the reporter
    • state the concrete resolution
    • link the fixing PR or relevant docs when available
  4. Only post and close if the user explicitly requested action and explicit maintainer/user approval has been given:
    gh issue comment <ISSUE_NUMBER> --body "<message>"
    gh issue close <ISSUE_NUMBER>
    

Output

  • Closing message
  • Whether it was posted
  • Whether the issue was closed
指导向DART项目贡献代码的工作流,涵盖分支命名规范、PR创建流程、测试与Lint检查,以及PR描述撰写和双PR修复策略。
需要为DART项目提交新功能或Bug修复 需要了解DART项目的Git分支管理和PR审查流程
.codex/skills/dart-contribute/SKILL.md
npx skills add dartsim/dart --skill dart-contribute -g -y
SKILL.md
Frontmatter
{
    "name": "dart-contribute",
    "description": "DART Contribute: branching, PRs, review workflow, and dual-PR bugfixes"
}

DART Contribution Workflow

Load this skill when contributing code to DART.

Full Documentation

For complete guide: docs/onboarding/contributing.md

For code style: docs/onboarding/code-style.md

Branch Naming

  • feature/<topic> - New features
  • fix/<topic> - Bug fixes
  • refactor/<topic> - Refactoring
  • docs/<topic> - Documentation

PR Workflow

# Features, docs, and non-bugfix refactors start from main
git checkout -b <type>/<topic> origin/main

# Bug fixes that apply to the current release line start from the active DART 6 LTS branch
DART6_LTS_BRANCH=$(git branch -r --list 'origin/release-6.*' | sed 's|.*/||' | sort -V | tail -1)
git checkout -b "fix/<topic>-${DART6_LTS_BRANCH#release-}" "origin/$DART6_LTS_BRANCH"

# Make changes, then
pixi run lint
pixi run test-all
# On Linux hosts with a visible NVIDIA CUDA runtime
pixi run -e cuda test-all

# After explicit maintainer/user approval, push and create PR
git push -u origin HEAD
gh pr create --draft --base <target-branch> --milestone "<milestone>"

Use --base main --milestone "DART 7.0" for main PRs and the branch-matching DART 6.x patch milestone for active DART 6 LTS PRs.

Rule of thumb: run pixi run lint before committing so auto-fixes are included.

Use .github/PULL_REQUEST_TEMPLATE.md and keep DART's default order: Summary, Motivation / Problem, Changes / Key Changes, optional Before / After, Testing, Breaking Changes, and Related Issues / PRs. Keep Summary first as the reviewer skim target. If the motivation is necessary to understand the outcome, make the first Summary sentence problem-oriented, then put the fuller why in Motivation / Problem rather than moving Motivation above Summary.

Write PR descriptions for a user or downstream maintainer who is not already familiar with the implementation. Lead Summary and Motivation with what changes for them, what stays compatible, how they opt in or migrate, and why the evidence matters; keep implementation mechanics in Changes unless they explain user-visible risk.

When a PR has meaningful user-facing API, workflow, behavior, or performance impact, add a concise Before / After section. Cover only relevant dimensions, phrase rows as user-visible before/after outcomes, and for performance claims name the baseline explicitly: CPU path, parent commit, main, or prior implementation, plus workload, metric, and important limitations.

Use plain descriptive commit messages and PR titles. Do not prefix them with agent tags such as [codex], [claude], or [opencode].

For already-published PRs, keep history inspectable with additive commits. If the PR branch needs the latest target branch, use explicit maintainer/user approval to update that published branch by merging the target branch and pushing normally. Do not rebase published PR branches by default because that invalidates existing CI runs and makes PR review/comment history harder to follow. Rebase or force-push only when the maintainer explicitly requests it.

Milestones (Required)

Always set a milestone when creating PRs after explicit maintainer/user approval:

Target Branch Milestone
main DART 7.0 (or next major)
Active DART 6 LTS release-6.* branch Branch-matching DART 6.x patch
# After explicit maintainer/user approval, set milestone on existing PR
gh pr edit <PR#> --milestone "DART 7.0"

# List available milestones
gh api repos/dartsim/dart/milestones --jq '.[] | .title'

CRITICAL: Bug Fix Dual-PR

Bug fixes require PRs to BOTH release lines:

  1. Active DART 6 LTS release-6.* branch - Current DART 6 maintenance line
  2. main - Next release

Steps:

  1. Fix on the active DART 6 LTS branch first
  2. Cherry-pick to main
  3. After explicit maintainer/user approval, create separate PRs for each

CHANGELOG (After Approved PR Exists)

Use the dart-changelog routine with docs/onboarding/changelog.md as the source of truth. After the approved PR exists, check if CHANGELOG.md needs updating:

Change Type Update CHANGELOG?
Bug fixes ✅ Yes
New features ✅ Yes
Breaking changes ✅ Yes (in Breaking Changes section)
Documentation improvements ✅ Yes (in Tooling and Docs)
CI/tooling changes ✅ Yes (in Tooling and Docs)
Refactoring (no behavior change) ⚠️ Maybe (if significant)
Dependency bumps ⚠️ Maybe (if user-facing)
Typo fixes ❌ No

Format: - Reader-visible outcome. ([#PR](https://github.com/dartsim/dart/pull/PR))

Keep entries concise. If details need more than a few wrapped lines, move the details to the owner doc, plan, or migration note and link that document. Do not add one bullet per PR when several PRs ship one reader-visible outcome; merge them into one human-readable release-note entry.

# Example entry in CHANGELOG.md under appropriate section:
- Added AI-native documentation with AGENTS.md and module-specific guides. ([#2446](https://github.com/dartsim/dart/pull/2446))

Code Review

  • Address all feedback
  • Keep changes minimal
  • Update tests if behavior changed
  • Run full validation, then ask for explicit maintainer/user approval before pushing fixes

CI Loop

gh run watch <RUN_ID> --interval 30

Fix failures until green.

用于DART项目的依赖和机器人PR审查工作流。自动列出Dependabot及GitHub Actions的PR,检查CI状态与变更合理性,仅在明确批准后合并,并输出审查报告与建议。
需要审查DART仓库的自动化依赖更新PR 需要处理GitHub Actions版本升级或锁文件更新的拉取请求
.codex/skills/dart-deps/SKILL.md
npx skills add dartsim/dart --skill dart-deps -g -y
SKILL.md
Frontmatter
{
    "name": "dart-deps",
    "description": "DART Deps: triage and shepherd dependency and bot pull requests"
}

dart-deps

Use this skill in Codex to run the DART dart-deps workflow. The editable workflow source currently lives in .claude/commands/, and this generated Codex skill is a generated Codex adapter entrypoint.

Invocation

  • Claude Code/OpenCode: /dart-deps <arguments>
  • Codex: $dart-deps <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Triage and shepherd dependency and bot PRs: $ARGUMENTS

Required Reading

@AGENTS.md @docs/onboarding/ci-cd.md @docs/onboarding/contributing.md

Scope

Handle automated dependency and maintenance PRs: Dependabot GitHub Action version bumps and the scheduled lockfile PRs opened by update_lockfiles.yml. Default to read-only triage; merging any bot PR is an explicit approval gate.

Workflow

  1. List open bot PRs:
    gh pr list --repo dartsim/dart --state open \
      --search "author:app/dependabot OR author:app/github-actions" \
      --json number,title,headRefName,author
    
  2. For each PR, review the diff (gh pr diff <PR_NUMBER>):
    • Action bumps: confirm the new ref is a pinned commit SHA and sanity-check the upstream changelog for the bumped version.
    • Lockfile PRs: confirm the regenerated lockfile provenance matches the workflow that produced it and that no unrelated content changed.
  3. Confirm CI is green for the PR head: gh pr checks <PR_NUMBER>.
  4. Merge a reviewed, CI-green bot PR only after explicit maintainer/user approval, using the current head SHA and the repository merge method.
  5. Batch-report every triaged PR with its recommendation and status.

Output

  • Table of open bot PRs with kind (action bump or lockfile), CI state, and recommendation
  • Diff-review notes per PR
  • Which PRs were merged after explicit approval and which remain pending
用于更新DART项目文档及AI指令可见性,无需修改代码。涵盖常规文档与AI工作流源文件的编辑、同步、验证及PR准备流程。
需要更新项目文档时 调整AI指令或工作流可见性时
.codex/skills/dart-docs-update/SKILL.md
npx skills add dartsim/dart --skill dart-docs-update -g -y
SKILL.md
Frontmatter
{
    "name": "dart-docs-update",
    "description": "DART Docs Update: update docs or AI instruction visibility without code changes"
}

dart-docs-update

Use this skill in Codex to run the DART dart-docs-update workflow. The editable workflow source currently lives in .claude/commands/, and this generated Codex skill is a generated Codex adapter entrypoint.

Invocation

  • Claude Code/OpenCode: /dart-docs-update <arguments>
  • Codex: $dart-docs-update <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Update documentation: $ARGUMENTS

Required Reading

@AGENTS.md @docs/README.md @docs/AGENTS.md @docs/information-architecture.md @docs/ai/principles.md @docs/ai/verification.md @docs/onboarding/ai-tools.md @docs/onboarding/changelog.md

Workflow

  1. Create a branch from the target branch: git checkout -b docs/<topic> origin/main
  2. Edit docs and AI workflow sources only:
    • Regular docs: docs/**, README.md, AGENTS.md, CONTRIBUTING.md, and CHANGELOG.md when dart-changelog requires a release-note entry
    • AI source files: .claude/commands/**, .claude/skills/**
  3. For AI workflow changes, run pixi run sync-ai-commands; do not hand-edit generated .opencode/ or .codex/ files
  4. Classify new or moved docs by lifecycle first, then audience, then topic, using docs/information-architecture.md. For AI docs, keep always-loaded entrypoints compact: improve owner placement or pointers instead of duplicating procedures.
  5. Update indexes and cross-references that point to changed docs
  6. Use docs/ai/verification.md to select the docs-only or AI docs/adapters gate set, then run pixi run lint before committing
  7. Invoke the dart-changelog routine for the CHANGELOG.md decision and any required entry.
  8. Ask for explicit maintainer/user approval before pushing or opening the PR. After approval, use .github/PULL_REQUEST_TEMPLATE.md and the proper milestone.

Output

  • Docs and AI workflow sources changed
  • Sync and verification commands run
  • Changelog decision
  • PR readiness, noting any external mutation that was explicitly approved
修复通过 gz-physics、Gazebo 或 gz-sim 报告的 DART 下游问题(如崩溃、NaN/Inf)。流程包括分析根因、在 DART 6 LTS 及 main 分支实施最小化修复与回归测试,并运行 CI 验证。
用户报告 gz-physics、Gazebo 或 gz-sim 中的崩溃、断言失败、NaN/Inf 传播或缺少验证等由 DART 引起的问题 需要追溯并修复影响下游项目的 DART 行为缺陷
.codex/skills/dart-downstream-fix/SKILL.md
npx skills add dartsim/dart --skill dart-downstream-fix -g -y
SKILL.md
Frontmatter
{
    "name": "dart-downstream-fix",
    "description": "DART Downstream Fix: fix a DART bug reported through gz-physics or Gazebo"
}

dart-downstream-fix

Use this skill in Codex to run the DART dart-downstream-fix workflow. The editable workflow source currently lives in .claude/commands/, and this generated Codex skill is a generated Codex adapter entrypoint.

Invocation

  • Claude Code/OpenCode: /dart-downstream-fix <arguments>
  • Codex: $dart-downstream-fix <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Fix downstream-reported DART issue: $ARGUMENTS

Required Reading

@AGENTS.md @docs/onboarding/contributing.md @docs/onboarding/ci-cd.md

When To Use

Use for downstream issues in gz-physics, Gazebo, or gz-sim that trace back to DART behavior: crashes, assertions, NaN/Inf propagation, missing validation, or DART performance regressions.

Workflow

  1. Read the downstream issue, logs, stack traces, and reproduction steps.
  2. Identify the DART API, component, and invalid usage pattern involved.
  3. Search for related validation and recovery patterns in DART.
  4. Plan the smallest fix and the regression test location.
  5. Decide whether the bug applies to the active release line. For applicable bug fixes, implement on the active DART 6 LTS branch first, then cherry-pick or reapply to main for DART 7:
    • branch: fix/<downstream-project>-<issue-number>-<brief-description>-6-lts
    • add a regression test that reproduces the downstream symptom
    • keep the fix minimal; no unrelated refactors
  6. Run pixi run lint and relevant tests; use pixi run test-all when feasible, and also pixi run -e cuda test-all on Linux hosts with a visible NVIDIA CUDA runtime.
  7. Ask for explicit maintainer/user approval before pushing or creating PRs. After approval, create the release-branch PR with the branch-matching DART 6.x patch milestone and reference the downstream issue.
  8. Create the matching main PR with milestone DART 7.0; adapt API differences if needed.

Release-Line Differences

  • DART 7 commonly uses DART_WARN() and <dart/All.hpp>.
  • DART 6 LTS may use dtwarn << ..., <dart/dart.hpp>, and older test CMake patterns.

Output

  • Root cause and fix summary
  • Main PR URL and release PR URL, if applicable
  • Tests run and CI status
  • Link back to the downstream issue
用于在DART工作流中选择并执行指定的编排工作包。支持通过ID精确执行、指定计划自动选择首个可用包,或完全自动扫描仪表盘选择。执行前需严格校验依赖、本地/远程标记及分支冲突,确保任务可用性。
用户希望执行特定的DART工作包 需要自动发现和运行下一个可用的编排任务
.codex/skills/dart-execute-packet/SKILL.md
npx skills add dartsim/dart --skill dart-execute-packet -g -y
SKILL.md
Frontmatter
{
    "name": "dart-execute-packet",
    "description": "DART Execute Packet: select and execute one orchestrator-authored work packet from a numbered plan"
}

dart-execute-packet

Use this skill in Codex to run the DART dart-execute-packet workflow. The editable workflow source currently lives in .claude/commands/, and this generated Codex skill is a generated Codex adapter entrypoint.

Invocation

  • Claude Code/OpenCode: /dart-execute-packet <arguments>
  • Codex: $dart-execute-packet <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Execute a work packet in DART: $ARGUMENTS

Required Reading

Read these files first: @AGENTS.md @docs/ai/orchestration.md @docs/ai/principles.md @docs/ai/verification.md @docs/plans/dashboard.md

Inputs

$ARGUMENTS is optional and takes one of three forms:

  • WP-<plan>.<n> (for example WP-091.13) — execute exactly that packet.
  • PLAN-NNN (for example PLAN-091) — select the first available packet in that plan.
  • empty — auto-select: walk docs/plans/dashboard.md top to bottom (document order is priority); for each Active entry whose owner doc is a numbered plan file containing #### WP- packet headings, take the first available packet by the availability rules below. State which packet was selected and why before starting.

If nothing resolves to an available packet, report what was checked (plans walked, packets skipped and the blocking signal for each) and stop; do not invent work.

Availability and conflict check

Run the full check from docs/ai/orchestration.md before claiming. A packet is available only when ALL of these hold:

  1. Dependencies — its Dependencies line is satisfied in full: every named packet is marked [done — ...], and every non-packet precondition (for example "maintainer direction on ..." or an accepted design note) has recorded evidence in the plan or the named owner doc. Treat any precondition you cannot verify as unmet and skip the packet.
  2. Local markers — its heading carries neither [done — ...] nor [claimed] in the local plan file.
  3. Remote markersgit fetch origin (a read-only sync), then check the plan file as it exists on the default branch (git show origin/main:docs/plans/<plan-file>.md) for a marker the local checkout does not have yet.
  4. Branch/PR signals — no one else is already working it: git ls-remote --heads origin shows no branch embedding the packet ID in the documented form (wp-<plan>-<n>-<slug>, for example wp-091-13-contact-assembly), and gh pr list --state open --search "WP-<plan>.<n>" returns no open PR carrying the ID in its title. These are read-only queries that mutate nothing; any push, PR creation, or other GitHub mutation still requires explicit maintainer/user approval.

If any signal says the packet is taken: in auto/plan mode skip to the next available packet; for an explicit packet ID, report the conflicting signal and stop.

Readiness check

Before claiming, inspect the packet text and named owner docs for the specification intake required by docs/ai/orchestration.md:

  • objective;
  • value or rationale;
  • scope;
  • non-goals;
  • assumptions and open decisions;
  • acceptance evidence;
  • gates; and
  • dependencies.

If objective, scope, non-goals, acceptance evidence, gates, or dependencies are missing or too vague to verify, report that the packet is not executable and stop. For older packets that lack an explicit value or assumptions field, proceed only when the owner docs make the value and assumptions unambiguous, and state those inferred fields before editing. If an unresolved decision would materially change public API, release compatibility, numerical correctness, benchmark claims, or roadmap scope, stop and ask the orchestrator to record an owner-local Decision needed block.

Workflow

  1. Locate the packet — open the owning numbered plan file linked from docs/plans/dashboard.md and read the packet's objective, scope, value/rationale, assumptions/open decisions, non-goals, acceptance evidence, gates, and dependencies.
  2. Claim — append [claimed] to the packet heading in the plan file and create the topic branch named wp-<plan>-<n>-<slug>. The branch name is the cross-machine claim signal once pushed; pushing it (like any GitHub mutation) requires explicit maintainer/user approval, so until then the marker and branch are local and the strongest remote signal stays the merged plan file.
  3. Load packet context — read the owner docs the plan names for that workstream plus the files in the packet's scope. Do not load the whole plan corpus; the packet defines the working set.
  4. Implement exactly the packet — stay inside scope and non-goals. If the real scope differs materially from the packet's stated scope, stop and report back with what was found; do not widen the packet. One packet, one branch, one verification story.
  5. Verify — run the packet's gates plus pixi run lint before any commit. Record each piece of acceptance evidence named by the packet (test names, command output, doc updates). Missing evidence means the packet is not complete — say so explicitly.
  6. Hand back — append an Evidence: bullet to the packet in the plan file listing the recorded evidence (or update the dev-task RESUME.md for multi-session packets), leave the [claimed] marker for the orchestrator to replace with [done — ...] on acceptance, then report completion with the evidence list for orchestrator review. Local commits are part of execution; pushes and PR creation require explicit maintainer/user approval first, and the PR title starts with the packet ID (WP-<plan>.<n>: ...) so the claim is searchable.

Rules

  • The packet's owner docs win over the packet text on any conflict; report the conflict rather than improvising.
  • Do not chain into adjacent packets, refactor outside scope, or "fix while here" — file findings back to the orchestrator instead.
  • Never remove another session's [claimed] marker or reuse its branch; stale-claim release is the orchestrator's call (see docs/ai/orchestration.md).
  • Behavior-preserving packets must prove preservation (golden trajectories or the tests the packet names), not assert it.
  • Solver-family work additionally honors the intake checklist in docs/plans/solver-family-intake.md.
  • The author of a packet's implementation does not approve it; acceptance is the orchestrator's or an independent reviewer's call.

Output

  • Selected packet ID and owning plan
  • Scope implemented and acceptance evidence recorded
  • Gates run and their results
  • Hand-back state (the [claimed] marker left for the orchestrator) and any blocker
  • Any external mutation that was explicitly approved
用于调试和修复DART项目在任何基础分支上失败的CI检查。支持自动识别失败原因、本地复现、最小化修复及发布分支的cherry-pick策略,确保CI恢复绿色并预防复发。
CI构建或测试失败需要人工介入修复 需要针对特定PR或分支排查持续集成错误
.codex/skills/dart-fix-ci/SKILL.md
npx skills add dartsim/dart --skill dart-fix-ci -g -y
SKILL.md
Frontmatter
{
    "name": "dart-fix-ci",
    "description": "DART Fix CI: debug and fix failing CI checks on any base branch"
}

dart-fix-ci

Use this skill in Codex to run the DART dart-fix-ci workflow. The editable workflow source currently lives in .claude/commands/, and this generated Codex skill is a generated Codex adapter entrypoint.

Invocation

  • Claude Code/OpenCode: /dart-fix-ci <arguments>
  • Codex: $dart-fix-ci <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Fix CI failure: $ARGUMENTS

Required Reading

@AGENTS.md @docs/onboarding/ci-cd.md @docs/onboarding/release-management.md

Workflow

  1. Identify the base branch. Default to main; use base=<branch> from $ARGUMENTS or the PR's own base when it is a release-* branch. For a release-* base, also read docs/onboarding/release-management.md and apply the release caveats called out below.
  2. Identify failing checks: gh pr checks <PR_NUMBER> or gh run view <RUN_ID>.
  3. Inspect the first real failure:
    gh run view <RUN_ID> --log-failed
    gh run view <RUN_ID> --job <JOB_ID> --log
    
  4. If a job is still in progress, wait for logs instead of guessing.
  5. Choose where to fix. Check whether an equivalent fix already exists on main. If continuing an existing PR, fetch and check out that PR branch instead of creating a new one. For a release-* base, branch from the release branch and prefer cherry-picking the proven main fix; keep any new fix release-scoped and minimal:
    git fetch origin <RELEASE_BRANCH>
    git checkout -B fix/<issue>-<release-branch> origin/<RELEASE_BRANCH>
    
  6. Reproduce locally with the smallest relevant command:
    • formatting: pixi run lint
    • tests: pixi run test, pixi run test-unit, or another existing focused pixi run ... test task
    • coverage: add targeted tests for uncovered changed lines
  7. Fix the root cause with minimal scope. Explain why the failure was not caught earlier and whether workflow coverage should change.
  8. If the failure is infrastructure-only, ask for explicit maintainer/user approval before rerunning the failed job or running:
    gh run rerun <RUN_ID> --failed
    
  9. Ask for explicit maintainer/user approval before pushing, CI re-triggers, or other GitHub mutations; after approval, push and watch CI until green. For a release-* base, use the current release milestone and the PR template when creating or updating the release-branch PR.

Output

  • Root cause
  • Fix or rerun action
  • Commands run
  • PR URL, when a PR was created or updated
  • Current CI status
  • Prevention recommendation, if any
用于在Codex中执行DART项目的GitHub Issue修复工作流。验证Issue分类,定位分支,编写最小化修复代码及回归测试,运行Lint和测试套件,生成Changelog并创建双PR(LTS与main分支)。
用户请求修复特定的GitHub Issue 需要为DART项目提交包含回归测试的Bug修复
.codex/skills/dart-fix-issue/SKILL.md
npx skills add dartsim/dart --skill dart-fix-issue -g -y
SKILL.md
Frontmatter
{
    "name": "dart-fix-issue",
    "description": "DART Fix Issue: resolve a GitHub issue with a fix and regression test"
}

dart-fix-issue

Use this skill in Codex to run the DART dart-fix-issue workflow. The editable workflow source currently lives in .claude/commands/, and this generated Codex skill is a generated Codex adapter entrypoint.

Invocation

  • Claude Code/OpenCode: /dart-fix-issue <arguments>
  • Codex: $dart-fix-issue <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Fix GitHub issue: $ARGUMENTS

Required Reading

@AGENTS.md @docs/onboarding/contributing.md @docs/onboarding/changelog.md

Workflow

  1. gh issue view $1 - Validate issue
  2. Classify whether the issue is a bug fix that applies to the active DART 6 LTS branch. For applicable bug fixes, start from the highest maintained origin/release-6.* branch; otherwise start from origin/main.
  3. Fix with minimal changes + add regression test. For dual-PR bug fixes, fix the active DART 6 LTS branch first, then cherry-pick or reapply to main.
  4. pixi run lint, then run the smallest relevant tests; use pixi run test-all before finalizing when feasible, and also pixi run -e cuda test-all on Linux hosts with a visible NVIDIA CUDA runtime
  5. Before PR creation, invoke the dart-changelog routine to decide whether CHANGELOG.md needs an entry, then fill .github/PULL_REQUEST_TEMPLATE.md.
  6. After explicit maintainer/user approval, git push -u origin HEAD && gh pr create --base <target-branch> --milestone "<milestone>"
  7. Before PR: If task used docs/dev_tasks/<task>/, remove the folder (include in this PR, not after merge)

CRITICAL: Dual-PR for Bug Fixes

PRs to BOTH the active DART 6 LTS branch AND main. See docs/onboarding/contributing.md.

Output

  • Issue number and classification (bug fix, dual-PR, or main-only)
  • Fix summary and regression test added
  • Gates run (lint, focused tests, pixi run test-all)
  • PR readiness for each target branch, noting any explicitly approved mutation
用于加载机器人模型文件(URDF、SDF、MJCF),支持格式自动检测与包路径解析。
需要解析 URDF、SDF 或 MJCF 格式的机器人模型文件 使用 dart::io 进行 DART 机器人模型的加载
.codex/skills/dart-io/SKILL.md
npx skills add dartsim/dart --skill dart-io -g -y
SKILL.md
Frontmatter
{
    "name": "dart-io",
    "description": "DART IO: URDF, SDF, MJCF parsers, and dart::io loading"
}

DART Model Loading (dart::io)

Load this skill when working with robot model files or parsers.

Quick Start

#include <dart/io/Read.hpp>

// Format auto-detection
auto skel = dart::io::readSkeleton("dart://sample/urdf/KR5/KR5 sixx R650.urdf");

Full Documentation

For complete I/O guide: docs/onboarding/io-parsing.md

For module-specific details: dart/io/AGENTS.md

Supported Formats

Format Extension Use Case
URDF .urdf ROS robots
SDF .sdf, .world Gazebo models
MJCF .xml MuJoCo models

Common Patterns

// URDF with package resolution
dart::io::ReadOptions options;
options.addPackageDirectory("my_robot", "/path/to/my_robot");
auto skel = dart::io::readSkeleton("package://my_robot/urdf/robot.urdf", options);

// Force specific format
options.format = dart::io::ModelFormat::Sdf;

Key Files

  • API: dart/io/Read.hpp
  • Tests: tests/unit/io/test_Read.cpp
管理DART拉取请求,自动执行CI监控、冲突解决、评论处理及元数据修正。支持管理与合并模式,需用户显式授权以推进PR至可合并状态或完成合并操作。
用户指令包含 manage <PR> 或 continue managing <PR> 需要自动化处理DART PR的CI、代码审查和合并流程
.codex/skills/dart-manage-pr/SKILL.md
npx skills add dartsim/dart --skill dart-manage-pr -g -y
SKILL.md
Frontmatter
{
    "name": "dart-manage-pr",
    "description": "DART Manage PR: manage an open DART pull request through CI, review, merge, and cleanup"
}

dart-manage-pr

Use this skill in Codex to run the DART dart-manage-pr workflow. The editable workflow source currently lives in .claude/commands/, and this generated Codex skill is a generated Codex adapter entrypoint.

Invocation

  • Claude Code/OpenCode: /dart-manage-pr <arguments>
  • Codex: $dart-manage-pr <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Manage an open DART pull request after explicit maintainer/user approval for mutations: $ARGUMENTS

Required Reading

@AGENTS.md @docs/onboarding/contributing.md @docs/onboarding/ci-cd.md @docs/onboarding/testing.md @docs/onboarding/ai-tools.md

Modes

  • mode=manage (default): run the full PR-management loop below to the next terminal state.
  • mode=merge: maintainer-only. Complete the local pre-merge validation in step 6 and merge a ready PR only after explicit maintainer/user approval for the merge.

Invocation Contract

When the user says manage <PR> or continue managing <PR> without limiting the request to status-only, treat that as approval to run the full PR-management loop to the next terminal state:

  • required policy metadata checked and corrected when stale;
  • CI monitored until green, failed, or blocked;
  • merge conflicts reproduced and resolved locally;
  • review comments addressed, pushed, resolved, and re-reviewed when appropriate;
  • PR body/testing evidence refreshed when it no longer matches the branch.

This explicit approval covers routine PR-maintenance mutations for that loop: additive fix commits and pushes, PR description/metadata corrections, resolving already-addressed review threads, rerunning failed CI jobs, and requesting a fresh AI review after follow-up fixes. It does not cover merging the PR into the target branch, force-pushes, branch deletion, PR closure, base-branch changes, or human reviewer requests; ask separately for those.

Do not call the PR managed just because checks are green. Continue until the PR is mergeable with required checks complete and addressed review threads resolved, or until a concrete blocker remains.

Identify the PR

Use the PR number or URL from $ARGUMENTS. If none is provided, infer the PR from the current branch:

gh pr view --json number,url,headRefName,baseRefName

Then inspect the full state:

gh pr view <PR_NUMBER> --json number,title,state,isDraft,baseRefName,headRefName,mergeStateStatus,milestone,url,reviewDecision,statusCheckRollup
gh pr checks <PR_NUMBER>

Workflow

  1. Confirm scope and policy:
    • Check that the base branch, title, and PR template are correct.
    • Verify the milestone is set before merge: DART 7.0 for a main base, the branch-matching DART 6.x patch milestone for a release-* base. If it is missing, set it only after explicit maintainer/user approval.
    • For bug fixes, verify the required DART 6 LTS + main dual-PR flow.
    • Confirm the PR body's testing/status section matches the current head and does not point reviewers to deleted dev-task evidence as still pending.
    • Confirm the PR body follows template order: Summary, Motivation / Problem, Changes / Key Changes, optional Before / After, Testing, Breaking Changes, and Related Issues / PRs. Keep Summary first as the skimmable outcome; fold leading problem context into Summary and keep the fuller why in Motivation.
    • When the PR has user-facing API, workflow, behavior, or performance impact, confirm a concise Before / After section compares old and new surfaces; for performance claims make the baseline explicit (CPU path, parent commit, main, or prior implementation) plus workload, metric, and limitations.
    • Ensure transient visual evidence (screenshots, headless renders, GIFs, videos) is hosted as GitHub PR/issue attachments rather than committed to the branch; if committed only for the PR body, replace it with an attachment URL or ask a maintainer to upload.
    • Inspect local state before editing:
      git status --short --branch
      git diff --stat
      git diff --check
      
  2. Monitor CI:
    gh pr checks <PR_NUMBER> --watch --interval 30 --fail-fast
    
    If checks are still queued or running, report the current jobs and keep watching unless the user asked only for status. Also poll mergeability:
    gh pr view <PR_NUMBER> --json mergeStateStatus,headRefOid,isDraft,reviewDecision
    
    If GitHub reports conflicts, fetch the target branch and resolve them before treating green checks as sufficient.
  3. Fix failures:
    • Inspect the newest failed run or job, not an older cancelled run. Use the dart-fix-ci workflow for non-trivial CI debugging.
    • Reproduce locally with the relevant pixi run ... task or focused test.
    • Before committing fixes, run pixi run lint; also build or test when code or behavior changed. Commit only intended files.
    • Prefer additive follow-up commits for published PRs. Amend or force-push only after explicit maintainer/user approval and only when the user requests it or a clear reason exists (removing sensitive content, repairing branch history).
    • Merge the latest base branch into the PR branch before any push, and follow the base-merge, automated-review, and bot no-reply rules in docs/onboarding/ai-tools.md; each push, PR comment, review re-trigger, or thread resolution needs explicit maintainer/user approval.
  4. Address reviews:
    • Use the dart-review-pr workflow for substantive review feedback and the automated-review handling in docs/onboarding/ai-tools.md (no inline bot replies; verify claims locally; apply AI-review fixes silently).
    • For human reviewers, reply only when a response is useful after a fix or when a question needs clarification.
    • After an approved push that addressed Codex comments on a PR that already had a Codex review, post a fresh top-level @codex review; that PR comment needs explicit maintainer/user approval and must not duplicate an active trigger.
    • For substantive code PRs, an independent review session (a human, or a separate agent session running /dart-review-pr) must record findings before merge approval; docs-only and mechanical changes are exempt.
  5. Mark ready or merge only when appropriate:
    • Confirm review requirements are satisfied and local validation matches the intended transition.
    • If the PR is draft, mark it ready after explicit approval once Codex is clean and local validation passed on the current head: default pixi run test-all, plus pixi run -e cuda test-all on Linux hosts with a visible NVIDIA CUDA runtime. Hosted CI may still be pending.
    • Use the current head SHA when merging so a moved branch cannot be merged accidentally. Prefer squash/rebase over merge commits per repository settings; recent DART main PRs use single-parent PR-title commits.
  6. mode=merge gate (maintainer-only): before any merge, run local pre-merge validation on the current head after the latest pushed change: pixi run test-all and, on Linux hosts with a visible NVIDIA CUDA runtime, pixi run -e cuda test-all; do not substitute the default run for the CUDA run, and record a skip or blocker explicitly. Merge only after CI and review are green, the milestone is set, an independent review recorded findings, the PR is not draft, GitHub reports it mergeable, and explicit merge approval is given. PR comments, review re-triggers, thread resolution, reviewer requests, ready-for-review transitions, merges, and branch deletion are external mutations that require explicit maintainer/user approval.
  7. Clean up after merge:
    • Confirm the PR merged and identify the head branch before deleting.
    • After explicit maintainer/user approval, prefer merge-time deletion with the approved merge method and head SHA:
      gh pr merge <PR_NUMBER> --squash --match-head-commit <HEAD_SHA> --delete-branch
      
      Use --rebase or --merge instead of --squash when requested.
    • After explicit maintainer/user approval, otherwise delete only the PR branch after confirming it has landed:
      git push origin --delete <HEAD_BRANCH>
      git switch main
      git pull --ff-only
      git branch -D <HEAD_BRANCH>
      
      Squash and rebase merges do not preserve the branch tip in main ancestry, so force-delete locally only after confirming the PR branch landed and only after explicit maintainer/user approval.

Output

Report:

  • PR number, URL, base, head, draft state, milestone, and merge status.
  • CI summary: passing, failing, pending, or skipped checks.
  • Review summary, independent-review status, and whether @codex review ran.
  • Local pre-merge validation state when mode=merge ran.
  • Commits pushed, merge action, and branch cleanup action.
  • Remaining blockers or next action.
执行 DART 项目的机械式重构工作流。在保持行为不变的前提下,通过自动化或脚本化手段进行代码重构。需严格界定范围,更新构建配置,运行 lint/build/test 验证,并在推送前获取审批。
需要重构代码但保持功能不变 清理重复性或结构混乱的代码 调整文件组织并同步构建系统
.codex/skills/dart-mechanical-refactor/SKILL.md
npx skills add dartsim/dart --skill dart-mechanical-refactor -g -y
SKILL.md
Frontmatter
{
    "name": "dart-mechanical-refactor",
    "description": "DART Mechanical Refactor: perform a behavior-preserving mechanical refactor"
}

dart-mechanical-refactor

Use this skill in Codex to run the DART dart-mechanical-refactor workflow. The editable workflow source currently lives in .claude/commands/, and this generated Codex skill is a generated Codex adapter entrypoint.

Invocation

  • Claude Code/OpenCode: /dart-mechanical-refactor <arguments>
  • Codex: $dart-mechanical-refactor <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Perform mechanical refactor: $ARGUMENTS

Required Reading

@AGENTS.md @CONTRIBUTING.md @docs/onboarding/code-style.md

Workflow

  1. Define the exact transformation and scope before editing.
  2. Create a branch from the target branch, usually origin/main.
  3. Prefer scriptable or automated edits when the transformation is repetitive.
  4. Keep behavior unchanged; do not mix in feature work or cleanup outside scope.
  5. If reorganizing files, update CMake, pixi tasks, generated indexes, and docs.
  6. Run focused checks first, then broader checks according to risk:
    • pixi run lint
    • pixi run build
    • pixi run test-unit
    • pixi run test-all when feasible
    • pixi run -e cuda test-all when feasible on Linux CUDA hosts
  7. Ask for explicit maintainer/user approval before pushing or opening a PR. After approval, open a PR with a clear scope statement and no behavior-change claim unless tested.

Output

  • Transformation summary
  • Files or areas changed
  • Verification run
  • Any residual risk
用于在DART项目中启动新功能、修复、重构等任务。涵盖从需求解析、分支策略选择、代码实现、多环境验证到创建PR的全流程,并集成决策记录与清理机制。
用户需要开始新的软件开发任务 调用 /dart-new-task 命令
.codex/skills/dart-new-task/SKILL.md
npx skills add dartsim/dart --skill dart-new-task -g -y
SKILL.md
Frontmatter
{
    "name": "dart-new-task",
    "description": "DART New Task: start a feature, bugfix, refactor, docs, build, or test task"
}

dart-new-task

Use this skill in Codex to run the DART dart-new-task workflow. The editable workflow source currently lives in .claude/commands/, and this generated Codex skill is a generated Codex adapter entrypoint.

Invocation

  • Claude Code/OpenCode: /dart-new-task <arguments>
  • Codex: $dart-new-task <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Start a new task in DART: $ARGUMENTS

Required Reading

Read these files first: @AGENTS.md @docs/onboarding/building.md @docs/onboarding/contributing.md @docs/onboarding/code-style.md @docs/dev_tasks/README.md @docs/information-architecture.md @docs/ai/sessions.md @docs/ai/principles.md @docs/ai/verification.md

Workflow

  1. Understand the task - Parse: goal, constraints, type (feature|bugfix|refactor|docs)
  2. Assess scope - Multi-phase or multi-session? Create docs/dev_tasks/<task>/ (see docs/dev_tasks/README.md for criteria). Team-scale work (multiple parallel lanes needing orchestrated worker agents) switches to dart-ultrawork instead. For multi-session, design-heavy, public API, solver/paper, release, or cross-module work, fill the dev-task specification intake before editing: value, scope, assumptions, traceability, non-goals, acceptance evidence, gates, and open decisions. If consequential ambiguity would change public API, release compatibility, numerical correctness, benchmark claims, or roadmap scope, record an owner-local Decision needed block instead of silently choosing.
  3. Setup - Choose the target branch before creating a topic branch:
    • features/docs/non-bugfix refactors: branch from origin/main
    • bug fixes that apply to the current release line: branch from the active DART 6 LTS origin/release-6.* branch first, then cherry-pick or reapply to main
  4. Implement - Keep commits focused, follow code style
  5. Verify - Run pixi run lint before committing, then pixi run test-all; on Linux hosts with a visible NVIDIA CUDA runtime, also run pixi run -e cuda test-all
  6. PR - After explicit maintainer/user approval, git push -u origin HEAD then gh pr create --draft --base <target-branch> --milestone "<milestone>" (DART 7.0 for main, branch-matching DART 6.x patch milestone for the active DART 6 LTS branch); follow .github/PULL_REQUEST_TEMPLATE.md
  7. Cleanup - Before PR: if task used docs/dev_tasks/<task>/, first promote durable dashboards, evidence matrices, API inventories, migration maps, or long-lived decisions into the durable owner selected by docs/information-architecture.md. Then remove the dev-task folder completely (include the deletion in this PR, not after merge).

Type-Specific

  • Bugfix: Requires PRs to BOTH the active DART 6 LTS branch AND main
  • Refactor: No behavior changes
  • Feature: Add tests + docs
  • New solver/paper implementation: Before any implementation starts, record the full solver-family intake checklist in docs/plans/solver-family-intake.md — including its solver-contract conformance and solver-identity/metrics items; the standing rule in docs/design/dart7_architecture_assessment.md applies, and new families must not bypass the PLAN-091 contracts. Derive an evidence matrix from the paper, project page, reference source, videos, and demos. Do not call the task complete until DART implements all algorithms/features on required CPU and GPU backends, ports all experiments/demos into tests/benchmarks/py-demos, records benchmark JSON proving DART beats reference and paper numbers for every claimed case (with the resolved solver configuration machine-recorded in every packet), and performs any clean API/pipeline refactor needed for the long-term DART 7/8 architecture. For multi-session work, keep the active docs/dev_tasks/<task>/README.md and RESUME.md explicit about the latest completed slice, the next missing paper-parity gap, and why focused green tests are not a full solver/paper completion claim.

Output

  • Task type, scope, and whether a docs/dev_tasks/<task>/ folder was created
  • Files changed and gates run
  • Dev-task promotion and cleanup status when the task completed
  • PR readiness, noting any external mutation that was explicitly approved
在Codex中执行DART的dart-next工作流,根据参数选择并执行下一个受限任务。支持select、execute和pr模式,可按大小、焦点或优先级约束任务选择,自动检查本地状态并从仪表板构建候选集,确保任务安全与上下文一致。
用户请求执行下一个DART任务 使用/dart-next或$dart-next命令 需要按特定范围(如size/focus)筛选待办事项
.codex/skills/dart-next/SKILL.md
npx skills add dartsim/dart --skill dart-next -g -y
SKILL.md
Frontmatter
{
    "name": "dart-next",
    "description": "DART Next: select and execute the next bounded DART task"
}

dart-next

Use this skill in Codex to run the DART dart-next workflow. The editable workflow source currently lives in .claude/commands/, and this generated Codex skill is a generated Codex adapter entrypoint.

Invocation

  • Claude Code/OpenCode: /dart-next <arguments>
  • Codex: $dart-next <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Select and execute the next bounded DART task: $ARGUMENTS

Required Reading

@AGENTS.md @docs/ai/principles.md @docs/ai/north-star.md @docs/ai/workflows.md @docs/ai/verification.md @docs/plans/README.md @docs/plans/dashboard.md @docs/plans/north-star-roadmap.md @docs/dev_tasks/README.md @docs/onboarding/contributing.md @docs/onboarding/ci-cd.md @docs/onboarding/ai-tools.md

Arguments

Interpret $ARGUMENTS as optional constraints:

  • mode=select: choose one task and stop with evidence.
  • mode=execute: choose one task, make local changes, and verify locally. This is the default when the user asks to do the work.
  • mode=pr: execute locally and prepare PR text, then ask for explicit maintainer/user approval before any GitHub, PR, CI, branch, or review-thread mutation, including pushes, PR creation, PR comments, reviewer requests, review re-triggers, thread resolution, ready-for-review transitions, merges, CI reruns, or branch deletion.
  • size=tiny|small|medium|large or days=N: fit the chosen task to the requested scope. Default to small, meaning one focused local session.
  • focus=<topic>: prefer a focus area without making it the only allowed candidate. Examples: ai-native, easy-start, algorithm, compute, release, ci, docs, python, io, PLAN-020, world_split, dartpy, or a file path.
  • area=<dimension>: alias for focus=<dimension>.
  • Any issue, PR, branch, milestone, failing check, file path, or user-stated priority overrides the default dashboard order.

If constraints conflict or make the task unsafe to select, stop and ask one clarifying question.

Workflow

  1. Inspect local state before choosing work:
    git status --short --branch
    git diff --stat
    
  2. Build the candidate set from tracked evidence:
    • explicit user instruction in $ARGUMENTS;
    • current branch, local diff, or active docs/dev_tasks/<task>/ state;
    • docs/plans/dashboard.md, in priority order, especially Horizon: Now;
    • docs/ai/north-star.md gaps and readiness criteria;
    • issue, PR, or CI state named by the user or inferable from the branch.
  3. Exclude candidates that are blocked, larger than the requested size, missing enough evidence to start, likely to require unapproved GitHub mutations, or only bootstrap/maintain the dart-next workflow itself unless explicitly focused.
  4. Prefer the highest-value remaining candidate in this order:
    • user-specified issue, PR, failing check, or file path;
    • candidates matching focus=<topic> or area=<dimension>;
    • failing CI or review feedback on the current PR;
    • active dev task with a clear next local step;
    • first unblocked Horizon: Now dashboard item fitting the size;
    • issue triage or plan refinement when implementation evidence is missing.
  5. State the selected task before editing:
    • candidate and source evidence;
    • rejected higher-priority candidates and why they were not selected;
    • whether the preferred focus matched the selected task, and why if it did not;
    • size assumption and expected stopping point;
    • workflow to follow next;
    • verification gate from docs/ai/verification.md.

Execution Routing

After selection, follow the most specific DART workflow:

Selected work Route through
New implementation task $dart-new-task in Codex or /dart-new-task elsewhere
Existing dev task $dart-resume in Codex or /dart-resume elsewhere
Plan-only change $dart-plan-update in Codex or /dart-plan-update
Docs-only change $dart-docs-update in Codex or /dart-docs-update
GitHub issue fix $dart-fix-issue in Codex or /dart-fix-issue
Downstream bug $dart-downstream-fix or /dart-downstream-fix
Failing CI $dart-fix-ci in Codex or /dart-fix-ci
PR review or PR management $dart-review-pr / $dart-manage-pr or slash versions

If the selected task is multi-session or needs design tracking, create or update docs/dev_tasks/<task>/ according to docs/dev_tasks/README.md.

Local Work Cycle

  1. Load task-specific docs from AGENTS.md and the routed workflow.
  2. Make the smallest coherent local change that satisfies the selected task.
  3. Run the strongest relevant local gate:
    • docs/AI work: gates from docs/ai/verification.md;
    • C++ or Python behavior: pixi run lint, build, and focused tests;
    • CI work: local reproduction when possible plus the fixed check.
  4. Review the local diff before declaring completion:
    git diff --stat
    git diff --check
    
  5. Optimize or benchmark only when the selected objective is performance sensitive or the plan gate explicitly requires performance evidence.
  6. Update durable docs when the task changes project state, public workflow, or roadmap evidence.
  7. Run the completion audit from docs/ai/verification.md before finalizing.

PR And Review Management

Use $dart-pr or /dart-pr only after local verification is complete and the user requested PR preparation. Ask for explicit maintainer/user approval before any GitHub, PR, CI, branch, or review-thread mutation, including push, PR creation, PR comment, reviewer request, review re-trigger, review-thread resolution, ready-for-review transition, CI rerun, merge, or branch deletion.

After a PR exists and explicit approval covers PR management, use $dart-manage-pr or /dart-manage-pr for CI, review, and cleanup. For the first Codex review on a draft PR, prefer a top-level @codex review after explicit approval for PR comments; it can run while the PR remains draft. Once Codex is clean and local validation passes on the current head (default pixi run test-all, plus pixi run -e cuda test-all on Linux hosts with a visible NVIDIA CUDA runtime), the draft is ready to mark ready for human review after approval, while merge still waits for required hosted checks.

Output

Report:

  • selected task, size, evidence, and routed workflow;
  • files changed and verification commands run;
  • completion-audit result and any remaining blocker;
  • PR readiness status, without performing external mutations unless explicit approval was given.
用于讨论或更新DART生活计划。支持需求分类、证据审查、计划修订及任务推导,确保文档一致性并管理优先级。
用户请求讨论DART计划的选项、优先级或范围 用户要求修改docs/plans下的计划文件或相关索引 需要将计划项转化为具体的实施或文档任务
.codex/skills/dart-plan-update/SKILL.md
npx skills add dartsim/dart --skill dart-plan-update -g -y
SKILL.md
Frontmatter
{
    "name": "dart-plan-update",
    "description": "DART Plan Update: discuss or update DART living plans"
}

dart-plan-update

Use this skill in Codex to run the DART dart-plan-update workflow. The editable workflow source currently lives in .claude/commands/, and this generated Codex skill is a generated Codex adapter entrypoint.

Invocation

  • Claude Code/OpenCode: /dart-plan-update <arguments>
  • Codex: $dart-plan-update <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Discuss or update DART living plans: $ARGUMENTS

Required Reading

@AGENTS.md @docs/ai/principles.md @docs/ai/north-star.md @docs/plans/README.md @docs/plans/dashboard.md @docs/plans/north-star-roadmap.md @docs/ai/verification.md

Workflow

  1. Classify the request:
    • discussion-only: compare options, priority, scope, or sequencing;
    • plan edit: revise docs/plans/** or related indexes;
    • task derivation: turn a plan item into a bounded implementation or docs task.
  2. Inspect current evidence before changing plan state. Use repo docs, code, tests, CI evidence, issue/PR state, benchmark data, or explicit maintainer direction.
    • For new solver/paper implementation plans, preserve the full paper-complete bar in docs/ai/verification.md: all algorithms/features, CPU and GPU paths, paper/site/video demos, benchmark JSON that beats reference and paper numbers, and clean long-term API/pipeline work.
    • For active multi-session solver/paper work, update the plan or dev-task resume surface with both the completed slice and the next missing paper-parity gap; do not let focused tests narrow the recorded objective. If the user names source demos, videos, or project pages, keep the corpus matrix explicit: which scenes/experiments are represented by tests, py-demos, visual artifacts, benchmark JSON, CPU reference comparisons, and GPU parity, and which rows remain missing.
  3. Keep the plan manageable:
    • revise an existing initiative before adding a duplicate;
    • use stable initiative IDs when renaming, splitting, consolidating, or parking work;
    • keep docs/plans/dashboard.md as the single source of truth for priority, status, horizon, dimension, next step, and gate.
    • when deriving packets or dev-task work, include the DART specification intake from docs/ai/orchestration.md: value, scope, non-goals, assumptions/open decisions, acceptance evidence, gates, and dependencies. Use owner-local Decision needed blocks for consequential ambiguity instead of silent defaults.
  4. For discussion-only requests, present the tradeoff and proposed plan delta; do not edit unless the user asks for an edit or the request already implies one.
  5. For plan edits, update docs/plans/dashboard.md for operating state, the detailed numbered initiative file or external owner document for rationale and workstreams, and docs/plans/north-star-roadmap.md only for strategic framing.
  6. If the plan item becomes implementation work, route to /dart-new-task in Claude/OpenCode or $dart-new-task in Codex, and use docs/dev_tasks/README.md when it is multi-session or needs design tracking.
  7. Verify with docs/ai/verification.md: use the docs-only gate for plan-only docs, and the AI docs/adapters gate set when AI docs, workflow sources, or generated adapters change.
  8. Do not perform GitHub or remote mutations without explicit maintainer/user approval.

Output

  • Request classification (discussion, plan edit, or task derivation)
  • Plan files changed and the operating-state updates made
  • Verification gate run
  • Any routed follow-up task or Decision needed block recorded
用于在DART项目中自动化创建分支、提交代码、推送并发起Pull Request的工作流。需遵循特定的PR模板和标题规范,支持通过参数传递操作指令,适用于Codex等AI辅助开发环境。
用户需要为DART项目创建新的功能或修复分支 用户希望自动化生成符合规范的Pull Request 用户意图进行代码提交并推送到远程仓库
.codex/skills/dart-pr/SKILL.md
npx skills add dartsim/dart --skill dart-pr -g -y
SKILL.md
Frontmatter
{
    "name": "dart-pr",
    "description": "DART PR: create a branch, commit, push, and open a DART pull request"
}

dart-pr

Use this skill in Codex to run the DART dart-pr workflow. The editable workflow source currently lives in .claude/commands/, and this generated Codex skill is a generated Codex adapter entrypoint.

Invocation

  • Claude Code/OpenCode: /dart-pr <arguments>
  • Codex: $dart-pr <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Prepare or open a DART pull request after explicit maintainer/user approval: $ARGUMENTS

Required Reading

@AGENTS.md @docs/onboarding/contributing.md @docs/onboarding/ai-tools.md @docs/onboarding/changelog.md @.github/PULL_REQUEST_TEMPLATE.md

Recent PR Patterns

When the expected PR style is unclear, inspect recently merged PRs before drafting the title or body:

gh pr list --repo dartsim/dart --state merged --base main --limit 10 \
  --json number,title,body,mergedAt

Use these practices:

  • Keep titles plain, scoped, and outcome-focused. Do not add agent prefixes.
  • Fill the PR template in DART's default order: Summary, Motivation / Problem, Changes / Key Changes, optional Before / After, Testing, Breaking Changes, and Related Issues / PRs. Keep Summary first because reviewers need the skimmable outcome before the rationale. If the motivation is necessary to understand the outcome, make the first Summary sentence problem-oriented, then keep the fuller why in Motivation / Problem rather than moving it above Summary.
  • Write Summary and Motivation for a user or downstream maintainer unfamiliar with the implementation: lead with what changes for them, what stays compatible, how they opt in or migrate, and why the evidence matters. Keep implementation mechanics in Changes unless they explain a user-visible outcome or risk.
  • When the change has user-facing API, workflow, behavior, or performance impact, add a concise ## Before / After section before Testing covering only relevant dimensions (public API, commands/workflows, behavior, migration, performance baseline). Phrase each row as a user-visible before/after, then name the mechanism as supporting context. For performance claims, name the baseline explicitly (CPU path, parent commit, main, or prior implementation) plus workload, metric, and limitations.
  • In Testing, list exact commands, targets, or test names that ran. For CI, performance, or infrastructure work, include evidence such as CI observations, timing, reruns, benchmark output, or why a skipped check is expected.
  • For rendering, model, mesh, texture, GUI, or visual-example changes, include a before/after visual comparison when practical:
    • Prefer an existing headless example path (--headless, --frames, --width, --height, --screenshot) over manual screenshots. Capture before and after with the same camera, dimensions, frame count, and renderer; restore the replaced sample/assets or use the base branch to capture the before image. Inspect the images yourself and include the commands and any software-rendering flags in the PR body.
    • Upload transient comparison images, GIFs, and videos through the GitHub PR/issue Markdown attachment flow so the body contains GitHub-hosted https://github.com/user-attachments/assets/... URLs. Do not commit transient visual evidence; commit visual files only when they are durable documentation, fixtures, or source assets.
    • The supported attachment flow is the web PR/issue editor; gh pr edit, gh pr comment, and the REST API do not provide a generic upload, and any command that edits or comments on a PR still requires explicit maintainer/user approval. If the current tool cannot upload attachments, keep the local artifact paths in the working note, ask a maintainer to upload them, then update the PR body with the returned URL after explicit maintainer/user approval. Do not fall back to committing evidence into docs/assets/.
    • If no headless path exists, add a narrowly scoped capture mode when it fits the example or document why visual comparison is not practical.
  • Mark non-applicable checklist items as "N/A" with a short reason, and mention related PRs, issues, backports, and follow-ups explicitly, including "None".

Workflow

  1. Inspect scope:

    git status --short --branch
    git diff --stat
    git diff --check
    
  2. Exclude unrelated dirty files unless the user explicitly includes them.

  3. Choose the target branch and milestone:

    Target Milestone
    main DART 7.0
    Active DART 6 LTS release-6.* Branch-matching DART 6.x patch
  4. For bug fixes, use the dual-PR flow: fix the active DART 6 LTS branch first, then cherry-pick or reapply to main.

  5. Before every commit, run pixi run lint. Also run pixi run build for C++ or Python changes and focused tests for behavior changes.

  6. Create or update a topic branch when needed:

    git checkout -b <type>/<topic> origin/<target-branch>
    
  7. Commit only intended files with a plain descriptive commit title.

  8. Merge the latest base branch into the PR branch before any push, and follow the base-merge and automated-review rules in docs/onboarding/ai-tools.md (no inline bot replies; @codex review re-triggers are throttled to one per approved review-fix round). Ask for explicit maintainer/user approval before pushing or opening the draft PR. After approval:

    git push -u origin HEAD
    gh pr create --draft --base <target-branch> --milestone "<milestone>" \
      --title "<plain title>" --body-file <filled-template-file>
    
  9. Prefer additive follow-up commits for updates to a published PR. Amend or force-push only after explicit maintainer/user approval and only when the user requests it or a clear reason exists (removing sensitive content, repairing branch history).

  10. Invoke the dart-changelog routine for the changelog decision, entry wording, and PR-link follow-up. If CHANGELOG.md needs the PR number, keep the follow-up changelog commit local until explicit maintainer/user approval is given for the additional push or PR update.

  11. Monitor CI: gh pr checks <PR_NUMBER>.

Output

  • Branch, target base, and milestone used
  • Commit titles and files included
  • PR URL and draft/ready state, or the prepared PR text awaiting approval
  • Changelog decision
  • CI status and any remaining blocker
提供DART Python绑定(dartpy)的开发指南,涵盖nanobind构建、API模式及wheel打包。包含快速启动示例、关键命令如开发构建与测试,以及命名规范(snake_case)和NumPy自动转换等核心用法说明。
需要创建或修改DART的Python绑定代码 遇到dartpy相关的构建或编译问题 需要生成Python类型存根文件 进行DART Python模块的单元测试
.codex/skills/dart-python/SKILL.md
npx skills add dartsim/dart --skill dart-python -g -y
SKILL.md
Frontmatter
{
    "name": "dart-python",
    "description": "DART Python: dartpy bindings, nanobind, wheels, and API patterns"
}

DART Python Bindings (dartpy)

Load this skill when working with Python bindings or dartpy.

Quick Start

import dartpy as dart

world = dart.World()
skel = dart.io.read_skeleton("dart://sample/urdf/KR5/KR5 sixx R650.urdf")
world.add_skeleton(skel)

for _ in range(100):
    world.step()

Full Documentation

For complete Python bindings guide: docs/onboarding/python-bindings.md

For module-specific details: python/AGENTS.md

Quick Commands

pixi run build-py-dev    # Build for development
pixi run test-py         # Run Python tests
pixi run generate-stubs  # Generate type stubs

Wheel Building

pixi run -e py314-wheel wheel-build
pixi run -e py314-wheel wheel-repair  # Linux only
pixi run -e py314-wheel wheel-test

Key Patterns

  • snake_case preferred (camelCase emits DeprecationWarning)
  • NumPy arrays auto-convert to Eigen types
  • GUI requires DART_BUILD_GUI=ON

Key Files

  • Package config: pyproject.toml
  • Build system: python/dartpy/CMakeLists.txt
  • Type stubs: python/stubs/dartpy/
管理DART实验仿真世界的研究参考目录(论文、教材、标准、引擎)。用于添加、更新或审计条目,规范引用格式与状态追踪。
添加新的研究参考文献 更新现有文献的状态或结论 审计参考文献完整性 在文档中引用相关研究
.codex/skills/dart-references/SKILL.md
npx skills add dartsim/dart --skill dart-references -g -y
SKILL.md
Frontmatter
{
    "name": "dart-references",
    "description": "DART References: manage the experimental simulation research catalog (papers, textbooks, engines) with status, priority, and verdict"
}

DART Research References

Load this skill when adding, updating, auditing, or citing research references (papers, textbooks, model-format standards, or comparative engines) for the DART experimental simulation world — its public API and its algorithms.

Catalog Location

docs/readthedocs/papers.md is the single source of truth and the published website page. It is a companion to the experimental API design docs:

  • docs/design/simulation_cpp_api.md
  • docs/design/simulation_python_api.md

Entry Schema

Each entry has an id, a full citation, and these properties:

Property Values
Type textbook, paper, standard, engine
Topic e.g. dynamics, kinematics, contact, integration, collision, terminology, model-format, api
Status referenced, planned, in-progress, implemented, deferred, rejected
Priority high, medium, low,
Verdict adopt, baseline, reference, evaluate, reject
Where used link to the design doc, code, or test that uses (or will use) it

Status is written from the experimental world's perspective. A method shipping in classic DART but not yet in the experimental world is planned, with the classic location noted in Notes.

Workflow: add or update an entry

  1. Ground the entry in real evidence — a design doc, code path, test, or an explicit project decision. Do not add aspirational references with no link.
  2. Write an accurate citation (authors, title, year, venue/publisher). Prefer an official URL; do not fabricate DOIs.
  3. Add a row to the matching summary table and a detail subsection with the full properties and a one-line rationale.
  4. Set Status from the experimental world's perspective; note classic-DART status separately in Notes.
  5. Set Verdict (adopt to build on, baseline to compare against, reference to cite, evaluate while undecided, reject with a reason).
  6. Fill Where used with the design-doc/code/test link.
  7. When the relationship changes (e.g. a planned algorithm becomes implemented, or an evaluate is decided), update Status/Verdict and the Where used link in the same change.

Rules

  • Prefer robotics/dynamics literature (textbooks, papers) over engine-specific names when a reference informs a terminology decision; record the grounding in the catalog's "Terminology Grounding" section.
  • Keep the catalog scoped to the experimental world for now; the schema is general and can extend to the rest of DART later.
  • Keep engine entries as baselines/comparisons, never as dependencies.
  • Use docs/ai/verification.md to select the docs-only or AI docs/adapters gate set, then run pixi run lint after edits.

Full Documentation

For the catalog and its rationale: docs/readthedocs/papers.md

For the API it supports: docs/design/simulation_cpp_api.md, docs/design/simulation_python_api.md

For DART's research focus: docs/ai/north-star.md

用于将 DART 活动发布分支合并回 main 分支。自动检测版本,处理冲突并执行 lint 检查,在获得批准前不推送,最终创建指向 main 的 PR 并监控 CI 状态。
需要将发布分支代码合并到主开发分支 执行 DART 项目的标准发布合并流程
.codex/skills/dart-release-merge-main/SKILL.md
npx skills add dartsim/dart --skill dart-release-merge-main -g -y
SKILL.md
Frontmatter
{
    "name": "dart-release-merge-main",
    "description": "DART Release Merge Main: merge the active release branch back into main"
}

dart-release-merge-main

Use this skill in Codex to run the DART dart-release-merge-main workflow. The editable workflow source currently lives in .claude/commands/, and this generated Codex skill is a generated Codex adapter entrypoint.

Invocation

  • Claude Code/OpenCode: /dart-release-merge-main <arguments>
  • Codex: $dart-release-merge-main <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Merge release branch into main: $ARGUMENTS

Required Reading

@AGENTS.md @docs/onboarding/release-management.md @docs/onboarding/ci-cd.md

Workflow

  1. Auto-detect or confirm the active release branch and release version:
    git fetch origin
    git branch -r | grep -oE 'origin/release-[0-9]+\.[0-9]+' | sort -V | tail -1
    
  2. Verify the clone is not shallow and a merge base exists.
  3. Create merge/<release-branch>-into-main from origin/main.
  4. Merge the release branch with a title like Merge release-6.19 into main (v6.19.x).
  5. Resolve conflicts using docs/onboarding/release-management.md:
    • deleted in main, updated in release: keep deleted
    • added in both: prefer main unless release has unique needed content
    • content conflicts: prefer main modernization except for manually reviewed changelog entries
    • files only on release: keep if still relevant to main
  6. Verify no unresolved conflicts remain.
  7. Run pixi run lint and relevant checks.
  8. Ask for explicit maintainer/user approval before pushing or creating the PR. After approval, create a PR targeting main with milestone DART 7.0 and use the PR template.
  9. Monitor CI until green.

Output

  • PR URL and CI status
  • Release branch and release version
  • Conflict counts and resolution summary
  • Any manual changelog decisions
用于执行DART项目的发布打包工作流。包括版本升级、变更日志生成与审计、代码检查,并在获得明确批准前创建包含版本信息和里程碑的PR。
用户请求创建DART新版本发布 需要更新项目版本号并生成发布PR 执行发布前的变更日志审计和打包准备
.codex/skills/dart-release-packaging/SKILL.md
npx skills add dartsim/dart --skill dart-release-packaging -g -y
SKILL.md
Frontmatter
{
    "name": "dart-release-packaging",
    "description": "DART Release Packaging: create a release version bump and changelog PR"
}

dart-release-packaging

Use this skill in Codex to run the DART dart-release-packaging workflow. The editable workflow source currently lives in .claude/commands/, and this generated Codex skill is a generated Codex adapter entrypoint.

Invocation

  • Claude Code/OpenCode: /dart-release-packaging <arguments>
  • Codex: $dart-release-packaging <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Create release packaging PR after explicit maintainer/user approval: $ARGUMENTS

Required Reading

@AGENTS.md @docs/onboarding/release-management.md @docs/onboarding/contributing.md @docs/onboarding/changelog.md

Workflow

  1. Confirm the new version, for example 6.16.6.
  2. Derive the release branch: release-<major>.<minor>.
  3. Fetch and branch from the release branch:
    git fetch origin <RELEASE_BRANCH>
    git checkout -B release/<NEW_VERSION>-version-bump origin/<RELEASE_BRANCH>
    
  4. Bump versions in package.xml and pixi.toml.
  5. Update version requirements in examples/tutorials if needed.
  6. Invoke the dart-changelog routine in release-audit mode, then add or finalize the CHANGELOG.md release section with the release date, milestone link, release summary, and audit from docs/onboarding/changelog.md.
  7. Run pixi run lint and relevant packaging checks.
  8. Commit as Packaging <NEW_VERSION>.
  9. Ask for explicit maintainer/user approval before pushing, creating the PR, or setting milestones.
  10. After approval, create the PR against the release branch with the release milestone for that branch, for example the specific version milestone if available.

Output

  • PR URL
  • Version files changed
  • Changelog section added
  • Checks run
DART Resume技能用于恢复并推进未完成的开发任务。它作为完成导向的任务管理器,负责构建执行计划、拆分工作包、验证结果直至任务彻底完成,支持基于证据的决策和可选的子代理委派。
用户希望恢复之前会话中未完成的工作 需要继续执行特定的开发任务或重构工作流
.codex/skills/dart-resume/SKILL.md
npx skills add dartsim/dart --skill dart-resume -g -y
SKILL.md
Frontmatter
{
    "name": "dart-resume",
    "description": "DART Resume: continue work from a previous session"
}

dart-resume

Use this skill in Codex to run the DART dart-resume workflow. The editable workflow source currently lives in .claude/commands/, and this generated Codex skill is a generated Codex adapter entrypoint.

Invocation

  • Claude Code/OpenCode: /dart-resume <arguments>
  • Codex: $dart-resume <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Resume unfinished work: $ARGUMENTS

Objective

dart-resume is a completion-oriented task manager, not a status lookup or a single-slice helper by default. Resume the named or reconstructed work, build or refresh the execution plan, track progress in the repo-owned task surface, split independent work into verifiable packets, use subagents/sub-sessions only when the user explicitly requested delegation and the current AI surface permits it, verify every result, and keep going until the whole task is complete or a real blocker or approval boundary remains.

Decisions must be evidence-based. Before choosing between meaningful options, first improve or define the verification/debugging method so it can catch false positives and false negatives. Use repository inspection, focused tests, benchmarks, A/B comparisons, GUI or visual evidence, logs, and external resource searches as needed to decide from evidence instead of preference.

For a docs/dev_tasks/<task> target, full completion means all feasible task work is finished, durable decisions and deferred work are promoted, and the temporary dev-task folder is removed in the completing change. Do not stop after one successful slice unless the user explicitly requested a limited mode.

Argument Handling

Use $ARGUMENTS to identify the target, explicit scope limits, and execution modifiers. Interpret arguments in this order:

  1. Explicit scope-limited mode: if arguments include status, audit-only, plan-only, slice, or next-slice, honor that limit and state it in the plan. Without one of these limiters, do not downscope the session to a single slice.
  2. Execution modifiers: if arguments include no-subagents, run serially but keep the same whole-task completion objective. If arguments explicitly request subagents, parallel, delegation, or workers, use available AI-native delegation when the current surface permits it. Tool-use modifiers do not limit scope unless paired with an explicit scope-limited mode.
  3. Explicit target path: if an argument names docs/dev_tasks/<task> or a file under that folder, treat that dev task as the target and read its README.md and RESUME.md after recon. Resolve relative paths from the repo root discovered by git rev-parse --show-toplevel, not from the launch directory.
  4. Closeout wording: words such as complete, finish, retire, close out, or cleanup are accepted but not required for dev-task completion. Treat retire / close out as emphasis that the likely end state is durable-doc promotion plus folder removal.
  5. Branch/PR/issue hint: otherwise, treat arguments as a branch, PR, issue, topic, or free-form resume hint and reconstruct the task from live repo state.

Examples:

$dart-resume docs/dev_tasks/dart7_core_dynamics_perf_forwardport
$dart-resume docs/dev_tasks/dart7_core_dynamics_perf_forwardport --slice
$dart-resume PR 2991

Required Reading

@AGENTS.md @docs/dev_tasks/README.md @docs/ai/sessions.md @docs/ai/verification.md @docs/onboarding/ci-cd.md @docs/onboarding/contributing.md @docs/onboarding/changelog.md

Workflow

Recon (no changes)

git rev-parse --show-toplevel
git status -sb && git branch -vv && git log -10 --oneline --decorate
git diff --stat && git stash list
gh pr list --head "$(git branch --show-current)"
gh pr status

Reconstruct

If $ARGUMENTS names a docs/dev_tasks/<task> path, use that folder as the target and inspect its README.md, RESUME.md, and any directly referenced owner docs before choosing work. If the folder is already absent, verify whether it was retired on current main, identify the durable owner doc that replaced it, and report that no folder cleanup remains.

Otherwise infer the task from branch name, commits, diffs, issue/PR description, and any docs/dev_tasks/<task>/ state. If the goal is still unclear after recon, stop and ask.

Before editing, write explicit pass/fail criteria for the resumed task:

  • what exact dev-task folder, branch, PR, issue, or topic is being completed;
  • which remaining checklist items, decisions, or evidence must be resolved;
  • how progress will be tracked during this session and across any handoff;
  • which independent subtasks, if any, can be delegated when explicitly authorized or run as separate serial sessions without creating conflicting edits;
  • which verification/debugging method will make false positives and false negatives unlikely before implementation decisions are made;
  • which A/B tests, benchmarks, resource searches, GUI checks, or textual checks are needed to support consequential decisions;
  • which durable docs will own any surviving decision or deferred work;
  • whether the resumed change may need a changelog entry and how the dart-changelog decision will be recorded;
  • which verification commands prove the result.

Continue

  • Propose a 3-6 step plan before editing.
  • Continue with minimal scope and preserve existing user changes.
  • Verification comes first when the route is uncertain. Define the observable signal, build or select the smallest reproducer/check, run a control vs candidate comparison when possible, and only then choose the implementation path. If the existing verification is weak, improve the check or debugging surface before trusting the result.
  • For text-based behavior, prefer concrete command output, failing/passing tests, focused scripts, logs, structured packets, assertions, and diffable artifacts. For GUI or visual behavior, capture screenshots, rendered assets, pixel/visual comparisons, smoke runs, or videos where the surface supports them; verify both the expected pass path and at least one failure-sensitive condition when practical.
  • When the decision depends on behavior outside the repository, search the relevant upstream docs, papers, issues, standards, or release notes and record the source-backed conclusion in the task docs, durable owner doc, or PR evidence. Prefer primary sources.
  • If the task is large, decompose it into independently verifiable work items. Use available AI-native subagent, sub-session, or parallel-worker support only when the user explicitly requested delegation and the current surface permits it. Otherwise, keep the decomposition as a serial plan or explicit handoff packets. Validate and integrate every delegated result yourself; repo-tracked docs remain the source of truth even when agent-specific orchestration is available.
  • Keep progress tracking current in the task's README.md, RESUME.md, or durable owner doc after meaningful progress. If the current session cannot finish because of context, environment, approval, or a real blocker, leave the next session with exact current reality, remaining work, blockers, and gates.
  • For active solver/paper implementations, keep the plan or dev-task resume surface explicit about the completed slice, the next missing paper-parity gap, and why focused green tests are not a full paper-completion claim.
  • Run a completion audit before finalizing a dev-task target: identify the exact docs/dev_tasks/<task>/ folder, inspect it for remaining plans/evidence/decisions, promote any durable dashboard, evidence matrix, API inventory, migration map, long-lived decision, or deferred-but-real work into docs/plans/, docs/design/, or docs/onboarding/, update dashboard/plan progress when the task changes roadmap state, then remove the dev-task folder completely in the completing change.
  • In completion mode, do not leave the long-form resume prompt to carry decisions. Record the final decision or parked follow-up in the durable owner doc, then delete or update the dev-task folder according to docs/dev_tasks/README.md.
  • Before finalizing a resumed task that changes behavior, public API, packaging, CI, docs workflow, AI-infra workflow, release process, or user-visible docs, invoke the dart-changelog routine in decide or finalize mode. If no entry is needed, keep the reason in the local PR body/checklist draft or task evidence; if an entry is needed, prepare the local CHANGELOG.md edit and PR link when available. Pushing the changelog edit or updating the PR body still requires explicit maintainer/user approval.
  • If remaining work is real but blocked by a substantial design decision, maintainer direction, external dependency, or scope boundary that should not be resolved in the current session, ask the human before retiring the folder unless prior maintainer direction is already recorded. Record the parked or blocked work in the durable owner doc before deletion.
  • Do not call a dev task complete while docs/dev_tasks/<task>/ still exists. If implementation is done but the folder remains, the remaining work is the durable-doc promotion plus folder cleanup.
  • Run pixi run lint before committing. Run relevant tests; use pixi run test-all before done when feasible, and also pixi run -e cuda test-all on Linux hosts with a visible NVIDIA CUDA runtime.
  • Merge the latest base branch into any published PR branch before pushing, and follow the base-merge rules in docs/onboarding/ai-tools.md. Push with git push -u origin HEAD and create or update the PR only after explicit maintainer/user approval, preferring additive follow-up commits.

Safety

No destructive git commands (reset --hard, dropping stashes, deleting branches) without explicit maintainer/user approval.

Output

  • Reconstructed task and current branch/PR state
  • Plan followed and files changed
  • Verification commands run and their results
  • Completion-audit result: dev-task promotion/cleanup done or the remaining blocker
  • PR readiness, noting any external mutation that was explicitly approved
用于运行 DART 回顾工作流,捕获持久化经验教训。通过审查新发现的模式、故障模式和流程改进,将通用知识路由至现有文档或新建文件,确保 AI 基础设施知识的可发现性与复用性,避免记录临时细节。
用户希望进行项目或会话后的回顾总结 需要提取并归档持久化的技术或流程经验 发现新的设计决策、API 兼容性或 CI/CD 失败模式需记录
.codex/skills/dart-retro/SKILL.md
npx skills add dartsim/dart --skill dart-retro -g -y
SKILL.md
Frontmatter
{
    "name": "dart-retro",
    "description": "DART Retro: run a retrospective and capture durable lessons"
}

dart-retro

Use this skill in Codex to run the DART dart-retro workflow. The editable workflow source currently lives in .claude/commands/, and this generated Codex skill is a generated Codex adapter entrypoint.

Invocation

  • Claude Code/OpenCode: /dart-retro <arguments>
  • Codex: $dart-retro <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Run a retrospective and capture durable lessons: $ARGUMENTS

Required Reading

@AGENTS.md @docs/AGENTS.md @docs/ai/principles.md @docs/ai/components.md @docs/ai/verification.md @docs/onboarding/ai-tools.md

Skip If

Stop without editing when all are true:

  • no new patterns, gotchas, or failure modes were discovered
  • no workflow improvement is needed
  • the learning is too session-specific to help future agents or contributors
  • existing docs already cover what happened
  • the task was routine and left no durable insight

Routing

docs/ai/components.md owns routing for durable session learnings. Use this command as the hindsight workflow; do not duplicate the routing table here.

Workflow

  1. Search existing docs before adding content.
  2. Inventory the completed work before routing lessons. Consider domain/design choices, public API or package compatibility, CI/review failure modes, workflow friction, and cleanup or handoff steps separately so a late operational task does not hide feature-level learnings.
  3. Decide whether each lesson is general enough for shared AI infra. Do not update AI components after every session.
  4. Prefer update, remove, consolidate, or restructure over adding new files.
  5. Make every durable learning discoverable from its owner surface: update an existing owner doc when possible, and when a new durable file is justified, link it from the relevant owner index or plan before retiring temporary context.
  6. Keep docs/ai/principles.md compact; put procedures in the owner docs it links to.
  7. Avoid ephemeral branch, PR, commit, or username details.
  8. If adding a workflow command or skill, edit .claude/ source files and run pixi run sync-ai-commands.
  9. Run pixi run lint before committing. For AI docs or adapter changes, also run the verification gates from docs/ai/verification.md: pixi run lint-md, pixi run check-lint-md, pixi run sync-ai-commands, pixi run check-ai-commands, pixi run check-docs-policy, and pixi run check-lint-spell.

Output

  • What learning was captured
  • Where it was documented
  • Checks run
用于对已完成工作进行回顾,识别新发现的模式、陷阱或故障模式,并将持久的经验教训整理归档到相关文档中。通过避免重复和确保可发现性,提升未来AI代理及贡献者的工作效率与知识复用率。
工作完成后需要总结持久性经验教训 发现新的设计决策、CI失败模式或工作流摩擦点 现有文档未能覆盖本次工作的关键洞察
.codex/skills/dart-retrospect/SKILL.md
npx skills add dartsim/dart --skill dart-retrospect -g -y
SKILL.md
Frontmatter
{
    "name": "dart-retrospect",
    "description": "DART Retrospect: retrospect on completed work and capture durable lessons"
}

dart-retrospect

Use this skill in Codex to run the DART dart-retrospect workflow. The editable workflow source currently lives in .claude/commands/, and this generated Codex skill is a first-class Codex entrypoint.

Invocation

  • Claude Code/OpenCode: /dart-retrospect <arguments>
  • Codex: $dart-retrospect <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Retrospect on completed work and capture durable lessons: $ARGUMENTS

Required Reading

@AGENTS.md @docs/AGENTS.md @docs/ai/principles.md @docs/ai/components.md @docs/ai/verification.md @docs/onboarding/ai-tools.md

Skip If

Stop without editing when all are true:

  • no new patterns, gotchas, or failure modes were discovered
  • no workflow improvement is needed
  • the learning is too session-specific to help future agents or contributors
  • existing docs already cover what happened
  • the task was routine and left no durable insight

Routing

docs/ai/components.md owns routing for durable session learnings. Use this command as the hindsight workflow; do not duplicate the routing table here.

Workflow

  1. Search existing docs before adding content.
  2. Inventory the completed work before routing lessons. Consider domain/design choices, public API or package compatibility, CI/review failure modes, workflow friction, and cleanup or handoff steps separately so a late operational task does not hide feature-level learnings.
  3. Decide whether each lesson is general enough for shared AI infra. Do not update AI components after every session.
  4. Prefer update, remove, consolidate, or restructure over adding new files.
  5. Make every durable learning discoverable from its owner surface: update an existing owner doc when possible, and when a new durable file is justified, link it from the relevant owner index or plan before retiring temporary context.
  6. Keep docs/ai/principles.md compact; put procedures in the owner docs it links to.
  7. Avoid ephemeral branch, PR, commit, or username details.
  8. If adding a workflow command or skill, edit .claude/ source files and run pixi run sync-ai-commands.
  9. Run pixi run lint before committing. For AI docs or adapter changes, also run the verification gates from docs/ai/verification.md: pixi run lint-md, pixi run check-lint-md, pixi run sync-ai-commands, pixi run check-ai-commands, pixi run check-docs-policy, and pixi run check-lint-spell.

Output

  • What learning was captured
  • Where it was documented
  • Checks run
用于在Codex中执行DART项目的PR审查与反馈处理工作流。支持代码风格、测试及文档检查,并能根据审批安全地应用本地修复、合并分支并重新触发CI验证。
需要人工或AI审查Pull Request的代码变更 需要根据Reviewer反馈对PR进行最小化修复和迭代
.codex/skills/dart-review-pr/SKILL.md
npx skills add dartsim/dart --skill dart-review-pr -g -y
SKILL.md
Frontmatter
{
    "name": "dart-review-pr",
    "description": "DART Review PR: review a PR or address review feedback"
}

dart-review-pr

Use this skill in Codex to run the DART dart-review-pr workflow. The editable workflow source currently lives in .claude/commands/, and this generated Codex skill is a generated Codex adapter entrypoint.

Invocation

  • Claude Code/OpenCode: /dart-review-pr <arguments>
  • Codex: $dart-review-pr <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Review or respond to PR: $ARGUMENTS

Required Reading

@AGENTS.md @docs/onboarding/code-style.md @docs/onboarding/ai-tools.md (for AI-generated review handling)

Workflow

Pick the sub-workflow from mode= in $ARGUMENTS, defaulting to review.

Review

gh pr view $1 && gh pr diff $1

Check code style, tests, docs, and focused commits. Record findings as read-only output; do not push, comment, resolve threads, or re-trigger review without explicit maintainer/user approval for that external mutation.

Address Feedback

gh pr view $1 --comments

Apply minimal fixes locally and verify. For published PRs, prefer a new follow-up commit so reviewers can inspect each round; amend or force-push only after explicit maintainer/user approval and only when the user requests it or a clear reason exists (removing sensitive content, repairing branch history).

  1. Make the local fix silently (no reply), then run the relevant local gates, including pixi run lint before any commit.
  2. Merge the latest base branch into the PR branch before any push, and follow the base-merge, automated-review, and bot no-reply rules in docs/onboarding/ai-tools.md. If the push is rejected because the remote head moved, fetch and compare it before retrying and validate an equivalent remote fix instead of pushing a duplicate.
  3. Ask for explicit maintainer/user approval before any push, PR comment, thread resolution, or review re-trigger. After approval, push silently, resolve only reviewed and addressed thread IDs via GraphQL, and — when the approved push addressed Codex comments — re-trigger once with gh pr comment $1 --body "@codex review".
  4. Apply the same no-inline-reply loop to github-code-quality[bot] findings; do not re-trigger Codex solely for non-Codex bot findings unless Codex comments were also addressed.
  5. Monitor CI (gh pr checks $1) and repeat until no actionable comments remain. For draft PRs, mark ready after explicit approval once Codex is clean and local validation passes on the current head (default pixi run test-all, plus pixi run -e cuda test-all on Linux hosts with a visible NVIDIA CUDA runtime); merge still waits for required hosted checks.

Output

  • PR number and whether the pass was a review or a feedback round
  • Findings or fixes applied, with file/line references
  • Which actions were local-only and which external mutations were explicitly approved
  • Codex/CI state and any remaining blocker
提供DART项目的测试指南,涵盖单元测试、集成测试及CI验证。包含Pixi命令、GoogleTest规范、调试技巧及CUDA环境注意事项,帮助开发者编写和排查测试问题。
编写或调试DART测试代码 运行单元测试或集成测试 解决CI/CD构建失败问题 配置CUDA环境下的测试任务
.codex/skills/dart-test/SKILL.md
npx skills add dartsim/dart --skill dart-test -g -y
SKILL.md
Frontmatter
{
    "name": "dart-test",
    "description": "DART Test: unit tests, integration tests, CI validation, and debugging"
}

DART Testing

Load this skill when writing or debugging tests.

Quick Commands

pixi run test         # Quick test run
pixi run test-all     # Full validation
pixi run -e cuda test-all # CUDA-enabled full validation on Linux CUDA hosts
pixi run test-unit    # Unit tests
pixi run test-py      # Python tests

Full Documentation

For complete testing guide: docs/onboarding/testing.md

For CI/CD troubleshooting: docs/onboarding/ci-cd.md

Test Organization

  • Unit tests: tests/unit/
  • Integration tests: tests/integration/
  • Regression tests: Near the code they test

Writing Tests

  1. Follow existing patterns in the test directory
  2. Use GoogleTest framework
  3. Name tests descriptively: TEST(ClassName, MethodName_Condition_ExpectedResult)

CI Validation

Before submitting PR:

pixi run lint         # Must pass
pixi run test-all     # Must pass
pixi run -e cuda test-all # Must pass on Linux CUDA hosts

Debugging Test Failures

# Run the smallest existing Pixi test task that covers the failure
pixi run test-unit

# Get CI logs
gh run view <RUN_ID> --log-failed

Gotchas

  • pixi run build builds libraries only, NOT the unit-test binaries. If you run ctest without building the test target first, you may execute stale binaries that silently pass. Build the test target before running its label, e.g. for the simulation suite: pixi run build-simulation-tests (target dart_simulation_tests) before ctest -L simulation.
  • pixi run test-all is the default-environment full gate. On Linux hosts with a visible NVIDIA CUDA runtime, also run pixi run -e cuda test-all; the CUDA run preserves the cuda Pixi environment and executes the CUDA CTest + benchmark smoke path when the runtime is detected.
  • The CUDA Pixi config auto-detects visible GPU compute capabilities for DART_CUDA_ARCHITECTURES; unsupported PTX/toolchain errors usually mean the generated CUDA architecture flags need to be checked before blaming test code.
用于在 Codex 中执行 DART GitHub Issue 分类工作流。通过检查 Issue 状态、验证当前版本有效性,将其分类为有效、已修复等,并输出状态、理由及下一步建议。
用户请求对 GitHub Issue 进行分类或评估 需要判断 Bug 报告在当前主分支上是否仍然有效
.codex/skills/dart-triage-issue/SKILL.md
npx skills add dartsim/dart --skill dart-triage-issue -g -y
SKILL.md
Frontmatter
{
    "name": "dart-triage-issue",
    "description": "DART Triage Issue: triage a GitHub issue and recommend next action"
}

dart-triage-issue

Use this skill in Codex to run the DART dart-triage-issue workflow. The editable workflow source currently lives in .claude/commands/, and this generated Codex skill is a generated Codex adapter entrypoint.

Invocation

  • Claude Code/OpenCode: /dart-triage-issue <arguments>
  • Codex: $dart-triage-issue <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Triage issue: $ARGUMENTS

Required Reading

@AGENTS.md @docs/onboarding/contributing.md

Workflow

  1. Inspect the issue:
    gh issue view <ISSUE_NUMBER> --comments
    
  2. Determine whether the report is still valid on current origin/main.
  3. Classify status:
    • still valid
    • already fixed
    • needs more information
    • duplicate
    • out of scope
  4. If validity depends on behavior, reproduce or inspect the relevant code path.
  5. Do not close or comment unless the user explicitly asks for that action.

Output

  • Status
  • Rationale in 1-3 bullets
  • Recommended next step
  • Suggested reply text, if useful
用于启动大型或自主 DART 任务的工作流。通过项目文档和可选决策访谈,协调任务的分解、委派、审查与执行,支持面试、简报及恢复模式,确保多会话团队规模开发的一致性。
需要启动大型或多会话的软件开发任务 要求 AI 自主编排和执行复杂的代码重构或功能实现 用户希望基于现有项目文档进行自动化任务管理
.codex/skills/dart-ultrawork/SKILL.md
npx skills add dartsim/dart --skill dart-ultrawork -g -y
SKILL.md
Frontmatter
{
    "name": "dart-ultrawork",
    "description": "DART Ultrawork: kick off a large or autonomous DART task with project-home docs, an optional decision interview, and orchestrated execution"
}

dart-ultrawork

Use this skill in Codex to run the DART dart-ultrawork workflow. The editable workflow source currently lives in .claude/commands/, and this generated Codex skill is a generated Codex adapter entrypoint.

Invocation

  • Claude Code/OpenCode: /dart-ultrawork <arguments>
  • Codex: $dart-ultrawork <arguments>

Treat the text after the skill name as $ARGUMENTS. When the workflow references $1, $2, etc., map those to the positional values supplied by the user.

Command Body

Start a team-scale or autonomous DART task: $ARGUMENTS

Required Reading

@AGENTS.md @docs/ai/principles.md @docs/ai/north-star.md @docs/ai/orchestration.md @docs/ai/sessions.md @docs/ai/verification.md @docs/dev_tasks/README.md @docs/information-architecture.md @docs/plans/dashboard.md @docs/onboarding/contributing.md @docs/onboarding/changelog.md @docs/onboarding/ai-tools.md

Arguments

$ARGUMENTS is a task brief plus optional mode flags:

  • mode=interview: ask one up-front batch of critical questions.
  • mode=brief: treat provided context as sufficient unless escalation applies.
  • mode=resume: start from the existing docs/dev_tasks/<task>/ project home and run the session-start protocol before changing files.
  • interview=skip: skip maintainer questions only when the brief already answers all consequential decisions.

The brief may be prose or a structured TASK / CONTEXT block. Extract north star, deliverable, acceptance criteria, constraints, risks, references, paths, issues/PRs/branches, commands, and first step when present.

Workflow

You are the orchestrator, supervisor, and steerer for the entire task: you decompose, delegate, review, and keep evidence honest. Workers implement. Follow the orchestrator/executor contract and packet sizing rules in docs/ai/orchestration.md. Use dart-new-task instead when the work is a bounded single-session task and the user did not ask for autonomous project handling.

  1. Session start and current reality - Locate the project home. For DART autonomous projects this is docs/dev_tasks/<task>/, not a parallel project directory. If it exists, read its README.md, RESUME.md, and any autonomous sidecars such as decisions.md, verification.md, or progress-log.md; then verify checkout state, current branch, and any branch/PR evidence named by the docs. If the docs are stale, update the handoff/current-reality note before relying on them. If no project home exists and the task is multi-session, team-scale, design-heavy, risky, or explicitly autonomous, create docs/dev_tasks/<task>/ before implementation. If prior work exists elsewhere, first absorb or summarize it into the project home.
  2. Understand and scout - Restate the north star, final deliverable, acceptance criteria, quality bar, non-goals, constraints, risks, and target branch line (DART 7 main, DART 6 LTS, or both). Scout the territory first with named docs/code, read-only searches, a dart-analyze pass, or focused reference review; draft a candidate decomposition privately before asking anything.
  3. Interview decisions; self-resolve uncertainties - Ask at most one up-front batch of critical questions. Escalate before destructive operations, history rewrites, irreversible migrations, meaningful cost, security/credential/secret handling, legal or privacy-sensitive decisions, major product-direction choices not covered by the brief, conflicts with stated constraints, or any assumption whose wrong answer could cause significant harm. If input is unavailable, choose the safest reversible path, document the assumption, and continue only with non-blocked work. Then split consequential unknowns:
    • Maintainer decisions: preference, scope, public API, release, quality-bar, or roadmap calls that evidence cannot settle. Ask the human now in one batched interview (focused questions with 2-4 concrete options each, recommendation first). Do not start large work while a consequential decision is open. Skip this discretionary interview when mode=brief; also skip when interview=skip and the prompt already answers everything consequential. In both cases, still follow the escalation rules above.
    • Evidence-resolvable uncertainties: anything a focused A/B test, benchmark, throwaway spike, reference lookup, or blind-spot review can settle. Do not ask the human; schedule these as spike/research packets and record the method and result as evidence (see "Discovering unknowns before committing" in docs/ai/orchestration.md).
  4. Create or refresh the tracking surface - Populate the project home with value, north star, deliverable, scope, non-goals, assumptions, risks, acceptance evidence, gates, dependencies, milestone, next actions, and blockers. Behavior-bearing physics/simulation work needs a high-quality, self-contained GUI or demos-app artifact unless explicitly out of scope. Keep RESUME.md as the handoff; add decisions.md, verification.md, and progress-log.md sidecars when they improve resumability or evidence.
  5. Set the goal contract - Express done-when as verifiable outcomes (files, tests, gates, artifacts). When the session supports a goal or stop-hook mode (for example /goal in Claude Code), set it to this contract so orchestration cannot stop early or loop forever. Stop once the acceptance criteria are satisfied, verification is recorded, docs are current, known gaps are documented, and unnecessary work has been removed or deferred. Every delegated packet gets its own contract: GOAL (one sentence), DONE WHEN (verifiable), EVIDENCE (what to record), RISKS, and NEXT STEP.
  6. Decompose and route to workers - Cut work packets per docs/ai/orchestration.md, then route by the current model routing in docs/ai/README.md: implementation packets to Codex executors, iterative build/test lanes to team workers when available, review lanes to an independent session, and critical decisions or stuck failures to the oracle. Without team tooling, execute packets sequentially through dart-execute-packet. Use parallelism only when the environment supports it and file ownership can stay disjoint.
  7. Run the autonomous work/review cycle - For each meaningful chunk: plan, execute, verify, then run an independent/specialized review lane. Treat review findings as hypotheses: investigate, fix or record no-fix evidence, clean up, re-verify, and re-review. A packet is not done until the current post-fix state has at least two clean review passes recorded.
  8. Supervise and steer - Monitor progress; unblock, reassign, or re-cut packets on scope mismatch. Workers return Task, Summary, Files changed, Evidence/tests, Risks, and Recommended next step. Use Codex from Claude, Claude from Codex, subagents, or specialist reviewers when available; fall back to role-separated local review only when unavailable. Root-cause failures and fold newly discovered unknowns back into step 3.
  9. Update docs at each stopping point - Every meaningful cycle updates the project home: README.md for status/plan/risks, RESUME.md for the next fresh-session handoff, decisions.md if decisions changed, verification.md if checks ran or gaps were found, and progress-log.md for completed chunks when that sidecar exists. Keep docs current enough for a zero-context session to resume without hidden chat memory.
  10. Version-control and closeout - Keep commits and PRs coherent: separate feature work, bug fixes, refactors, docs, experiments, and AI-infra changes when practical; review the diff, remove unrelated changes, make the changelog decision, and run pixi run lint before commits. Run task-specific gates from docs/ai/verification.md, record evidence per packet, and complete the principle audit. A project is complete only when the north star and acceptance criteria are met, verification evidence is recorded, docs are current, known gaps are documented, unnecessary work is removed or deferred, and final state is summarized in RESUME.md or a durable owner. Promote durable artifacts out of docs/dev_tasks/<task>/ and remove the folder in the completing PR. GitHub mutations (push, PR, comments, re-triggers) only with explicit maintainer/user approval.

Kickoff Prompt Template

Canonical fresh-session prompt. TASK, context, and Done when are per-task; reuse the Logistics block verbatim.

TASK: <one-sentence objective>

<Per-task context: constraints, quality bar, must/never rules, and pointers
to the docs, code, branches, or references that define the territory.>

Done when:
- <verifiable outcome: a file, test, gate, benchmark, or artifact>
- <verifiable outcome>

Logistics:
- Run /dart-ultrawork with this task. You are the orchestrator,
  supervisor, and steerer: decompose, delegate, review, and keep evidence
  honest.
- Interview first: ask the maintainer only the consequential decisions that
  evidence cannot settle; resolve everything else yourself and record the
  evidence.
- Use docs/dev_tasks/<task>/ as the project home. Keep README.md,
  RESUME.md, and any decisions.md / verification.md / progress-log.md
  sidecars current enough for a zero-context session to resume.
- Prioritize correctness over speed, but stop once acceptance criteria are
  satisfied, verification is recorded, docs are current, and known gaps are
  documented. Manage resources responsibly; avoid endless exploration and
  low-value polishing.
- Route well-defined implementation packets to Codex executors with GOAL /
  DONE WHEN / EVIDENCE. Use team mode only when available and file ownership
  can stay disjoint. Keep authoring and review separate. Use the oracle for
  critical decisions, hard failures, and research synthesis.
- Set goal mode to Done-when; use Claude `/goal Run /dart-ultrawork with:
  <real prompt>` or Codex `/goal $dart-ultrawork <real prompt>`. Treat Claude
  goal text beginning `ulw:` or `ultrawok:` as shorthand for the same canonical
  `/dart-ultrawork` workflow, not as separate capabilities.
- Read docs/ai/principles.md, docs/ai/north-star.md,
  docs/ai/orchestration.md, and docs/ai/sessions.md before starting.
- Review loop: use specialized reviewers when available, investigate findings,
  and require two clean passes on the current state before done.
- Verification first: task-specific gates, GUI/demo evidence when relevant,
  pixi run lint before commits; GitHub mutations only with approval.

Output

  • Interview record, uncertainty-resolution evidence, and project-home path
  • Packet list, routing, goal contracts, gates, and review-loop status
  • Per-packet evidence, GUI/demo artifacts when relevant, and updated docs
  • Principle audit, cleanup status, and approved external mutations
用于验证DART 3D场景和物理仿真的正确性。通过文本指标(能量、碰撞等)为主,渲染图像为辅的方式,检测动力学缺陷、几何穿透等问题,支持无GUI环境下的调试与基准测试。
需要验证DART 3D场景或物理仿真正确性时 调试或审查动力学、碰撞、接触或GUI输出时 进行性能基准测试或代码审查时
.codex/skills/dart-verify-sim/SKILL.md
npx skills add dartsim/dart --skill dart-verify-sim -g -y
SKILL.md
Frontmatter
{
    "name": "dart-verify-sim",
    "description": "DART Verify Sim: text-first and visual checks for 3D scenes and physics (metrics, scene dump, trajectories, headless render, image verdict\/golden)"
}

DART Simulation Verification

Load this skill when verifying that a DART 3D scene or physics simulation is correct — implementing, debugging, benchmarking, or reviewing dynamics, collision, contact, or GUI output. DART's domains need 3D understanding that language models lack natively; this tooling makes it checkable without a GUI.

Lead with text, corroborate with images. Measured A/B evidence: per-step metrics and trajectories detect nearly all seeded physics defects; a rendered image alone misses static geometry defects (penetration, interpenetration). Decide correctness from text; use images for scene comprehension and gross dynamic failures.

Full documentation

docs/onboarding/agent-sim-verification.md — the durable guide. docs/ai/verification.md owns the gate policy; docs/onboarding/profiling.md owns text-first profiling.

Quick commands

Text (primary):

  • world.compute_step_metrics() — energy/momentum/penetration/contacts/residual
  • dartpy.dump_scene_json(world) / dump_scene_text(world) — "what is in this world?" (glTF/USD-flavored hierarchy + flat index)
  • pixi run scene-diff — structural JSON verdict for intended-vs-actual scene dumps
  • pixi run trajectory-record / pixi run trajectory-compare — per-body TSV + contact JSONL; bit-exact or tolerance diff with first-divergence

Visual (corroboration):

  • dart.gui.render(world, camera=None, size=(w, h)) → headless image; .png_bytes() for notebooks; dart.gui.orbit_camera(...) / look_at(...)
  • viewer camera flags: --view {three-quarter|front|side|top}, --camera-azimuth/-elevation/-distance/-target, --turntable N, --fit
  • pixi run py-demo-capture — headless PNG/MP4 capture from Python
  • pixi run image-verdict / image-golden / image-sheet — JSON verdict, golden diff, contact sheet (contrast is report-only; --require-contrast to gate)
  • pixi run image-ab-study — blind-judge detection deltas for single-view, multi-view, turntable, and annotated captures
  • pixi run image-ab-round2 — prepare a blinded round-2 packet and score completed judge observations

Opt-in:

  • pixi run render-golden-gate — opt-in golden gate (backend-specific golden, curated locally with -- --update; not default CI)
  • pixi run rerun-trajectory — rerun.io inspection (opt-in; graceful when rerun-sdk is absent)
  • pixi run verification-bundle — package text evidence plus still/grid images for a provider-neutral VLM or reviewer call

Default capture for agent review: one ~1280 px frame, UI hidden, 3/4 view; add a 9-frame grid for motion. Keep images as corroboration, never the sole oracle for static geometry.

DART 6 (release-6.20)

Equivalent capture over OpenSceneGraph: dart::gui::osg::setUpOffscreenViewer / captureOffscreen + dartpy bindings, pixi run capture (needs a real X server or Xvfb), the ported image tooling, and pixi run bm-boxes-headless for rendering-free determinism checksums.

ホーム - Wiki
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-07-23 01:11
浙ICP备14020137号-1 $お客様$