freezonex/tier0-sdk/tier0-sdk-notifications
Claude Code and agent skill by freezonex/tier0-sdk
- community
Checking that the SKILL.md file is still in the repository.
Tier0 SDK message notifications for TypeScript/JavaScript. Before using this Skill, first read tier0-sdk for shared SDK version, configuration, runtime, and layering rules. Use when selecting a human recipient from Tier0 members, sending an in-app notification with optional web/mobile push reminders, or querying delivery status through @tier0/sdk/openapi. Resolve recipient IDs internally from member data; never make users enter or understand a user ID.
Install
npx vskill@latest install freezonex/tier0-sdk/tier0-sdk-notificationsSKILL.md
Tier0 SDK — Notifications
Before starting, read the root SDK Skill at [`../SKILL.md`](../SKILL.md).
⚠️ Response format differs from every other endpoint
The two notifications endpoints do not use the {code, msg, data} envelope:
- Success: HTTP 200 with a bare JSON body (e.g.
{ messageId, status, createdAt }). Read fields directly —result.datadoes not exist. - Failure: a real HTTP status code (400/401/403/404/409/422/429) with body
{ errorCode, message }. The SDK client throwsApiError; the raw error JSON lands inerror.msg. Parsing pattern is in `references/send.md`.
Recipient UX invariant
recipientUserId is an internal transport field, not a user-facing concept.
- In an app, present a searchable member picker using names, nickname, email, and relevant roles. Store the selected member's
userIdinternally and pass it to the send API; never render a free-text “User ID” field. - In an agent conversation, ask for a recognizable person such as a name or email, query the member list, and show human-readable candidates when ambiguous. Never ask the user to find, paste, or choose a numeric ID.
- For a project-scoped audience, query that project's members. For a Workspace-wide audience, query platform members with
statuses: ['active']. Read `tier0-sdk-members` before implementing either picker. - A trusted business record may already contain a previously resolved
userId; use it internally without exposing it. Do not accept an arbitrary ID supplied through ordinary end-user input. - If the API key cannot query members, treat that as an app configuration or permission error. Do not fall back to raw-ID input. Cloud member queries currently require
uns:readin addition to the notification permissions.
Notification decisions
Resolve the recipient and message from the user intent. Apply the SDK channel contract below:
| Parameter | Decided by | Rule | |
|---|---|---|---|
| Recipient | User | Ask who should receive it using name/email or a member picker. Resolve userId internally from members; if multiple candidates match, show human-readable labels and let the user choose — never show IDs or guess | |
channels | User intent / SDK default | “Notify the user” → omit channels (SDK sends ['web', 'mobile']); all reminders → ['web', 'mobile']; Web & Desktop only → ['web']; Mobile only → ['mobile']; inbox only → []. Never generate desktop or narrow channels based on the App page type | |
| Title / content | User (agent may draft, user reviews) | The agent enforces length limits (50/800 chars); the content itself is the user's intent | |
mode | Agent detects the scenario; ask when unsure | See send.md. Never silently default to live when uncertain | |
idempotencyKey | Agent | Business-event key discipline, see send.md | |
sender | Agent | Filled from the calling app's identity, see send.md. An app sender sends type: 'app' + id from getCurrentAppId() + meta.projectId from getCurrentProjectId(), and omits `name` — the server looks the real App name up. Never hard-code the appId. Only an other sender names itself | |
link | Agent (ask when ambiguous) | The Open-button target, derived from whatever the notification is about (the order, the alarming device, the work order). For a screen inside the sending App this is simply the App's own router path (/alerts/tank01), see send.md. Ask when the destination is not obvious — and confirm the recipient can actually reach it. Omitting it is fine, but it does not guarantee no button: there are two navigation sources — link, and sender.type=app carrying both id (appId) and meta.projectId, which offers "open the sending App". No button appears when both sources are absent — and regardless of sources when the sending App is undeployed (stopped/deleted), see send.md | |
type | No choice | Fixed "inbox", the only accepted value |
Channel examples
For a resolved notification body, choose one request shape:
These are alternatives, not five sends for the same event. See send.md for the full request and upgrade notes.
Scope Routing
| Need | Read | |
|---|---|---|
| Send a notification (inbox + optional push), sender contract, idempotency, error codes | `references/send.md` | |
| Query delivery status by messageId, poll until terminal state | `references/get.md` |
Final Checklist
- The user selected a recognizable member; no UI or prompt asked for a raw user ID.
recipientUserIdwas resolved internally from member data or a trusted business relation.- Recipient came from user intent; channels follow the SDK default or the user's explicit scope. Inbox-only requests use
[]. - The recipient is an active member of the API key's workspace.
idempotencyKeyis a business-event key, reused verbatim on retries.- Responses were parsed as bare JSON (no envelope) and errors via
ApiError.status+ JSON inApiError.msg. - Status reported to the user says "sent", never "seen/read" — there is no read receipt.
- If a
linkwas sent, it passes every rule in send.md —https://or/prefix, protocol-relative//hostand backslashes rejected, ≤500 characters, no Unicode whitespace / control / invisible format characters — and points at something the recipient has permission to open.
Security
- Security scanPassed, 90 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/tier0-sdk/tier0-sdk-notifications/SKILL.md
Popularity
- 7-day trend score
- 0
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/freezonex/tier0-sdk/tier0-sdk-notifications)