Skip to content

Recipes ​

Bob embeds thirty-four recipes in three kinds. Every recipe is versioned, renders its complete desired file set in memory, and is immutable once published: changing a published recipe means adding a new version, never editing bytes an old bob.lock depends on.

  • Factory scaffolds own a complete, public-ready repository. Their composition files are lock-owned (hash-proven); their living files (README.md, CHANGELOG.md, AGENTS.md, and the language manifest) seed once and then stay in human hands.
  • files materializes a tree you declare in bob.yaml.
  • Stack hygiene recipes seed create-once hygiene only. They are never recorded in bob.lock, never updated, and never own application source.

Factory scaffolds ​

Each factory recipe takes a product.module (repository identity) and a product name, and can be selected explicitly with --recipe. A greenfield directory defaults to go-agent-tool, and an existing Cobra layout (cmd/ + internal/cli/root.go with github.com/spf13/cobra in go.mod) selects it in bob init; no other factory is auto-selected.

RecipeLanguage / runtimeWhat it emits
go-agent-tool@6Go, Cobra CLIA public-ready Go command with human + JSON output, dependency-injected handlers, tests, CI, GoReleaser, docs, and a Glyphrun help spec. It carries a static human-owned command extension contract.
rust-tool@1Rust CLIA thin binary over a tested library core, rustfmt/clippy config, CI, a release workflow, docs, and a Taskfile.
python-tool@1Python CLIA PEP 621 project with a src/ layout, an argparse entry point over a tested pure function, ruff + pytest CI, a release workflow, docs, and a Taskfile.
ts-tool@1TypeScript (Node) CLIAn ESM project with a process.argv entry point over a tested pure function, tsc/eslint/vitest CI, an npm release workflow, docs, and a Taskfile.
java-tool@1Java CLI (Maven)A Maven project with a JUnit 5 test, an executable jar, CI, a release workflow, docs, and a Taskfile.
csharp-tool@1.NET (C#) CLIA net8.0 project with an xUnit test, CI, a release workflow, docs, and a Taskfile.

Create one with bob new <name> --recipe <id> --module <repo> --write, or preview it with bob new <name> --recipe <id>. bob recipe show <id> prints the exact seeded and owned paths.

files ​

recipe: files declares an inline file tree in bob.yaml (files: entries with a path, optional mode, and content, plus optional vars for ${vars.<key>} substitution). Bob materializes it with the same plan, apply, and lock rules as any other recipe. See the manifest reference for the schema and a worked example.

Stack hygiene ​

One recipe per detected stack. Each seeds README.md, AGENTS.md, SECURITY.md, .gitignore, .editorconfig, and (for some stacks) a small extra config file and a CI stub — created only when missing, never updated, never lock-owned. The runtime.kind selects kind-aware defaults where a recipe has more than one.

RecipeDetected stackruntime.kind
go-hygiene@2Go (go.mod, go.work)service, lib, app
ts-app@2TypeScriptapp, monorepo
js-app@2JavaScriptapp, monorepo
vue-app@2Vueweb-app
nuxt-app@2Nuxtweb-app
deno-app@2Deno (deno.json)app, library
python-app@2Pythonapp
php-app@2PHP (composer.json)app, library
ruby-app@2Rubyapp, gem
java-app@2Java (pom.xml, Gradle)app, library
kotlin-app@2Kotlinapp, library
dotnet-app@2.NET / C#app, library
cpp-cmake@2C/C++ (CMakeLists.txt)app, library
rust-cli@2Rust (Cargo.toml)cli, lib, workspace
swift-package@2Swiftpackage
elixir-app@2Elixir / Mixapp, umbrella
lua-lib@2Lualib, plugin
dart-app@2Dart / Flutter (pubspec.yaml)app, package
zig-app@2Zig (build.zig)app, library
scala-app@2Scala (build.sbt)app, library
docker-app@2Docker (Dockerfile, Compose)image
terraform-app@2Terraform (*.tf)module, stack
nix-app@2Nix (flake.nix)flake, package
ansible-app@2Ansible (ansible.cfg, roles/)playbook, role
helm-app@2Helm (Chart.yaml)chart
kubernetes-app@2Kubernetes / Kustomizemanifests, kustomize
static-web@2Static web sitesite

bob recipe list prints the catalog; bob recipe show <id> prints one recipe's stack, description, and seeded paths. For the full command surface, see the CLI reference.

Deterministic plans. Explicit authority. Honest integration boundaries.