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

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .agents/skills/release-yield/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ name: release-yield
description: "Release Yield through its protected GitHub workflows and verify every public registry."
---

<!-- generated-by: yskill; source: skills/release-yield; digest: sha256:7d0b9506af78606920322c52131a716ff50e37826703a07baedaafd19a1f7992; version: 0.1.38 -->
<!-- generated-by: yskill; source: skills/release-yield; digest: sha256:67db7d77c1f4f2d7ccc597c43c9bfe4be84be0795121cac9a3f08f79017b5738; version: 0.1.38 -->

This adapter exposes the canonical Yield workflow at `skills/release-yield`.
Read its SKILL.md, then run from the repository root:
Expand Down
5 changes: 5 additions & 0 deletions .changeset/agent-first-bootstrap.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@operatorstack/yield": minor
---

Add the agent-first bootstrap command, the tested workflow builder for all four SDKs, and the `@operatorstack/create-yield` initializer.
2 changes: 1 addition & 1 deletion .claude/skills/release-yield/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ name: release-yield
description: "Release Yield through its protected GitHub workflows and verify every public registry."
---

<!-- generated-by: yskill; source: skills/release-yield; digest: sha256:7d0b9506af78606920322c52131a716ff50e37826703a07baedaafd19a1f7992; version: 0.1.38 -->
<!-- generated-by: yskill; source: skills/release-yield; digest: sha256:67db7d77c1f4f2d7ccc597c43c9bfe4be84be0795121cac9a3f08f79017b5738; version: 0.1.38 -->

This adapter exposes the canonical Yield workflow at `skills/release-yield`.
Read its SKILL.md, then run from the repository root:
Expand Down
2 changes: 1 addition & 1 deletion .cursor/skills/release-yield/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ name: release-yield
description: "Release Yield through its protected GitHub workflows and verify every public registry."
---

<!-- generated-by: yskill; source: skills/release-yield; digest: sha256:7d0b9506af78606920322c52131a716ff50e37826703a07baedaafd19a1f7992; version: 0.1.38 -->
<!-- generated-by: yskill; source: skills/release-yield; digest: sha256:67db7d77c1f4f2d7ccc597c43c9bfe4be84be0795121cac9a3f08f79017b5738; version: 0.1.38 -->

This adapter exposes the canonical Yield workflow at `skills/release-yield`.
Read its SKILL.md, then run from the repository root:
Expand Down
23 changes: 23 additions & 0 deletions .github/workflows/npm-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,18 @@ jobs:
else
(cd dist/release-unit/npm/yield && npm publish --tag "$DIST_TAG")
fi
- name: Publish npm initializer
env:
DIST_TAG: ${{ needs.resolve.outputs.dist_tag }}
VERSION: ${{ needs.resolve.outputs.version }}
shell: bash
run: |
set -euo pipefail
if npm view "@operatorstack/create-yield@${VERSION}" version >/dev/null 2>&1; then
echo "@operatorstack/create-yield@${VERSION} already exists"
else
(cd dist/release-unit/npm/create-yield && npm publish --tag "$DIST_TAG")
fi
- name: Verify complete npm release unit
env:
VERSION: ${{ needs.resolve.outputs.version }}
Expand All @@ -220,6 +232,17 @@ jobs:
sleep 10
done
done
- name: Smoke test npm initializer
env:
VERSION: ${{ needs.resolve.outputs.version }}
shell: bash
run: |
set -euo pipefail
root="$RUNNER_TEMP/create-yield-smoke"
mkdir -p "$root"
npm create "@operatorstack/yield@${VERSION}" -- \
--root "$root" --agent codex --dry-run
test ! -e "$root/skills"

pypi:
needs: [resolve, build]
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/release-finalize.yml
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ jobs:
--name "crates-${version}-${SOURCE_SHA}" --dir "$RUNNER_TEMP/crates-receipt"
for package in \
@operatorstack/yield \
@operatorstack/create-yield \
@operatorstack/yield-darwin-amd64 @operatorstack/yield-darwin-arm64 \
@operatorstack/yield-linux-amd64 @operatorstack/yield-linux-arm64 \
@operatorstack/yield-windows-amd64 @operatorstack/yield-windows-arm64; do
Expand Down
29 changes: 27 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,31 @@ discover it.
Verified with Cursor, Codex, and Claude Code. Registry-backed project paths are
available for 73 more coding agents.

## Start with your coding agent

Run the command for your project:

| Language | Command |
|---|---|
| TypeScript | `npm create @operatorstack/yield@latest` |
| Python | `uvx --from yieldskill yskill bootstrap --language python` |
| Rust | `cargo install yieldskill --locked`, then `yskill bootstrap --language rust` |
| Go | `go run github.com/operatorstack/yield/cmd/yskill@latest bootstrap --language go` |

Yield detects the repository, language, and installed coding agents. It shows
every proposed file and dependency change. It asks before it writes. It then
installs, tests, and registers the `yield-workflow-builder` skill workflow.

Restart your coding agent. Then ask:

```text
Use Yield to turn my release skill into a tested workflow.
```

The builder can create a skill workflow from a description. It can also
convert an existing `SKILL.md`. Yield does not use install hooks to change the
repository.

## Move repeated instructions into code

A release skill often starts as prose:
Expand Down Expand Up @@ -127,7 +152,7 @@ Every newly published canary runs the same contract tests in an isolated CI
lane. Stable release execution remains pinned to an exact public version.
<!-- npm-exclude:end -->

## Use Yield in five steps
## Advanced: build manually

### 1. Install Yield

Expand All @@ -139,7 +164,7 @@ npm exec -- yskill --version
```

[Public npm releases](https://www.npmjs.com/package/@operatorstack/yield)
use trusted publishing. The SDK package and all six runtime packages include
use trusted publishing. The initializer, SDK, and six runtime packages include
SLSA v1 provenance.

### 2. Create the workflow
Expand Down
12 changes: 12 additions & 0 deletions cmd/yskill/agents.go
Original file line number Diff line number Diff line change
Expand Up @@ -576,6 +576,18 @@ func within(parent, child string) bool {
}

func launcherFor(language, skillDir, repoRoot string) (string, error) {
if language == "python" {
profile, err := readBootstrapProfile(repoRoot)
if err != nil {
return "", err
}
if profile.LauncherProfile == "python-uvx" {
if profile.YieldVersion == "" {
return "", fmt.Errorf("bootstrap profile is missing yield_version")
}
return fmt.Sprintf("uvx --from 'yieldskill==%s' yskill", shellQuoteValue(profile.YieldVersion)), nil
}
}
switch language {
case "typescript":
packageRoot, err := findTypeScriptPackageRoot(skillDir, repoRoot)
Expand Down
Loading