KS
Killer-Skills

generate-boundary-objects — how to use generate-boundary-objects how to use generate-boundary-objects, generate-boundary-objects alternative, generate-boundary-objects setup guide, what is generate-boundary-objects, generate-boundary-objects vs competitor skills, generate-boundary-objects install for studio projects, studio project boundary object generation, targeted experiment generation with generate-boundary-objects, JSONB block format for boundary objects

v1.0.0
GitHub

About this Skill

Ideal for Studio Project Agents requiring structured approaches to portfolio and research study generation, utilizing JSONB block formats. generate-boundary-objects is a skill that generates strategic boundary objects for studio projects, creating a context for targeted experiment generation using JSONB block format.

Features

Generates strategic boundary objects for studio projects
Uses JSONB block format for canvas data structure
Supports studio project slugs as input arguments
Creates targeted experiment generation contexts
Utilizes a structured approach to portfolio, research studies, and prototypes
Processes data in a specific format with items and id properties

# Core Topics

friisj friisj
[1]
[0]
Updated: 2/24/2026

Quality Score

Top 5%
60
Excellent
Based on code quality & docs
Installation
SYS Universal Install (Auto-Detect)
Cursor IDE Windsurf IDE VS Code IDE
> npx killer-skills add friisj/jfriis/generate-boundary-objects

Agent Capability Analysis

The generate-boundary-objects MCP Server by friisj is an open-source Categories.community integration for Claude and other AI agents, enabling seamless task automation and capability expansion. Optimized for how to use generate-boundary-objects, generate-boundary-objects alternative, generate-boundary-objects setup guide.

Ideal Agent Persona

Ideal for Studio Project Agents requiring structured approaches to portfolio and research study generation, utilizing JSONB block formats.

Core Value

Empowers agents to create strategic context for targeted experiment generation in studio projects, leveraging JSON data structures and studio project slugs, while providing a structured approach to canvas JSONB block columns such as jobs, pains, and gains.

Capabilities Granted for generate-boundary-objects MCP Server

Generating strategic boundary objects for studio projects
Creating structured approaches to portfolio and research studies
Utilizing JSONB block formats for data organization

! Prerequisites & Limits

  • Requires studio project slug as input
  • Specific to studio project context
  • JSONB block format compliance necessary
Project
SKILL.md
19.3 KB
.cursorrules
1.2 KB
package.json
240 B
Ready
UTF-8

# Tags

[No tags]
SKILL.md
Readonly

Generate Boundary Objects

You are generating strategic boundary objects for a studio project. This creates the strategic context needed for targeted experiment generation.

Input

The user has provided: $ARGUMENTS

This should be a studio project slug (e.g., chalk, putt).


JSONB Block Format

All canvas JSONB block columns (jobs, pains, gains, products_services, pain_relievers, gain_creators, key_partners, etc.) use this structure:

json
1{ 2 "items": [ 3 { 4 "id": "<unique-id>", 5 "content": "<item text>", 6 "priority": "high|medium|low", 7 "created_at": "<ISO 8601 timestamp>" 8 } 9 ], 10 "assumptions": [], 11 "validation_status": "untested" 12}

For customer profile items, also include metadata:

json
1{ 2 "id": "<unique-id>", 3 "content": "<item text>", 4 "metadata": { "type": "functional|social|emotional" }, 5 "priority": "high|medium|low", 6 "created_at": "<ISO 8601 timestamp>" 7}

Generate unique IDs using a prefix + sequence pattern (e.g., job-001, pain-001, ps-001). Use new Date().toISOString() for timestamps.

CRITICAL: Do NOT store plain string arrays. The admin UI canvas views will not render them.


Required Fields by Table

Schema source of truth: lib/mcp/schemas/*.ts If any field documentation here conflicts with the Zod schemas, the schemas are correct. Last synced: 2026-02-21

business_model_canvases

Required: slug, name, status Optional: description, studio_project_id, all 9 block columns (JSONB format above)

customer_profiles

Required: slug, name, status Optional: description, studio_project_id, profile_type, demographics (JSONB object), jobs (JSONB), pains (JSONB), gains (JSONB)

value_maps

Required: slug, name, status Optional: description, studio_project_id, customer_profile_id, business_model_canvas_id, products_services (JSONB), pain_relievers (JSONB), gain_creators (JSONB)

value_proposition_canvases

Required: slug, name, status, value_map_id Optional: description, studio_project_id, customer_profile_id, addressed_jobs, addressed_pains, addressed_gains

assumptions

Required: slug, statement, status (use identified), importance (critical|high|medium|low) Optional: studio_project_id, category, notes, validation_criteria Note: is_leap_of_faith is computed by DB trigger — do not provide

user_journeys

Required: slug, name, status Optional: description, studio_project_id, customer_profile_id, journey_type (use end_to_end), goal

journey_stages

Required: user_journey_id, name, sequence Optional: description, stage_type (pre_purchase|purchase|post_purchase|ongoing), customer_emotion, customer_mindset, customer_goal, drop_off_risk (low|medium|high)

touchpoints

Required: journey_stage_id, name, sequence Optional: description, channel_type (web|mobile_app|phone|email|in_person|chat|social|physical_location|mail|other), interaction_type (browse|search|read|watch|listen|form|transaction|conversation|notification|passive), importance (critical|high|medium|low), pain_level (none|minor|moderate|major|critical), delight_potential (low|medium|high)

service_blueprints

Required: slug, name, status Optional: description, studio_project_id, blueprint_type (service|product|hybrid|digital|physical), service_scope, service_duration

blueprint_steps

Required: service_blueprint_id, name, sequence Optional: description, layers (JSONB with keys: customer_action, frontstage, backstage, support_process), cost_implication (none|low|medium|high), customer_value_delivery (none|low|medium|high), failure_risk (low|medium|high|critical), failure_impact

story_maps

Required: slug, name, status Optional: description, studio_project_id, map_type (feature|product|release|discovery)

activities

Required: story_map_id, name, sequence Optional: description, user_goal

user_stories

Required: activity_id, title Optional: description, acceptance_criteria, story_type (feature|enhancement|bug|tech_debt|spike), priority (critical|high|medium|low), status (default: backlog), story_points

entity_links

Required: source_type, source_id, target_type, target_id Optional: link_type (default: 'related'), strength (strong|moderate|weak|tentative), notes, metadata, position


Procedure

Step 1: Validate Project

bash
1scripts/sb query studio_projects "slug=eq.<slug>"

If not found, abort with: "No studio project found with slug '<slug>'. Check studio_projects table."

Save the project id, name, description, problem_statement, hypothesis, success_criteria, current_focus, scope_out.

Step 2: Check Existing Links

Query entity_links for existing outbound links from this project:

bash
1scripts/sb query entity_links "source_type=eq.studio_project&source_id=eq.<project-id>"

Show what's already linked. Skip types that already have links to keep this idempotent. Report which types are being skipped and why.

Step 3: Read Project Context

Also query studio_hypotheses for this project:

bash
1scripts/sb query studio_hypotheses "project_id=eq.<project-id>"

Gather all available context: name, description, problem_statement, hypothesis, success_criteria, current_focus, scope_out, plus hypothesis statements.

Step 4: Generate Business Model Canvas

Skip if an entity_link to business_model_canvas already exists.

Create a business_model_canvases record. Populate ALL 9 blocks with initial items derived from project context:

bash
1scripts/sb create business_model_canvases '{ 2 "slug": "<project-slug>-business-model", 3 "name": "<Project Name> - Business Model", 4 "description": "<1-2 sentences grounded in project context>", 5 "studio_project_id": "<project-id>", 6 "status": "draft", 7 "key_partners": {"items": [{"id": "kp-001", "content": "<partner>", "priority": "high", "created_at": "<now>"}], "assumptions": [], "validation_status": "untested"}, 8 "key_activities": {"items": [...], "assumptions": [], "validation_status": "untested"}, 9 "key_resources": {"items": [...], "assumptions": [], "validation_status": "untested"}, 10 "value_propositions": {"items": [...], "assumptions": [], "validation_status": "untested"}, 11 "customer_segments": {"items": [...], "assumptions": [], "validation_status": "untested"}, 12 "customer_relationships": {"items": [...], "assumptions": [], "validation_status": "untested"}, 13 "channels": {"items": [...], "assumptions": [], "validation_status": "untested"}, 14 "cost_structure": {"items": [...], "assumptions": [], "validation_status": "untested"}, 15 "revenue_streams": {"items": [...], "assumptions": [], "validation_status": "untested"} 16}'

Generate 2-4 items per block, grounded in the project's problem statement and description. Then create the entity_link:

bash
1scripts/sb create entity_links '{ 2 "source_type": "studio_project", 3 "source_id": "<project-id>", 4 "target_type": "business_model_canvas", 5 "target_id": "<bmc-id>", 6 "link_type": "explores", 7 "metadata": {} 8}'

Step 5: Generate Customer Profile

Skip if an entity_link to customer_profile already exists.

Create a customer_profiles record. Use the JSONB block format for jobs, pains, and gains:

bash
1scripts/sb create customer_profiles '{ 2 "slug": "<project-slug>-primary-customer", 3 "name": "<Project Name> - Primary Customer", 4 "description": "<2-3 sentences describing the target customer>", 5 "studio_project_id": "<project-id>", 6 "profile_type": "persona", 7 "demographics": {"age_range": "<Age range>", "role": "<Role>", "tech_level": "<level>", "income": "<range>"}, 8 "jobs": {"items": [...], "assumptions": [], "validation_status": "untested"}, 9 "pains": {"items": [...], "assumptions": [], "validation_status": "untested"}, 10 "gains": {"items": [...], "assumptions": [], "validation_status": "untested"}, 11 "status": "draft" 12}'

Generate 3-5 items per block. Link with explores.

Step 6: Generate Value Map + Value Proposition Canvas

Skip if an entity_link to value_proposition_canvas already exists.

The VPC requires a value_map_id, so create the value map first:

bash
1scripts/sb create value_maps '{ 2 "slug": "<project-slug>-value-map", 3 "name": "<Project Name> - Value Map", 4 "description": "<1-2 sentences>", 5 "studio_project_id": "<project-id>", 6 "customer_profile_id": "<profile-id>", 7 "business_model_canvas_id": "<bmc-id>", 8 "products_services": {"items": [...], "assumptions": [], "validation_status": "untested"}, 9 "pain_relievers": {"items": [...], "assumptions": [], "validation_status": "untested"}, 10 "gain_creators": {"items": [...], "assumptions": [], "validation_status": "untested"}, 11 "status": "draft" 12}'

Then create the VPC linked to the value map:

bash
1scripts/sb create value_proposition_canvases '{ 2 "slug": "<project-slug>-value-proposition", 3 "name": "<Project Name> - Value Proposition", 4 "description": "<Value prop description>", 5 "studio_project_id": "<project-id>", 6 "customer_profile_id": "<profile-id>", 7 "value_map_id": "<value-map-id>", 8 "addressed_jobs": {"items": ["<job content>", "<job content>"]}, 9 "addressed_pains": {"items": ["<pain content>", "<pain content>"]}, 10 "addressed_gains": {"items": ["<gain content>", "<gain content>"]}, 11 "status": "draft" 12}'

Link the VPC with explores.

Step 7: Generate Assumptions

Skip if entity_links to assumption already exist (3+ links).

Create 3-5 assumptions records. Distribute across risk categories (desirability, viability, feasibility, usability). Bulk insert as an array:

bash
1scripts/sb create assumptions '[ 2 { 3 "slug": "<project-slug>-<short-name>", 4 "statement": "We assume that <specific belief>", 5 "status": "identified", 6 "importance": "critical", 7 "category": "desirability", 8 "studio_project_id": "<project-id>", 9 "notes": "<Why this matters>" 10 }, 11 { ... }, 12 { ... } 13]'

Then bulk-create entity_links for all assumptions:

bash
1scripts/sb create entity_links '[ 2 {"source_type": "studio_project", "source_id": "<project-id>", "target_type": "assumption", "target_id": "<id-1>", "link_type": "tests", "metadata": {}}, 3 {"source_type": "studio_project", "source_id": "<project-id>", "target_type": "assumption", "target_id": "<id-2>", "link_type": "tests", "metadata": {}}, 4 ... 5]'

Step 8: Generate User Journey + Stages + Touchpoints

Skip if an entity_link to user_journey already exists.

Create the full journey cascade — journey record, stages, and touchpoints:

8a. Create the journey:

bash
1scripts/sb create user_journeys '{ 2 "slug": "<project-slug>-core-journey", 3 "name": "<Project Name> - Core Journey", 4 "description": "<Journey description grounded in project context>", 5 "studio_project_id": "<project-id>", 6 "customer_profile_id": "<profile-id>", 7 "journey_type": "end_to_end", 8 "goal": "<What success looks like for this journey>", 9 "status": "draft" 10}'

8b. Bulk-create 4-5 journey stages:

bash
1scripts/sb create journey_stages '[ 2 {"user_journey_id": "<journey-id>", "name": "Discovery", "description": "...", "sequence": 1, "stage_type": "pre_purchase", "customer_emotion": "...", "customer_mindset": "...", "customer_goal": "...", "drop_off_risk": "medium"}, 3 {"user_journey_id": "<journey-id>", "name": "Evaluation", "description": "...", "sequence": 2, "stage_type": "pre_purchase", ...}, 4 {"user_journey_id": "<journey-id>", "name": "Commitment", "description": "...", "sequence": 3, "stage_type": "purchase", ...}, 5 {"user_journey_id": "<journey-id>", "name": "Onboarding", "description": "...", "sequence": 4, "stage_type": "post_purchase", ...}, 6 {"user_journey_id": "<journey-id>", "name": "Ongoing Usage", "description": "...", "sequence": 5, "stage_type": "ongoing", ...} 7]'

Adapt stage names to match the project domain.

8c. Bulk-create touchpoints per stage (2-3 per stage):

bash
1scripts/sb create touchpoints '[ 2 {"journey_stage_id": "<stage-1-id>", "name": "...", "sequence": 1, "channel_type": "web", "interaction_type": "browse", "importance": "high", "pain_level": "minor", "delight_potential": "medium"}, 3 {"journey_stage_id": "<stage-1-id>", "name": "...", "sequence": 2, ...}, 4 {"journey_stage_id": "<stage-2-id>", "name": "...", "sequence": 1, ...}, 5 ... 6]'

8d. Create entity_link:

bash
1scripts/sb create entity_links '{ 2 "source_type": "studio_project", 3 "source_id": "<project-id>", 4 "target_type": "user_journey", 5 "target_id": "<journey-id>", 6 "link_type": "explores", 7 "metadata": {} 8}'

Step 9: Generate Service Blueprint + Steps

Skip if an entity_link to service_blueprint already exists.

The service blueprint mirrors the journey stages, mapping what happens behind the scenes.

9a. Create the blueprint:

bash
1scripts/sb create service_blueprints '{ 2 "slug": "<project-slug>-service-blueprint", 3 "name": "<Project Name> - Service Blueprint", 4 "description": "<How the service is delivered>", 5 "studio_project_id": "<project-id>", 6 "blueprint_type": "digital", 7 "status": "draft" 8}'

9b. Bulk-create blueprint_steps (one per journey stage):

bash
1scripts/sb create blueprint_steps '[ 2 {"service_blueprint_id": "<blueprint-id>", "name": "Discovery", "description": "...", "sequence": 1, "layers": {"customer_action": "...", "frontstage": "...", "backstage": "...", "support_process": "..."}, "cost_implication": "low", "customer_value_delivery": "medium", "failure_risk": "low"}, 3 {"service_blueprint_id": "<blueprint-id>", "name": "Evaluation", ...}, 4 ... 5]'

Populate all 4 layer keys with project-specific content derived from the journey stages and project context.

9c. Create entity_links:

bash
1scripts/sb create entity_links '[ 2 {"source_type": "studio_project", "source_id": "<project-id>", "target_type": "service_blueprint", "target_id": "<blueprint-id>", "link_type": "prototypes", "metadata": {}}, 3 {"source_type": "service_blueprint", "source_id": "<blueprint-id>", "target_type": "user_journey", "target_id": "<journey-id>", "link_type": "implements", "metadata": {}} 4]'

Step 10: Generate Story Map + Activities + Stories

Skip if an entity_link to story_map already exists.

The story map translates the journey into development work.

10a. Create the story map:

bash
1scripts/sb create story_maps '{ 2 "slug": "<project-slug>-story-map", 3 "name": "<Project Name> - Story Map", 4 "description": "<Dev planning for the project>", 5 "studio_project_id": "<project-id>", 6 "map_type": "feature", 7 "status": "draft" 8}'

10b. Bulk-create activities (one per journey stage):

bash
1scripts/sb create activities '[ 2 {"story_map_id": "<story-map-id>", "name": "Discovery", "description": "...", "sequence": 1, "user_goal": "..."}, 3 {"story_map_id": "<story-map-id>", "name": "Evaluation", "description": "...", "sequence": 2, "user_goal": "..."}, 4 ... 5]'

10c. Bulk-create user stories (2-3 per activity):

bash
1scripts/sb create user_stories '[ 2 {"activity_id": "<activity-1-id>", "title": "As a <persona>, I want to <action> so that <benefit>", "description": "...", "story_type": "feature", "priority": "high", "status": "backlog"}, 3 {"activity_id": "<activity-1-id>", "title": "As a ...", ...}, 4 {"activity_id": "<activity-2-id>", "title": "As a ...", ...}, 5 ... 6]'

Use the user story format: "As a [persona], I want to [action] so that [benefit]". Ground stories in the customer profile and journey touchpoints.

10d. Create entity_links:

bash
1scripts/sb create entity_links '[ 2 {"source_type": "studio_project", "source_id": "<project-id>", "target_type": "story_map", "target_id": "<story-map-id>", "link_type": "informs", "metadata": {}}, 3 {"source_type": "story_map", "source_id": "<story-map-id>", "target_type": "user_journey", "target_id": "<journey-id>", "link_type": "implements", "metadata": {}}, 4 {"source_type": "story_map", "source_id": "<story-map-id>", "target_type": "service_blueprint", "target_id": "<blueprint-id>", "link_type": "implements", "metadata": {}} 5]'

Step 11: Summary

Present a summary of everything created:

## Boundary Objects Generated for <Name>

### Created:
- Business Model Canvas: "<name>" (id: <id>) — 9 blocks populated
- Customer Profile: "<name>" (id: <id>) — jobs/pains/gains populated
- Value Map: "<name>" (id: <id>) — products/relievers/creators populated
- Value Proposition Canvas: "<name>" (id: <id>)
- Assumptions: <count> created
  - <statement summary> (<category>, <importance>)
  - ...
- User Journey: "<name>" (id: <id>) — <N> stages, <M> touchpoints
- Service Blueprint: "<name>" (id: <id>) — <N> steps with 4-layer structure
- Story Map: "<name>" (id: <id>) — <N> activities, <M> user stories

### Cascade:
Journey → Blueprint → Story Map (all cross-linked via entity_links)

### Skipped (already linked):
- <list any types that were skipped>

### Next Steps:
1. Review boundary objects in admin UI
2. Run `/generate-experiments <slug>` to create context-aware experiments
3. Refine BMC blocks and canvas items as understanding deepens

Error Handling

API Failures

If any scripts/sb call fails:

  1. Report the error: Show the exact error message and which step failed
  2. Don't continue blindly: If a dependency fails (e.g., BMC creation fails), skip steps that depend on it (e.g., don't create entity_link for BMC)
  3. Partial success is OK: If 3 of 5 assumptions succeed, report what worked and what didn't
  4. Common errors:
    • duplicate key value violates unique constraint — a record with that slug already exists. Suggest a different slug or offer to link the existing record instead.
    • violates check constraint — a field value is invalid. Check the "Required Fields by Table" section for valid enum values.
    • violates foreign key constraint — a referenced record doesn't exist. Verify the ID is correct.

Reporting

After completion, always present a clear summary showing:

  • What was created successfully (with IDs)
  • What was skipped (already existed)
  • What failed (with error details and suggested fixes)

Important Notes

  • Idempotent: Always check existing links before creating. Never duplicate boundary objects.
  • Use scripts/sb: All database operations go through scripts/sb commands via the Bash tool.
  • Bulk inserts: Use array JSON for journey_stages, touchpoints, blueprint_steps, activities, user_stories, assumptions, and entity_links. This is one of the key wins — a single POST instead of N sequential calls.
  • Draft status: All generated objects start as draft — they need human review.
  • JSONB block format: All canvas block columns MUST use { items: [...], assumptions: [], validation_status: "untested" } format. Plain arrays will not render in the admin UI.
  • Context-grounded: Every generated object should be grounded in the project's actual problem_statement, hypothesis, and description. Don't generate generic content.
  • Entity link validation: The studio_project source type is registered in lib/entity-links-validation.ts with valid link types: explores, improves, prototypes, informs, tests, validates, spin_off, inspired_by, evolved_from.
  • Required fields: Every table requires slug. Assumptions use status: 'identified' (not untested). User journeys use journey_type: 'end_to_end'. VPCs require value_map_id.

Related Skills

Looking for an alternative to generate-boundary-objects or building a Categories.community AI Agent? Explore these related open-source MCP Servers.

View All

widget-generator

Logo of f
f

widget-generator is an open-source AI agent skill for creating widget plugins that are injected into prompt feeds on prompts.chat. It supports two rendering modes: standard prompt widgets using default PromptCard styling and custom render widgets built as full React components.

149.6k
0
Design

chat-sdk

Logo of lobehub
lobehub

chat-sdk is a unified TypeScript SDK for building chat bots across multiple platforms, providing a single interface for deploying bot logic.

73.0k
0
Communication

zustand

Logo of lobehub
lobehub

The ultimate space for work and life — to find, build, and collaborate with agent teammates that grow with you. We are taking agent harness to the next level — enabling multi-agent collaboration, effortless agent team design, and introducing agents as the unit of work interaction.

72.8k
0