Slite knowledge base
Agent skills for homelab services: Caddy, ntfy, Radarr/Sonarr, Langfuse, Plex
npx -y skills add ddnetters/homelab-agent-skills --skill slite-knowledge-baseAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Slite knowledge base API — ask questions, search notes, retrieve content, manage users and groups, and audit knowledge health via the REST API
SKILL.md
9.6 KB, as published. Nobody here has run it
Slite Knowledge Base
Slite is a team knowledge base with AI-powered search. Use this skill to query notes, ask questions, search content, and audit knowledge health via the Slite API.
Setup
Generate an API key
- Open the organization menu (top left of the Slite app)
- Click Settings
- In the left panel, click API
- Click Create a new key and follow the prompts
- Copy the key immediately — it is only shown once
You can create multiple keys and revoke unused ones from the same page.
Configure
export SLITE_API_KEY="YOUR_API_KEY"
All endpoints use Bearer token auth against https://api.slite.com/v1.
# Base pattern for all requests
curl -s -H "Authorization: Bearer $SLITE_API_KEY" \
"https://api.slite.com/v1/<endpoint>"
Authentication check
curl -s -H "Authorization: Bearer $SLITE_API_KEY" \
"https://api.slite.com/v1/me" | jq .
Returns: displayName, email, organizationName, organizationDomain.
Ask (AI-powered Q&A)
Ask a question
curl -s -H "Authorization: Bearer $SLITE_API_KEY" \
"https://api.slite.com/v1/ask?question=How+do+we+handle+on-call+rotations" | \
jq '{answer, sources: [.sources[] | {title, url}]}'
Scoped to a parent note
curl -s -H "Authorization: Bearer $SLITE_API_KEY" \
"https://api.slite.com/v1/ask?question=What+is+our+deploy+process&parentNoteId=NOTE_ID" | \
jq '{answer, sources: [.sources[] | {title, url}]}'
With a specific assistant
curl -s -H "Authorization: Bearer $SLITE_API_KEY" \
"https://api.slite.com/v1/ask?question=YOUR_QUESTION&assistantId=ASSISTANT_ID" | \
jq '{answer, sources: [.sources[] | {id, title, url, updatedAt}]}'
Notes
List notes
curl -s -H "Authorization: Bearer $SLITE_API_KEY" \
"https://api.slite.com/v1/notes" | \
jq '{total, hasNextPage, notes: [.notes[] | {id, title, updatedAt}]}'
Filter and sort
# By owner
curl -s -H "Authorization: Bearer $SLITE_API_KEY" \
"https://api.slite.com/v1/notes?ownerId=USER_ID" | jq '.notes[] | {id, title}'
# By parent note
curl -s -H "Authorization: Bearer $SLITE_API_KEY" \
"https://api.slite.com/v1/notes?parentNoteId=NOTE_ID" | jq '.notes[] | {id, title}'
# Sort by last edited (descending)
curl -s -H "Authorization: Bearer $SLITE_API_KEY" \
"https://api.slite.com/v1/notes?orderBy=lastEditedAt_DESC" | jq '.notes[] | {id, title}'
Order options: lastEditedAt_DESC, lastEditedAt_ASC, listPosition_DESC, listPosition_ASC.
Paginate through notes
# First page
RESPONSE=$(curl -s -H "Authorization: Bearer $SLITE_API_KEY" \
"https://api.slite.com/v1/notes")
echo "$RESPONSE" | jq '{total, hasNextPage}'
# Next page (use nextCursor from previous response)
CURSOR=$(echo "$RESPONSE" | jq -r '.nextCursor')
curl -s -H "Authorization: Bearer $SLITE_API_KEY" \
"https://api.slite.com/v1/notes?cursor=$CURSOR" | jq '.notes[] | {id, title}'
Get note by ID
# Default format
curl -s -H "Authorization: Bearer $SLITE_API_KEY" \
"https://api.slite.com/v1/notes/NOTE_ID" | jq '{id, title, content}'
# As markdown
curl -s -H "Authorization: Bearer $SLITE_API_KEY" \
"https://api.slite.com/v1/notes/NOTE_ID?format=md" | jq '{id, title, content}'
# As HTML
curl -s -H "Authorization: Bearer $SLITE_API_KEY" \
"https://api.slite.com/v1/notes/NOTE_ID?format=html" | jq '{id, title, content}'
Format options: md, html, sliteml.
Get note children
curl -s -H "Authorization: Bearer $SLITE_API_KEY" \
"https://api.slite.com/v1/notes/NOTE_ID/children" | \
jq '{total, hasNextPage, notes: [.notes[] | {id, title}]}'
# Paginate children (max 50 per page)
curl -s -H "Authorization: Bearer $SLITE_API_KEY" \
"https://api.slite.com/v1/notes/NOTE_ID/children?cursor=CURSOR" | jq '.notes[] | {id, title}'
Search
Basic search
curl -s -H "Authorization: Bearer $SLITE_API_KEY" \
"https://api.slite.com/v1/search-notes?query=deployment+guide" | \
jq '.hits[] | {id, title, highlight}'
Search with filters
# Scoped to a parent note subtree
curl -s -H "Authorization: Bearer $SLITE_API_KEY" \
"https://api.slite.com/v1/search-notes?query=onboarding&parentNoteId=NOTE_ID" | \
jq '.hits[] | {id, title}'
# Filter by review state
curl -s -H "Authorization: Bearer $SLITE_API_KEY" \
"https://api.slite.com/v1/search-notes?query=api&reviewState=Verified" | \
jq '.hits[] | {id, title}'
# Filter by hierarchy depth
curl -s -H "Authorization: Bearer $SLITE_API_KEY" \
"https://api.slite.com/v1/search-notes?query=runbook&depth=2" | \
jq '.hits[] | {id, title}'
# Include archived notes
curl -s -H "Authorization: Bearer $SLITE_API_KEY" \
"https://api.slite.com/v1/search-notes?query=old+process&includeArchived=true" | \
jq '.hits[] | {id, title}'
Review states: Verified, Outdated, VerificationRequested, VerificationExpired.
Search with pagination
curl -s -H "Authorization: Bearer $SLITE_API_KEY" \
"https://api.slite.com/v1/search-notes?query=meeting+notes&page=0&hitsPerPage=20" | \
jq '{nbPages, page, hits: [.hits[] | {id, title}]}'
Search with highlight tags
curl -s -H "Authorization: Bearer $SLITE_API_KEY" \
"https://api.slite.com/v1/search-notes?query=deploy&highlightPreTag=**&highlightPostTag=**" | \
jq '.hits[] | {title, highlight}'
Filter by edit date
# Notes edited after a date
curl -s -H "Authorization: Bearer $SLITE_API_KEY" \
"https://api.slite.com/v1/search-notes?query=roadmap&lastEditedAfter=2026-01-01T00:00:00Z" | \
jq '.hits[] | {id, title}'
Knowledge management
List all notes
curl -s -H "Authorization: Bearer $SLITE_API_KEY" \
"https://api.slite.com/v1/knowledge-management/notes?first=50" | \
jq '{total, hasNextPage, notes: [.notes[] | {id, title}]}'
Filter by review state
# Find outdated notes
curl -s -H "Authorization: Bearer $SLITE_API_KEY" \
"https://api.slite.com/v1/knowledge-management/notes?reviewStateList=Outdated&first=50" | \
jq '.notes[] | {id, title}'
# Notes pending verification
curl -s -H "Authorization: Bearer $SLITE_API_KEY" \
"https://api.slite.com/v1/knowledge-management/notes?reviewStateList=VerificationRequested&first=50" | \
jq '.notes[] | {id, title}'
Filter by owner or channel
# By owner
curl -s -H "Authorization: Bearer $SLITE_API_KEY" \
"https://api.slite.com/v1/knowledge-management/notes?ownerIdList=USER_ID&first=50" | \
jq '.notes[] | {id, title}'
# By channel
curl -s -H "Authorization: Bearer $SLITE_API_KEY" \
"https://api.slite.com/v1/knowledge-management/notes?channelIdList=CHANNEL_ID&first=50" | \
jq '.notes[] | {id, title}'
Recent notes
# Notes created or updated in the last 7 days
curl -s -H "Authorization: Bearer $SLITE_API_KEY" \
"https://api.slite.com/v1/knowledge-management/notes?sinceDaysAgo=7&first=50" | \
jq '.notes[] | {id, title}'
Public notes
curl -s -H "Authorization: Bearer $SLITE_API_KEY" \
"https://api.slite.com/v1/knowledge-management/notes/public?first=50" | \
jq '.notes[] | {id, title}'
Inactive notes
curl -s -H "Authorization: Bearer $SLITE_API_KEY" \
"https://api.slite.com/v1/knowledge-management/notes/inactive?first=50" | \
jq '.notes[] | {id, title}'
Empty notes
curl -s -H "Authorization: Bearer $SLITE_API_KEY" \
"https://api.slite.com/v1/knowledge-management/notes/empty?first=50" | \
jq '.notes[] | {id, title}'
Users
Search users
curl -s -H "Authorization: Bearer $SLITE_API_KEY" \
"https://api.slite.com/v1/users?query=john" | \
jq '.users[] | {id, displayName, email}'
Include archived users
curl -s -H "Authorization: Bearer $SLITE_API_KEY" \
"https://api.slite.com/v1/users?query=jane&includeArchived=true" | \
jq '.users[] | {id, displayName, email, archivedAt}'
Get user by ID
curl -s -H "Authorization: Bearer $SLITE_API_KEY" \
"https://api.slite.com/v1/users/USER_ID" | \
jq '{id, displayName, email, organizationRole, isGuest}'
Groups
Search groups
curl -s -H "Authorization: Bearer $SLITE_API_KEY" \
"https://api.slite.com/v1/groups?query=engineering" | \
jq '.groups[] | {id, name, description}'
Get group by ID
curl -s -H "Authorization: Bearer $SLITE_API_KEY" \
"https://api.slite.com/v1/groups/GROUP_ID" | jq '{id, name, description}'
Troubleshooting
| Problem | Fix |
|---|---|
| 401 Unauthorized | Check SLITE_API_KEY is set and valid. Regenerate at Settings → API |
| 422 Validation error | Check required parameters. query is required for /users and /groups |
| 429 Rate limited | Back off and retry. Reduce request frequency |
| 404 Not found | Verify the note/user/group ID exists and you have access |
| Empty search results | Try broader query terms, check parentNoteId scope, try includeArchived=true |
| Pagination not working | Use nextCursor from response for notes, page param for search |
Tips
- The
/askendpoint uses AI to answer from your knowledge base — great for natural language queries - Use
format=mdwhen fetching note content for the most readable output - Knowledge management endpoints help audit content health: find inactive, empty, or outdated notes
- Paginated endpoints return
hasNextPageandnextCursor— loop untilhasNextPageis false - Search supports
hitsPerPageup to 100 (usepagestarting at 0) - Knowledge management endpoints accept
firstup to 50 per page