/digital-marketing-pro:engagement-workflow — 12-Part Engagement Orchestrator skill

Run the 12-Part engagement workflow from intake to growth plan, checkpointed.

by indranilbanerjee·MIT license·★ 866 Stars on the repo·GitHub ↗

Use now

Inside this skill

SKILL.md · the author's own words
# /digital-marketing-pro:engagement-workflow — 12-Part Engagement Orchestrator

> **Script location.** If your host does not set `${CLAUDE_PLUGIN_ROOT}`, the scripts are in this plugin's `scripts/` folder, next to `skil…

This skill orchestrates the full marketing engagement using the 12-Part sequential methodology. Every brand engagement runs through the sam…

## Context efficiency

Heavy skill. **Grep before Read** any referenced file, then `Read` only matched ranges with `offset` + `limit`. List the brand's workspace…

Read these references before producing output:
- [engagement-flow-methodology.md](../context-engine/engagement-flow-methodology.md) — the full 12-Part flow
- [two-views-model.md](../context-engine/two-views-model.md) — v1 / v2 architecture
- [stone-vs-opinion.md](../context-engine/stone-vs-opinion.md) — confidence tagging
- [decision-matrix-rerun.md](../context-engine/decision-matrix-rerun.md) — when to re-run what
- [update-back-rule.md](../context-engine/update-back-rule.md) — versioning protocol

Word-for-word excerpt, not a result. Read the full SKILL.md ↓

Files of /digital-marketing-pro:engagement-workflow — 12-Part Engagement Orchestrator

indranilbanerjee/main1 file shown
SKILL.md
Show the full text423 lines

/digital-marketing-pro:engagement-workflow — 12-Part Engagement Orchestrator

Script location. If your host does not set ${CLAUDE_PLUGIN_ROOT}, the scripts are in this plugin's scripts/ folder, next to skills/. Run them with Python 3.10 or newer: python, or python3 where python is not found (macOS, many Linux systems).

This skill orchestrates the full marketing engagement using the 12-Part sequential methodology. Every brand engagement runs through the same 12 parts in sequence, producing a canonical set of files at each stage.

Context efficiency

Heavy skill. Grep before Read any referenced file, then Read only matched ranges with offset + limit. List the brand's workspace at ~/.claude-marketing/brands/{slug}/ (or $CLAUDE_PLUGIN_DATA/digital-marketing-pro/brands/{slug}/ when that env var is set) before opening files. On re-invocation mid-session, skip files already in context.

Read these references before producing output:

Operating Mode

This skill is invoked via the /digital-marketing-pro:engagement command family. The command is a thin router — this skill is the single source of truth for the engagement lifecycle, the checkpoint protocol, and the per-part production contract. Each subcommand maps to a specific lifecycle action. The skill calls engagement-state.py for persistence via:

python "${CLAUDE_PLUGIN_ROOT}/scripts/engagement-state.py" <subcommand> ...

You should never hand-edit _engagement.json — always go through engagement-state.py.

Checkpointing & Resume (single source of truth)

Every long engagement run is resumable. The checkpoint protocol is: init a run → save each part as it completes → finalize → publish to the visible output folder. This lets an interrupted run (context exhaustion, user cancel, machine sleep) resume from the next un-checkpointed part instead of restarting from Part 1.

1. On start, after the brand pre-condition passes, open a checkpoint run and link it to engagement state:

python "${CLAUDE_PLUGIN_ROOT}/scripts/checkpoint-manager.py" init \
    --brand "{brand_slug}" --workflow engagement --topic "{engagement_id}"

# Record the returned run_id into _engagement.json so resume can find it:
python "${CLAUDE_PLUGIN_ROOT}/scripts/engagement-state.py" set-checkpoint-run \
    --brand "{brand_slug}" --id "{engagement_id}" --run-id "{run_id}"

set-checkpoint-run stores the run_id in _engagement.json, making the resume linkage real (previously the run_id was never persisted).

2. After each part completes and passes its quality gate, the orchestrator saves that part's output:

python "${CLAUDE_PLUGIN_ROOT}/scripts/checkpoint-manager.py" save \
    --brand "{brand}" --run-id "{run_id}" \
    --step {part_number} --content-file "{path_to_that_part_deliverable}" --extension md

Pass the actual deliverable path for that part (e.g. Part 3 saves the Four Core Documents path; Part 8 saves the Growth Plan path) — never a placeholder for a different part.

3. Before saving Part 5 (Client Validation) and Part 8 (Growth Plan) deliverables, run the full quality gate:

# BLOCKING gate — Part 5 and Part 8 deliverables cannot be checkpointed until this passes
/digital-marketing-pro:check "{path_to_deliverable}" --full --brand {brand}

If /digital-marketing-pro:check --full returns BLOCKED, fix the CRITICAL issues before checkpointing the part.

4. After the final part, publish every artifact to the user-visible folder and finalize:

python "${CLAUDE_PLUGIN_ROOT}/scripts/output-publisher.py" publish-run \
    --brand "{brand}" --run-id "{run_id}"

python "${CLAUDE_PLUGIN_ROOT}/scripts/checkpoint-manager.py" finalize \
    --brand "{brand}" --run-id "{run_id}" --status completed

Then point the user at the visible output folder via /digital-marketing-pro:output-folder {brand}.

To resume an interrupted run, use /digital-marketing-pro:resume — it reloads every saved part and continues from the next un-checkpointed part.

State validation & rework caps

  • Validate a part's outputs against the manifest before marking it complete:

    python "${CLAUDE_PLUGIN_ROOT}/scripts/engagement-state.py" validate-part \
        --brand "{brand}" --id "{id}" --part {N}
    

    This diffs the actual files on disk against the PART_DEFINITIONS manifest and flags missing deliverables. Use it in file-tree and before next.

  • Repair a partially-initialised engagement directory (instead of crashing on a non-empty dir):

    python "${CLAUDE_PLUGIN_ROOT}/scripts/engagement-state.py" init --repair \
        --brand "{brand}" --id "{id}"
    

    --repair completes the canonical directory tree and state file on a dir that holds only partial state.

  • v2 re-run cap: a maximum of 2 v2 re-run rounds per part is allowed without explicit user override. The round count is stored in _engagement.json. If a part would exceed 2 rounds, stop and ask the user to explicitly approve further re-runs (records the override in state). This prevents unbounded re-run loops.

Subcommands

/digital-marketing-pro:engagement start <brand-slug> <engagement-id>

Purpose: Initialise a new engagement.

Steps:

  1. Validate that the brand profile exists at ~/.claude-marketing/brands/{brand-slug}/profile.json. If not, instruct the user to run /digital-marketing-pro:brand-setup first.
  2. Run python "${CLAUDE_PLUGIN_ROOT}/scripts/engagement-state.py" init --brand {brand-slug} --id {engagement-id}.
  3. Confirm the directory tree was created and report the next required action (Part 1 intake).
  4. Walk the user through Part 1 Stone vs Opinion intake by asking the questions one batch at a time.

Part 1 intake questions (ask in this order):

Stone — what the client knows for certain:

  1. Company basics: founded year, employee count, headquarters location, geographic operations
  2. Business model: revenue streams, pricing tiers, primary product/service categories
  3. Current marketing: channels currently active, monthly marketing spend, current measurable KPIs
  4. Tech stack: CRM, email service provider, analytics setup, ad accounts
  5. Customer base scale: customer count, biggest named customer, average order value if known

For each Stone fact, capture:

  • The fact itself
  • Source (how the user knows / what document confirmed it)

Save each via:

python "${CLAUDE_PLUGIN_ROOT}/scripts/engagement-state.py" add-stone-fact --brand {slug} --id {id} --fact-json '{"category":"...","fact":"...","source":"..."}'

Opinion — what the client believes:

  1. Brand positioning: how does the client describe their position in the market?
  2. Customer base: who do they think their customers are? Why do they buy?
  3. Competitors: who do they consider their main competitors?
  4. Growth opportunities: where do they think the biggest opportunity is?
  5. What is working: what marketing activity does the client believe is working?
  6. What is not working: what does the client believe is not working?

For each Opinion, capture:

  • The hypothesis
  • Client's evidence for it (could be intuition, anecdote, partial data)
  • Research question — what would the unbiased research need to verify or refute?

Save each via:

python "${CLAUDE_PLUGIN_ROOT}/scripts/engagement-state.py" add-opinion --brand {slug} --id {id} --hypothesis-json '{"category":"...","hypothesis":"...","client_evidence":"...","research_question":"..."}'

On completion of Part 1: mark Part 1 as completed via mark-part-completed --part 1, advise the user to proceed to Part 2 (External Research).

/digital-marketing-pro:engagement next [brand] [id]

Purpose: Advance to the next part.

Steps:

  1. Read engagement status via engagement-state.py status
  2. Identify the current part and next not-yet-completed part
  3. Confirm with the user that the current part is genuinely complete (do not auto-advance — ask)
  4. On confirmation, mark current as completed, advance current_part pointer
  5. Brief the user on what the new part requires
/digital-marketing-pro:engagement status [brand] [id]

Purpose: Show engagement status.

Steps:

  1. Run engagement-state.py status — get the full state
  2. Read the Living Project Instruction File header
  3. Format a human-readable summary:
    • Engagement: brand + id + start date
    • Current part: part name + days in
    • Completed parts: list
    • Pending parts: list
    • Open re-run decisions: count
    • LIF last updated: date
  4. If the engagement has open items needing resolution, list them
/digital-marketing-pro:engagement file-tree [brand] [id]

Purpose: Show the engagement directory file tree.

Steps:

  1. Run engagement-state.py file-tree
  2. Format as an indented tree
  3. Highlight files that are missing per the canonical structure. Use engagement-state.py validate-part --part {N} to diff each completed part's actual files against the PART_DEFINITIONS manifest (e.g., if Part 3 is marked completed but 3.1-business-and-sbu-analysis.md is missing, validate-part flags it deterministically instead of eyeballing).
/digital-marketing-pro:engagement validate [brand] [id]

Purpose: Run the Part 5 Client Validation flow.

Pre-condition: Parts 2, 3, 4 must be completed.

Steps:

  1. Verify pre-conditions (Parts 2, 3, 4 completed)
  2. Invoke the client-validation-document skill — it produces the Part 5 deliverable: a structured document presenting each finding from v1 with ACCEPT/REJECT/EDIT/DEFER options
  3. Run the full quality gate on the Part 5 deliverable before it goes to the client: /digital-marketing-pro:check "{part5_path}" --full --brand {brand}. If it returns BLOCKED, fix the CRITICAL issues first (this gate is mandatory before Part 5 and Part 8 deliverables).
  4. After the user reviews and provides decisions, parse them into a triggers list per the Decision Matrix categories
  5. Run engagement-state.py decision-matrix --triggers "{comma-separated}" to compute the v2 re-run plan
  6. Present the re-run plan to the user
  7. Mark Part 5 completed; on user approval of the re-run plan, advance to Part 6
/digital-marketing-pro:engagement re-run-decision [brand] [id]

Purpose: Apply the Decision Matrix to compute v2 re-runs.

Steps:

  1. Read the Part 5 Client Validation Document
  2. Categorise rejected/edited findings into Decision Matrix triggers
  3. Show the triggers and the computed re-runs
  4. Estimate the cost (rough token count) of each re-run
  5. Await user approval — they can accept, modify (skip some, add others), or reject
  6. Record the executed plan via engagement-state.py record-rerun-execution
/digital-marketing-pro:engagement update-back [brand] [id] --doc <doc-id> --reason <reason>

Purpose: Apply the Update-Back Rule to bump a source document version after Part 7+.

Pre-condition: The user has already drafted the corrected document content.

Steps:

  1. Read the current version of the doc
  2. Confirm the correction with the user (validation step per the Update-Back Rule)
  3. Bump the version via engagement-state.py bump-version --doc {id} --reason "{reason}"
  4. Save the new version file with a header noting v(prev) → v(new) changes
  5. Update the Living Project Instruction File via lif-log-change — it now appends the change to living-instruction-file.md and refreshes the header date, so the LIF reflects the correction immediately
  6. Identify downstream documents that may need review and add to the engagement's review queue
/digital-marketing-pro:engagement lif-show [brand] [id]

Purpose: Display the Living Project Instruction File.

Steps: Run engagement-state.py lif-show and format the markdown output for readability.

/digital-marketing-pro:engagement list-engagements [brand]

Purpose: List all engagements (optionally filtered by brand).

Steps: Run engagement-state.py list-engagements --brand {slug} and format as a table.

Production shorthands

The command family also exposes four production shorthands that route straight to the part-producing skills (documented in Per-Part Production Targets below). These match the command surface one-to-one:

  • /digital-marketing-pro:engagement four-core <brand> <id> [--doc 3.X] [--view v2] [--combined] — Part 3, invokes the four-core-documents skill
  • /digital-marketing-pro:engagement growth-plan <brand> <id> — Part 8, invokes the growth-plan skill
  • /digital-marketing-pro:engagement yearly-planner <brand> <id> — Part 8 companion, invokes the yearly-planner skill
  • /digital-marketing-pro:engagement loop <brand> <id> — Part 12, invokes the continuous-improvement-loop skill

Per-Part Production Targets

Each part is produced by real, existing agents and skills. This orchestrator dispatches to the targets below — there are no wrapper skills named external-research / preparation-documents / channel-strategy-fanout / execution-artefacts / ai-creative-instructions; those never existed. Use the exact targets named here:

Part Real target(s)
1 (this skill — intake walked here directly)
2 agents market-intelligence + competitive-intel; skill audience-intelligence (invoke as a skill); reference compliance-rules.md (load as context)
3 skill four-core-documents (produces 3.1, 3.2, 3.3, 3.4)
4 command competitor-analysis + skills audience-intelligence + agent market-intelligence
5 skill client-validation-document
6 re-runs invoke skill four-core-documents with --view v2
7 skills content-engine + campaign-orchestrator + analytics-insights
8 skills growth-plan + yearly-planner
9 per-channel skills — paid-advertising, aeo-geo, social-strategy, seo-plan, email-sequence (one per channel family)
10 skill content-engine (execution / output mode)
11 skills content-engine + ad-creative + video-script (creative briefs); asset rendering happens in your own creative tooling (design team, AI image/video tools, or a connected design platform), then finished assets are signed via c2pa-metadata
12 skill continuous-improvement-loop

Parallel Dispatch

Several parts of the engagement contain independent sub-tasks that should be dispatched in parallel via multiple Task tool calls in a single message — not sequentially. Dispatching independent sub-tasks concurrently is substantially faster than running them one after another; actual time varies by engagement depth, model, and rate limits. Keep concurrent subagents to a handful (roughly 3–8) — past that you queue against API rate limits and the win drops; under 3 there is nothing to parallelize.

Cost note: total token usage is broadly similar (you're doing the same work) but billed-per-turn input costs trend up slightly because each parallel subagent re-loads its context.

Parts that benefit from parallel dispatch:

Part Parallel-eligible work How to dispatch
Part 2 — External Research Market sizing, competitor landscape, customer signals, regulatory landscape — none depend on each other Dispatch the market-intelligence agent and the competitive-intel agent as parallel Task calls; invoke audience-intelligence as a skill; load compliance-rules.md (a reference file) as context — not as a subagent
Part 4 — Competitive + Customer + Market Four documents (4.1, 4.2, 4.3, 4.4) are independent — they reference Part 2 only Dispatch all four in a single message with the four respective subagents
Part 9 — Channel Strategy Fan-out Up to 17 channel docs in 7 families. Families 2 (Paid platforms), 3 (Organic & Influencer), 4 (Marketplace & CRM), 5 (Content/ATL/BTL/PR) are independent after Families 1 (Search & Campaign) and 6 (Web + Measurement) complete Sequence: F1 → (F2 ∥ F3 ∥ F4 ∥ F5 in parallel) → F6 → F7. The middle batch is four parallel Task calls in one message.
Part 10 — Execution Artefacts Ad copy, post copy, headlines, CTAs across channels — independent per channel Dispatch one subagent per channel in parallel
Part 11 — AI Creative Instructions Visual asset briefs — independent per asset Dispatch in parallel per asset

Parts that MUST stay sequential (have hard data dependencies):

  • Part 1 → Part 2 (intake feeds research scope)
  • Part 3 → Part 4 (Four Core Documents feed competitive/customer/market analysis)
  • Part 5 → Part 6 (Client Validation drives which docs need v2 re-runs)
  • Part 7 → Part 8 (prep docs feed the Growth Plan)
  • Part 8 → Part 9 (Growth Plan drives channel fan-out)

Cross-cutting rules:

  1. Never dispatch parallel agents that need to write to the same file simultaneously — chunk by output file.
  2. Each parallel subagent gets the engagement slug and the LIF path so it can read shared context, but writes ONLY to its own numbered per-part subdirectory (01-… 12-…).
  3. Subagents never mutate engagement state. A subagent must NOT call lif-log-change, mark-part-completed, bump-version, or any other engagement-state.py write, and must NOT touch _engagement.json or living-instruction-file.md. Those are unlocked read-modify-write files; concurrent writers lose updates. Each subagent returns its output as per-part files only. After a parallel batch completes, the orchestrator alone applies state mutations — one lif-log-change per batch, plus mark-part-completed / bump-version as needed — and then re-reads the LIF before the next step.
  4. If a parallel batch fails partway, the failed subagent's outputs are NOT auto-rolled-back — re-dispatch only the failed ones; the successful peers stay valid.

For multi-dimensional commands outside the 12-part flow (e.g. /digital-marketing-pro:competitor-analysis, /digital-marketing-pro:seo-audit, /digital-marketing-pro:content-engine), the same pattern applies — dispatch independent dimensions in parallel via multiple Task calls in a single message.

Running an engagement in a single conversation

A large-context model can hold much of an engagement — intake, external research, the Four Core Documents (61 steps), competitive/customer/market analysis, Client Validation, selective v2 re-runs, preparation docs, Growth Plan + Yearly Planner, channel fan-out, execution artefacts, creative briefs, and the continuous-improvement loop — within one working session (a full engagement typically produces 50–60 canonical documents).

The checkpoint + persistence pattern is still the default — always. Even when everything fits in one conversation:

  • engagement-state.py + checkpoint-manager.py remain the system of record: audit trail, cross-conversation resume, and multi-user / multi-day continuity all depend on persisted state.
  • Do NOT skip LIF updates or state writes on the assumption that "it's all in context." An interruption still loses in-memory work, and a teammate resuming the engagement reads persisted state — not your conversation.
  • The only single-conversation convenience is that you re-read fewer files mid-session because they are already in context. It does not remove the need to persist, checkpoint, and update the LIF.

Quality Discipline

  1. Never hand-edit _engagement.json. Always go through engagement-state.py.
  2. Never delete v1. When v2 is produced, both stay.
  3. Always update the LIF when source docs change. Use lif-log-change — it appends to the change-log section of living-instruction-file.md and refreshes the header date, so the LIF never goes stale.
  4. Always cite source per fact. Stone facts cite the validation source; Opinion hypotheses cite the client's evidence.
  5. Never auto-advance parts. The user confirms part completion explicitly.
  6. Always parallelize independent work. When a Part has 2+ independent sub-tasks (see Parallel Dispatch above), dispatch them in a single message with multiple Task calls. Sequential dispatch of independent work wastes wall-clock time and API turns.
  7. Never auto-execute v2 re-runs without user approval. Show the plan, get approval, then run. Cap: 2 v2 re-run rounds per part without an explicit user override (stored in state).

Examples

Example: Starting a new engagement
User: I want to start a new engagement for Acme Corp this quarter.

Skill response:
1. Verify Acme has a brand profile (slug: acme-corp). Found.
2. Initialise engagement: engagement-state.py init --brand acme-corp --id 2026-q2
3. Engagement directory created at ~/.claude-marketing/brands/acme-corp/engagements/2026-q2/
4. Walk Part 1 intake. Begin with Stone questions:
   "Let's start with what we know for certain. What year was Acme founded? Where is it headquartered? How many employees today?"
5. (User answers; each fact captured via add-stone-fact)
6. Move to Opinion questions:
   "Now let's capture what you believe but haven't formally validated. How would you describe Acme's positioning in the market today?"
7. (User answers; each hypothesis captured via add-opinion)
8. Mark Part 1 completed. Advise: "Part 1 is complete. The unbiased External Research (Part 2) is next — recommend running it now or scheduling it for the next session."
Example: Mid-engagement status check
User: Where are we on the Beta Industries engagement?

Skill response:
- Reads engagement-state.py status --brand beta-industries --id 2026-h1
- Shows:
  Engagement: beta-industries / 2026-h1
  Started: 2026-04-01 (32 days in)
  Current part: Part 9 — Channel Strategy Fan-out (in progress)
  Completed parts: 1, 2, 3, 4, 5, 6, 7, 8
  Pending parts: 9 (in progress), 10, 11, 12
  Open re-run decisions: 1 (Part 6 v2 re-runs in progress)
  Open items requiring resolution: 2 (LinkedIn Ads CPL forecast pending; Q3 budget envelope pending)
  LIF last updated: 2 days ago
  Next required action: complete remaining Part 9 channel docs (5 of 9 complete)
Example: Applying the Decision Matrix
User: We just finished Part 5 client validation. The client rejected our positioning recommendation and added two new competitors. What re-runs do we need?

Skill response:
1. Categorise the changes:
   - Two new competitors → trigger "competitors_changed"
   - Positioning rejected → trigger "positioning_changed"
2. Run engagement-state.py decision-matrix --triggers "competitors_changed,positioning_changed"
3. Output the triggered re-runs:
   Triggered re-runs: 3.1, 3.2, 3.3, 3.4, 4.1, 4.2
   (competitors_changed triggers all four Core Docs + 4.1 + 4.2; positioning_changed adds 3.3 which is already in scope)
4. Estimate token cost: ~85K tokens for the full re-run set
5. Ask: "Approve all? Modify? Skip any?"
6. On user approval, mark Part 6 started and invoke four-core-documents skill with view=v2 for each triggered doc
Example: Update-Back correction in flight
User: We've been live for two months. Q1 channel data shows our actual CAC for Segment X is INR 4,800 — but Core Doc 3.1 v2.0 had it estimated at INR 3,000. Need to update.

Skill response:
1. Validate the correction: 60+ days of data, statistically meaningful sample. ✓
2. Read current 3.1 v2.0
3. Bump version: engagement-state.py bump-version --doc 3.1 --reason "Segment X CAC corrected from INR 3,000 to INR 4,800 based on Q1 channel data"
4. Save 3.1 v2.1 with header note: "v2.0 → v2.1 changes: Section 4 (Unit Economics) — Segment X CAC corrected. LTV:CAC drops from 4.0 to 2.5; below 3.0 health threshold."
5. lif-log-change --section "Recent Corrections" --summary "Segment X CAC corrected to INR 4,800. Channel mix for Segment X under review."
6. Identify downstream review needed: Core Doc 3.4 (DMFlow) channel allocation for Segment X may need revision
7. Add to engagement review queue
  • four-core-documents — produces Part 3 deliverables
  • client-validation-document — produces Part 5 deliverable
  • growth-plan + yearly-planner — produce Part 8 deliverables
  • continuous-improvement-loop — handles Part 12
1---
2name: engagement-workflow
3description: "Run the 12-Part engagement workflow from intake to growth plan, checkpointed. \"start a new engagement\""
4user-invocable: true
5allowed-tools: Read Write Edit Bash Glob Grep Task
6engagement-part: orchestrator
7view-preference: both
8---
9 
10# /digital-marketing-pro:engagement-workflow — 12-Part Engagement Orchestrator
11 
12> **Script location.** If your host does not set `${CLAUDE_PLUGIN_ROOT}`, the scripts are in this plugin's `scripts/` folder, next to `skills/`. Run them with Python 3.10 or newer: `python`, or `python3` where `python` is not found (macOS, many Linux systems).
13 
14This skill orchestrates the full marketing engagement using the 12-Part sequential methodology. Every brand engagement runs through the same 12 parts in sequence, producing a canonical set of files at each stage.
15 
16## Context efficiency
17 
18Heavy skill. **Grep before Read** any referenced file, then `Read` only matched ranges with `offset` + `limit`. List the brand's workspace at `~/.claude-marketing/brands/{slug}/` (or `$CLAUDE_PLUGIN_DATA/digital-marketing-pro/brands/{slug}/` when that env var is set) before opening files. On re-invocation mid-session, skip files already in context.
19 
20Read these references before producing output:
21- [engagement-flow-methodology.md](../context-engine/engagement-flow-methodology.md) — the full 12-Part flow
22- [two-views-model.md](../context-engine/two-views-model.md) — v1 / v2 architecture
23- [stone-vs-opinion.md](../context-engine/stone-vs-opinion.md) — confidence tagging
24- [decision-matrix-rerun.md](../context-engine/decision-matrix-rerun.md) — when to re-run what
25- [update-back-rule.md](../context-engine/update-back-rule.md) — versioning protocol
26- [living-instruction-file-spec.md](../context-engine/living-instruction-file-spec.md) — LIF schema
27 
28## Operating Mode
29 
30This skill is invoked via the `/digital-marketing-pro:engagement` command family. The command is a thin router — **this skill is the single source of truth** for the engagement lifecycle, the checkpoint protocol, and the per-part production contract. Each subcommand maps to a specific lifecycle action. The skill calls `engagement-state.py` for persistence via:
31 
32```
33python "${CLAUDE_PLUGIN_ROOT}/scripts/engagement-state.py" <subcommand> ...
34```
35 
36You should never hand-edit `_engagement.json` — always go through `engagement-state.py`.
37 
38## Checkpointing & Resume (single source of truth)
39 
40Every long engagement run is resumable. The checkpoint protocol is: **init a run → save each part as it completes → finalize → publish to the visible output folder.** This lets an interrupted run (context exhaustion, user cancel, machine sleep) resume from the next un-checkpointed part instead of restarting from Part 1.
41 
42**1. On `start`, after the brand pre-condition passes, open a checkpoint run and link it to engagement state:**
43 
44```bash
45python "${CLAUDE_PLUGIN_ROOT}/scripts/checkpoint-manager.py" init \
46 --brand "{brand_slug}" --workflow engagement --topic "{engagement_id}"
47 
48# Record the returned run_id into _engagement.json so resume can find it:
49python "${CLAUDE_PLUGIN_ROOT}/scripts/engagement-state.py" set-checkpoint-run \
50 --brand "{brand_slug}" --id "{engagement_id}" --run-id "{run_id}"
51```
52 
53`set-checkpoint-run` stores the run_id in `_engagement.json`, making the resume linkage real (previously the run_id was never persisted).
54 
55**2. After each part completes and passes its quality gate, the orchestrator saves that part's output:**
56 
57```bash
58python "${CLAUDE_PLUGIN_ROOT}/scripts/checkpoint-manager.py" save \
59 --brand "{brand}" --run-id "{run_id}" \
60 --step {part_number} --content-file "{path_to_that_part_deliverable}" --extension md
61```
62 
63Pass the **actual deliverable path for that part** (e.g. Part 3 saves the Four Core Documents path; Part 8 saves the Growth Plan path) — never a placeholder for a different part.
64 
65**3. Before saving Part 5 (Client Validation) and Part 8 (Growth Plan) deliverables, run the full quality gate:**
66 
67```bash
68# BLOCKING gate — Part 5 and Part 8 deliverables cannot be checkpointed until this passes
69/digital-marketing-pro:check "{path_to_deliverable}" --full --brand {brand}
70```
71 
72If `/digital-marketing-pro:check --full` returns BLOCKED, fix the CRITICAL issues before checkpointing the part.
73 
74**4. After the final part, publish every artifact to the user-visible folder and finalize:**
75 
76```bash
77python "${CLAUDE_PLUGIN_ROOT}/scripts/output-publisher.py" publish-run \
78 --brand "{brand}" --run-id "{run_id}"
79 
80python "${CLAUDE_PLUGIN_ROOT}/scripts/checkpoint-manager.py" finalize \
81 --brand "{brand}" --run-id "{run_id}" --status completed
82```
83 
84Then point the user at the visible output folder via `/digital-marketing-pro:output-folder {brand}`.
85 
86To resume an interrupted run, use `/digital-marketing-pro:resume` — it reloads every saved part and continues from the next un-checkpointed part.
87 
88## State validation & rework caps
89 
90- **Validate a part's outputs against the manifest** before marking it complete:
91 ```bash
92 python "${CLAUDE_PLUGIN_ROOT}/scripts/engagement-state.py" validate-part \
93 --brand "{brand}" --id "{id}" --part {N}
94 ```
95 This diffs the actual files on disk against the `PART_DEFINITIONS` manifest and flags missing deliverables. Use it in `file-tree` and before `next`.
96 
97- **Repair a partially-initialised engagement directory** (instead of crashing on a non-empty dir):
98 ```bash
99 python "${CLAUDE_PLUGIN_ROOT}/scripts/engagement-state.py" init --repair \
100 --brand "{brand}" --id "{id}"
101 ```
102 `--repair` completes the canonical directory tree and state file on a dir that holds only partial state.
103 
104- **v2 re-run cap:** a maximum of **2 v2 re-run rounds per part** is allowed without explicit user override. The round count is stored in `_engagement.json`. If a part would exceed 2 rounds, stop and ask the user to explicitly approve further re-runs (records the override in state). This prevents unbounded re-run loops.
105 
106## Subcommands
107 
108### `/digital-marketing-pro:engagement start <brand-slug> <engagement-id>`
109 
110**Purpose:** Initialise a new engagement.
111 
112**Steps:**
113 
1141. Validate that the brand profile exists at `~/.claude-marketing/brands/{brand-slug}/profile.json`. If not, instruct the user to run `/digital-marketing-pro:brand-setup` first.
1152. Run `python "${CLAUDE_PLUGIN_ROOT}/scripts/engagement-state.py" init --brand {brand-slug} --id {engagement-id}`.
1163. Confirm the directory tree was created and report the next required action (Part 1 intake).
1174. Walk the user through Part 1 Stone vs Opinion intake by asking the questions one batch at a time.
118 
119**Part 1 intake questions (ask in this order):**
120 
121**Stone — what the client knows for certain:**
122 
1231. Company basics: founded year, employee count, headquarters location, geographic operations
1242. Business model: revenue streams, pricing tiers, primary product/service categories
1253. Current marketing: channels currently active, monthly marketing spend, current measurable KPIs
1264. Tech stack: CRM, email service provider, analytics setup, ad accounts
1275. Customer base scale: customer count, biggest named customer, average order value if known
128 
129For each Stone fact, capture:
130- The fact itself
131- Source (how the user knows / what document confirmed it)
132 
133Save each via:
134```
135python "${CLAUDE_PLUGIN_ROOT}/scripts/engagement-state.py" add-stone-fact --brand {slug} --id {id} --fact-json '{"category":"...","fact":"...","source":"..."}'
136```
137 
138**Opinion — what the client believes:**
139 
1401. Brand positioning: how does the client describe their position in the market?
1412. Customer base: who do they think their customers are? Why do they buy?
1423. Competitors: who do they consider their main competitors?
1434. Growth opportunities: where do they think the biggest opportunity is?
1445. What is working: what marketing activity does the client believe is working?
1456. What is not working: what does the client believe is not working?
146 
147For each Opinion, capture:
148- The hypothesis
149- Client's evidence for it (could be intuition, anecdote, partial data)
150- Research question — what would the unbiased research need to verify or refute?
151 
152Save each via:
153```
154python "${CLAUDE_PLUGIN_ROOT}/scripts/engagement-state.py" add-opinion --brand {slug} --id {id} --hypothesis-json '{"category":"...","hypothesis":"...","client_evidence":"...","research_question":"..."}'
155```
156 
157**On completion of Part 1:** mark Part 1 as completed via `mark-part-completed --part 1`, advise the user to proceed to Part 2 (External Research).
158 
159### `/digital-marketing-pro:engagement next [brand] [id]`
160 
161**Purpose:** Advance to the next part.
162 
163**Steps:**
164 
1651. Read engagement status via `engagement-state.py status`
1662. Identify the current part and next not-yet-completed part
1673. Confirm with the user that the current part is genuinely complete (do not auto-advance — ask)
1684. On confirmation, mark current as completed, advance current_part pointer
1695. Brief the user on what the new part requires
170 
171### `/digital-marketing-pro:engagement status [brand] [id]`
172 
173**Purpose:** Show engagement status.
174 
175**Steps:**
176 
1771. Run `engagement-state.py status` — get the full state
1782. Read the Living Project Instruction File header
1793. Format a human-readable summary:
180 - Engagement: brand + id + start date
181 - Current part: part name + days in
182 - Completed parts: list
183 - Pending parts: list
184 - Open re-run decisions: count
185 - LIF last updated: date
1864. If the engagement has open items needing resolution, list them
187 
188### `/digital-marketing-pro:engagement file-tree [brand] [id]`
189 
190**Purpose:** Show the engagement directory file tree.
191 
192**Steps:**
193 
1941. Run `engagement-state.py file-tree`
1952. Format as an indented tree
1963. Highlight files that are missing per the canonical structure. Use `engagement-state.py validate-part --part {N}` to diff each completed part's actual files against the `PART_DEFINITIONS` manifest (e.g., if Part 3 is marked completed but `3.1-business-and-sbu-analysis.md` is missing, `validate-part` flags it deterministically instead of eyeballing).
197 
198### `/digital-marketing-pro:engagement validate [brand] [id]`
199 
200**Purpose:** Run the Part 5 Client Validation flow.
201 
202**Pre-condition:** Parts 2, 3, 4 must be completed.
203 
204**Steps:**
205 
2061. Verify pre-conditions (Parts 2, 3, 4 completed)
2072. Invoke the `client-validation-document` skill — it produces the Part 5 deliverable: a structured document presenting each finding from v1 with ACCEPT/REJECT/EDIT/DEFER options
2083. **Run the full quality gate on the Part 5 deliverable before it goes to the client:** `/digital-marketing-pro:check "{part5_path}" --full --brand {brand}`. If it returns BLOCKED, fix the CRITICAL issues first (this gate is mandatory before Part 5 and Part 8 deliverables).
2094. After the user reviews and provides decisions, parse them into a triggers list per the Decision Matrix categories
2105. Run `engagement-state.py decision-matrix --triggers "{comma-separated}"` to compute the v2 re-run plan
2116. Present the re-run plan to the user
2127. Mark Part 5 completed; on user approval of the re-run plan, advance to Part 6
213 
214### `/digital-marketing-pro:engagement re-run-decision [brand] [id]`
215 
216**Purpose:** Apply the Decision Matrix to compute v2 re-runs.
217 
218**Steps:**
219 
2201. Read the Part 5 Client Validation Document
2212. Categorise rejected/edited findings into Decision Matrix triggers
2223. Show the triggers and the computed re-runs
2234. Estimate the cost (rough token count) of each re-run
2245. Await user approval — they can accept, modify (skip some, add others), or reject
2256. Record the executed plan via `engagement-state.py record-rerun-execution`
226 
227### `/digital-marketing-pro:engagement update-back [brand] [id] --doc <doc-id> --reason <reason>`
228 
229**Purpose:** Apply the Update-Back Rule to bump a source document version after Part 7+.
230 
231**Pre-condition:** The user has already drafted the corrected document content.
232 
233**Steps:**
234 
2351. Read the current version of the doc
2362. Confirm the correction with the user (validation step per the Update-Back Rule)
2373. Bump the version via `engagement-state.py bump-version --doc {id} --reason "{reason}"`
2384. Save the new version file with a header noting v(prev) → v(new) changes
2395. Update the Living Project Instruction File via `lif-log-change` — it now appends the change to `living-instruction-file.md` and refreshes the header date, so the LIF reflects the correction immediately
2406. Identify downstream documents that may need review and add to the engagement's review queue
241 
242### `/digital-marketing-pro:engagement lif-show [brand] [id]`
243 
244**Purpose:** Display the Living Project Instruction File.
245 
246**Steps:** Run `engagement-state.py lif-show` and format the markdown output for readability.
247 
248### `/digital-marketing-pro:engagement list-engagements [brand]`
249 
250**Purpose:** List all engagements (optionally filtered by brand).
251 
252**Steps:** Run `engagement-state.py list-engagements --brand {slug}` and format as a table.
253 
254### Production shorthands
255 
256The command family also exposes four production shorthands that route straight to the part-producing skills (documented in *Per-Part Production Targets* below). These match the command surface one-to-one:
257 
258- `/digital-marketing-pro:engagement four-core <brand> <id> [--doc 3.X] [--view v2] [--combined]` — Part 3, invokes the `four-core-documents` skill
259- `/digital-marketing-pro:engagement growth-plan <brand> <id>` — Part 8, invokes the `growth-plan` skill
260- `/digital-marketing-pro:engagement yearly-planner <brand> <id>` — Part 8 companion, invokes the `yearly-planner` skill
261- `/digital-marketing-pro:engagement loop <brand> <id>` — Part 12, invokes the `continuous-improvement-loop` skill
262 
263## Per-Part Production Targets
264 
265Each part is produced by real, existing agents and skills. This orchestrator dispatches to the targets below — there are **no** wrapper skills named `external-research` / `preparation-documents` / `channel-strategy-fanout` / `execution-artefacts` / `ai-creative-instructions`; those never existed. Use the exact targets named here:
266 
267| Part | Real target(s) |
268|------|----------------|
269| 1 | (this skill — intake walked here directly) |
270| 2 | agents `market-intelligence` + `competitive-intel`; skill `audience-intelligence` (invoke as a skill); reference `compliance-rules.md` (load as context) |
271| 3 | skill `four-core-documents` (produces 3.1, 3.2, 3.3, 3.4) |
272| 4 | command `competitor-analysis` + skills `audience-intelligence` + agent `market-intelligence` |
273| 5 | skill `client-validation-document` |
274| 6 | re-runs invoke skill `four-core-documents` with `--view v2` |
275| 7 | skills `content-engine` + `campaign-orchestrator` + `analytics-insights` |
276| 8 | skills `growth-plan` + `yearly-planner` |
277| 9 | per-channel skills — `paid-advertising`, `aeo-geo`, `social-strategy`, `seo-plan`, `email-sequence` (one per channel family) |
278| 10 | skill `content-engine` (execution / output mode) |
279| 11 | skills `content-engine` + `ad-creative` + `video-script` (creative briefs); asset rendering happens in your own creative tooling (design team, AI image/video tools, or a connected design platform), then finished assets are signed via `c2pa-metadata` |
280| 12 | skill `continuous-improvement-loop` |
281 
282## Parallel Dispatch
283 
284Several parts of the engagement contain **independent sub-tasks** that should be dispatched **in parallel via multiple `Task` tool calls in a single message** — not sequentially. Dispatching independent sub-tasks concurrently is substantially faster than running them one after another; actual time varies by engagement depth, model, and rate limits. Keep concurrent subagents to a handful (roughly 3–8) — past that you queue against API rate limits and the win drops; under 3 there is nothing to parallelize.
285 
286**Cost note:** total token usage is broadly similar (you're doing the same work) but billed-per-turn input costs trend up slightly because each parallel subagent re-loads its context.
287 
288**Parts that benefit from parallel dispatch:**
289 
290| Part | Parallel-eligible work | How to dispatch |
291|---|---|---|
292| **Part 2 — External Research** | Market sizing, competitor landscape, customer signals, regulatory landscape — none depend on each other | Dispatch the `market-intelligence` agent and the `competitive-intel` agent as parallel `Task` calls; invoke `audience-intelligence` as a skill; load `compliance-rules.md` (a reference file) as context — not as a subagent |
293| **Part 4 — Competitive + Customer + Market** | Four documents (4.1, 4.2, 4.3, 4.4) are independent — they reference Part 2 only | Dispatch all four in a single message with the four respective subagents |
294| **Part 9 — Channel Strategy Fan-out** | Up to 17 channel docs in 7 families. Families 2 (Paid platforms), 3 (Organic & Influencer), 4 (Marketplace & CRM), 5 (Content/ATL/BTL/PR) are independent after Families 1 (Search & Campaign) and 6 (Web + Measurement) complete | Sequence: F1 → (F2 ∥ F3 ∥ F4 ∥ F5 in parallel) → F6 → F7. The middle batch is four parallel `Task` calls in one message. |
295| **Part 10 — Execution Artefacts** | Ad copy, post copy, headlines, CTAs across channels — independent per channel | Dispatch one subagent per channel in parallel |
296| **Part 11 — AI Creative Instructions** | Visual asset briefs — independent per asset | Dispatch in parallel per asset |
297 
298**Parts that MUST stay sequential** (have hard data dependencies):
299 
300- Part 1 → Part 2 (intake feeds research scope)
301- Part 3 → Part 4 (Four Core Documents feed competitive/customer/market analysis)
302- Part 5 → Part 6 (Client Validation drives which docs need v2 re-runs)
303- Part 7 → Part 8 (prep docs feed the Growth Plan)
304- Part 8 → Part 9 (Growth Plan drives channel fan-out)
305 
306**Cross-cutting rules:**
307 
3081. Never dispatch parallel agents that need to write to the same file simultaneously — chunk by output file.
3092. Each parallel subagent gets the engagement slug and the LIF path so it can read shared context, but writes ONLY to its own numbered per-part subdirectory (01-… 12-…).
3103. **Subagents never mutate engagement state.** A subagent must NOT call `lif-log-change`, `mark-part-completed`, `bump-version`, or any other `engagement-state.py` write, and must NOT touch `_engagement.json` or `living-instruction-file.md`. Those are unlocked read-modify-write files; concurrent writers lose updates. Each subagent returns its output as per-part files only. After a parallel batch completes, the **orchestrator alone** applies state mutations — one `lif-log-change` per batch, plus `mark-part-completed` / `bump-version` as needed — and then re-reads the LIF before the next step.
3114. If a parallel batch fails partway, the failed subagent's outputs are NOT auto-rolled-back — re-dispatch only the failed ones; the successful peers stay valid.
312 
313For multi-dimensional commands outside the 12-part flow (e.g. `/digital-marketing-pro:competitor-analysis`, `/digital-marketing-pro:seo-audit`, `/digital-marketing-pro:content-engine`), the same pattern applies — dispatch independent dimensions in parallel via multiple `Task` calls in a single message.
314 
315## Running an engagement in a single conversation
316 
317A large-context model can hold much of an engagement — intake, external research, the Four Core Documents (61 steps), competitive/customer/market analysis, Client Validation, selective v2 re-runs, preparation docs, Growth Plan + Yearly Planner, channel fan-out, execution artefacts, creative briefs, and the continuous-improvement loop — within one working session (a full engagement typically produces 50–60 canonical documents).
318 
319**The checkpoint + persistence pattern is still the default — always.** Even when everything fits in one conversation:
320 
321- `engagement-state.py` + `checkpoint-manager.py` remain the system of record: audit trail, cross-conversation resume, and multi-user / multi-day continuity all depend on persisted state.
322- Do NOT skip LIF updates or state writes on the assumption that "it's all in context." An interruption still loses in-memory work, and a teammate resuming the engagement reads persisted state — not your conversation.
323- The only single-conversation convenience is that you re-read fewer files mid-session because they are already in context. It does not remove the need to persist, checkpoint, and update the LIF.
324 
325## Quality Discipline
326 
3271. **Never hand-edit `_engagement.json`.** Always go through `engagement-state.py`.
3282. **Never delete v1.** When v2 is produced, both stay.
3293. **Always update the LIF when source docs change.** Use `lif-log-change` — it appends to the change-log section of `living-instruction-file.md` and refreshes the header date, so the LIF never goes stale.
3304. **Always cite source per fact.** Stone facts cite the validation source; Opinion hypotheses cite the client's evidence.
3315. **Never auto-advance parts.** The user confirms part completion explicitly.
3326. **Always parallelize independent work.** When a Part has 2+ independent sub-tasks (see Parallel Dispatch above), dispatch them in a single message with multiple Task calls. Sequential dispatch of independent work wastes wall-clock time and API turns.
3337. **Never auto-execute v2 re-runs without user approval.** Show the plan, get approval, then run. Cap: 2 v2 re-run rounds per part without an explicit user override (stored in state).
334 
335## Examples
336 
337### Example: Starting a new engagement
338 
339```
340User: I want to start a new engagement for Acme Corp this quarter.
341 
342Skill response:
3431. Verify Acme has a brand profile (slug: acme-corp). Found.
3442. Initialise engagement: engagement-state.py init --brand acme-corp --id 2026-q2
3453. Engagement directory created at ~/.claude-marketing/brands/acme-corp/engagements/2026-q2/
3464. Walk Part 1 intake. Begin with Stone questions:
347 "Let's start with what we know for certain. What year was Acme founded? Where is it headquartered? How many employees today?"
3485. (User answers; each fact captured via add-stone-fact)
3496. Move to Opinion questions:
350 "Now let's capture what you believe but haven't formally validated. How would you describe Acme's positioning in the market today?"
3517. (User answers; each hypothesis captured via add-opinion)
3528. Mark Part 1 completed. Advise: "Part 1 is complete. The unbiased External Research (Part 2) is next — recommend running it now or scheduling it for the next session."
353```
354 
355### Example: Mid-engagement status check
356 
357```
358User: Where are we on the Beta Industries engagement?
359 
360Skill response:
361- Reads engagement-state.py status --brand beta-industries --id 2026-h1
362- Shows:
363 Engagement: beta-industries / 2026-h1
364 Started: 2026-04-01 (32 days in)
365 Current part: Part 9 — Channel Strategy Fan-out (in progress)
366 Completed parts: 1, 2, 3, 4, 5, 6, 7, 8
367 Pending parts: 9 (in progress), 10, 11, 12
368 Open re-run decisions: 1 (Part 6 v2 re-runs in progress)
369 Open items requiring resolution: 2 (LinkedIn Ads CPL forecast pending; Q3 budget envelope pending)
370 LIF last updated: 2 days ago
371 Next required action: complete remaining Part 9 channel docs (5 of 9 complete)
372```
373 
374### Example: Applying the Decision Matrix
375 
376```
377User: We just finished Part 5 client validation. The client rejected our positioning recommendation and added two new competitors. What re-runs do we need?
378 
379Skill response:
3801. Categorise the changes:
381 - Two new competitors → trigger "competitors_changed"
382 - Positioning rejected → trigger "positioning_changed"
3832. Run engagement-state.py decision-matrix --triggers "competitors_changed,positioning_changed"
3843. Output the triggered re-runs:
385 Triggered re-runs: 3.1, 3.2, 3.3, 3.4, 4.1, 4.2
386 (competitors_changed triggers all four Core Docs + 4.1 + 4.2; positioning_changed adds 3.3 which is already in scope)
3874. Estimate token cost: ~85K tokens for the full re-run set
3885. Ask: "Approve all? Modify? Skip any?"
3896. On user approval, mark Part 6 started and invoke four-core-documents skill with view=v2 for each triggered doc
390```
391 
392### Example: Update-Back correction in flight
393 
394```
395User: We've been live for two months. Q1 channel data shows our actual CAC for Segment X is INR 4,800 — but Core Doc 3.1 v2.0 had it estimated at INR 3,000. Need to update.
396 
397Skill response:
3981. Validate the correction: 60+ days of data, statistically meaningful sample. ✓
3992. Read current 3.1 v2.0
4003. Bump version: engagement-state.py bump-version --doc 3.1 --reason "Segment X CAC corrected from INR 3,000 to INR 4,800 based on Q1 channel data"
4014. Save 3.1 v2.1 with header note: "v2.0 → v2.1 changes: Section 4 (Unit Economics) — Segment X CAC corrected. LTV:CAC drops from 4.0 to 2.5; below 3.0 health threshold."
4025. lif-log-change --section "Recent Corrections" --summary "Segment X CAC corrected to INR 4,800. Channel mix for Segment X under review."
4036. Identify downstream review needed: Core Doc 3.4 (DMFlow) channel allocation for Segment X may need revision
4047. Add to engagement review queue
405```
406 
407## Related skills
408 
409- `four-core-documents` — produces Part 3 deliverables
410- `client-validation-document` — produces Part 5 deliverable
411- `growth-plan` + `yearly-planner` — produce Part 8 deliverables
412- `continuous-improvement-loop` — handles Part 12
413 
414## Related references
415 
416- [engagement-flow-methodology.md](../context-engine/engagement-flow-methodology.md)
417- [four-core-documents-spec.md](../context-engine/four-core-documents-spec.md)
418- [decision-matrix-rerun.md](../context-engine/decision-matrix-rerun.md)
419- [update-back-rule.md](../context-engine/update-back-rule.md)
420- [living-instruction-file-spec.md](../context-engine/living-instruction-file-spec.md)
421- [stone-vs-opinion.md](../context-engine/stone-vs-opinion.md)
422- [two-views-model.md](../context-engine/two-views-model.md)
423 

Discussion

Alternatives

Browser Automation SkillWeb browser automation with AI-optimized snapshots for claude-flow agentsCoding · MITDeepevalDeepEval evaluation workflow for AI agents and LLM applications. TRIGGER when the user wants to evaluate or improve an AI agent, tool-using workflow, multi-turn chatbot, RAG pipeline, or LLM app; add evals; generate datasets or goldens; use deepeval generate; use deepeval test run; send results to Confident AI; monitor production; run online evals; inspect traces; or iterate on prompts, tools, retrieval, or agent behavior from eval failures. AI agents are the primary use case. Covers Python SDK, pytest eval suites, CLI generation, traced evals, Confident AI reporting, and agent-driven improvement loops. DO NOT TRIGGER for unrelated generic pytest, non-AI test setup, or non-DeepEval observability work unless the user asks to compare or migrate to DeepEval; for instrumenting an app with DeepEval tracing, @observe, or framework integrations (use the `deepeval-tracing` skill); or for raw OpenTelemetry / OTLP export without the deepeval package (use the `deepeval-otel` skill).Business & ops · Apache-2.0Dev browserBrowser automation with persistent named pages via the dev-browser CLI. Use when users ask to navigate websites, fill forms, take screenshots, extract web data, test web apps, log into sites, or automate browser workflows. Trigger phrases include "go to [url]", "click on", "fill out the form", "take a screenshot", "scrape", "automate", "test the website", "log into", "open the browser", or any browser interaction request.Business & ops · MITTurn into appTurn visible project context, a proven thread, skill, or workflow into a runnable Agent-Native app with simple buttons, visible agent steps, preview, and deployment handoff. Use when a user invokes `/turn-into-app` or asks to make a workflow into an app, including from Claude or ChatGPT on the web, including when the source is a spreadsheet link or upload.Business & ops · MIT