Skip to content
Marketing
Skill

/lite-constraints

Generates synthesis-constraints.json for the Diffmode growth-tactics pipeline by reasoning in-context over the per-run growth-factors.json (LIGHT vector DB) + founder context — the clean-room, no-Python replacement for the proprietary Python constraints generator. Emits the

BOOST
From plugin
diffmode-free
16513 skills5 agents1 command
Install
$ npx -y skills add acogood/diffmode_free --skill lite-constraints --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/lite-constraints

Context preview

The summary Claude sees to decide when to auto-load this skill.

Generates synthesis-constraints.json for the Diffmode growth-tactics pipeline by reasoning in-context over the per-run growth-factors.json (LIGHT vector DB) + founder context — the clean-room, no-Python replacement for the proprietary Python constraints generator. Emits the

SKILL.md

lite-constraints.SKILL.md
name: lite-constraints
description: Generates synthesis-constraints.json for the Diffmode growth-tactics pipeline by reasoning in-context over the per-run growth-factors.json (LIGHT vector DB) + founder context — the clean-room, no-Python replacement for the proprietary Python constraints generator. Emits the white-space pairs, mandatory synergy/founder-leverage pools, prohibited (conventional-outcome) combinations, and category-diversity requirements that the synthesis chain reads. Use after growth-factors mining and before synthesis.
metadata:
  version: "1.0.0"

Lite Constraints (synthesis constraints, no Python)

You produce `synthesis-constraints.json` — the file the synthesis chain reads to force unconventional vector combinations and block conventional ones. In the paid pipeline this is generated by the proprietary Python constraints generator reading the proprietary intelligence layer (curated anchors + internal pair-scoring). Here you **reason in-context** over the per-run `growth-factors.json` + founder constraints to emit the same JSON shape. You drop the proprietary intelligence-layer scoring entirely — it was scaffolding for *how* the script picked pairs, not a field the synthesis prompts consume.

⚠️ Clean-room rule

Build constraints **only** from this run's `growth-factors.json` + `founder-input.md`. Do NOT read anything under `tactics_DB/`. **Every vector ID you reference MUST exist in this run's `growth-factors.json`** — never invent IDs and never use IDs you remember from the proprietary DB. Prohibited-combination rules are expressed at the **category / theme level** plus generic conventional-outcome patterns (clean-room), not as proprietary specific pairs.

Inputs & Output

  • **INPUT** (required): `WS/03-think-tanks/demand-generation/growth-factors.json` (the

LIGHT DB — read its `vectors` and `metadata.category_counts`).

  • **INPUT** (required): `WS/01-diagnostics/founder-input.md` (budget, team size, hours,

unfair advantages, stage — to build the founder-leverage pool and bias selection).

  • **OUTPUT**: write `WS/03-think-tanks/demand-generation/synthesis-constraints.json`.

What the synthesis chain actually uses (build these fields)

1. **`diverse_white_space`** (explore + build read this) — 8-10 cross-category vector PAIRS that are genuinely unconventional and exclude over-represented "content flywheel"-type vectors. Each: `{ "vectors": [id_a, id_b], "reason": "<the emergent angle in plain English>", "source": "white_space" }`. Pick pairs whose mechanisms, when combined, would make a generic marketer say "that's unusual / risky" (not "obviously do that").

2. **`mandatory_combinations`** (explore + build read these pools) — a flat array; each item has a `pool`, `vectors`, `reason`, `priority`:

  • **Pool A — `A_white_space`** (5): the strongest 5 from `diverse_white_space`.
  • **Pool B — `B_synergy`** (5): high-synergy CROSS-CATEGORY pairs (e.g. Structural +

Resource, Leverage + Positioning, Psychological + Leverage, Structural + Psychological, Resource + Positioning). `reason`: name the synergy type.

  • **Pool C — `C_founder_leverage`** (5): pairs that exploit what THIS founder HAS

that's rare — their unfair advantages (technical skill, industry access, network, domain expertise, existing audience) — within their time and budget. Both vectors should be transferability "High"; at least one "Emerging". `reason`: name the asset it exploits. `priority`: `must_include` for A/B, `suggested` for C.

3. **`prohibited_combinations`** (Step 1's conventional-detection) — category/theme-level rules that always yield conventional outcomes, each `{ "pattern": "<theme A> + <theme B>", "vectors_if_present": [<any matching ids from this run, or []>], "reason": "<the conventional mechanism it produces>", "alternative": "<keep one vector, swap the other for an emerging/contrarian one>" }`. Always include these generic conventional patterns (map them onto whatever matching vectors exist this run):

  • "customer-research/personal-need" + "content/SEO flywheel" → "talk to customers and

write content" (CONVENTIONAL).

  • "build-interesting/demo" + "platform-timing/share" → "build demos and share them".
  • "behavioral-cohort/analytics" + "content funnel" → "segment users and optimize".
  • "community-join" + "audience-borrowing" → "join communities and participate".
  • "content flywheel" + any SEO/authority/backlink vector → "create content to rank".

4. **`category_diversity_requirements`** (build reads this) — compute from `growth-factors.json` `metadata.category_counts`: `{ "total_vectors": N, "category_counts": {…}, "minimum_unique_vectors_in_synthesis": {prefix: min}, "max_single_category_pct": 60, "note": "No single category prefix should exceed 60% of vectors used in synthesis output" }`.

**Minimum rule per prefix — must be satisfiable, or it is worse than no rule at all:**

  • `count == 0` → **0**. Never 1. A category with no vectors cannot contribute one.
  • share of total **< 10%** → `min(2, count)`
  • share of total **≥ 10%** → `min(3, count)`
  • **Then cap the whole set: the sum across prefixes must not exceed 12.** If it does, shave

from the largest minimums first until it fits.

The cap is the load-bearing part. Synthesis produces **7-9 tactics carrying 2-3 vectors each**, so ~12 distinct vectors is the realistic ceiling and ~18 is the absolute one. A share-of-DB rule (the shape the proprietary script uses against a much larger database) inverts on a 20-40 vector LIGHT DB and demands *every vector in it*.

> **Worked example — a real run.** 24 vectors: `struct-` 5, `lever-` 6, `resource-` 6, > `psych-` 5, `pos-` 2, `conv-` 0. > Shares: 21%, 25%, 25%, 21%, 8%, 0%. > Minimums: `struct-` 3, `lever-` 3, `resource-` 3, `psych-` 3, `pos-` 2, `conv-` 0 — sum 14. > Over the cap of 12, so shave two from the largest: **`struct-` 3

Read more
Ships withdiffmode-free

Growth tactics for startups that can't outspend their competitors. It researches your market, mines public case studies for the reasons real growth plays worked, combines them in ways nobody's tried, and kills anything an average marketer would have suggested

Get the whole plugin

Other skills on diffmode-free.