{"id":52528,"plugin_id":"plugin_asdk_app_6acf71fcd9348191b432d98280f4b176","kind":"skill","collection_source":"plugin_package","comparison_source":null,"observed_at":"2026-10-24T13:50:09.503Z","digest":"2eee22a5dbd397123a238a003ca56dfa6a018c70e23a5839396382fbe997a121","against":null,"payload":{"description":"Build a weekly timesheet from TimeTackle - a person's hours per day and per project or tag for a week, with untagged time and days with little tracked time called out. Use when the user asks for their timesheet, what they worked on this or last week, or a weekly summary of their time.","included_files":[{"relative_path":"agents/openai.yaml","size_in_bytes":394}],"name":"weekly-timesheet","skill_md_contents":"---\nname: weekly-timesheet\ndescription: Build a weekly timesheet from TimeTackle - a person's hours per day and per project or tag for a week, with untagged time and days with little tracked time called out. Use when the user asks for their timesheet, what they worked on this or last week, or a weekly summary of their time.\n---\n\n# Weekly timesheet\n\nSummarize one person's week from their calendars. Explicit instructions from the user (which week, which person,\ngrouping, format) take priority over these steps.\n\n## Input\n\n- The week. If none is given, use the current week (Monday to Sunday) and say so; \"last week\" is the previous one.\n- The person: the connected user unless they name someone else.\n- Optionally the property to group by (for example Project); otherwise the top-level tags.\n\n## Steps\n\n1. Call `get_account` for the user's email and `syncRange`. If the week reaches outside the sync range, say so.\n2. Call `get_imported_calendars` and pick the person's calendars: those whose `user.email` is the person's email.\n   - For someone else, they must appear in the list; if they don't, say you cannot see their calendars and stop.\n   - Use the `timezone` of their calendar unless the user gave one, and say which one you used.\n3. Daily totals: call `get_meeting_analytics` with `measures: [\"hours\"]`, `groupBy: \"none\"`, `granularity: \"day\"`,\n   `meetingsOnly: false`, the week's `dateFrom` / `dateTo`, `timezone`, and `calendarIds` set to the person's calendars.\n4. Time by project or tag: call `get_meeting_analytics` with `measures: [\"hours\"]`, the same dates, timezone and\n   `calendarIds`, and either:\n   - `groupBy: \"primary_tag\"` (no `tagKey`) for hours per tag, including an UNTAGGED row; or\n   - the property the user named: find it with `get_properties` (`search`), then `groupBy` by its `state` and\n     `tagKey` set to its key.\n5. Optionally, for detail, call `get_events` with the person's `calendarIds`, the week's dates and `timezone` to list\n   the week's events by day (page with `page` if there are more).\n\n## Output\n\n- A day-by-day table: date, hours.\n- A table of hours per project or tag, with UNTAGGED as its own row when present.\n- The week's total hours, the exact dates and the timezone.\n- Call out days with no or very little tracked time, without assuming a standard working day unless the user gives\n  one. If untagged time is large, suggest tagging it in TimeTackle.\n- If a result has a `syncRangeWarning`, include it.\n\n## Do not\n\n- Do not invent events, projects or hours; report only what the tools return.\n- Do not judge the person's productivity; describe the time.\n- Do not create or change anything; to add missing time, the user can ask to log it.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}