Context
@pkras asked whether we could make Addie's suggested prompts more predictive — persona + engagement aware rather than static. Her direction:
Prompts change based on what we know about the member: their archetype (we already have the persona assessment), engagement stage (exploring → active → leading), working group memberships, certification progress, and last interaction with Addie.
Today there are two prompt systems, and they diverge:
| System |
File |
Where it shows |
Style |
| Slack Assistant thread pane ("Try these prompts:") |
server/src/addie/prompts.ts → buildDynamicSuggestedPrompts |
Top of a new thread with Addie in Slack |
Static. 3 hardcoded tiers (unlinked / admin / member). |
| App Home + Web Home |
server/src/addie/home/builders/suggested-prompts.ts → buildSuggestedPrompts |
Slack App Home tab + web home |
Partially context-aware. Bug: persona check uses wrong persona IDs (ad_tech_vendor, agency_tech, publisher_tech) — none match the real IDs in server/src/config/personas.ts, so that branch never fires. |
Proposal: consolidate on one rule-based builder, feed it everything we already know about the member, and ship Piia's 5 examples in two stages.
Signals already on MemberContext
persona.persona, persona.aspiration_persona, persona.journey_stage
engagement.login_count_30d, last_login, interest_level, email_click_count_30d
working_groups[] with is_leader per group
community_profile.completeness
addie_history.total_interactions, last_interaction_at
is_member, is_mapped, slack_linked
Persona IDs in use: molecule_builder, data_decoder, pureblood_protector, resops_integrator, ladder_climber, simple_starter, pragmatic_builder.
Signals NOT yet hydrated
- Certification progress (data exists in
certification_attempts — just not joined onto the context)
- Agent registration (
adagents.json / brand.json lookup by org domain)
- Upcoming WG meetings — unclear if a data source exists; needs audit
Stage 1 — Unify + ship rules on existing data
One builder. Rule-based ({ id, when, label, prompt, priority }). Evaluated in priority order, top 4 wins (even count enforced for 2-col grid). Admin short-circuit preserved — admins still get the 4 ops prompts they use day-to-day.
Rule table (stage 1)
| # |
Trigger |
Label |
Priority |
| 1 |
unlinked |
What is AdCP? |
100 |
| 2 |
unlinked |
What brings you here? |
95 |
| 3 |
unlinked |
How do I join? |
90 |
| 4 |
linked, not member |
Membership options |
85 |
| 5 |
member, profile <80% complete |
Complete my profile |
80 |
| 6 |
member, no working groups |
Find working groups that match your interests |
75 |
| 7 |
member, leads a WG |
Working group to-dos |
72 |
| 8 |
member, in WGs (not leader) |
What's happening in my working groups? |
70 |
| 9 |
persona=molecule_builder/pragmatic_builder |
Build with AdCP |
65 |
| 10 |
persona=data_decoder |
What data can AdCP move? |
65 |
| 11 |
persona=resops_integrator |
Connect AdCP to my stack |
65 |
| 12 |
persona=ladder_climber/simple_starter |
Start with the Academy |
65 |
| 13 |
persona=pureblood_protector |
Governance and brand safety |
65 |
| 14 |
member, last_login > 30d ago |
What's new since you were last here? |
60 |
| 15 |
addie interactions < 3 |
What can you help me with? |
40 |
| 16 |
fallback |
What's new? |
10 |
Deliverables
Stage 2 — Hydrate missing signals, add remaining rules
Turns on the last 3 of Piia's examples:
- Cert continuation (priority 78): query latest
certification_attempts for the user, add certification block to MemberContext
- Builder, no agent → Test your agent with Addie (priority 68): domain lookup for
adagents.json / brand.json
- WG leader with meeting in <7d → Prep for the meeting (priority 82): blocked on finding an events data source. Stage 2 kicks off with a 30-min audit; if nothing exists, we ship cert + agent and punt meeting prep to a follow-up.
Out of scope (for now)
- A/B testing prompt variants (needs analytics)
- LLM-generated prompts (rules are cheaper and more predictable; revisit if rules feel limiting)
- i18n
@pkras — keeping this in your voice: does the priority ordering feel right? Two places I want your read:
- Profile completeness (rule 5) at priority 80 — higher than the persona prompts (65). Means members with incomplete profiles see a "finish your profile" nudge before a persona-specific prompt. Correct, or should the persona prompt always win?
- Disengaged (rule 14) at priority 60 — below personas. If someone hasn't logged in for 30+ days, do you want "what's new" to jump to the top instead?
Happy to reorder before we start building.
Context
@pkras asked whether we could make Addie's suggested prompts more predictive — persona + engagement aware rather than static. Her direction:
Today there are two prompt systems, and they diverge:
server/src/addie/prompts.ts→buildDynamicSuggestedPromptsserver/src/addie/home/builders/suggested-prompts.ts→buildSuggestedPromptsad_tech_vendor,agency_tech,publisher_tech) — none match the real IDs inserver/src/config/personas.ts, so that branch never fires.Proposal: consolidate on one rule-based builder, feed it everything we already know about the member, and ship Piia's 5 examples in two stages.
Signals already on
MemberContextpersona.persona,persona.aspiration_persona,persona.journey_stageengagement.login_count_30d,last_login,interest_level,email_click_count_30dworking_groups[]withis_leaderper groupcommunity_profile.completenessaddie_history.total_interactions,last_interaction_atis_member,is_mapped,slack_linkedPersona IDs in use:
molecule_builder,data_decoder,pureblood_protector,resops_integrator,ladder_climber,simple_starter,pragmatic_builder.Signals NOT yet hydrated
certification_attempts— just not joined onto the context)adagents.json/brand.jsonlookup by org domain)Stage 1 — Unify + ship rules on existing data
One builder. Rule-based (
{ id, when, label, prompt, priority }). Evaluated in priority order, top 4 wins (even count enforced for 2-col grid). Admin short-circuit preserved — admins still get the 4 ops prompts they use day-to-day.Rule table (stage 1)
Deliverables
home/builders/rules/prompt-rules.ts— rule registrysuggested-prompts.tsto evaluate rulesbuildDynamicSuggestedPromptsinprompts.ts; pointhandler.ts+bolt-app.tsat the unified buildertests/unit/dynamic-prompts.test.tswith rule-coverage testsStage 2 — Hydrate missing signals, add remaining rules
Turns on the last 3 of Piia's examples:
certification_attemptsfor the user, addcertificationblock toMemberContextadagents.json/brand.jsonOut of scope (for now)
@pkras — keeping this in your voice: does the priority ordering feel right? Two places I want your read:
Happy to reorder before we start building.