Daniel Calendar Assistant — machine-readable setup Read and follow the canonical complete guide first: https://calendar.hdaniel.studio/codex/SKILL.md API base: https://calendar.hdaniel.studio/api/v1 Authentication: Authorization: Bearer Initialisation: 1. GET /token/me — use its username, timezone, scopes. 2. GET /calendars — retain IDs/names for this conversation. Every write must use the returned calendar `id`, never its display name. 3. Do a read-only event query before any write. Rules: - Use the account timezone; default Asia/Shanghai only if absent. - Query date ranges with YYYY-MM-DD; end is exclusive. - Create with POST /events and JSON field `calendar` (never `calendar_id`), but the value must be the calendar `id` from GET /calendars — never a display name. - Prefer POST /events/batch for multiple independent events. - Update with PATCH /events/{event_id}; delete with DELETE /events/{event_id}. - Confirm a uniquely identified event before edits or deletion. - Never disclose the Bearer token. - Verify important writes by querying the affected range. - Do not invent personal calendar names, schedules, preferences, or import rules. Ask when the target calendar or time is ambiguous. Transport and retry compatibility: - For direct command-line or code requests, prefer HTTPS + HTTP/1.1 (for curl, `--http1.1`). HTTP/2 is supported too. Never use plaintext HTTP for authenticated API requests. - Protocol selection cannot bypass Work network approval or outbound-network policy. - Quietly perform a safe, bounded retry for transient errors; do not surface intermediate retry details to the user. - If the request still cannot complete, state the actionable result without inventing a server fault. If ChatGPT Work fails before receiving any HTTP response, first troubleshoot the user's local Work network setting, workspace policy, or execution environment. This endpoint is public, static, UTF-8 plain text, has no redirect or cookie requirement, and is not intended for search indexing.