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 .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
blank_issues_enabled: false
contact_links:
- name: Goose Discord discussion
- name: goose Discord discussion
url: https://discord.gg/block-opensource
about: Please ask and answer questions here.
- name: Report a security vulnerability
Expand Down
22 changes: 11 additions & 11 deletions .github/ISSUE_TEMPLATE/submit-recipe.yml
Original file line number Diff line number Diff line change
@@ -1,25 +1,25 @@
name: 🧑‍🍳 Submit a Recipe to the Goose Cookbook
description: Share a reusable Goose recipe with the community!
name: 🧑‍🍳 Submit a recipe to the goose cookbook
description: Share a reusable goose recipe with the community!
title: "[Recipe] <your recipe title here>"
labels: ["recipe submission"]
body:
- type: markdown
attributes:
value: |
Thanks for contributing to the Goose Cookbook! 🍳
Recipes are reusable sessions created in Goose Desktop or CLI and shared with the community to help others vibe code faster.
Thanks for contributing to the goose cookbook! 🍳
Recipes are reusable sessions created in goose desktop or CLI and shared with the community to help others vibe code faster.

📌 **How to Submit**
- Create your recipe using Goose ("Make recipe from this session")
- Create your recipe using goose ("Make recipe from this session")
- Fill out the YAML below using the format provided
- Paste it into the field and submit the issue — we'll review and add it to the Cookbook!
- Paste it into the field and submit the issue — we'll review and add it to the cookbook!

🪄 **What Happens After?**
- If accepted, we'll publish your recipe to the [Goose Recipes Cookbook](https://block.github.io/goose/recipes)
- If accepted, we'll publish your recipe to the [goose recipes cookbook](https://block.github.io/goose/recipes)
- You'll receive OpenRouter **LLM API credits** as a thank you!
- Your GitHub handle will be displayed and linked on the recipe card
- If you provide an email below, we'll email you your credits when your recipe is approved and merged.
- If the YAML has any issues, Goose will comment with validation errors so you can fix and resubmit.
- If the YAML has any issues, goose will comment with validation errors so you can fix and resubmit.

🧪 **Pro Tip:** You can test your recipe locally in your terminal with:
`goose recipe validate your-recipe.yaml`
Expand All @@ -28,7 +28,7 @@ body:
id: recipe-yaml
attributes:
label: Paste Your Full Recipe YAML Below
description: Use the structure below and well auto-fill your GitHub handle for `author.contact` after submission.
description: Use the structure below and we'll auto-fill your GitHub handle for `author.contact` after submission.
placeholder: |
version: "1.0.0"
id: clean-up-feature-flag
Expand Down Expand Up @@ -103,8 +103,8 @@ body:
- `id` should be lowercase, hyphenated, and unique (e.g. `my-awesome-recipe`)
- `title` is the display name of your recipe
- `description` should clearly explain what the recipe does
- `instructions` are specific steps Goose should follow — supports template variables like `{{ variable_name }}`
- `prompt` is the first thing Goose sees when the recipe is launched
- `instructions` are specific steps goose should follow — supports template variables like `{{ variable_name }}`
- `prompt` is the first thing goose sees when the recipe is launched
- `parameters` should include required or optional inputs — optional ones must have `default`
- `extensions` must follow the full format with `type`, `cmd`, `args`, `timeout`, etc.
- `activities` describe the main actions the recipe performs
14 changes: 7 additions & 7 deletions .github/scripts/send_key.py
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ def provision_api_key(provisioning_api_key):
"Content-Type": "application/json"
},
json={
"name": "Goose Contributor",
"name": "goose contributor",
"label": "goose-cookbook",
"limit": 10.0
}
Expand All @@ -167,13 +167,13 @@ def send_email(email, api_key, sendgrid_api_key):
print("📤 Sending email via SendGrid...")
try:
sg = SendGridAPIClient(sendgrid_api_key)
from_email = "Goose Team <[email protected]>"
subject = "🎉 Your Goose Contributor API Key"
from_email = "goose team <[email protected]>"
subject = "🎉 Your goose contributor API key"
html_content = f"""
<p>Thank you for contributing to the <strong>Goose Recipe Cookbook</strong>!</p>
<p>Thank you for contributing to the <strong>goose recipe cookbook</strong>!</p>
<p>🎉 Here's your <strong>$10 OpenRouter API key</strong>:</p>
<pre style="background-color:#f4f4f4;padding:10px;border-radius:6px;"><code>{api_key}</code></pre>
<p>To use this in Goose (CLI or Desktop):</p>
<p>To use this in goose (CLI or Desktop):</p>
<ul>
<li>Go to your <strong>Provider Settings</strong></li>
<li>Select <strong>OpenRouter</strong> from the provider list</li>
Expand All @@ -182,7 +182,7 @@ def send_email(email, api_key, sendgrid_api_key):
<p>📚 Full setup instructions:<br>
<a href="https://block.github.io/goose/docs/getting-started/providers/#configure-provider">
https://block.github.io/goose/docs/getting-started/providers/#configure-provider</a></p>
<p>Happy coding!<br>– The Goose Team</p>
<p>Happy coding!<br>– the goose team</p>
"""
message = Mail(
from_email=from_email,
Expand Down Expand Up @@ -216,7 +216,7 @@ def comment_on_pr(github_token, repo_full_name, pr_number, email):
"Accept": "application/vnd.github+json"
},
json={
"body": f"✅ $10 OpenRouter API key sent to `{email}`. Thanks for your contribution to the Goose Cookbook!"
"body": f"✅ $10 OpenRouter API key sent to `{email}`. Thanks for your contribution to the goose cookbook!"
}
)
comment_resp.raise_for_status()
Expand Down
20 changes: 10 additions & 10 deletions .github/workflows/bundle-desktop-intel.yml
Original file line number Diff line number Diff line change
Expand Up @@ -192,10 +192,10 @@ jobs:
source_job_url="https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
unsigned_url="s3://block-goose-artifacts-bucket-production/unsigned/goose-${GITHUB_SHA}-${{ github.run_id }}-intel.zip"

zip -q -u -r out/Goose-darwin-x64/Goose_intel_mac.zip entitlements.plist
zip -q -u -r out/goose-darwin-x64/goose_intel_mac.zip entitlements.plist

# upload unsigned goose to transfer bucket so it can be passed to lambda
aws s3 cp --quiet out/Goose-darwin-x64/Goose_intel_mac.zip "${unsigned_url}"
aws s3 cp --quiet out/goose-darwin-x64/goose_intel_mac.zip "${unsigned_url}"

# begin signing
echo "🚀 launching signing process"
Expand Down Expand Up @@ -247,7 +247,7 @@ jobs:

# download the signed app from S3
echo "⬇️ downloading signed app"
aws s3 cp --quiet "${signed_url}" out/Goose-darwin-x64/Goose_intel_mac.zip
aws s3 cp --quiet "${signed_url}" out/goose-darwin-x64/goose_intel_mac.zip
working-directory: ui/desktop

- name: Final cleanup before artifact upload
Expand All @@ -261,26 +261,26 @@ jobs:
- name: Upload Desktop artifact
uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # pin@v4
with:
name: Goose-darwin-x64
path: ui/desktop/out/Goose-darwin-x64/Goose_intel_mac.zip
name: goose-darwin-x64
path: ui/desktop/out/goose-darwin-x64/goose_intel_mac.zip

- name: Quick launch test (macOS)
if: ${{ inputs.quick_test }}
run: |
# Ensure no quarantine attributes (if needed)
xattr -cr "ui/desktop/out/Goose-darwin-x64/Goose.app"
echo "Opening Goose.app..."
open -g "ui/desktop/out/Goose-darwin-x64/Goose.app"
xattr -cr "ui/desktop/out/goose-darwin-x64/goose.app"
echo "Opening goose.app..."
open -g "ui/desktop/out/goose-darwin-x64/goose.app"

# Give the app a few seconds to start and write logs
sleep 5

# Check if it's running
if pgrep -f "Goose.app/Contents/MacOS/Goose" > /dev/null; then
if pgrep -f "goose.app/Contents/MacOS/goose" > /dev/null; then
echo "App appears to be running."
else
echo "App did not stay open. Possible crash or startup error."
exit 1
fi
# Kill the app to clean up
pkill -f "Goose.app/Contents/MacOS/Goose"
pkill -f "goose.app/Contents/MacOS/goose"
6 changes: 3 additions & 3 deletions .github/workflows/bundle-desktop-linux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -180,21 +180,21 @@ jobs:
- name: Upload .deb package
uses: actions/upload-artifact@v4
with:
name: Goose-linux-x64-deb
name: goose-linux-x64-deb
path: ui/desktop/out/make/deb/x64/*.deb
if-no-files-found: error

- name: Upload .rpm package
uses: actions/upload-artifact@v4
with:
name: Goose-linux-x64-rpm
name: goose-linux-x64-rpm
path: ui/desktop/out/make/rpm/x64/*.rpm
if-no-files-found: error

- name: Upload combined Linux packages
uses: actions/upload-artifact@v4
with:
name: Goose-linux-x64
name: goose-linux-x64
path: |
ui/desktop/out/make/deb/x64/*.deb
ui/desktop/out/make/rpm/x64/*.rpm
Expand Down
40 changes: 20 additions & 20 deletions .github/workflows/bundle-desktop-windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -284,12 +284,12 @@ jobs:
- name: Copy exe/dll to final out folder and prepare flat distribution
run: |
cd ui/desktop
mkdir -p ./out/Goose-win32-x64/resources/bin
rsync -av src/bin/ out/Goose-win32-x64/resources/bin/
mkdir -p ./out/goose-win32-x64/resources/bin
rsync -av src/bin/ out/goose-win32-x64/resources/bin/

# Create flat distribution structure
mkdir -p ./dist-windows
cp -r ./out/Goose-win32-x64/* ./dist-windows/
cp -r ./out/goose-win32-x64/* ./dist-windows/

# Verify the final structure
echo "📋 Final flat distribution structure:"
Expand Down Expand Up @@ -318,8 +318,8 @@ jobs:
wget -q https://github.com/ebourg/jsign/releases/download/6.0/jsign-6.0.jar -O jsign.jar
echo "05ca18d4ab7b8c2183289b5378d32860f0ea0f3bdab1f1b8cae5894fb225fa8a jsign.jar" | sha256sum -c

# Sign the main Electron executable (Goose.exe)
echo "🔐 Signing main Electron executable: Goose.exe"
# Sign the main Electron executable (goose.exe)
echo "🔐 Signing main Electron executable: goose.exe"
cd ui/desktop/dist-windows/

java -jar ${GITHUB_WORKSPACE}/jsign.jar \
Expand All @@ -329,12 +329,12 @@ jobs:
--alias windows-codesign \
--certfile "${GITHUB_WORKSPACE}/block-codesign-cert.pem" \
--tsaurl "http://timestamp.digicert.com" \
--name "Goose" \
--name "goose" \
--url "https://github.com/block/goose" \
"Goose.exe"
"goose.exe"

osslsigncode verify Goose.exe
echo "✅ Main executable Goose.exe signed successfully"
osslsigncode verify goose.exe
echo "✅ Main executable goose.exe signed successfully"

# Sign the backend executable (goosed.exe)
echo "🔐 Signing backend executable: goosed.exe"
Expand All @@ -347,7 +347,7 @@ jobs:
--alias windows-codesign \
--certfile "${GITHUB_WORKSPACE}/block-codesign-cert.pem" \
--tsaurl "http://timestamp.digicert.com" \
--name "Goose Backend" \
--name "goose Backend" \
--url "https://github.com/block/goose" \
"goosed.exe"

Expand All @@ -357,8 +357,8 @@ jobs:
# Show final file status
echo "📋 Final signed files:"
cd ../../
ls -la Goose.exe
sha256sum Goose.exe
ls -la goose.exe
sha256sum goose.exe
ls -la resources/bin/goosed.exe
sha256sum resources/bin/goosed.exe

Expand All @@ -371,8 +371,8 @@ jobs:
run: |
echo "📋 Verifying both signed executables in final distribution:"
echo "Main executable:"
ls -la ui/desktop/dist-windows/Goose.exe
osslsigncode verify ui/desktop/dist-windows/Goose.exe
ls -la ui/desktop/dist-windows/goose.exe
osslsigncode verify ui/desktop/dist-windows/goose.exe
echo "✅ Main executable signature verification passed"

echo "Backend executable:"
Expand All @@ -387,18 +387,18 @@ jobs:
echo "📦 Creating Windows zip package..."

# Create a zip file from the dist-windows directory
zip -r "Goose-win32-x64.zip" dist-windows/
zip -r "goose-win32-x64.zip" dist-windows/

echo "✅ Windows zip package created:"
ls -la Goose-win32-x64.zip
ls -la goose-win32-x64.zip

# Also create the zip in the expected output structure for consistency
mkdir -p out/Goose-win32-x64/
cp Goose-win32-x64.zip out/Goose-win32-x64/
mkdir -p out/goose-win32-x64/
cp goose-win32-x64.zip out/goose-win32-x64/

# 11) Upload the final Windows build
- name: Upload Windows build artifacts
uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # pin@v4
with:
name: Goose-win32-x64
path: ui/desktop/out/Goose-win32-x64/Goose-win32-x64.zip
name: goose-win32-x64
path: ui/desktop/out/goose-win32-x64/goose-win32-x64.zip
20 changes: 10 additions & 10 deletions .github/workflows/bundle-desktop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -226,10 +226,10 @@ jobs:
source_job_url="https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
unsigned_url="s3://block-goose-artifacts-bucket-production/unsigned/goose-${GITHUB_SHA}-${{ github.run_id }}-arm64.zip"

zip -q -u -r out/Goose-darwin-arm64/Goose.zip entitlements.plist
zip -q -u -r out/goose-darwin-arm64/goose.zip entitlements.plist

# upload unsigned goose to transfer bucket so it can be passed to lambda
aws s3 cp --quiet out/Goose-darwin-arm64/Goose.zip "${unsigned_url}"
aws s3 cp --quiet out/goose-darwin-arm64/goose.zip "${unsigned_url}"

# begin signing
echo "🚀 launching signing process"
Expand Down Expand Up @@ -281,7 +281,7 @@ jobs:

# download the signed app from S3
echo "⬇️ downloading signed app"
aws s3 cp --quiet "${signed_url}" out/Goose-darwin-arm64/Goose.zip
aws s3 cp --quiet "${signed_url}" out/goose-darwin-arm64/goose.zip
working-directory: ui/desktop

- name: Final cleanup before artifact upload
Expand All @@ -296,26 +296,26 @@ jobs:
id: upload-app-bundle
uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # pin@v4
with:
name: Goose-darwin-arm64
path: ui/desktop/out/Goose-darwin-arm64/Goose.zip
name: goose-darwin-arm64
path: ui/desktop/out/goose-darwin-arm64/goose.zip

- name: Quick launch test (macOS)
if: ${{ inputs.quick_test }}
run: |
# Ensure no quarantine attributes (if needed)
xattr -cr "ui/desktop/out/Goose-darwin-arm64/Goose.app"
echo "Opening Goose.app..."
open -g "ui/desktop/out/Goose-darwin-arm64/Goose.app"
xattr -cr "ui/desktop/out/goose-darwin-arm64/goose.app"
echo "Opening goose.app..."
open -g "ui/desktop/out/goose-darwin-arm64/goose.app"

# Give the app a few seconds to start and write logs
sleep 5

# Check if it's running
if pgrep -f "Goose.app/Contents/MacOS/Goose" > /dev/null; then
if pgrep -f "goose.app/Contents/MacOS/goose" > /dev/null; then
echo "App appears to be running."
else
echo "App did not stay open. Possible crash or startup error."
exit 1
fi
# Kill the app to clean up
pkill -f "Goose.app/Contents/MacOS/Goose"
pkill -f "goose.app/Contents/MacOS/goose"
1 change: 0 additions & 1 deletion .github/workflows/canary.yml
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,6 @@ jobs:
artifacts: |
goose-*.tar.bz2
goose-*.zip
Goose*.zip
*.deb
*.rpm
download_cli.sh
Expand Down
1 change: 0 additions & 1 deletion .github/workflows/nightly.yml
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,6 @@ jobs:
artifacts: |
goose-*.tar.bz2
goose-*.zip
Goose*.zip
*.deb
*.rpm
download_cli.sh
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/pr-comment-bundle-intel.yml
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ jobs:
- name: Download Intel artifact
uses: actions/download-artifact@cc203385981b70ca67e1cc392babf9cc229d5806 # pin@v4
with:
name: Goose-darwin-x64
name: goose-darwin-x64
path: intel-dist

- name: Comment on PR with Intel download link
Expand All @@ -91,9 +91,9 @@ jobs:
body: |
### macOS Intel Desktop App (x64)

[💻 Download macOS Desktop App (Intel x64, signed)](https://nightly.link/${{ github.repository }}/actions/runs/${{ github.run_id }}/Goose-darwin-x64.zip)
[💻 Download macOS Desktop App (Intel x64, signed)](https://nightly.link/${{ github.repository }}/actions/runs/${{ github.run_id }}/goose-darwin-x64.zip)

**Instructions:**
After downloading, unzip the file and drag the Goose.app to your Applications folder. The app is signed and notarized for macOS.
After downloading, unzip the file and drag the goose.app to your Applications folder. The app is signed and notarized for macOS.

This link is provided by nightly.link and will work even if you're not logged into GitHub.
2 changes: 1 addition & 1 deletion .github/workflows/pr-comment-bundle-windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,6 @@ jobs:
[🪟 Download Windows Desktop App (x64, signed)](https://nightly.link/${{ github.repository }}/actions/runs/${{ github.run_id }}/desktop-windows-dist.zip)

**Instructions:**
After downloading, unzip the file and run Goose.exe. The app is signed for Windows.
After downloading, unzip the file and run goose.exe. The app is signed for Windows.

This link is provided by nightly.link and will work even if you're not logged into GitHub.
Loading
Loading