用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/dylanroscover/Embody --skill run-tests命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
正在显示 SKILL.md
MUST READ before first MCP tool call in a session. Complete Envoy tool catalog with parameters and usage.
Procedure for preparing version release commits -- changelog, README, templates, versioning
Merge or compare two divergent TouchDesigner .tox/.toe binaries that git cannot three-way-merge. Load when a merge/rebase conflicts on a .tox or .toe, when asked to merge, port, reconcile, or diff two versions of a TD component, or when comparing a component across branches, machines, or TD builds.
| name | run-tests |
| description | Run Embody's test suite and write new tests (Embody development) |
| disable-model-invocation | true |
Embody has 110+ test suites (2,500+ tests) under dev/embody/unit_tests/ covering externalization, MCP tools, TDN format, the Envoy server/bridge/jobs, install/upgrade paths, and infrastructure. Destructive and agent tiers are segregated behind their own entry points.
From TouchDesigner:
op.unit_tests.RunTests() # All tests, one per frame
op.unit_tests.RunTests(suite_name='test_path_utils') # Specific suite
op.unit_tests.RunTests(suite_name='test_path_utils', test_name='test_normalizePath_backslashes_converted')
op.unit_tests.RunTestsSync() # Synchronous (blocks TD)
results = op.unit_tests.GetResults() # Get results dict
Via MCP -- use the run_tests tool, NOT RunTestsSync inside execute_python:
run_tests(background=True) # all suites -- RECOMMENDED for full runs
get_job_status(job_id='job_...') # poll; the finished record carries the summary
run_tests(suite_name='test_path_utils') # small targeted runs may stay synchronous
For a FULL run always pass background=True: it returns a job id
immediately and results park restart-proof in .embody/jobs/. The
synchronous mode holds the HTTP call open for the whole run, and the Envoy
watchdog suites restart the very server it waits on -- the call is severed
("Server force-restarted / shutting down during test run") even though the
run finishes. (Pre-job-layer fallback, still valid: poll
execute_python(code="result = op.unit_tests.GetResults()") until the
totals stop moving.)
RunTestsSync() inside execute_python runs the whole suite INSIDE that
dispatch's undo block: the undo-guard tests fail (a block is already open)
and the entire run becomes one giant Ctrl+Z step.
Create a test file in dev/embody/unit_tests/:
"""Test suite: description of what this tests."""
class TestMyFeature(EmbodyTestCase):
def test_something(self):
"""Test description."""
op = self.sandbox.create(baseCOMP, 'test_op')
result = self.embody_ext.someMethod(op)
self.assertEqual(result, expected_value)
self.assertTrue(op.valid)
self.assertIn('foo', result)
def setUp(self):
pass
def tearDown(self):
super().tearDown() # Cleans up sandbox
Key objects: self.sandbox (temp baseCOMP), self.embody (op.Embody), self.embody_ext (op.Embody.ext.Embody), self.runner (TestRunnerExt). All TD globals available.
Count suites with ls dev/embody/unit_tests/test_*.py -- the hand-maintained breakdown that used to sit here drifted 4x stale and was removed. Suite docstrings state their scope.
Always read log files at dev/logs/ — the ring buffer only holds 200 entries. Grep for ERROR and WARNING.