Generate monthly R&D time allocation for the accounting spreadsheet. Use when asked to 'fill in R&D', 'R&D tracking', 'accounting spreadsheet', or 'time tracking for accounting'.
Generate monthly time allocation percentages per engineer for the R&D accounting spreadsheet.
Pull Asana tasks and OOO data for a target month, group them into spreadsheet-compatible project categories, and output percentage allocations per engineer. The output maps directly to columns in the spreadsheet.
Update these values when team composition or Asana structure changes.
Team: Catalog (Manager: Alex Oliveira)
| Engineer | Country | Asana GID |
|---|---|---|
| Vinicius Barboza | Brazil | 1199708178186870 |
| Victor Antoniazzi | Brazil | 1204547985434746 |
| Victor David Santos | Brazil | 1200341780572475 |
| Julie Mao | US | 1205266575630349 |
| Julie Miller | US | 1207919732271562 |
| Filipe Costa | Brazil | 1204163251557610 |
Asana IDs:
| Resource | GID |
|---|---|
| Workspace | 752389237742425 |
| Team Catalog board | 1201647585774820 |
| Support rotation schedule | 1211885557232421 |
| Support tickets board | 1198207191493787 |
Run date to get today's date. The target month is the previous calendar month unless the user specifies otherwise. If ambiguous, ask using AskUserQuestion. Confirm with the user: "Generating R&D tracking for [Month Year]. Correct?"
Compute: month_start (first day) and month_end (last day) of the target month.
Before any data gathering, verify that both Asana and Notion are accessible. Do NOT use subagents for this step (Asana MCP calls can hang indefinitely inside subagents). Run the checks directly:
mcp__asana__asana_typeahead_search with workspace 752389237742425, query "Vinicius", resource_type user. This is a fast call that confirms Asana connectivity. Do NOT use asana_search_tasks for the check (it can hang).mcp__notion__notion-search for "Engineering Calendar" with content_search_mode: "workspace_search". CRITICAL: You MUST use workspace_search mode. The default ai_search mode returns empty results. The Engineering Calendar database ID is 21e266b7-da09-43ab-a307-efe19b4943d8. Then call mcp__notion__notion-fetch with that ID to confirm read access.If either service fails: STOP IMMEDIATELY. Report which service is inaccessible and do not proceed. The user must fix access before continuing. Do not attempt to generate a report with partial data, as the output will be unreliable (non-capitalizable percentages will be wildly inflated without Notion OOO data).
If any engineer GID in the config above is "TBD", use mcp__asana__asana_typeahead_search to look up each engineer by name in workspace 752389237742425, resource_type user. Once verified, tell the user to update this file with the correct GIDs so future runs skip this step.
Spawn one Opus subagent per engineer in parallel. Each subagent receives:
references/project-mapping.md in this skill directory)references/holidays-and-ooo.md in this skill directory)Each subagent must:
Search Asana tasks using mcp__asana__asana_search_tasks:
workspace: 752389237742425assignee_any: engineer's GIDmodified_on.after and modified_on.before with the month boundaries.opt_fields: name,completed,completed_at,created_at,assignee.name,projects.name,parent.name,permalink_urlDetect support rotation by searching project 1211885557232421 for assignments to this engineer in the target month. Also search project 1198207191493787 for support tickets assigned to them.
Search Notion for OOO (each subagent searches independently for resilience). Use mcp__notion__notion-fetch with the Engineering Calendar database ID 21e266b7-da09-43ab-a307-efe19b4943d8 to get calendar entries. Alternatively, use mcp__notion__notion-search with query matching the engineer's name AND content_search_mode: "workspace_search" (NEVER use ai_search mode, it returns empty). Look for entries matching this engineer in the target month. Extract: date range, type (PTO, holiday, medical, offsite). If a Notion call fails, retry up to 2 times before reporting the failure.
Check the public holiday list for the engineer's country in references/holidays-and-ooo.md. Count working days lost to holidays.
Categorize each task using the mapping rules in references/project-mapping.md:
Calculate percentages per the rules below.
Return structured data:
After all subagents return:
Present flagged items first. Ambiguous project mappings, tasks that need a new column, edge cases. Resolve these with the user BEFORE showing the final tables.
Per-engineer detail sections with:
Spreadsheet-ready summary table using EXACT column names from the spreadsheet:
| Engineer | [Project Col 1] | [Project Col 2] | ... | Non Capitalizable |
|---|---|---|---|---|
| Vinicius Barboza | 45% | 35% | ... | 10% |
Each row should sum to ~100%.
| Engineer | PTO | Holidays | Support Rotation | Total Non-cap |
|---|---|---|---|---|
Save the full report to ~/work/core/ai-notes/r&d-tracking-{month}-{year}.md (e.g., r&d-tracking-jan-2026.md).
~/work/core/ai-notes/ for column name consistency. Read the most recent r&d-tracking-*.md file before assembling output.max_turns to 15 for subagents that call Asana tools to prevent hanging.After each run, the user may provide corrections like:
When this happens, update references/project-mapping.md with the correction so future runs use it automatically.
references/project-mapping.md - Task-to-column mapping rules and known projectsreferences/holidays-and-ooo.md - Public holidays by country, OOO detection logic~/work/core/ai-notes/r&d-tracking-jan-2026.md (January 2026 for format reference)