Credited skills
Skill 32 of 54
Add and test declarative behavior-defined agentic engines in gh-aw, extending Go infrastructure only when necessary.
4 minutes · 809 words · 8 sections
Use this skill when adding a new agentic engine definition or extending the behavior-defined engine infrastructure.
Prefer a shared Markdown engine definition. Installation, execution, MCP
configuration, provider routing, caching, manifests, plugins, network defaults,
harness scripts, and log parsing can already be declared through
engine.behaviors.
Only change Go code when the engine needs a reusable behavior that the declarative model cannot express. Add a dedicated Go engine only when the shared behavior-defined runtime cannot run the engine at all.
| Need | Implementation |
|---|---|
| Existing behaviors are sufficient | Add an imported shared engine definition |
| A reusable declarative behavior is missing | Extend the definition model and behavior-defined runtime |
| The shared runtime is fundamentally unsuitable | Add a dedicated Go engine and register it |
The relevant implementation is in:
pkg/workflow/engine_definition.go for the definition model and catalogpkg/workflow/behavior_defined_engine.go for the shared runtimepkg/workflow/engine_definition_loader.go for embedded built-in definitionspkg/workflow/agentic_engine.go for dedicated Go engine registrationpkg/parser/schemas/main_workflow_schema.json for the workflow schemaRead the closest examples before making changes:
.github/workflows/shared/opencode.md: npm installation, merged
configuration, MCP, provider routing, and log parsing.github/workflows/shared/aider.md: Python installation and a custom harness
without native MCP.github/workflows/shared/crush.md: native MCP configuration adapter and
harness.github/workflows/shared/cursor.md: plugin support.github/workflows/shared/deepseek-harness.md: provider endpoint discovery
and a headless profileUse the examples to identify a pattern, not as a reason to copy optional behaviors.
.github/workflows/shared/<engine>.md.engine.id, display-name, description, experimental, provider
metadata, authentication, and only the required behaviors..github/aw/engines.json. Imported behavior-defined engines are registered
dynamically; do not add them to NewEngineRegistry()..github/workflows/smoke-<engine>.md, following the closest existing
smoke workflow. Import the shared definition and exercise the capabilities
the engine claims to support.docs/src/content/docs/reference/engines.md.minor change.make recompile and include the generated smoke workflow
.lock.yml.TestKnownEngineImportsFile_MatchesSharedEngineFiles in
pkg/workflow/engine_definition_test.go enforces catalog coverage for shared
external engines.
Keep the definition declarative and minimal:
behaviors.installation.behaviors.execution.behaviors.network.provider-domains.Treat inline JavaScript in harnesses, configuration adapters, and log parsers as production code. Avoid shell interpolation, validate paths and child-process arguments, preserve nonzero exit codes, and never print secret values. Enabling package lifecycle scripts requires a pinned version and an explicit reason.
For log and error regular expressions, also load
.github/skills/error-pattern-safety/SKILL.md.
When an engine exposes a generally useful capability that existing behaviors cannot express:
pkg/workflow/engine_definition.go.pkg/parser/schemas/main_workflow_schema.json.make generate-schema-docs when generated schema documentation changes.Do not add a schema field for a behavior that can be represented by existing installation, execution, environment, harness, or adapter fields.
For a dedicated Go runtime, implement the engine interfaces by composing the
existing helpers, keep engine-specific code in its own files, and register the
engine in pkg/workflow/agentic_engine.go. Cover configuration, commands,
environment, authentication, tools, logs, and failure handling with focused
tests.
Use tests that match the changed behavior:
| Area | Tests and examples |
|---|---|
| Harness, configuration, MCP, and environment | behavior_defined_engine_harness_test.go |
| Log parsing | behavior_defined_engine_log_parser_test.go |
| Cache behavior | behavior_defined_engine_cache_test.go |
| Definitions, catalog, and known imports | engine_definition_test.go, engine_catalog_test.go |
| Embedded definitions | engine_definition_loader_test.go |
| Real shared workflow harness | aider_workflow_test.go |
| Sandboxed CLI visibility | cloud_hypervisor_test.go |
| Generated smoke workflows | compiled_lock_files_test.go |
Test both definition parsing and the generated installation/execution steps. Include negative cases for unsafe paths, invalid configuration, missing credentials, or malformed logs when relevant.
After Go changes:
make build
make fmtAfter workflow Markdown changes:
make recompileRun focused go test commands for the changed behavior while iterating. Before
an intermediate progress report, run:
make agent-report-progress-no-testBefore the final progress report, run:
make agent-report-progressUse make agent-finish for the final repository validation when time allows.
Do not trigger a smoke workflow from a Copilot cloud agent run.
.github/aw/engines.json, smoke workflow, generated lock file,
documentation, and changeset are updated when applicable.Credited
This skill is installed in github/gh-aw — in use here rather than published from here — so there is no install command for it on this page.
main, last pushed 24 September 2026.SKILL.md, not by matching a directory convention. 4 distinct layouts observed: .claude/skills/*/SKILL.md, .github/skills/*/SKILL.md, .squad/*/skill.md, SKILL.md (repo root).h1 and no skipped levels:/github/gh-aw.md, and each skill at its own .md URL.