Summary
Define and enforce clear completion criteria for the onboarding conversation: agent marks done only after user connects at least one skill OR agent has genuinely tried and user declined.
Problem
Currently the welcome agent can call complete_onboarding({"action": "complete"}) at any point with no enforced minimum engagement. This means onboarding can be "completed" after a single exchange with no skills connected.
Solution
Combine prompt-level and code-level guards:
Prompt-level (in prompt.md):
- Agent instructed to only call
complete after: (a) at least one skill connected, OR (b) offered connections 2-3 times and user explicitly declined
- AND at least 3 back-and-forth exchanges have occurred
Code-level (in complete_onboarding.rs):
complete action validates minimum criteria before flipping the flag
- If criteria not met, return error with reason: "User hasn't connected any skills and minimum exchanges not reached"
- The
check_status action returns ready_to_complete: bool and reason: string
Graceful fallback:
- If user says "skip", "later", "not now" — agent acknowledges, briefly explains how to connect later (settings), then completes
- If user is clearly disengaged after 3+ exchanges — agent wraps up gracefully
Acceptance criteria
Related
Parent: #599 — Conversational onboarding agent
Summary
Define and enforce clear completion criteria for the onboarding conversation: agent marks done only after user connects at least one skill OR agent has genuinely tried and user declined.
Problem
Currently the welcome agent can call
complete_onboarding({"action": "complete"})at any point with no enforced minimum engagement. This means onboarding can be "completed" after a single exchange with no skills connected.Solution
Combine prompt-level and code-level guards:
Prompt-level (in
prompt.md):completeafter: (a) at least one skill connected, OR (b) offered connections 2-3 times and user explicitly declinedCode-level (in
complete_onboarding.rs):completeaction validates minimum criteria before flipping the flagcheck_statusaction returnsready_to_complete: boolandreason: stringGraceful fallback:
Acceptance criteria
completeaction rejects if fewer than 3 back-and-forth exchangescomplete_onboardingtool enforces criteria, not just prompt-levelcheck_statusreturnsready_to_completewith reasonRelated
src/openhuman/tools/impl/agent/complete_onboarding.rs,src/openhuman/agent/agents/welcome/prompt.mdParent: #599 — Conversational onboarding agent