Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
120 changes: 120 additions & 0 deletions .agents/skills/growth-workspace/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
---
name: growth-workspace
description: >
Use when an External Agent must create, enter, resume, move, or hand off a gkit Growth Workspace, or when a directory contains GROWTH.md. Guides ctx-first orientation, OKF Markdown editing, evidence provenance, bounded gkit capability use, and cross-session continuity. Do not use for generic Markdown editing or provider-only CLI work unrelated to a Growth Workspace.
---

# Growth Workspace

Make the current work continuable by a fresh External Agent without hidden chat
history. The Workspace files, not this session, are the source of continuity.

## Enter

1. Run `ctx read .` from the candidate Workspace directory.
2. Read `./GROWTH.md`; the `./` matters because `ctx` otherwise treats the name
as a URL-like input.
3. Read the non-secret `app_profile` selector from `GROWTH.md`. Do not infer it
from the Product title and do not scan host profiles. If it is absent, you may
continue document-only work, but stop before provider doctor or dispatch and
report the missing Workspace selector.
4. Follow only the Growth Document and evidence links relevant to the user's
current task.

Entry is complete when you can state the Product, current question, inspected
evidence, unresolved uncertainty, and next bounded action from Workspace files.

## Create

Create a Workspace only when the user asks to create one. Do not silently turn an
arbitrary directory into a Growth Workspace.

Start with one root file and no manifest, UUID, registry, database, or profile map:

```markdown
---
type: GrowthWorkspace
title: [Product name] Growth Workspace
description: [One sentence describing the Product and growth scope]
app_profile: [explicit non-secret App Profile selector]
---

# [Product name] Growth Workspace

## Product

[What is being grown and for whom.]

## Current work

- [Growth Document title](documents/example.md) — [current question or status]

## Working rules

- Preserve inspectable evidence and distinguish it from interpretation.
- Leave a bounded next action for the next Agent.
```

Growth Documents also use OKF Markdown, but only `type` is structurally required.
Choose a descriptive type for the document's actual job; do not invent a product
taxonomy merely to fill frontmatter.

Do not invent the selector from the Product name. Creation is complete when the
user or host has supplied an explicit selector, `ctx read .` discovers
`GROWTH.md`, its important links resolve relative to the Workspace, and another
Agent can identify what to do next.

## Continue

Before editing, recover five things from the relevant Growth Document and its
links:

1. the bounded growth question;
2. the observed facts and their inspectable sources;
3. the Agent's interpretation of those facts;
4. the uncertainty that limits the interpretation;
5. the next action that would reduce that uncertainty.

When new provider evidence is needed, use the existing gkit capability surface:

1. Use the exact `app_profile` selector from `GROWTH.md`; never substitute a
similarly named local profile.
2. Discover offline with `gkit --schema`, `gkit describe`, or `gkit docs`.
3. Run `gkit --profile <app_profile> <provider> doctor`. A missing selector,
profile, provider binding, or secret is an execution prerequisite failure,
not evidence that the Product has no data.
4. Dry-run the exact operation before live dispatch.
5. Execute live only within the user's authorized provider, profile, scope, and
spend boundary.
6. Write to a new artifact path; preserve raw result bytes and the receipt hash.
7. Before leaving the session, write both execution receipts into the Growth
Document: the dry-run input hash, row limit, and planned artifact path; then
the live outcome, row count, artifact bytes, and artifact hash. A raw artifact
alone does not prove that the dry-run happened.
8. Treat aggregate counts, identities, ordering, and provider semantics only as
strongly as the source actually supports.

Edit the existing Growth Document instead of creating a session summary. Record
the new observation, source or relative artifact link, relevant query/window/hash,
interpretation boundary, and next bounded action. Preserve earlier evidence and
uncertainty unless newer evidence explicitly resolves them.

Continuation is complete when the document itself explains what changed and why,
with no dependence on the current conversation. If an earlier session omitted an
execution receipt, state that execution-history gap instead of reconstructing it
from inference.

## Handoff check

From the Workspace root:

- `ctx read .` finds the Workspace and edited document;
- `ctx read ./GROWTH.md` provides a valid navigation path;
- evidence links are relative and resolve after moving the directory;
- durable documents contain no credentials, secret values, or hidden host state;
- `GROWTH.md` contains one explicit `app_profile` selector but no profile path,
provider config, credential reference, or secret;
- observed facts remain visibly separate from Agent interpretation;
- one next action is concrete enough for a fresh Agent to begin.

The handoff is complete only when every check passes.
7 changes: 7 additions & 0 deletions .agents/skills/growth-workspace/agents/openai.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
interface:
display_name: "Growth Workspace"
short_description: "Create and continue portable, evidence-backed gkit growth workspaces"
default_prompt: "Use $growth-workspace to enter this gkit Growth Workspace and continue its current work."

policy:
allow_implicit_invocation: true
64 changes: 64 additions & 0 deletions .agents/skills/growth-workspace/evals/evals.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
{
"skill_name": "growth-workspace",
"evals": [
{
"id": 1,
"prompt": "在这个空目录里为 Acme Analytics 创建一个最小 gkit Growth Workspace,App Profile selector 是 acme-analytics,当前问题是如何提高新用户 activation。完成后确保下一个 Agent 能从目录本身知道该做什么。",
"expected_output": "A minimal GROWTH.md and one linked OKF Growth Document that orient a fresh Agent without adding a manifest, database, UUID, registry, or fixed product taxonomy.",
"assertions": [
"The root contains GROWTH.md with type GrowthWorkspace",
"GROWTH.md declares app_profile: acme-analytics without storing a profile path or secret",
"GROWTH.md identifies Acme Analytics and links a current Growth Document with a relative path",
"The Growth Document distinguishes the current question from the next bounded action",
"ctx read . discovers the Workspace",
"No manifest, database, UUID, registry, or profile map is created"
]
},
{
"id": 2,
"prompt": "接手这个已有 Growth Workspace。检查现有 activation 分析和它引用的 artifact,然后把你能确认的事实、解释边界和下一步写回原来的 Growth Document,不要依赖聊天记录。",
"expected_output": "The existing Growth Document is continued in place using the linked artifact, with attributable facts, a conservative interpretation boundary, and one actionable next step.",
"files": [
"evals/files/continuation/GROWTH.md",
"evals/files/continuation/documents/activation.md",
"evals/files/continuation/artifacts/event-counts.json"
],
"assertions": [
"The Agent enters through GROWTH.md and inspects the linked artifact",
"The existing documents/activation.md is edited instead of replaced by a session summary",
"Observed counts remain separate from interpretation",
"The artifact is cited by a relative path and its recorded hash is preserved",
"One bounded next action is left for another Agent"
]
},
{
"id": 3,
"prompt": "这个 Growth Workspace 刚从另一台 host 移到当前目录。验证它仍然可继续,并在原 Growth Document 中留下一个可执行 handoff;不要创建 host adapter 或修复并不存在的问题。",
"expected_output": "The relocated directory remains discoverable and continuable through relative links, and the existing document receives a host-independent handoff without new infrastructure.",
"files": [
"evals/files/continuation/GROWTH.md",
"evals/files/continuation/documents/activation.md",
"evals/files/continuation/artifacts/event-counts.json"
],
"assertions": [
"ctx read . and ctx read ./GROWTH.md work from the relocated directory",
"All Workspace evidence links remain relative and resolvable",
"The existing Growth Document receives a concrete next action",
"No absolute path from the original host is introduced",
"No adapter, registry, profile map, or synchronization layer is created"
]
},
{
"id": 4,
"prompt": "接手这个 Growth Workspace 并读取 PostHog 数据。GROWTH.md 没有 app_profile,当前 host 上可能存在多个名字相近的 profiles。",
"expected_output": "The Agent stops before provider doctor or dispatch, reports the missing Workspace selector as an execution prerequisite, and does not scan or guess a host profile.",
"assertions": [
"The Agent reads GROWTH.md before provider execution",
"No host profile directory is scanned",
"No profile is inferred from the Product title",
"No provider doctor or live request is dispatched",
"The missing app_profile is not interpreted as PostHog having no data"
]
}
]
}
17 changes: 17 additions & 0 deletions .agents/skills/growth-workspace/evals/files/continuation/GROWTH.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
---
type: GrowthWorkspace
title: Acme Analytics Growth Workspace
description: Durable growth work for Acme Analytics.
app_profile: acme-analytics
---

# Acme Analytics Growth Workspace

## Product

Acme Analytics helps small product teams understand onboarding behavior.

## Current work

- [Activation event baseline](documents/activation.md) — determine what the
available aggregate event counts can and cannot establish about activation.
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"window": {
"from": "2026-08-01T00:00:00Z",
"to": "2026-08-08T00:00:00Z"
},
"counts": [
{ "event": "page.viewed", "count": 1240 },
{ "event": "signup.completed", "count": 118 },
{ "event": "workspace.created", "count": 42 }
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
---
type: GrowthAnalysis
title: Activation event baseline
description: Aggregate event evidence for the first activation question.
---

# Activation event baseline

## Question

Which observed events should be investigated next as possible activation signals?

## Observed evidence

The aggregate export records 1,240 `page.viewed` events, 118
`signup.completed` events, and 42 `workspace.created` events during 2026-08-01
through 2026-08-07 UTC.

Source: [raw aggregate counts](../artifacts/event-counts.json)

Recorded SHA-256:
`52fd54b54c7a244aecba770e4946a4bc546b26704e983fe24df4b1fed2ab3d17`

## Interpretation boundary

These are event totals, not unique users or an ordered funnel. They do not prove
that the same people progressed from signup to workspace creation.

## Open question

Can an aggregate query grouped by a documented stable identity establish the
ordered signup-to-workspace path without exposing person-level data?

## Next action

Confirm the provider's supported identity semantics before designing that query.
Loading
Loading