First-party
Below is the complete skill definition this hub loads when the skill is triggered — what the agent sees as its instructions, verbatim and unabridged.
# IMI Say/Do™ Gap Framework
This skill teaches the AI to diagnose and close the gap between what consumers SAY they
will do and what they ACTUALLY do — one of the most commercially valuable problems in
market research.
---
## The Say/Do™ Problem
In every category, there is a gap between stated intention and actual behaviour:
```
"I intend to eat healthier" → Still buys the same snacks
"I would definitely try that product" → Never purchases it
"I prefer Brand A" → Buys Brand B on promotion
"I want to switch to sustainable options"→ Picks the cheaper conventional option
"I'll enter that competition" → Never bothers
```
**IMI's core insight:** The Say/Do gap is not lying. Consumers genuinely intend to act.
The gap exists because of friction, habit, context, and cognitive biases that research
(asking in a survey) cannot observe but behaviour reveals.
**The three types of Say/Do gap:**
| Type | Description | Example |
|---|---|---|
| Attitudinal gap | They believe it but don't feel it enough to act | "I think sustainability is important" but don't pay more for it |
| Motivational gap | They want to but something blocks them | "I want to switch" but switching cost is too high |
| Contextual gap | They would in theory but the situation prevents it | "I'd buy that" but it's not available in their store |
---
## The Say/Do™ Diagnostic Framework
### Step 1: Quantify the Gap
```sql
-- Compare stated intent with actual behaviour
WITH intent AS (
SELECT
respondent_id,
CASE WHEN response_value IN (4, 5) THEN 1 ELSE 0 END AS stated_intent
FROM survey_responses
WHERE question_id = 'PURCHASE_INTENT'
AND study_id = :study_id
),
behaviour AS (
SELECT
respondent_id,
CASE WHEN purchased = TRUE THEN 1 ELSE 0 END AS actual_purchase
FROM purchase_tracking
WHERE category_id = :category_id
AND purchase_date BETWEEN :start_date AND :end_date
)
SELECT
COUNT(*) AS total_respondents,
SUM(i.stated_intent) AS stated_intenders,
SUM(b.actual_purchase) AS actual_purchasers,
SUM(CASE WHEN i.stated_intent = 1 AND b.actual_purchase = 1 THEN 1 ELSE 0 END)
AS said_and_did,
SUM(CASE WHEN i.stated_intent = 1 AND b.actual_purchase = 0 THEN 1 ELSE 0 END)
AS said_but_didnt,
ROUND(100.0 *
SUM(CASE WHEN i.stated_intent = 1 AND b.actual_purchase = 1 THEN 1 ELSE 0 END) /
NULLIF(SUM(i.stated_intent), 0),
1) AS conversion_rate,
ROUND(100.0 *
SUM(CASE WHEN i.stated_intent = 1 AND b.actual_purchase = 0 THEN 1 ELSE 0 END) /
NULLIF(SUM(i.stated_intent), 0),
1) AS gap_rate
FROM intent i
LEFT JOIN behaviour b ON i.respondent_id = b.respondent_id;
```
**Interpreting the gap:**
- Gap rate 0-20% = Low gap (intentions are predictive — rare)
- Gap rate 20-40% = Moderate gap (typical for established categories)
- Gap rate 40-60% = High gap (significant friction or context barriers)
- Gap rate 60%+ = Extreme gap (intentions are almost meaningless — deep structural barriers)
### Step 2: Identify Friction Drivers
Friction is anything that adds effort, uncertainty, or cost between intention and action.
**The IMI Friction Taxonomy:**
```
COGNITIVE FRICTION
├── Information overload (too many options, too complex)
├── Uncertainty (don't know enough to decide)
├── Risk perception (fear of making wrong choice)
└── Decision fatigue (too many decisions in sequence)
PHYSICAL FRICTION
├── Availability (can't find it)
├── Accessibility (too far, inconvenient)
├── Process friction (too many steps to purchase)
└── Time cost (takes too long)
ECONOMIC FRICTION
├── Price barrier (too expensive)
├── Switching cost (loss of current benefits)
├── Sunk cost (already invested in alternative)
└── Price uncertainty (don't know if it's good value)
SOCIAL FRICTION
├── Social norms (nobody I know does this)
├── Identity conflict (this doesn't fit who I am)
├── Social risk (what will others think?)
└── Lack of social proof (no reviews/recommendations)
HABITUAL FRICTION
├── Existing habit (autopilot behaviour overrides intent)
├── Default bias (current choice is the path of least resistance)
├── Status quo preference (change feels risky even when objectively better)
└── Routine disruption (new behaviour doesn't fit existing routine)
```
### Step 3: Profile the Gap Segments
```python
import pandas as pd
def profile_say_do_segments(df, intent_col, behaviour_col, profile_cols):
"""
Profile four Say/Do segments:
- Said & Did (converted intenders)
- Said but Didn't (gap — lost intenders)
- Didn't Say but Did (unexpected buyers)
- Didn't Say, Didn't Do (non-market)
"""
df['say_do_segment'] = 'Non-Market'
df.loc[(df[intent_col] == 1) & (df[behaviour_col] == 1), 'say_do_segment'] = 'Said & Did'
df.loc[(df[intent_col] == 1) & (df[behaviour_col] == 0), 'say_do_segment'] = 'Said but Didnt'
df.loc[(df[intent_col] == 0) & (df[behaviour_col] == 1), 'say_do_segment'] = 'Didnt Say but Did'
profiles = df.groupby('say_do_segment')[profile_cols].mean()
sizes = df['say_do_segment'].value_counts(normalize=True) * 100
return profiles, sizes
```
**The key comparison:** What distinguishes "Said & Did" from "Said but Didn't"?
The difference reveals the friction drivers — what the converters had that the
non-converters lacked.
### Step 4: Design Interventions
Each friction type requires a different intervention:
| Friction Type | Intervention Category | Example |
|---|---|---|
| Cognitive | Simplification | Reduce options, clearer messaging, comparison tools |
| Physical | Accessibility | More distribution, online ordering, delivery |
| Economic | Value reframing | Trials, smaller pack sizes, bundling, financing |
| Social | Social proof | Reviews, testimonials, influencer endorsement, community |
| Habitual | Disruption + replacement | Trigger-based reminders, subscription, commitment devices |
### Step 5: Measure Intervention Impact
```
Gap Closure Rate = (Gap Rate Before - Gap Rate After) / Gap Rate Before × 100
If gap rate was 55% and after intervention it's 40%:
Gap Closure Rate = (55 - 40) / 55 × 100 = 27% gap closure
```
---
## Promotion Mechanics: Closing the Gap Through Incentives
Promotions are a direct intervention on economic friction. IMI evaluates promotion
mechanics on their ability to close the Say/Do gap:
### Promotion Effectiveness Scoring
| Factor | Weight | What It Measures |
|---|---|---|
| Participation rate | 25% | What % of the target audience engages with the promotion? |
| Conversion uplift | 30% | Does the promotion drive incremental purchase (not just pull forward)? |
| Brand equity impact | 20% | Does the promotion enhance or erode brand perception? |
| Cost efficiency | 25% | Cost per incremental conversion |
**Promotion types ranked by Say/Do gap closure potential:**
| Promotion Type | Gap Closure Potential | Brand Equity Risk | Notes |
|---|---|---|---|
| Trial / sampling | HIGH | LOW | Removes uncertainty friction directly |
| Contest / prize | MEDIUM | LOW-MEDIUM | Depends on prize relevance to brand |
| Discount / BOGO | HIGH short-term | HIGH | Closes economic friction but trains price sensitivity |
| Loyalty reward | MEDIUM | LOW | Works on habitual friction — builds repeat |
| Bundle | MEDIUM | LOW | Reduces per-unit price perception without discounting |
| Limited edition | MEDIUM | LOW | Creates urgency — disrupts "I'll do it later" |
---
## Habit Formation Framework
When the goal is to convert a one-time behaviour into a sustained habit:
```
IMI's Habit Loop:
CUE ──→ ROUTINE ──→ REWARD ──→ REPETITION ──→ HABIT
CUE: What triggers the behaviour? (time, place, emotional state, preceding action)
ROUTINE: What is the behaviour itself?
REWARD: What reinforcement does the consumer get? (functional, emotional, social)
REPETITION: How many times must the loop run before it becomes automatic?
```
**IMI's rule of thumb:** Most consumer habits require 15-25 repetitions to become automatic.
A marketing programme that drives trial but not repeat is wasting the trial investment.
```python
def habit_formation_programme(target_repetitions=20, trial_conversion=0.15,
repeat_rate_per_cycle=0.60, cycles_per_month=4):
"""
Model a habit formation programme.
How many months of sustained engagement to reach habit threshold?
"""
months = 0
repetitions = 0
active_users = 1.0 # normalised
while repetitions < target_repetitions and months < 24:
months += 1
monthly_reps = active_users * cycles_per_month
repetitions += monthly_reps
active_users *= repeat_rate_per_cycle # attrition each month
return {
'months_to_habit': months if repetitions >= target_repetitions else 'Not achieved in 24 months',
'repetitions_achieved': round(repetitions, 1),
'retention_at_habit': round(active_users * 100, 1)
}
```
---
## Output Templates
### Template: Say/Do™ Gap Diagnostic
```markdown
## Say/Do™ Gap Analysis: [Category/Brand]
**Study:** [name] | **Base:** n=[n] | **Gap measurement period:** [dates]
### The Gap
| Metric | Value |
|---|---|
| Stated intenders (T2B PI) | X% |
| Actual purchasers | X% |
| Conversion rate (said & did) | X% |
| Gap rate (said but didn't) | X% |
| Gap severity | [Low / Moderate / High / Extreme] |
### Gap Segments
| Segment | Size | Key Characteristics |
|---|---|---|
| Said & Did | X% | [profile] |
| Said but Didn't | X% | [profile] |
| Didn't Say but Did | X% | [profile] |
### Friction Diagnosis
| Friction Type | Evidence | Severity |
|---|---|---|
| [Cognitive/Physical/Economic/Social/Habitual] | [data point] | HIGH/MED/LOW |
### Recommended Interventions
| Friction | Intervention | Expected Gap Closure | Priority |
|---|---|---|---|
| [type] | [specific action] | [X%] | HIGH/MED/LOW |
### Essential Insight
[One sentence: the primary reason consumers say but don't do, and the minimum intervention to close the gap]
```
---
## Common Pitfalls
1. **Assuming the gap is irrational.** The gap exists for real reasons — friction, context,
habit. Never dismiss it as "consumers lying."
2. **Treating all gaps the same.** An economic gap (too expensive) requires a different
intervention than a habitual gap (autopilot behaviour). Diagnose before intervening.
3. **Using discounts to close every gap.** Discounts close economic friction but create
new problems (price sensitivity, brand equity erosion). Match the intervention to the friction.
4. **Ignoring the "Didn't Say but Did" segment.** These unexpected buyers reveal unobserved
purchase triggers that surveys miss. They are often the key to understanding the category.
5. **Measuring intent without measuring behaviour.** A concept test that measures PI but
never validates against in-market behaviour is measuring the SAY, not the DO.
---
## Cross-Skill References
- For campaign evaluation that tests say/do conversion → `imi-campaign-evaluation`
- For audience segmentation of gap segments → `imi-segmentation-engine`
- For brand strategy when preference doesn't convert → `imi-brand-strategy`
- For Pulse™ profiling of gap segments → `imi-pulse-intelligence`
- For writing up Say/Do findings → `imi-client-deliverable`
---
*Built for IMI International's Local AI — grounded in IMI's Say/Do™ methodology,
bridging the gap between what consumers say and what they do.*
*Purpose: Insight. Method: Rigour. Outcome: Profit.*
## AXE MCP Server Integration
Every skill in the AXE Skills Hub runs with access to the **AXE MCP Server** — giving it the full fleet intelligence toolkit automatically. No setup required; tools are available in any AXE-powered session.
### Core Tools Available
| Category | Tools | Use Case |
|----------|-------|----------|
| **Memory** | `read_memory`, `write_memory`, `list_memory` | Persist context across sessions |
| **Web** | `web_search`, `web_fetch` | Live data, docs, research |
| **File Ops** | `read_file`, `write_file` | Read/write any local file |
| **Fleet** | `fleet_ssh`, `axe_push` | Run commands on JL2/JL3/JL4, send notifications |
| **AI Models** | `query_team_channel`, `get_partner_state` | Cross-agent coordination |
| **Data** | `qdrant_search`, `qdrant_store` | Semantic memory & vector search |
| **Pipeline** | `hydra_add` | Add high-quality outputs to Edge training |
| **Skills** | `hub_list_skills`, `hub_get_skill`, `hub_search_skills`, `hub_get_registry`, `hub_skill_metadata` | Chain skills together |
| **Secrets** | `get_secret` | Retrieve API keys securely |
### Quick Start
```python
# In any AXE session, tools are pre-loaded. Example chaining:
# 1. Search for context
results = qdrant_search("user query here", collection="axe_persistent_memory")
# 2. Fetch live data if needed
content = web_fetch("https://docs.example.com/api")
# 3. Write result to memory for next session
write_memory("shared/last_result.md", output)
# 4. Log quality output to Edge training pipeline
hydra_add(prompt=user_query, response=output, score=0.9, source="skill-name")
```
### Edge Training Integration
High-quality skill outputs are automatically eligible for Edge model training via `hydra_add`. When a response scores ≥0.85 in evals, pipe it to the Hydra pipeline to compound Edge's knowledge. This is how skills make Edge smarter over time.
```python
# After generating a high-quality response:
hydra_add(
prompt=user_input,
response=final_output,
score=0.9, # eval score
source="skill-name" # tracks provenance
)
```This skill teaches the AI to diagnose and close the gap between what consumers SAY they
will do and what they ACTUALLY do — one of the most commercially valuable problems in
market research.
In every category, there is a gap between stated intention and actual behaviour:
"I intend to eat healthier" → Still buys the same snacks
"I would definitely try that product" → Never purchases it
"I prefer Brand A" → Buys Brand B on promotion
"I want to switch to sustainable options"→ Picks the cheaper conventional option
"I'll enter that competition" → Never bothers
IMI's core insight: The Say/Do gap is not lying. Consumers genuinely intend to act.
The gap exists because of friction, habit, context, and cognitive biases that research
(asking in a survey) cannot observe but behaviour reveals.
The three types of Say/Do gap:
| Type | Description | Example |
|---|---|---|
| Attitudinal gap | They believe it but don't feel it enough to act | "I think sustainability is important" but don't pay more for it |
| Motivational gap | They want to but something blocks them | "I want to switch" but switching cost is too high |
| Contextual gap | They would in theory but the situation prevents it | "I'd buy that" but it's not available in their store |
-- Compare stated intent with actual behaviour
WITH intent AS (
SELECT
respondent_id,
CASE WHEN response_value IN (4, 5) THEN 1 ELSE 0 END AS stated_intent
FROM survey_responses
WHERE question_id = 'PURCHASE_INTENT'
AND study_id = :study_id
),
behaviour AS (
SELECT
respondent_id,
CASE WHEN purchased = TRUE THEN 1 ELSE 0 END AS actual_purchase
FROM purchase_tracking
WHERE category_id = :category_id
AND purchase_date BETWEEN :start_date AND :end_date
)
SELECT
COUNT(*) AS total_respondents,
SUM(i.stated_intent) AS stated_intenders,
SUM(b.actual_purchase) AS actual_purchasers,
SUM(CASE WHEN i.stated_intent = 1 AND b.actual_purchase = 1 THEN 1 ELSE 0 END)
AS said_and_did,
SUM(CASE WHEN i.stated_intent = 1 AND b.actual_purchase = 0 THEN 1 ELSE 0 END)
AS said_but_didnt,
ROUND(100.0 *
SUM(CASE WHEN i.stated_intent = 1 AND b.actual_purchase = 1 THEN 1 ELSE 0 END) /
NULLIF(SUM(i.stated_intent), 0),
1) AS conversion_rate,
ROUND(100.0 *
SUM(CASE WHEN i.stated_intent = 1 AND b.actual_purchase = 0 THEN 1 ELSE 0 END) /
NULLIF(SUM(i.stated_intent), 0),
1) AS gap_rate
FROM intent i
LEFT JOIN behaviour b ON i.respondent_id = b.respondent_id;
Interpreting the gap:
Friction is anything that adds effort, uncertainty, or cost between intention and action.
The IMI Friction Taxonomy:
COGNITIVE FRICTION
├── Information overload (too many options, too complex)
├── Uncertainty (don't know enough to decide)
├── Risk perception (fear of making wrong choice)
└── Decision fatigue (too many decisions in sequence)
PHYSICAL FRICTION
├── Availability (can't find it)
├── Accessibility (too far, inconvenient)
├── Process friction (too many steps to purchase)
└── Time cost (takes too long)
ECONOMIC FRICTION
├── Price barrier (too expensive)
├── Switching cost (loss of current benefits)
├── Sunk cost (already invested in alternative)
└── Price uncertainty (don't know if it's good value)
SOCIAL FRICTION
├── Social norms (nobody I know does this)
├── Identity conflict (this doesn't fit who I am)
├── Social risk (what will others think?)
└── Lack of social proof (no reviews/recommendations)
HABITUAL FRICTION
├── Existing habit (autopilot behaviour overrides intent)
├── Default bias (current choice is the path of least resistance)
├── Status quo preference (change feels risky even when objectively better)
└── Routine disruption (new behaviour doesn't fit existing routine)
import pandas as pd
def profile_say_do_segments(df, intent_col, behaviour_col, profile_cols):
"""
Profile four Say/Do segments:
- Said & Did (converted intenders)
- Said but Didn't (gap — lost intenders)
- Didn't Say but Did (unexpected buyers)
- Didn't Say, Didn't Do (non-market)
"""
df['say_do_segment'] = 'Non-Market'
df.loc[(df[intent_col] == 1) & (df[behaviour_col] == 1), 'say_do_segment'] = 'Said & Did'
df.loc[(df[intent_col] == 1) & (df[behaviour_col] == 0), 'say_do_segment'] = 'Said but Didnt'
df.loc[(df[intent_col] == 0) & (df[behaviour_col] == 1), 'say_do_segment'] = 'Didnt Say but Did'
profiles = df.groupby('say_do_segment')[profile_cols].mean()
sizes = df['say_do_segment'].value_counts(normalize=True) * 100
return profiles, sizes
The key comparison: What distinguishes "Said & Did" from "Said but Didn't"?
The difference reveals the friction drivers — what the converters had that the
non-converters lacked.
Each friction type requires a different intervention:
| Friction Type | Intervention Category | Example |
|---|---|---|
| Cognitive | Simplification | Reduce options, clearer messaging, comparison tools |
| Physical | Accessibility | More distribution, online ordering, delivery |
| Economic | Value reframing | Trials, smaller pack sizes, bundling, financing |
| Social | Social proof | Reviews, testimonials, influencer endorsement, community |
| Habitual | Disruption + replacement | Trigger-based reminders, subscription, commitment devices |
Gap Closure Rate = (Gap Rate Before - Gap Rate After) / Gap Rate Before × 100
If gap rate was 55% and after intervention it's 40%:
Gap Closure Rate = (55 - 40) / 55 × 100 = 27% gap closure
Promotions are a direct intervention on economic friction. IMI evaluates promotion
mechanics on their ability to close the Say/Do gap:
| Factor | Weight | What It Measures |
|---|---|---|
| Participation rate | 25% | What % of the target audience engages with the promotion? |
| Conversion uplift | 30% | Does the promotion drive incremental purchase (not just pull forward)? |
| Brand equity impact | 20% | Does the promotion enhance or erode brand perception? |
| Cost efficiency | 25% | Cost per incremental conversion |
Promotion types ranked by Say/Do gap closure potential:
| Promotion Type | Gap Closure Potential | Brand Equity Risk | Notes |
|---|---|---|---|
| Trial / sampling | HIGH | LOW | Removes uncertainty friction directly |
| Contest / prize | MEDIUM | LOW-MEDIUM | Depends on prize relevance to brand |
| Discount / BOGO | HIGH short-term | HIGH | Closes economic friction but trains price sensitivity |
| Loyalty reward | MEDIUM | LOW | Works on habitual friction — builds repeat |
| Bundle | MEDIUM | LOW | Reduces per-unit price perception without discounting |
| Limited edition | MEDIUM | LOW | Creates urgency — disrupts "I'll do it later" |
When the goal is to convert a one-time behaviour into a sustained habit:
IMI's Habit Loop:
CUE ──→ ROUTINE ──→ REWARD ──→ REPETITION ──→ HABIT
CUE: What triggers the behaviour? (time, place, emotional state, preceding action)
ROUTINE: What is the behaviour itself?
REWARD: What reinforcement does the consumer get? (functional, emotional, social)
REPETITION: How many times must the loop run before it becomes automatic?
IMI's rule of thumb: Most consumer habits require 15-25 repetitions to become automatic.
A marketing programme that drives trial but not repeat is wasting the trial investment.
def habit_formation_programme(target_repetitions=20, trial_conversion=0.15,
repeat_rate_per_cycle=0.60, cycles_per_month=4):
"""
Model a habit formation programme.
How many months of sustained engagement to reach habit threshold?
"""
months = 0
repetitions = 0
active_users = 1.0 # normalised
while repetitions < target_repetitions and months < 24:
months += 1
monthly_reps = active_users * cycles_per_month
repetitions += monthly_reps
active_users *= repeat_rate_per_cycle # attrition each month
return {
'months_to_habit': months if repetitions >= target_repetitions else 'Not achieved in 24 months',
'repetitions_achieved': round(repetitions, 1),
'retention_at_habit': round(active_users * 100, 1)
}
## Say/Do™ Gap Analysis: [Category/Brand]
**Study:** [name] | **Base:** n=[n] | **Gap measurement period:** [dates]
### The Gap
| Metric | Value |
|---|---|
| Stated intenders (T2B PI) | X% |
| Actual purchasers | X% |
| Conversion rate (said & did) | X% |
| Gap rate (said but didn't) | X% |
| Gap severity | [Low / Moderate / High / Extreme] |
### Gap Segments
| Segment | Size | Key Characteristics |
|---|---|---|
| Said & Did | X% | [profile] |
| Said but Didn't | X% | [profile] |
| Didn't Say but Did | X% | [profile] |
### Friction Diagnosis
| Friction Type | Evidence | Severity |
|---|---|---|
| [Cognitive/Physical/Economic/Social/Habitual] | [data point] | HIGH/MED/LOW |
### Recommended Interventions
| Friction | Intervention | Expected Gap Closure | Priority |
|---|---|---|---|
| [type] | [specific action] | [X%] | HIGH/MED/LOW |
### Essential Insight
[One sentence: the primary reason consumers say but don't do, and the minimum intervention to close the gap]
habit. Never dismiss it as "consumers lying."
intervention than a habitual gap (autopilot behaviour). Diagnose before intervening.
new problems (price sensitivity, brand equity erosion). Match the intervention to the friction.
purchase triggers that surveys miss. They are often the key to understanding the category.
never validates against in-market behaviour is measuring the SAY, not the DO.
imi-campaign-evaluationimi-segmentation-engineimi-brand-strategyimi-pulse-intelligenceimi-client-deliverable*Built for IMI International's Local AI — grounded in IMI's Say/Do™ methodology,
bridging the gap between what consumers say and what they do.*
*Purpose: Insight. Method: Rigour. Outcome: Profit.*
Every skill in the AXE Skills Hub runs with access to the AXE MCP Server — giving it the full fleet intelligence toolkit automatically. No setup required; tools are available in any AXE-powered session.
| Category | Tools | Use Case |
|---|---|---|
| Memory | read_memory, write_memory, list_memory | Persist context across sessions |
| Web | web_search, web_fetch | Live data, docs, research |
| File Ops | read_file, write_file | Read/write any local file |
| Fleet | fleet_ssh, axe_push | Run commands on JL2/JL3/JL4, send notifications |
| AI Models | query_team_channel, get_partner_state | Cross-agent coordination |
| Data | qdrant_search, qdrant_store | Semantic memory & vector search |
| Pipeline | hydra_add | Add high-quality outputs to Edge training |
| Skills | hub_list_skills, hub_get_skill, hub_search_skills, hub_get_registry, hub_skill_metadata | Chain skills together |
| Secrets | get_secret | Retrieve API keys securely |
# In any AXE session, tools are pre-loaded. Example chaining:
# 1. Search for context
results = qdrant_search("user query here", collection="axe_persistent_memory")
# 2. Fetch live data if needed
content = web_fetch("https://docs.example.com/api")
# 3. Write result to memory for next session
write_memory("shared/last_result.md", output)
# 4. Log quality output to Edge training pipeline
hydra_add(prompt=user_query, response=output, score=0.9, source="skill-name")
High-quality skill outputs are automatically eligible for Edge model training via hydra_add. When a response scores ≥0.85 in evals, pipe it to the Hydra pipeline to compound Edge's knowledge. This is how skills make Edge smarter over time.
# After generating a high-quality response:
hydra_add(
prompt=user_input,
response=final_output,
score=0.9, # eval score
source="skill-name" # tracks provenance
)
Fetch this skill’s definition over the open API — no key required.
curl -s /v1/skills/imi-say-do-gap