{"id":50394171,"url":"https://github.com/snowflake-labs/blueprint-manager","last_synced_at":"2026-05-30T20:01:27.534Z","repository":{"id":342126904,"uuid":"1129058726","full_name":"Snowflake-Labs/blueprint-manager","owner":"Snowflake-Labs","description":"Build your Snowflake environment with confidence using expert-backed, guided blueprints. Interactive configuration workflows powered by Snowflake SME best practices.","archived":false,"fork":false,"pushed_at":"2026-05-29T16:48:04.000Z","size":853,"stargazers_count":32,"open_issues_count":0,"forks_count":13,"subscribers_count":5,"default_branch":"main","last_synced_at":"2026-05-29T18:09:07.544Z","etag":null,"topics":["best-practices","blueprints","configuration","infrastructure-as-code","snowflake","sql"],"latest_commit_sha":null,"homepage":"https://www.snowflake.com/en/product/use-cases/well-architected-framework/","language":"Jinja","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Snowflake-Labs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-06T14:47:03.000Z","updated_at":"2026-05-29T16:48:07.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Snowflake-Labs/blueprint-manager","commit_stats":null,"previous_names":["snowflake-labs/blueprint-manager"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Snowflake-Labs/blueprint-manager","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Snowflake-Labs%2Fblueprint-manager","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Snowflake-Labs%2Fblueprint-manager/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Snowflake-Labs%2Fblueprint-manager/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Snowflake-Labs%2Fblueprint-manager/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Snowflake-Labs","download_url":"https://codeload.github.com/Snowflake-Labs/blueprint-manager/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Snowflake-Labs%2Fblueprint-manager/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33707328,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-30T02:00:06.278Z","response_time":92,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["best-practices","blueprints","configuration","infrastructure-as-code","snowflake","sql"],"created_at":"2026-05-30T20:01:24.750Z","updated_at":"2026-05-30T20:01:27.515Z","avatar_url":"https://github.com/Snowflake-Labs.png","language":"Jinja","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Introduction\n\n### Blueprints  \n*Expert-backed guidance for Snowflake setup*    \nBlueprints are step-by-step workflows built by Snowflake SMEs that guide you through environment configuration. Best practices are built into every blueprint—so you can configure with confidence that it follows proven patterns and will scale with your needs.\n\n### Blueprint Manager  \n*Self-service platform configuration, guided by experts*    \nBlueprint Manager walks you through each decision, captures your answers, and generates the SQL and configuration tailored to your environment. No guesswork, no waiting for help—just clear direction to get productive faster.\n\n## Why Blueprints?  \n\nExpert-backed guidance so you can configure your environment knowing it follows best practices and will scale with your needs.\n- **Confidence** - Expert-defined workflows ensure you're doing it right\n- **Best Practices** - Start with an architecture that scales\n- **Speed** - Get productive faster with guided setup\n- **Self-Service** - Move at your own pace\n\n## How does it work?\n\n**Blueprints**  \nBlueprints are templates for best-practice Snowflake implementation and setup containing expert guidance, prescriptive configurations, validation rules, and generation logic. Blueprints will prompt you for business requirements via Cortex Code, then generate ready-to-execute SQL scripts to implement best-practice configurations, and provide curated documentation recording your decisions.  \n\n**Cortex Code Skills**  \nBlueprints run inside Cortex Code via the $blueprint-builder skill and the $best-practices-skill. Skills are instructions that tell Cortex Code how to navigate and execute Blueprints, and guide the AI to the right best practices based on your inputs to ensure correct outputs for your specific requirements.\n\n*Think of Blueprints as the \"cookbook\" containing all the implementation recipes and expertise, and Skills as the \"index\" that helps Cortex Code find and follow the right recipe for your needs.*\n\n\u003cimg width=\"6800\" height=\"1200\" alt=\"Blueprint Manager Cortex Code Overview\" src=\"https://github.com/user-attachments/assets/6434d217-395d-4092-916a-e32944b41f39\" /\u003e\n\n# Blueprint Manager\n\nThis repository contains infrastructure-as-code templates and blueprints for setting up Snowflake blueprints.\n\n## Structure\n\n- `definitions/` - Question definitions for configuration\n- `blueprints/` - Available blueprint configurations\n- `scripts/` - Utility scripts for rendering templates\n- `projects/` - Project workspaces for organizing answers and outputs\n- `output/` - Generated infrastructure code and documentation\n\n## Setting Up Your Blueprint using Snowflake Cortex (Recommended)\n\nThe easiest way to configure your Snowflake Blueprint is using the **Blueprint Builder** skill with Snowflake Cortex. This provides a guided, interactive experience.\n\n### Getting Started\n\n0. Pre-requisite: Cortex Code CLI\n\nIn order to get the guided Cortex Code experience you will first need to setup the command line interface on your machine. Those instructions can be found here: https://docs.snowflake.com/LIMITEDACCESS/cortex-code/cortex-code-overview.\n\n1. **Clone the repository:**\n\n```bash\ngit clone https://github.com/Snowflake-Labs/blueprint-manager.git\ncd blueprint-manager\n```\n\n2. **Start Cortex CLI:**\n\n```bash\ncortex\n```\n\n3. **Launch the Blueprint Builder:**\n\n```bash\n/blueprints:build platform-foundation-setup\n```\n\n### How it works:\n\n1. **Choose your approach:**\n   - **Option A:** Provide a description of your organization (size, use case, security requirements, etc.) and Cortex will intelligently configure as many settings as possible\n   - **Option B:** Go through each question step-by-step with full guidance\n\n2. **Review the configuration** — Cortex shows you:\n   - ✅ Questions it answered automatically (with reasoning)\n   - ❓ Questions that need your input (account names, emails, etc.)\n   - ⚠️ Questions that need more context from you\n\n3. **Generate SQL** — once your answers are complete, Cortex runs the render script to produce ready-to-execute Snowflake SQL\n\n### Benefits:\n- No need to understand the answer file format\n- Intelligent defaults based on your organization profile\n- Clear explanation of each configuration decision\n- Validation and guidance throughout the process\n\n## Cortex Code Commands\n\nThe following commands are available when using Cortex Code in this repository:\n\n### Core Commands\n\n| Command | Description |\n|---------|-------------|\n| `/blueprints:list` | List available blueprints with metadata |\n| `/blueprints:describe \u003cname\u003e` | Show blueprint details including task/step tree |\n| `/blueprints:build \u003cname\u003e` | Start the interactive blueprint building process |\n| `/blueprints:validate \u003cfile\u003e --blueprint \u003cname\u003e` | Check answer file completeness |\n| `/blueprints:render \u003cfile\u003e --blueprint \u003cname\u003e` | Generate SQL/Terraform/Documentation from answers |\n\n### Project Management\n\n| Command | Description |\n|---------|-------------|\n| `/blueprints:projects-list` | List existing projects |\n| `/blueprints:projects-create \u003cname\u003e` | Create a new project directory structure |\n| `/blueprints:projects-describe \u003cname\u003e` | Show project status (answers, outputs, history) |\n\n### Answer File Operations\n\n| Command | Description |\n|---------|-------------|\n| `/blueprints:answers-init \u003cname\u003e` | Generate a skeleton answer file with all questions |\n| `/blueprints:answers-validate \u003cfile\u003e` | Check for missing/invalid values |\n| `/blueprints:answers-diff \u003cfile1\u003e \u003cfile2\u003e` | Compare two answer files |\n\n### Example Workflow\n\n```bash\n# 1. List available blueprints\n/blueprints:list\n\n# 2. Create a project for your work\n/blueprints:projects-create my-company\n\n# 3. Start building interactively\n/blueprints:build platform-foundation-setup --project my-company\n\n# 4. Or generate a skeleton and fill manually\n/blueprints:answers-init platform-foundation-setup --project my-company\n\n# 5. Validate your answers\n/blueprints:validate answers.yaml --blueprint platform-foundation-setup\n\n# 6. Generate SQL output\n/blueprints:render answers.yaml --blueprint platform-foundation-setup --project my-company\n```\n\n## Skills\n\nThis repository includes two Cortex Code skills that are automatically activated:\n\n### Blueprint Builder\n\nGuides users through constructing answer files interactively. Triggered when you:\n- Ask to set up or configure a blueprint\n- Want to create your Snowflake environment\n- Need help with blueprint configuration\n\n### Snowflake Best Practices\n\nProvides curated guidance from Snowflake SMEs. Triggered when you ask about:\n- Best practices or recommendations\n- Account strategy, RBAC, security patterns\n- Cost management and resource monitoring\n- Naming conventions and architecture decisions\n\n## Schema Reference\n\n### Blueprint `meta.yaml` Schema\n\nEach blueprint contains a `meta.yaml` file that defines its structure. The schema supports both flat (steps-only) and nested (tasks with steps) formats for backwards compatibility.\n\n#### Required Fields\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `blueprint_id` | string | Unique identifier for the blueprint |\n| `name` | string | Display name for the blueprint |\n| `summary` | string | Brief description of the blueprint's purpose |\n| `overview` | string | Detailed description of what the blueprint accomplishes |\n| `steps` | list | List of step slugs (references to step directories) |\n\n#### Optional Fields\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `is_repeatable` | boolean | Whether the blueprint can be run multiple times (default: false) |\n| `tasks` | list | Groupings of steps with metadata (see below) |\n\n#### Tasks Structure\n\nThe `tasks` field enables grouping steps into logical units with explicit metadata. This provides context about what each group accomplishes, who should perform it, and what prerequisites are required.\n\n```yaml\ntasks:\n  - slug: string              # Unique identifier for the task (e.g., \"platform-planning\")\n    title: string             # Display title for the task\n    summary: string           # Short summary of what will be accomplished\n    role_requirements:        # Snowflake role requirements\n      - string\n    external_requirements:    # External requirements (SSO, data integration sources, etc.)\n      - string\n    personas:                 # Personas/roles needed for this task\n      - string\n    description: string       # Optional detailed content for the Skill and future UI\n    steps:                    # Steps that belong to this task\n      - slug: string          # Reference to step slug in the blueprint's steps list\n        title: string         # Display title for the step within this task\n```\n\n#### Example: Minimal Blueprint (flat, without tasks)\n\n```yaml\nblueprint_id: blueprint_abc123\nname: Simple Setup\nsummary: Basic configuration workflow\noverview: A straightforward setup process.\nsteps:\n  - step-one\n  - step-two\n  - step-three\n```\n\n#### Example: Full Blueprint (with tasks)\n\n```yaml\nblueprint_id: blueprint_def456\nname: Platform Foundation Setup\nsummary: Establish core platform infrastructure\noverview: Complete platform setup workflow.\nis_repeatable: false\nsteps:\n  - determine-account-strategy\n  - configure-organization-name\n  - create-infrastructure-database\ntasks:\n  - slug: platform-foundation\n    title: Platform Foundation\n    summary: Define account strategy and create shared infrastructure.\n    external_requirements:\n      - Snowflake account (trial or provisioned)\n      - Organization information\n    personas:\n      - Platform Administrator\n      - Cloud/Infrastructure Team\n    role_requirements:\n      - ORGADMIN or ACCOUNTADMIN privileges\n    steps:\n      - slug: determine-account-strategy\n        title: Determine Account Strategy\n      - slug: configure-organization-name\n        title: Configure Organization Name\n      - slug: create-infrastructure-database\n        title: Create Infrastructure Database\n```\n\n#### Task Content Files\n\nTask overview content can also be stored in separate markdown files using a flat directory structure:\n\n```\nblueprints/\u003cblueprint-name\u003e/\n├── meta.yaml\n├── overview.md\n├── tasks/\n│   ├── platform-planning.md      # Flat structure (recommended)\n│   ├── security-setup.md\n│   └── cost-management.md\n└── \u003cstep-slug\u003e/\n    ├── overview.md\n    ├── code.sql.jinja\n    └── dynamic.md.jinja\n```\n\nThe task markdown files can include additional details like time estimates, key decisions, and deliverables that supplement the structured fields in `meta.yaml`.\n\n## Manual Configuration (Alternative)\n\nIf you prefer to manage files directly without the guided experience:\n\n### 1. Choose a blueprint\n\n```bash\nls blueprints/\n```\n\nReview the blueprint's `meta.yaml` and step `overview.md` files to understand what will be configured.\n\n### 2. Configuring the projects directory\n\nBy default, rendered project artifacts are written to `projects/` under the current working directory. The `blueprints/` and `definitions/` directories are always resolved script-relatively. If you want to write project outputs somewhere else, override the projects directory using one of:\n\n1. **`--projects-dir \u003cpath\u003e`** CLI flag (highest priority)\n2. **`BLUEPRINT_MANAGER_PROJECTS_DIR`** environment variable\n3. **`\u003ccwd\u003e/projects`** (current working directory, default)\n\nFor example:\n\n```bash\n# Using --projects-dir flag\npython scripts/render_journey.py answers.yaml \\\n  --blueprint platform-foundation-setup --lang sql \\\n  --projects-dir /path/to/projects\n\n# Using the environment variable\nexport BLUEPRINT_MANAGER_PROJECTS_DIR=/path/to/projects\npython scripts/render_journey.py answers.yaml \\\n  --blueprint platform-foundation-setup --lang sql\n```\n\n### 3. Create a project and answer file\n\nCreate a project directory structure:\n\n```bash\n# Create project structure\nmkdir -p projects/my-project/answers/\u003cblueprint_id\u003e\nmkdir -p projects/my-project/output/iac/sql\nmkdir -p projects/my-project/output/documentation\n```\n\nCreate an answer file (e.g., `projects/my-project/answers/\u003cblueprint_id\u003e/my_answers.yaml`) and provide values for each question. See `definitions/questions.yaml` for question details and valid options.\n\n### 4. Generate infrastructure code\n\n```bash\npython scripts/render_journey.py \\\n  projects/my-project/answers/\u003cblueprint_id\u003e/my_answers.yaml \\\n  --blueprint \u003cblueprint_id\u003e \\\n  --project my-project \\\n  --lang sql\n```\n\n**Options:**\n- `--lang sql` or `--lang terraform` — choose output language\n- `--project \u003cname\u003e` — project name for organizing outputs\n- `--skip-guidance` — skip generating documentation\n- `--projects-dir \u003cpath\u003e` — projects directory (see [Configuring the projects directory](#2-configuring-the-projects-directory))\n\n**Output:**\n- SQL/Terraform files in `projects/\u003cproject\u003e/output/iac/sql/`\n- Documentation in `projects/\u003cproject\u003e/output/documentation/`\n\n### 5. Execute the generated code\n\nReview the generated SQL file, then execute it in your Snowflake worksheet. The SQL is idempotent — safe to run multiple times.\n\n## Step-level Implementation Tracking (QUERY_TAG)\n\nRendered SQL journeys are automatically annotated with Snowflake\n`QUERY_TAG`s so that execution of Blueprint-generated SQL can be detected\nin query history. This is applied **only to SQL output**; Terraform output\nis unaffected.\n\nFor every rendered step the renderer wraps the step's SQL with a\nmatching SET/UNSET pair:\n\n```sql\nALTER SESSION SET QUERY_TAG = '{\"src\":\"blueprints\",\"bp\":\"\u003cblueprint_id\u003e\",\"step\":\"\u003cstep_slug\u003e\"}';\n-- ... step SQL ...\nALTER SESSION UNSET QUERY_TAG;\n```\n\nso each step's tag is scoped to just that step's queries and does not\nbleed into unrelated queries the customer runs later in the same\nsession.\n\n### Tag schema\n\nThe tag value is a compact single-line JSON object with exactly these\nkeys (total payload is kept well under Snowflake's 2 KB `QUERY_TAG`\nlimit):\n\n| key    | meaning                                               |\n|--------|-------------------------------------------------------|\n| `src`  | source identifier, always `\"blueprints\"` for this repo |\n| `bp`   | blueprint identifier (from `meta.yaml` `blueprint_id`, falling back to blueprint directory name) |\n| `step` | step identifier (step slug) within the blueprint       |\n\n\u003e `run_id` is intentionally **not** included. Chronological ordering in\n\u003e query history is sufficient for the current analysis. If per-run\n\u003e attribution is later required it can be added as an additional short\n\u003e key.\n\n### Querying executions\n\nTo find Blueprint-executed steps in the usual job/query-history views,\nuse the `TAG` column (e.g. `job_etl_v` / `CXE_JOB_RAW_V_LAST_90`):\n\n```sql\nSELECT TAG:bp::string   AS blueprint,\n       TAG:step::string AS step,\n       COUNT(*)         AS n\nFROM   job_etl_v\nWHERE  TAG:src::string = 'blueprints'\nGROUP  BY 1, 2;\n```\n\nBecause `QUERY_TAG` lands in a dedicated `TAG` column, these queries do\nnot require `LIKE` / `ILIKE` scans over SQL text.\n\nLicense\nCopyright (c) 2026 Snowflake Inc. All rights reserved.\nThis repo is source-available and licensed under these [terms](/LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsnowflake-labs%2Fblueprint-manager","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsnowflake-labs%2Fblueprint-manager","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsnowflake-labs%2Fblueprint-manager/lists"}