Skip to content

Automate OpenRouter API Key Distribution for External Recipe Contributors#3198

Merged
iandouglas merged 22 commits intomainfrom
api-key-automation
Aug 28, 2025
Merged

Automate OpenRouter API Key Distribution for External Recipe Contributors#3198
iandouglas merged 22 commits intomainfrom
api-key-automation

Conversation

@EbonyLouis
Copy link
Contributor

@EbonyLouis EbonyLouis commented Jul 1, 2025

This PR introduces a fully automated flow to reward community contributors who submit external recipes to the Goose Cookbook.

✅ What’s Included

  • send_key.py: A Python script that:

    • Extracts the contributor’s email from the PR body (base64-encoded)
    • Generates a $10 OpenRouter API key using the provisioning API
    • Sends the key via email using Resend's official Python SDK
    • Comments on the PR to confirm delivery
  • Updates to create-recipe-pr.yml:

    • Parses the email field from the recipe submission issue
    • Base64-encodes it and adds it to the PR body in a hidden HTML comment
  • New workflow send-api-key.yml:

    • Triggers only on merged PRs titled Add External Recipe:
    • Runs send_key.py to deliver the key and confirm via comment

📫 Contributor Experience

When a recipe PR is merged:

  • They receive an email with their OpenRouter API key
  • The PR is automatically updated with a confirmation comment

🔐 Secrets Required

Be sure the following secrets are set in the repo:

  • PROVISIONING_API_KEY – from OpenRouter

TO-DO:

  • EMAIL_API_KEY – from sendGrid ✅
  • update email with correct domain ✅

@EbonyLouis EbonyLouis marked this pull request as draft July 1, 2025 17:44
@zanesq
Copy link
Collaborator

zanesq commented Aug 22, 2025

@EbonyLouis still working on this?

@blackgirlbytes
Copy link
Contributor

@EbonyLouis still working on this?

yeah @zanesq there's a part 2 that @iandouglas is not working on! Thanks for checking. We should be merging this soon

@iandouglas
Copy link
Contributor

there's a part 2 that @iandouglas is not working on!

my first part of the integration is added, just waiting on a word from platform security about whether the Dockerfile I reference in my integration here should use a docker registry for the base container, or whether we want to pull training material from other secure storage like S3.

@github-actions
Copy link
Contributor

github-actions bot commented Aug 28, 2025

PR Preview Action v1.6.0
Preview removed because the pull request was closed.
2025-08-28 22:39 UTC

@EbonyLouis EbonyLouis marked this pull request as ready for review August 28, 2025 18:49
@EbonyLouis EbonyLouis requested a review from a team as a code owner August 28, 2025 18:49
@github-actions
Copy link
Contributor

Recipe Validation Failed

Please fix the validation errors and push your changes:

✅ documentation/src/pages/recipes/data/recipes/create-kafka-topic.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/migrate-from-poetry-to-uv.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/clean-up-feature-flag.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/readme-bot.yaml: VALID\n❌ documentation/src/pages/recipes/data/recipes/pull-request-generator.yaml: INVALID\n\n✗ Optional parameters missing default values in the recipe: push_pr. Please provide defaults. Error: Optional parameters missing default values in the recipe: push_pr. Please provide defaults.\n\n✅ documentation/src/pages/recipes/data/recipes/pr-demo-planner.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/dev-guide-migration.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/change-log.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/analyze-pr.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/recipe-generator.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/migrate-cypress-test-to-playwright.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/remove-ai-artifacts-from-python-code.yaml: VALID\n

📚 Check our Recipe Guide for help with the correct format.

@github-actions
Copy link
Contributor

🔍 Recipe Security Scan Results

⚠️ Status: SCAN FAILED - Technical issues during scanning

📊 Scan Summary:

  • Total recipes scanned: 12
  • Failed scans: 12

📋 Individual Recipe Results:
❓ Recipe 1: UNKNOWN (UNKNOWN risk)
❓ Recipe 2: UNKNOWN (UNKNOWN risk)
❓ Recipe 3: UNKNOWN (UNKNOWN risk)
❓ Recipe 4: UNKNOWN (UNKNOWN risk)
❓ Recipe 5: UNKNOWN (UNKNOWN risk)
❓ Recipe 6: UNKNOWN (UNKNOWN risk)
❓ Recipe 7: UNKNOWN (UNKNOWN risk)
❓ Recipe 8: UNKNOWN (UNKNOWN risk)
❓ Recipe 9: UNKNOWN (UNKNOWN risk)
❓ Recipe 10: UNKNOWN (UNKNOWN risk)
❓ Recipe 11: UNKNOWN (UNKNOWN risk)
❓ Recipe 12: UNKNOWN (UNKNOWN risk)

🔗 View detailed scan results in the workflow artifacts.

@github-actions
Copy link
Contributor

🔍 Recipe Security Scan Results

⚠️ Status: SCAN FAILED - Technical issues during scanning

📊 Scan Summary:

  • Total recipes scanned: 12
  • Failed scans: 12

📋 Individual Recipe Results:
❓ Recipe 1: UNKNOWN (UNKNOWN risk)
❓ Recipe 2: UNKNOWN (UNKNOWN risk)
❓ Recipe 3: UNKNOWN (UNKNOWN risk)
❓ Recipe 4: UNKNOWN (UNKNOWN risk)
❓ Recipe 5: UNKNOWN (UNKNOWN risk)
❓ Recipe 6: UNKNOWN (UNKNOWN risk)
❓ Recipe 7: UNKNOWN (UNKNOWN risk)
❓ Recipe 8: UNKNOWN (UNKNOWN risk)
❓ Recipe 9: UNKNOWN (UNKNOWN risk)
❓ Recipe 10: UNKNOWN (UNKNOWN risk)
❓ Recipe 11: UNKNOWN (UNKNOWN risk)
❓ Recipe 12: UNKNOWN (UNKNOWN risk)

🔗 View detailed scan results in the workflow artifacts.

@github-actions
Copy link
Contributor

🔍 Recipe Security Scan Results

Status: BLOCKED - One or more recipes have MEDIUM risk or higher

⚠️ Merge Protection: This PR cannot be merged until security concerns are addressed.
Repository maintainers can override this decision if needed.

📊 Scan Summary:

  • Total recipes scanned: 12
  • Blocked recipes: 1

📋 Individual Recipe Results:
✅ Recipe 1: APPROVED (LOW risk)
✅ Recipe 2: APPROVED (LOW risk)
✅ Recipe 3: APPROVED (LOW risk)
✅ Recipe 4: APPROVED (LOW risk)
✅ Recipe 5: APPROVED (LOW risk)
✅ Recipe 6: APPROVED (LOW risk)
✅ Recipe 7: APPROVED (LOW risk)
✅ Recipe 8: APPROVED (LOW risk)
✅ Recipe 9: APPROVED (LOW risk)
✅ Recipe 10: APPROVED (LOW risk)
✅ Recipe 11: APPROVED (LOW risk)
✅ Recipe 12: APPROVED (MEDIUM risk)

🔗 View detailed scan results in the workflow artifacts.

@github-actions
Copy link
Contributor

Recipe Validation Failed

Please fix the validation errors and push your changes:

✅ documentation/src/pages/recipes/data/recipes/create-kafka-topic.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/migrate-from-poetry-to-uv.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/clean-up-feature-flag.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/readme-bot.yaml: VALID\n❌ documentation/src/pages/recipes/data/recipes/pull-request-generator.yaml: INVALID\n\n✗ Optional parameters missing default values in the recipe: push_pr. Please provide defaults. Error: Optional parameters missing default values in the recipe: push_pr. Please provide defaults.\n\n✅ documentation/src/pages/recipes/data/recipes/pr-demo-planner.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/dev-guide-migration.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/change-log.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/analyze-pr.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/recipe-generator.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/migrate-cypress-test-to-playwright.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/remove-ai-artifacts-from-python-code.yaml: VALID\n

📚 Check our Recipe Guide for help with the correct format.

@github-actions
Copy link
Contributor

🔍 Recipe Security Scan Results

Status: APPROVED - All recipes passed security scan

📊 Scan Summary:

  • Total recipes scanned: 12

📋 Individual Recipe Results:
✅ Recipe 1: APPROVED (LOW risk)
✅ Recipe 2: APPROVED (LOW risk)
✅ Recipe 3: APPROVED (LOW risk)
✅ Recipe 4: APPROVED (LOW risk)
✅ Recipe 5: APPROVED (LOW risk)
✅ Recipe 6: APPROVED (LOW risk)
✅ Recipe 7: APPROVED (LOW risk)
✅ Recipe 8: APPROVED (LOW risk)
✅ Recipe 9: APPROVED (LOW risk)
✅ Recipe 10: APPROVED (LOW risk)
✅ Recipe 11: APPROVED (LOW risk)
✅ Recipe 12: APPROVED (LOW risk)

🔗 View detailed scan results in the workflow artifacts.

@github-actions
Copy link
Contributor

Recipe Validation Failed

Please fix the validation errors and push your changes:

✅ documentation/src/pages/recipes/data/recipes/create-kafka-topic.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/migrate-from-poetry-to-uv.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/clean-up-feature-flag.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/readme-bot.yaml: VALID\n❌ documentation/src/pages/recipes/data/recipes/pull-request-generator.yaml: INVALID\n\n✗ Optional parameters missing default values in the recipe: push_pr. Please provide defaults. Error: Optional parameters missing default values in the recipe: push_pr. Please provide defaults.\n\n✅ documentation/src/pages/recipes/data/recipes/pr-demo-planner.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/dev-guide-migration.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/change-log.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/analyze-pr.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/recipe-generator.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/migrate-cypress-test-to-playwright.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/remove-ai-artifacts-from-python-code.yaml: VALID\n

📚 Check our Recipe Guide for help with the correct format.

Comment on lines +365 to +392
run: |
# Check if recipe files were changed in this push
if [ "${{ steps.recipe_changes.outputs.recipe_files_changed }}" = "false" ]; then
# No recipe files were modified in this push - scan skipped
exit 0
fi

OUT="$RUNNER_TEMP/security-scan"
SUMMARY_FILE="$OUT/pr_scan_summary.json"

if [ -f "$SUMMARY_FILE" ]; then
OVERALL_STATUS=$(jq -r .overall_status "$SUMMARY_FILE")
echo "📊 Final scan result: $OVERALL_STATUS"

if [ "$OVERALL_STATUS" = "BLOCKED" ]; then
echo "::error::One or more recipes have MEDIUM risk or higher - PR merge blocked"
echo "Repository maintainers can override this decision if needed"
exit 1
elif [ "$OVERALL_STATUS" = "APPROVED" ]; then
echo "::notice::All recipes APPROVED by security scan"
else
echo "::error::Scan did not complete successfully - check artifacts for details"
exit 1
fi
else
echo "::error::No scan summary found - scan may have failed completely"
exit 1
fi

Check failure

Code scanning / Semgrep OSS

Insecure GitHub Actions: Shell Injection via GitHub Context Variables Error

Insecure GitHub Actions: Shell Injection via GitHub Context Variables
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i fixed this in the next commit

@github-actions
Copy link
Contributor

Recipe Validation Failed

Please fix the validation errors and push your changes:

✅ documentation/src/pages/recipes/data/recipes/create-kafka-topic.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/migrate-from-poetry-to-uv.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/clean-up-feature-flag.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/readme-bot.yaml: VALID\n❌ documentation/src/pages/recipes/data/recipes/pull-request-generator.yaml: INVALID\n\n✗ Optional parameters missing default values in the recipe: push_pr. Please provide defaults. Error: Optional parameters missing default values in the recipe: push_pr. Please provide defaults.\n\n✅ documentation/src/pages/recipes/data/recipes/pr-demo-planner.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/dev-guide-migration.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/change-log.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/analyze-pr.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/recipe-generator.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/migrate-cypress-test-to-playwright.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/remove-ai-artifacts-from-python-code.yaml: VALID\n

📚 Check our Recipe Guide for help with the correct format.

@github-actions
Copy link
Contributor

🔍 Recipe Security Scan Results

Status: UNKNOWN - Could not determine scan results

📊 Scan Summary:

  • Total recipes scanned: 5

📋 Individual Recipe Results:
✅ Recipe 1: APPROVED (LOW risk)
✅ Recipe 2: APPROVED (LOW risk)
✅ Recipe 3: APPROVED (LOW risk)
✅ Recipe 4: APPROVED (LOW risk)
❓ Recipe 5: UNKNOWN (UNKNOWN risk)

🔗 View detailed scan results in the workflow artifacts.

@github-actions
Copy link
Contributor

Recipe Validation Failed

Please fix the validation errors and push your changes:

✅ documentation/src/pages/recipes/data/recipes/create-kafka-topic.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/migrate-from-poetry-to-uv.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/clean-up-feature-flag.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/readme-bot.yaml: VALID\n❌ documentation/src/pages/recipes/data/recipes/pull-request-generator.yaml: INVALID\n\n✗ Optional parameters missing default values in the recipe: push_pr. Please provide defaults. Error: Optional parameters missing default values in the recipe: push_pr. Please provide defaults.\n\n✅ documentation/src/pages/recipes/data/recipes/pr-demo-planner.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/dev-guide-migration.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/change-log.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/analyze-pr.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/recipe-generator.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/migrate-cypress-test-to-playwright.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/remove-ai-artifacts-from-python-code.yaml: VALID\n

📚 Check our Recipe Guide for help with the correct format.

@github-actions
Copy link
Contributor

Recipe Validation Failed

Please fix the validation errors and push your changes:

✅ documentation/src/pages/recipes/data/recipes/create-kafka-topic.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/migrate-from-poetry-to-uv.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/clean-up-feature-flag.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/readme-bot.yaml: VALID\n❌ documentation/src/pages/recipes/data/recipes/pull-request-generator.yaml: INVALID\n\n✗ Optional parameters missing default values in the recipe: push_pr. Please provide defaults. Error: Optional parameters missing default values in the recipe: push_pr. Please provide defaults.\n\n✅ documentation/src/pages/recipes/data/recipes/pr-demo-planner.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/dev-guide-migration.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/change-log.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/analyze-pr.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/recipe-generator.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/migrate-cypress-test-to-playwright.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/remove-ai-artifacts-from-python-code.yaml: VALID\n

📚 Check our Recipe Guide for help with the correct format.

@github-actions
Copy link
Contributor

Recipe Validation Failed

Please fix the validation errors and push your changes:

✅ documentation/src/pages/recipes/data/recipes/create-kafka-topic.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/migrate-from-poetry-to-uv.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/clean-up-feature-flag.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/readme-bot.yaml: VALID\n❌ documentation/src/pages/recipes/data/recipes/pull-request-generator.yaml: INVALID\n\n✗ Optional parameters missing default values in the recipe: push_pr. Please provide defaults. Error: Optional parameters missing default values in the recipe: push_pr. Please provide defaults.\n\n✅ documentation/src/pages/recipes/data/recipes/pr-demo-planner.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/dev-guide-migration.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/change-log.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/analyze-pr.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/recipe-generator.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/migrate-cypress-test-to-playwright.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/remove-ai-artifacts-from-python-code.yaml: VALID\n

📚 Check our Recipe Guide for help with the correct format.

…new output change to avoid backslash-n characters
@github-actions
Copy link
Contributor

Recipe Validation Failed

Please fix the validation errors and push your changes:

✅ create-kafka-topic.yaml: VALID✅ migrate-from-poetry-to-uv.yaml: VALID✅ clean-up-feature-flag.yaml: VALID✅ readme-bot.yaml: VALID❌ pull-request-generator.yaml: INVALID

✗ Optional parameters missing default values in the recipe: push_pr. Please provide defaults.
Error: Optional parameters missing default values in the recipe: push_pr. Please provide defaults.
```✅ pr-demo-planner.yaml: VALID✅ dev-guide-migration.yaml: VALID✅ change-log.yaml: VALID✅ analyze-pr.yaml: VALID✅ recipe-generator.yaml: VALID✅ migrate-cypress-test-to-playwright.yaml: VALID✅ remove-ai-artifacts-from-python-code.yaml: VALID

  
  📚 Check our [Recipe Guide](https://block.github.io/goose/recipes) for help with the correct format.

@github-actions
Copy link
Contributor

Recipe Validation Failed

Please fix the validation errors and push your changes:

✅ create-kafka-topic.yaml: VALID✅ migrate-from-poetry-to-uv.yaml: VALID✅ clean-up-feature-flag.yaml: VALID✅ readme-bot.yaml: VALID❌ pull-request-generator.yaml: INVALID

✗ Optional parameters missing default values in the recipe: push_pr. Please provide defaults.
Error: Optional parameters missing default values in the recipe: push_pr. Please provide defaults.
```✅ pr-demo-planner.yaml: VALID✅ dev-guide-migration.yaml: VALID✅ change-log.yaml: VALID✅ analyze-pr.yaml: VALID✅ recipe-generator.yaml: VALID✅ migrate-cypress-test-to-playwright.yaml: VALID✅ remove-ai-artifacts-from-python-code.yaml: VALID
  
  📚 Check our [Recipe Guide](https://block.github.io/goose/recipes) for help with the correct format.

@github-actions
Copy link
Contributor

Recipe Validation Failed

Please fix the validation errors and push your changes:

✅ documentation/src/pages/recipes/data/recipes/create-kafka-topic.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/migrate-from-poetry-to-uv.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/clean-up-feature-flag.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/readme-bot.yaml: VALID\n❌ documentation/src/pages/recipes/data/recipes/pull-request-generator.yaml: INVALID\n\n✗ Optional parameters missing default values in the recipe: push_pr. Please provide defaults. Error: Optional parameters missing default values in the recipe: push_pr. Please provide defaults.\n\n✅ documentation/src/pages/recipes/data/recipes/pr-demo-planner.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/dev-guide-migration.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/change-log.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/analyze-pr.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/recipe-generator.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/migrate-cypress-test-to-playwright.yaml: VALID\n✅ documentation/src/pages/recipes/data/recipes/remove-ai-artifacts-from-python-code.yaml: VALID\n

📚 Check our Recipe Guide for help with the correct format.

@iandouglas iandouglas merged commit 69bc978 into main Aug 28, 2025
12 of 14 checks passed
@iandouglas iandouglas deleted the api-key-automation branch August 28, 2025 22:37
michaelneale added a commit that referenced this pull request Aug 29, 2025
* main:
  new recipe to lint-check my code (#4416)
  removing a leftover syntax error (#4415)
  Iand/updating recipe validation workflow (#4413)
  Iand/updating recipe validation workflow (#4410)
  Fix (Ollama provider): Unsupported operation: streaming not implemented (#4303)
  change databricks default to claude sonnet 4 (#4405)
  Iand/updating recipe validation workflow (#4406)
  Add metrics for recipe metadata in scheduler, UI, and CLI (#4399)
  Iand/updating recipe validation workflow (#4403)
  making small updates to recipe validation workflow (#4401)
  Automate OpenRouter API Key Distribution for External Recipe Contributors (#3198)
  Enhance `convert_path_with_tilde_expansion` to handle Windows (#4390)
  make sure all cookbook recipes have a title and version, but no id (#4395)
  Nest TODO State in session data (#4361)
  Fast model falls back to regular (#4375)
  Update windows instructions (#4333)
lifeizhou-ap added a commit that referenced this pull request Aug 29, 2025
* main: (40 commits)
  new recipe to lint-check my code (#4416)
  removing a leftover syntax error (#4415)
  Iand/updating recipe validation workflow (#4413)
  Iand/updating recipe validation workflow (#4410)
  Fix (Ollama provider): Unsupported operation: streaming not implemented (#4303)
  change databricks default to claude sonnet 4 (#4405)
  Iand/updating recipe validation workflow (#4406)
  Add metrics for recipe metadata in scheduler, UI, and CLI (#4399)
  Iand/updating recipe validation workflow (#4403)
  making small updates to recipe validation workflow (#4401)
  Automate OpenRouter API Key Distribution for External Recipe Contributors (#3198)
  Enhance `convert_path_with_tilde_expansion` to handle Windows (#4390)
  make sure all cookbook recipes have a title and version, but no id (#4395)
  Nest TODO State in session data (#4361)
  Fast model falls back to regular (#4375)
  Update windows instructions (#4333)
  feat: linux computer control for android (termux) (#3890)
  feat: Added scroll state support for chat-session-list navigation (#4360)
  docs: typo fix (#4376)
  blog: goose janitor (#4131)
  ...
thisispete pushed a commit that referenced this pull request Aug 30, 2025
…tors (#3198)

Co-authored-by: w. ian douglas <ian.douglas@iandouglas.com>
This was referenced Sep 9, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants