mirror of
https://github.com/aljazceru/goose.git
synced 2025-12-18 06:34:26 +01:00
Docs: recipe landing page (#3122)
This commit is contained in:
@@ -104,7 +104,7 @@ When something breaks, Goose doesn't panic; it pivots. For example, Goose might
|
||||
|
||||
It's been 18 years since the movie came out, and I'd like to imagine that Linguini has surpassed his cooking era and stepped into his mentor era. Instead of training every new cook inefficiently, he's documenting his favorite dishes to make his knowledge shareable and scalable.
|
||||
|
||||
Similarly, Goose is a forward-looking AI agent with a solution for scaling knowledge through [recipes](/docs/guides/session-recipes). Recipes are complete orchestrations you can rerun, remix, or share, passing on knowledge to anyone who needs it.
|
||||
Similarly, Goose is a forward-looking AI agent with a solution for scaling knowledge through [recipes](/docs/guides/recipes/session-recipes). Recipes are complete orchestrations you can rerun, remix, or share, passing on knowledge to anyone who needs it.
|
||||
|
||||
Sharing a prompt doesn't always recreate the experience; AI is non-deterministic, and people may not have the same extensions or context configured. Recipes solve this by packaging your entire Goose workflow: the extensions, the setup, the goal, and example activities.
|
||||
|
||||
@@ -190,7 +190,7 @@ Skip the chaos. Drop a Recipe link and let every attendee spin up the same envir
|
||||
|
||||
Your team is full of problem solvers. One teammate built a slick internal dashboard. Another nailed support ticket triage. Someone else automated changelog generation. Then there's the question: how do we make it easy for the entire team to use? Recipes turn your team's creations into reusable workflows that anyone can pick up. Build a shared library of Goose-powered processes and multiply your team's impact.
|
||||
|
||||
Grab [Goose](/docs/getting-started/installation) and start cooking up some [recipes](/docs/guides/session-recipes) of your own. Your future self (and team) will thank you!
|
||||
Grab [Goose](/docs/getting-started/installation) and start cooking up some [recipes](/docs/guides/recipes/session-recipes) of your own. Your future self (and team) will thank you!
|
||||
|
||||
<head>
|
||||
<meta property="og:title" content="A Recipe for Success: Cooking Up Repeatable Agentic Workflows" />
|
||||
|
||||
@@ -36,7 +36,7 @@ As teams adopt AI tools like Goose, the ability to define and share these automa
|
||||
|
||||
## AI Plays: Standardizing Your Team's Workflows
|
||||
|
||||
Goose can help standardize and automate these tasks, by [creating recipes](/docs/guides/session-recipes). As a developer on your team uses Goose, they can create a recipe that describes how to perform a task, and then share that with the rest of the team. These recipes can be shared and reused, and improved over time, just like a sports team’s playbook.
|
||||
Goose can help standardize and automate these tasks, by [creating recipes](/docs/guides/recipes/session-recipes). As a developer on your team uses Goose, they can create a recipe that describes how to perform a task, and then share that with the rest of the team. These recipes can be shared and reused, and improved over time, just like a sports team’s playbook.
|
||||
|
||||
Recipes are built with an understanding of the workflow you want Goose to help with, and these may involve one or more MCP servers, such as [GitHub](/docs/mcp/github-mcp/) or [PostgreSQL](/docs/mcp/postgres-mcp/). The recipes are designed to be reusable and adaptable, allowing developers to create a library that can be used across different projects.
|
||||
|
||||
@@ -50,7 +50,7 @@ A Goose Recipe can be saved from a current Goose session, or written as a YAML f
|
||||
|
||||
### Creating a Recipe
|
||||
|
||||
If you [create a recipe from a current Goose session](/docs/guides/session-recipes/#create-recipe), it will prompt you for a name and description and will generate some activities that you can edit, along with instructions that you should review and edit. You will be given a URL that you can share with your team.
|
||||
If you [create a recipe from a current Goose session](/docs/guides/recipes/session-recipes/#create-recipe), it will prompt you for a name and description and will generate some activities that you can edit, along with instructions that you should review and edit. You will be given a URL that you can share with your team.
|
||||
|
||||
To create a recipe from scratch, you can use the Goose CLI to create a new recipe file by using a `/recipe` command in the session. This will create a `recipe.yaml` file in your current directory. To make a custom file you can use `/recipe custom-filename.yaml`. From there, you will add your own instructions and activities.
|
||||
|
||||
|
||||
8
documentation/docs/guides/recipes/_category_.json
Normal file
8
documentation/docs/guides/recipes/_category_.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"label": "Recipes",
|
||||
"position": 1,
|
||||
"link": {
|
||||
"type": "doc",
|
||||
"id": "guides/recipes/index"
|
||||
}
|
||||
}
|
||||
75
documentation/docs/guides/recipes/index.md
Normal file
75
documentation/docs/guides/recipes/index.md
Normal file
@@ -0,0 +1,75 @@
|
||||
---
|
||||
title: Recipes
|
||||
hide_title: true
|
||||
description: Reusable and shareable AI workflows
|
||||
---
|
||||
|
||||
import Card from '@site/src/components/Card';
|
||||
import styles from '@site/src/components/Card/styles.module.css';
|
||||
|
||||
<h1 className={styles.pageTitle}>Recipes</h1>
|
||||
<p className={styles.pageDescription}>
|
||||
Recipes are reusable workflows that package extensions, prompts, and settings together. Share proven workflows with your team and reproduce successful results consistently.
|
||||
</p>
|
||||
|
||||
|
||||
<!-- will replace with Recipe video once live -->
|
||||
<!-- <div className="video-container margin-bottom--lg">
|
||||
<iframe
|
||||
width="100%"
|
||||
height="400"
|
||||
src="https://www.youtube.com/embed/D-DpDunrbpo"
|
||||
title="Vibe coding with Goose"
|
||||
frameBorder="0"
|
||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
|
||||
allowFullScreen
|
||||
></iframe>
|
||||
</div> -->
|
||||
|
||||
<div className={styles.categorySection}>
|
||||
<h2 className={styles.categoryTitle}>📚 Documentation & Guides</h2>
|
||||
<div className={styles.cardGrid}>
|
||||
<Card
|
||||
title="Shareable Recipes"
|
||||
description="Share a Goose session setup (including tools, goals, and instructions) as a reusable recipe that others can launch with a single click."
|
||||
link="/docs/guides/recipes/session-recipes"
|
||||
/>
|
||||
<Card
|
||||
title="Recipe Reference Guide"
|
||||
description="Complete technical reference for creating and customizing recipes in Goose via the CLI."
|
||||
link="/docs/guides/recipes/recipe-reference"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className={styles.categorySection}>
|
||||
<h2 className={styles.categoryTitle}>🛠️ Tools & Generators</h2>
|
||||
<div className={styles.cardGrid}>
|
||||
<Card
|
||||
title="Recipe Generator"
|
||||
description="Interactive tool that creates a shareable Goose recipe URL that others can use to launch a session with your predefined settings."
|
||||
link="/recipe-generator"
|
||||
/>
|
||||
<Card
|
||||
title="Recipe Cookbook"
|
||||
description="Browse our collection of ready-to-use recipes. Find and adapt recipes for common development scenarios."
|
||||
link="/recipes"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className={styles.categorySection}>
|
||||
<h2 className={styles.categoryTitle}>📝 Featured Blog Posts</h2>
|
||||
<div className={styles.cardGrid}>
|
||||
<Card
|
||||
title="Championship Driven Development"
|
||||
description="Recipes to accelerate your developer team's workflow."
|
||||
link="/blog/2025/05/09/developers-ai-playbook-for-team-efficiency"
|
||||
/>
|
||||
<Card
|
||||
title="A Recipe for Success"
|
||||
description="The value of scaling agentic workflows with recipes."
|
||||
link="/blog/2025/05/06/recipe-for-success"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
sidebar_position: 18
|
||||
sidebar_position: 2
|
||||
title: Recipe Reference Guide
|
||||
sidebar_label: Recipe Reference Guide
|
||||
description: Complete technical reference for creating and customizing recipes in Goose via the CLI.
|
||||
---
|
||||
|
||||
Recipes are reusable Goose configurations that package up a specific setup so it can be easily shared and launched by others.
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
sidebar_position: 5
|
||||
title: Create a Recipe from Your Session
|
||||
sidebar_label: Shareable Recipes
|
||||
sidebar_position: 1
|
||||
title: Shareable Recipes
|
||||
description: "Share a Goose session setup (including tools, goals, and instructions) as a reusable recipe that others can launch with a single click"
|
||||
---
|
||||
|
||||
@@ -39,7 +39,7 @@ Commit your code changes early and often. This allows you to rollback any unexpe
|
||||
Administrators can use an [allowlist](/docs/guides/allowlist) to restrict Goose to approved extensions only. This helps prevent risky installs from unknown MCP servers.
|
||||
|
||||
### Set up starter templates
|
||||
You can turn a successful session into a reusable "[recipe](/docs/guides/session-recipes)" to share with others or use again later—no need to start from scratch.
|
||||
You can turn a successful session into a reusable "[recipe](/docs/guides/recipes/session-recipes)" to share with others or use again later—no need to start from scratch.
|
||||
|
||||
### Embrace an experimental mindset
|
||||
You don’t need to get it right the first time. Iterating on prompts and tools is part of the workflow.
|
||||
|
||||
@@ -108,7 +108,15 @@ const config: Config = {
|
||||
},
|
||||
{
|
||||
from: '/docs/guides/share-goose-sessions',
|
||||
to: '/docs/guides/session-recipes'
|
||||
to: '/docs/guides/recipes/session-recipes'
|
||||
},
|
||||
{
|
||||
from: '/docs/guides/session-recipes',
|
||||
to: '/docs/guides/recipes/session-recipes'
|
||||
},
|
||||
{
|
||||
from: '/docs/guides/recipe-reference',
|
||||
to: '/docs/guides/recipes/recipe-reference'
|
||||
},
|
||||
// MCP tutorial redirects - moved from /docs/tutorials/ to /docs/mcp/
|
||||
{
|
||||
|
||||
30
documentation/src/components/Card/index.tsx
Normal file
30
documentation/src/components/Card/index.tsx
Normal file
@@ -0,0 +1,30 @@
|
||||
import React from 'react';
|
||||
import Link from '@docusaurus/Link';
|
||||
import styles from './styles.module.css';
|
||||
|
||||
interface CardProps {
|
||||
title: string;
|
||||
description: string;
|
||||
link: string;
|
||||
icon?: string;
|
||||
}
|
||||
|
||||
export default function Card({ title, description, link, icon }: CardProps): JSX.Element {
|
||||
const isInternalLink = link.startsWith('/');
|
||||
const CardWrapper = isInternalLink ? Link : 'a';
|
||||
const wrapperProps = isInternalLink ? { to: link } : { href: link };
|
||||
|
||||
return (
|
||||
<CardWrapper {...wrapperProps} className={styles.card}>
|
||||
<div className={styles.cardContent}>
|
||||
{icon && (
|
||||
<div className={styles.iconWrapper}>
|
||||
<img src={icon} alt="" className={styles.icon} />
|
||||
</div>
|
||||
)}
|
||||
<h3 className={styles.cardTitle}>{title}</h3>
|
||||
<p className={styles.cardDescription}>{description}</p>
|
||||
</div>
|
||||
</CardWrapper>
|
||||
);
|
||||
}
|
||||
79
documentation/src/components/Card/styles.module.css
Normal file
79
documentation/src/components/Card/styles.module.css
Normal file
@@ -0,0 +1,79 @@
|
||||
.categorySection {
|
||||
margin: 3rem 0;
|
||||
}
|
||||
|
||||
.categoryTitle {
|
||||
font-size: 1.5rem;
|
||||
margin-bottom: 1.5rem;
|
||||
color: var(--ifm-heading-color);
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.cardGrid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
|
||||
gap: 1.5rem;
|
||||
margin: 1rem 0;
|
||||
}
|
||||
|
||||
.singleCardGrid {
|
||||
display: grid;
|
||||
grid-template-columns: minmax(300px, 600px);
|
||||
gap: 1.5rem;
|
||||
margin: 1rem 0;
|
||||
}
|
||||
|
||||
.pageTitle {
|
||||
font-size: 2.5rem;
|
||||
margin-bottom: 1rem;
|
||||
color: var(--ifm-heading-color);
|
||||
}
|
||||
|
||||
.pageDescription {
|
||||
font-size: 1.2rem;
|
||||
color: var(--ifm-color-emphasis-700);
|
||||
margin-bottom: 2rem;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
/* Video container styles */
|
||||
:global(.video-container) {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
max-width: 800px;
|
||||
margin: 0 auto 3rem;
|
||||
border-radius: 8px;
|
||||
overflow: hidden;
|
||||
box-shadow: 0 4px 12px -6px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
/* Card styles */
|
||||
.card {
|
||||
display: block;
|
||||
padding: 1.75rem;
|
||||
border-radius: 12px;
|
||||
background: transparent;
|
||||
border: 1px solid var(--ifm-color-emphasis-200);
|
||||
transition: border-color 0.2s ease, box-shadow 0.2s ease;
|
||||
text-decoration: none !important;
|
||||
color: inherit !important;
|
||||
}
|
||||
|
||||
.card:hover {
|
||||
border-color: var(--ifm-color-emphasis-500);
|
||||
box-shadow: 0 4px 12px -6px rgba(0, 0, 0, 0.1);
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.cardTitle {
|
||||
font-size: 1.4rem;
|
||||
margin: 0 0 0.75rem 0;
|
||||
color: var(--ifm-heading-color);
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.cardDescription {
|
||||
margin: 0;
|
||||
color: var(--ifm-color-emphasis-700);
|
||||
line-height: 1.6;
|
||||
}
|
||||
@@ -12,7 +12,7 @@ export default function RecipeGenerator() {
|
||||
const [activities, setActivities] = useState([]);
|
||||
const [newActivity, setNewActivity] = useState('');
|
||||
const [copied, setCopied] = useState(false);
|
||||
const [errors, setErrors] = useState({});
|
||||
const [errors, setErrors] = useState<{[key: string]: string}>({});
|
||||
const [outputFormat, setOutputFormat] = useState('url'); // 'url' or 'yaml'
|
||||
const [authorContact, setAuthorContact] = useState('');
|
||||
const [extensionsList, setExtensionsList] = useState([
|
||||
@@ -59,7 +59,7 @@ export default function RecipeGenerator() {
|
||||
|
||||
// Form validation
|
||||
const validateForm = useCallback(() => {
|
||||
const newErrors = {};
|
||||
const newErrors: {[key: string]: string} = {};
|
||||
|
||||
if (!title.trim()) {
|
||||
newErrors.title = 'Title is required';
|
||||
@@ -89,6 +89,7 @@ export default function RecipeGenerator() {
|
||||
title,
|
||||
description,
|
||||
instructions,
|
||||
prompt: prompt.trim() || undefined,
|
||||
activities: activities.length > 0 ? activities : undefined
|
||||
};
|
||||
|
||||
@@ -272,6 +273,23 @@ instructions: ${instructions}
|
||||
{errors.instructions && <div className="text-red-500 text-sm mt-1">{errors.instructions}</div>}
|
||||
</div>
|
||||
|
||||
{/* Initial Prompt */}
|
||||
<div>
|
||||
<label htmlFor="prompt" className="block text-sm font-medium text-textStandard mb-2">
|
||||
Initial Prompt (optional)
|
||||
</label>
|
||||
<textarea
|
||||
id="prompt"
|
||||
value={prompt}
|
||||
onChange={(e) => setPrompt(e.target.value)}
|
||||
className="w-full p-3 border border-borderSubtle rounded-lg bg-bgSubtle text-textStandard min-h-[100px]"
|
||||
placeholder="Enter an initial prompt to start the conversation (optional)"
|
||||
/>
|
||||
<div className="text-sm text-textSubtle mt-1">
|
||||
If provided, this message will automatically start the conversation when the recipe is launched.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* YAML-specific fields */}
|
||||
{outputFormat === 'yaml' && (
|
||||
<>
|
||||
@@ -289,19 +307,6 @@ instructions: ${instructions}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label htmlFor="prompt" className="block text-sm font-medium text-textStandard mb-2">
|
||||
Initial Prompt (optional)
|
||||
</label>
|
||||
<textarea
|
||||
id="prompt"
|
||||
value={prompt}
|
||||
onChange={(e) => setPrompt(e.target.value)}
|
||||
className="w-full p-3 border border-borderSubtle rounded-lg bg-bgSubtle text-textStandard min-h-[100px]"
|
||||
placeholder="Enter an initial prompt for the recipe"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label className="block text-sm font-medium text-textStandard mb-2">
|
||||
Extensions (optional)
|
||||
|
||||
@@ -106,7 +106,7 @@ export default function RecipePage() {
|
||||
</div>
|
||||
<p className="text-textProminent">
|
||||
Save time and skip setup — launch any{" "}
|
||||
<Link to="/docs/guides/session-recipes" className="text-purple-600 hover:underline">
|
||||
<Link to="/docs/guides/recipes/session-recipes" className="text-purple-600 hover:underline">
|
||||
Goose agent recipe
|
||||
</Link>{" "}
|
||||
shared by the community with a single click.
|
||||
|
||||
Reference in New Issue
Block a user