When to Use
- The user is using BestBlogs for the first time and wants to build an interest profile.
- The user wants to view which interest tags they currently selected, language preferences, and whether onboarding is complete.
- The user wants to set their interests again (as a drift intervention or reset).
Primitives
| Primitive | CLI | Description |
|---|---|---|
bestblogs.profile.setup |
bestblogs intake setup |
Complete onboarding interactively or non-interactively |
bestblogs.profile.get |
bestblogs intake show --json |
Get the current profile + onboarding state |
Pre-checks
bestblogs auth status --json
If it outputs loggedIn: false or reports AUTH_REQUIRED, first prompt the user to run bestblogs auth login, get the API Key from https://bestblogs.dev/settings/api-keys。
Actions
Non-interactive Onboarding
bestblogs intake setup --non-interactive \
--tags "tag_ai,tag_coding,tag_product" \
--lang both \
--source-limit 10 \
--json
Output example:
{
"success": true,
"data": {
"onboardingCompleted": true,
"interestTagCount": 3,
"followedSources": 10,
"languagePreference": "both"
}
}
Interactive Onboarding (recommended for real-person scenarios)
bestblogs intake setup
(The CLI will use prompts to pop up a multi-select; the Skill just needs to fork a subprocess to execute it in an agent that supports shell.)
View Profile
bestblogs intake show --json
Fields of interest (retrieve as needed when parsing):
data.interests.explicitInterests[]— explicit interests (including tagName, weight)data.interests.implicitInterests[]— implicit interestsdata.interests.recentActiveTopics[]— active topics in the last 7 daysdata.onboarding— onboarding statedata.interests.driftDetected— whether there is drift
Error Handling
error.code=AUTH_REQUIRED→ prompt to runbestblogs auth login, abort the flowerror.httpStatus=403→ some sub-capabilities require Pro; prompt the user to upgradeerror.code=RATE_LIMITED→ the CLI has already automatically retried once with backoff; if it still fails, tell the user to retry later
Output Contract
The Skill's caller should receive a structured result, for example:
{
"onboardingCompleted": true,
"explicitInterestCount": 6,
"languagePreference": "both",
"driftDetected": false,
"recentActiveTopics": ["AI Coding", "Dev Tools"]
}
Combination Suggestions
- After cold start is complete, immediately call
bestblogs-discoverto show the "today" list, giving the user their first value click. - Periodically (weekly or when drift is triggered), call
profile.get, and based ondriftDetected=truesuggest the user openbestblogs-profile setupto readjust.