with one click
check-bills
List bills with due_date in a window (default = unpaid only)
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
List bills with due_date in a window (default = unpaid only)
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Create a new contact (person or business) with ALL its channels and address in one call.
Fetch the full body and metadata of a single email by message_id.
Record a new bill / recurring expense
Create a new calendar event in Yorik's local calendar
Attach a postal address (home, work, billing, shipping) to an existing contact.
Attach a channel (email, phone, whatsapp, signal, sms, website, social) to a contact.
Based on SOC occupation classification
| name | check_bills |
| description | List bills with due_date in a window (default = unpaid only) |
| when_to_use | - Briefing template needs a per-day or per-period bills section - User asks "what bills are due this week / tomorrow" - For "how much is the X bill" / "when is X due" — call `find_bill_by_name` first, it returns the row to you; this skill only renders cards. NOT for "find me a Rechnung / invoice / scanned bill PDF" — that's a document search; route to `search_documents`. The word "Rechnung" in German means both "bill" (this skill, a row in Yorik's bills table) AND "invoice" (a scanned document, search_documents territory). When the user wants to OPEN / READ / SEE the document, prefer search_documents — even if a bills row also exists, the user is asking about the PDF, not the calendar reminder. |
| inputs | {"start_iso":{"type":"string","required":false,"description":"ISO date or datetime. Only bills with due_date >= this are included."},"end_iso":{"type":"string","required":false,"description":"ISO date or datetime. Only bills with due_date <= this are included."},"include_paid":{"type":"boolean","required":false,"default":false,"description":"Set true to also return already-paid bills (e.g. for the yesterday recap)."}} |
| outputs | {"bills":{"type":"array","description":"Each row has id, name, amount, currency, due_date, recurring, paid, email_message_id, document_id.\ndocument_id (when set) points to the scanned PDF in the documents store — pass it to read_document(doc_id=document_id) when the user wants to see the actual bill.\n"},"count":{"type":"integer"}} |
| tags | ["bills","list","read"] |
| permissions | ["admin","member","restricted"] |
Read-only date-bounded query against the bills table. Returns the same shape briefing_routes' BillsList renderer expects.
Reply ONE short sentence with the count; do NOT enumerate bills in prose — the cards/briefing row are the answer.
A row from this skill is a scheduled / expected payment, not proof that a bill document exists. A row with document_id set has a scan; a row with document_id null has only the table entry. Never describe a row as "the bill" without checking whether it has a document_id — the user thinks of "Rechnung" as the PDF, not the table row.
If document_id is set, call read_document(doc_id=document_id) and answer from that text. If document_id is null, call search_documents with the bill name + amount + due date as the query before answering. If search_documents returns nothing relevant, say plainly that the bill is scheduled but no scan is on file yet — do not surface an unrelated document as if it were the bill.