structured-goals

module
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 25, 2026 License: MIT

README

Structured Goals

Build Status Lint Status Go Report Card Docs Visualization License

A Go library and CLI tool for managing V2MOM (Vision, Values, Methods, Obstacles, Measures) and OKR (Objects & Key Results) strategic planning documents with JSON Schema validation and Marp slide generation.

Overview

V2MOM is a strategic planning framework created by Marc Benioff at Salesforce. This tool provides:

  • JSON Schema for validating V2MOM documents
  • Marp Markdown Generation for executive presentation slides
  • OKR Alignment - supports nesting Measures (Key Results) under Methods (Objectives)
  • Flexible Structure - supports flat (traditional), nested (OKR-aligned), or hybrid structures
  • Multiple Terminology - render using V2MOM, OKR, or hybrid terminology

Installation

go install github.com/grokify/go-v2mom/cmd/v2mom@latest

Or build from source:

git clone https://github.com/grokify/go-v2mom.git
cd go-v2mom
go build ./cmd/v2mom

Quick Start

# Create a new V2MOM template
v2mom init --name "FY2025 Product Strategy" -o product-v2mom.json

# Edit product-v2mom.json with your content...

# Validate your V2MOM
v2mom validate product-v2mom.json

# Generate Marp slides
v2mom generate marp product-v2mom.json -o slides.md

# Convert to PDF (requires Marp CLI)
marp slides.md -o slides.pdf

V2MOM Framework

Component Question OKR Equivalent
Vision What do you want to achieve? Mission
Values What's important to you? -
Methods How do you get it? Objectives
Obstacles What's preventing success? -
Measures How do you know you have it? Key Results

Structure Modes

Flat (Traditional V2MOM)

Measures and obstacles at the V2MOM level only:

{
  "vision": "...",
  "values": [...],
  "methods": [{"name": "Method 1"}, {"name": "Method 2"}],
  "obstacles": [{"name": "Obstacle 1"}],
  "measures": [{"name": "Measure 1"}, {"name": "Measure 2"}]
}
Nested (OKR-Aligned)

Measures nested under methods (like Key Results under Objectives):

{
  "vision": "...",
  "values": [...],
  "methods": [
    {
      "name": "Method 1",
      "measures": [
        {"name": "Key Result 1", "target": "100"},
        {"name": "Key Result 2", "target": "50%"}
      ]
    }
  ],
  "obstacles": [{"name": "Global obstacle"}]
}
Hybrid

Both global and nested measures/obstacles:

{
  "vision": "...",
  "methods": [
    {
      "name": "Method 1",
      "measures": [{"name": "Method-specific KR"}],
      "obstacles": [{"name": "Method-specific blocker"}]
    }
  ],
  "obstacles": [{"name": "Global obstacle"}],
  "measures": [{"name": "North star metric"}]
}

CLI Commands

Initialize

Create a new V2MOM template:

v2mom init [flags]

Flags:
  --name string       Name for the V2MOM (default "My V2MOM")
  -o, --output string Output file path (default "v2mom.json")
  --structure string  Structure mode: flat, nested, hybrid (default "nested")
Validate

Validate a V2MOM JSON file:

v2mom validate FILE [flags]

Flags:
  --structure string  Structure mode to validate against (flat, nested, hybrid)
Generate Marp

Generate Marp markdown slides:

v2mom generate marp FILE [flags]

Flags:
  -o, --output string      Output file path (default: stdout)
  --theme string           Slide theme: default, corporate, minimal (default "default")
  --terminology string     Display terminology: v2mom, okr, hybrid

Library Usage

package main

import (
    "fmt"
    "github.com/grokify/go-v2mom/v2mom"
    "github.com/grokify/go-v2mom/render"
    "github.com/grokify/go-v2mom/render/marp"
)

func main() {
    // Read V2MOM from file
    v, err := v2mom.ReadFile("my-v2mom.json")
    if err != nil {
        panic(err)
    }

    // Validate
    errs := v.Validate(v2mom.DefaultValidationOptions())
    if v2mom.HasErrors(errs) {
        for _, e := range errs {
            fmt.Println(e)
        }
        return
    }

    // Generate Marp slides
    renderer := marp.New()
    opts := render.DefaultOptions()
    opts.Theme = "corporate"
    opts.Terminology = v2mom.TerminologyOKR

    output, err := renderer.Render(v, opts)
    if err != nil {
        panic(err)
    }
    fmt.Println(string(output))
}

JSON Schema

The JSON Schema is available at schema/v2mom.schema.json and can be referenced in your V2MOM files:

{
  "$schema": "https://github.com/grokify/go-v2mom/schema/v2mom.schema.json",
  "vision": "..."
}

Terminology Options

Mode Methods Measures Obstacles
v2mom Methods Measures Obstacles
okr Objectives Key Results Risks
hybrid Methods (Objectives) Measures (Key Results) Obstacles

Themes

Default

Clean gradient theme with purple/blue accents.

Corporate

Professional blue theme suitable for business presentations.

Minimal

Simple grayscale theme for high contrast readability.

Roadmap

See ROADMAP.md for planned features:

  • Phase 2: Enhanced Marp features (method detail slides, roadmap visualization)
  • Phase 3: Additional renderers (Pandoc, Confluence, HTML)
  • Phase 4: External integrations (Aha!, ProductBoard, Jira)
  • PRD.md - Product Requirements Document
  • TRD.md - Technical Requirements Document
  • ROADMAP.md - Implementation Roadmap

References

License

MIT License - see LICENSE file for details.

Directories

Path Synopsis
cmd
v2mom command
Command v2mom is a CLI tool for managing V2MOM strategic planning documents.
Command v2mom is a CLI tool for managing V2MOM strategic planning documents.
okr
Package okr provides types and utilities for OKR (Objectives and Key Results) goal-setting documents.
Package okr provides types and utilities for OKR (Objectives and Key Results) goal-setting documents.
render
Package render provides interfaces and utilities for rendering OKR documents to various output formats including Marp slides.
Package render provides interfaces and utilities for rendering OKR documents to various output formats including Marp slides.
render/marp
Package marp provides a Marp markdown renderer for OKR documents.
Package marp provides a Marp markdown renderer for OKR documents.
Package render provides interfaces and utilities for rendering V2MOM documents to various output formats.
Package render provides interfaces and utilities for rendering V2MOM documents to various output formats.
marp
Package marp provides a Marp markdown renderer for V2MOM documents.
Package marp provides a Marp markdown renderer for V2MOM documents.
Package schema provides the embedded JSON Schema for V2MOM validation.
Package schema provides the embedded JSON Schema for V2MOM validation.
Package v2mom provides types and utilities for V2MOM strategic planning documents.
Package v2mom provides types and utilities for V2MOM strategic planning documents.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL