agentleFS
epicsagasepicsagas/epic-harness/skills/discover/SKILL.md

discover

Skill20 starsChanged 2 months agoApache-2.0View on GitHub

Trigger: vague/unfocused request or solution-without-problem. Also invoked via /discover command. Reframes goal before acting.

57 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use daily-arxiv, exp-eval and 10 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • LambenthanSkill

    daily-arxiv

    每日从 arXiv 拉取新论文,过滤相关性,auto-ingest 高优先级论文,检测 SOTA 更新

    Also in 5 projects that use this

  • LambenthanSkill

    exp-eval

    实验判决门:Review LLM 独立评判实验结果 → 4 种判决路径 → 自动更新 claims confidence、ideas status、graph edges

    Also in 5 projects that use this

  • skyllwtSkill

    exp-pilot-eval

    Pilot result evaluation — read pilot results, apply success criteria, update idea page (pilot_result, failure_reason if failed), generate PILOT_VERDICT_REPORT. Called by /ideate Phase 5 after /exp-pilot-run.

    Also in 4 projects that use this

  • skyllwtSkill

    exp-pilot-run

    Pilot experiment execution — read Pilot Spec YAML, write pilot code, run experiment(Confirm with the user before operation and require the applicant to conduct manual inspection), return results. Called by /ideate Phase 5. Does NOT modify wiki pages or judge pass/fail.

    Also in 4 projects that use this

  • phanghonghaoSkill

    poster

    HTML/CSS A4 海报生成。从沙龙/活动 Markdown 文件生成科技风 A4 海报 PDF/PNG。Use when user mentions: poster, 海报, 海报生成, make poster, generate poster, 活动海报, 沙龙海报.

    Also in 4 projects that use this

  • +6 more from Lambenthan
  • +1 more from skyllwt

The file

Show its rules and text

We split this skill into the rules it gives an agent

14 rules. 0 are common, 9 are distinctive, and 5 are very specific to this project.

  • 0

    Common

    Most of the 50 edited versions we read keep these.

  • 9

    Distinctive

    This author's own choices. Worth a look.

  • 5

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    CRITICAL: Run HARNESS_DIR=$(epic-harness path) first.

    line 13
  2. Distinctive:

    NO SPEC WITHOUT A PROBLEM STATEMENT.

    line 17
  3. Distinctive:

    Read any existing context (CLAUDE.md, README, codebase structure)

    line 24
  4. Very specific:

    Check for existing problem statements in $HARNESS_DIR/specs/PROBLEM-*.md

    line 25
  5. Very specific:

    Call mem_recall with a hint describing the current topic area

    line 26
  6. Very specific:

    Check for past decision or pattern nodes related to this domain

    line 27
  7. Distinctive:

    If prior problem exploration exists, reference it: "We discussed something similar before..."

    line 28
  8. Distinctive:

    If existing PROBLEM files are found, review them — the user may be continuing prior work

    line 29
  9. Distinctive:

    Read the user's request carefully.

    line 35
  10. Distinctive:

    Stop when you reach an actionable root cause.

    line 74
  11. Very specific:

    Write to $HARNESS_DIR/specs/PROBLEM-{timestamp}.md (see Output Format below).

    line 145
  12. Distinctive:

    If the user realizes there are multiple problems during probing, address them one at a time.

    line 147
  13. Distinctive:

    If the user wants to explore further (e.g., they realize there are actually 3 problems), loop back to Step 2 with the new angle.

    line 153
  14. Distinctive:

    Before claiming the problem is defined, show ALL of these:

    line 184

“Common” is measured: kept by at least 6 in 10 of the 50 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Discover — Problem Discovery

You are starting the Discover phase. Your job is to help the user articulate what problem they are actually trying to solve, before jumping to solutions or specs.

CRITICAL: Run HARNESS_DIR=$(epic-harness path) first. NEVER use .harness/ in the project directory.

Iron Law

NO SPEC WITHOUT A PROBLEM STATEMENT. Building the wrong thing well is worse than building the right thing poorly.

Process

Step 0: Prerequisites

  • Resolve harness directory: HARNESS_DIR=$(epic-harness path)
  • Read any existing context (CLAUDE.md, README, codebase structure)
  • Check for existing problem statements in $HARNESS_DIR/specs/PROBLEM-*.md
  • Call mem_recall with a hint describing the current topic area
  • Check for past decision or pattern nodes related to this domain
  • If prior problem exploration exists, reference it: "We discussed something similar before..."
  • If existing PROBLEM files are found, review them — the user may be continuing prior work

Why: Past context prevents re-exploring ground already covered. The knowledge graph connects today's vague request to yesterday's decisions.

Step 1: Listen

Read the user's request carefully. Repeat it back in your own words and ask:

  • "Is that the core of it, or is there more?"

Categorize the request:

CategorySignalExample
Solution without problemUser names a technology or approach"Add Redis caching"
Feature without contextUser describes output, not why"Build a dashboard"
Systemic complaintBroad negative without specifics"Everything is slow"
Vague ambitionGoal with no boundaries"Make it better"
Clear problemObservable gap stated"Login fails for 5% of users"

Why: Categorization determines the probing technique. Misreading the category leads to wrong questions.

Step 2: Probe

Select the technique based on the category identified in Step 1. Ask max 3 questions per round, run max 3 rounds. If the user can't answer or says "I'm not sure", proceed to Frame with what you have.

Technique Selection

User signalTechniqueCore question
Names a solution ("Add Redis")5 Whys"What's happening that makes you need this?" → repeat
Describes a feature without whyJTBD"What situation makes you need this? What would 'done' look like?"
"Everything is broken"Fishbone"Which area: People / Process / Technology / Data / Environment?"
Vague or contradictorySocratic"What specifically do you mean by 'X'?"
Has a vision but no pathDone looks like"When this works perfectly, what do you see?"
Uncertain assumptionsAssumption map"What must be true for this to work?"

Detailed Technique Reference

5 Whys — when the user presents a solution without a problem:

User: "Add Redis caching to the API."
→ "What's happening that makes you want caching?"
→ "Why is that slow?"
→ "Why does that query take long?"

Stop when you reach an actionable root cause. Max 5 levels.

JTBD (Jobs To Be Done) — when the user describes a feature without context:

User: "Build a dashboard."
→ "What situation makes you need this?"
→ "What would you do with the information right now?"
→ "What would have to be true for you to say 'this solved it'?"

Extract job stories: "When [situation], I want [motivation], so I can [outcome]."

Fishbone — when the user has a systemic complaint:

User: "Everything is broken."
→ Walk through categories: People, Process, Technology, Data, Environment
→ "Which of these areas is the biggest contributor?"
→ "Is this on all branches or specific ones?"

Map causes across categories, then narrow to the top 1-2.

Socratic Questioning — when the request is vague or contradictory:

User: "Make it more secure." / "I want it to be faster."
→ Clarification: "What specifically do you mean by 'secure' / 'fast'?"
→ Probing assumptions: "What makes you believe this is the issue?"
→ Implications: "If we change X, what happens to Y?"
→ Alternatives: "What other approaches did you consider?"

"What Does Done Look Like?" — when the user has a vision but no path:

→ "When this is shipped and working perfectly, what specifically do you see?"
→ "What would I click, what output would appear, what would the logs show?"

Work backwards from the concrete end state.

Assumption Mapping — when the request depends on uncertain premises:

→ "Let me check what we're assuming must be true for this to work."
→ List 4-5 assumptions, ask which are uncertain.

Shaky assumptions become prerequisites.

Each round should narrow the space. If after 2 rounds you have enough to frame, don't force a third.

Why: The right technique extracts the real problem in 2-3 rounds instead of 10 random questions. Technique mismatch wastes rounds and frustrates the user.

Step 3: Frame

Synthesize everything into a structured problem statement:

[Who] experiences [observable problem] when [trigger condition], resulting in [quantified impact]. The desired state is [measurable outcome].

Capture supporting context:

  • Root cause (from 5 Whys) or Job story (from JTBD)
  • Constraints: timeline, technology, scale, compatibility
  • Assumptions: what must be true, which are uncertain
  • Out of scope: what this problem explicitly does NOT cover

Show the frame to the user and ask: "Does this capture the problem accurately?"

Why: A written problem statement is testable. If you can't write one, you haven't discovered the problem yet.

Step 4: Save

Once confirmed, save the problem statement:

mkdir -p "$HARNESS_DIR/specs"

Write to $HARNESS_DIR/specs/PROBLEM-{timestamp}.md (see Output Format below).

If the user realizes there are multiple problems during probing, address them one at a time. Each problem gets its own file.

Step 5: Transition

Tell the user: "Problem defined. Run /spec to turn this into a buildable specification."

If the user wants to explore further (e.g., they realize there are actually 3 problems), loop back to Step 2 with the new angle.

Why: The transition from problem to spec is natural but explicit. The user owns the decision to move forward.

When to Trigger

Auto-trigger (no command needed):

  • User's request lacks a clear problem or goal
  • User names a technology/solution without explaining why
  • User describes symptoms without identifying the underlying issue
  • User says "I don't know where to start" or equivalent
  • Request is so broad it could mean 3+ different things

Explicit invocation (/discover):

  • User wants to formally start the discover phase for a new project or feature
  • User wants to re-explore a problem before re-specifying
  • Continuation from a previous discovery session

Anti-Rationalization

ExcuseRebuttalWhat to do instead
"Let's just start building and figure it out"Building without a problem is expensive guessing.Spend 5 minutes framing the problem. It saves hours of rework.
"The problem is obvious"If it were obvious, you'd have a spec, not a vague request.Write the problem statement. If it's obvious, it takes 30 seconds.
"I don't have time for questions"You don't have time to build the wrong thing.Run 2 focused rounds, not 10 open-ended ones.
"I already told you the problem"You told me a solution. The problem is why you need that solution.Ask one "why" question. If the answer reveals the problem, proceed.
"Can't you just figure it out from the code?"Code shows what exists, not what's missing or why it hurts.Combine code exploration with user context for the full picture.
"Let me just show you the bug"A bug is a symptom, not a problem. Fixing symptoms is whack-a-mole.Trace the bug to its root cause before jumping to a fix.

Evidence Required

Before claiming the problem is defined, show ALL of these:

  • Problem statement written in the structured format (Who / Problem / When / Impact / Desired state)
  • Root cause or job story identified
  • At least one measurable/observable criterion for success
  • User confirmed the frame is accurate
  • Scope boundaries stated (what's in and out)

"I think I understand" without a written problem statement = guessing.

Red Flags

  • Jumping to solutions or code during the discovery conversation
  • Asking more than 3 questions per round (overwhelming the user)
  • Running more than 3 rounds without attempting a frame (analysis paralysis)
  • Ignoring when the user says "I'm not sure" — that IS information
  • Producing a problem statement the user didn't confirm
  • Confusing symptoms with root causes
  • Framing the problem so broadly it could mean anything ("improve the system")
  • Skipping discovery for non-trivial, ambiguous work

Output Format

Save to $HARNESS_DIR/specs/PROBLEM-{timestamp}.md:

---
status: framed
created: {ISO-8601 timestamp}
context: {one-line summary}
---

# Problem: {title}

## Problem Statement
{Who} experiences {observable problem} when {trigger condition}, resulting in {quantified impact}. The desired state is {measurable outcome}.

## Root Cause / Job Story
{5 Whys chain or JTBD job story}

## Constraints
- Timeline: {when is this needed}
- Technology: {stack constraints}
- Scale: {expected load/users}
- Compatibility: {backward-compat requirements}

## Assumptions
- {assumption} — {certain / uncertain}
- {assumption} — {certain / uncertain}

## Out of Scope
- {what this problem explicitly does NOT cover}

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.