Help us improve
Share bugs, ideas, or general feedback.
From Remote.com
Create and download reports via tools for employers. Use when asked about reports, reporting library, report builder, payroll reports, exporting report data, CSV/XLS/XLSX downloads, filtered report runs, generated report files, or required report filters.
npx claudepluginhub remoteoss/remote-for-ai --plugin remoteHow this skill is triggered — by the user, by Claude, or both
Slash command
/remote:remote-reportingThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
**Required filters come from report building blocks.** Before creating a report run, call `get_report_building_blocks` for the selected report and set every required filter it identifies.
Guides technical evaluation of code review feedback: read fully, restate for understanding, verify against codebase, respond with reasoning or pushback before implementing.
Share bugs, ideas, or general feedback.
Required filters come from report building blocks. Before creating a report run, call get_report_building_blocks for the selected report and set every required filter it identifies.
Preview before running. Before creating a report run, call preview_report with the selected report template, filters, grouping, and sample size. Use the preview to verify the report shape and adjust fields, grouping, or filters before calling create_report_run.
Always render the preview as a full markdown table for the user. Do not summarise it, do not truncate columns, do not show a few sample rows — show every row returned by preview_report with every column from the template. If the table is wide, render it wide; the user needs to see the actual shape before approving the run. Follow the preview table with a single short line summarising what they're looking at (period, filters, row count) so they can decide whether to run it.
Vocabulary: A report is a data_export_template. A report run is a data_export.
Never expose internal mechanics to the user. The user should never need to know about base64 decoding, data URIs, tool scoping limits, response truncation, or pagination quirks. Handle all of that silently. If something fails, retry with the documented workaround before surfacing anything to the user. The only time to surface a mechanics-level problem is when the user must take action in the UI (e.g. paste a slug from the URL).
list_reports — Start here for reporting questions. Use category when the user names a domain, for example category=payroll for payroll reports. Prefer published_to=reporting_library unless the user asks for customer-created reports.list_reports)get_report — Fetch one report template before creating a run when the user names a specific report.get_report_building_blocks — Inspect fields, variables, and required filters for the template. Call this before every preview_report and create_report_run.get_report_filter_schema — Inspect allowed filters and field names when building filtered report runs.get_report_filter_values — Resolve valid values for a filter field before passing filters to a report run.preview_report — Preview a sampled result before creating a report run. Call this before every create_report_run unless the user explicitly asks to skip preview.legal_entity_slug — Resolve from employer_resolve_legal_entity_by_name when the user gives a legal entity name. Use list_employer_legal_entities when listing or narrowing entities by country, status, payroll status, active services, or partial query.payroll_run_slug / payroll slug — Resolve from list_unified_payroll_runs. Filter by legal entity, country, payroll period, or status when the user gives that context. Use get_payroll_run only after choosing a specific payroll run from the list.get_report_filter_values for the required field. If it returns values, choose from those. If it requires another domain object, resolve that object with the relevant list/get tool before creating the report run.create_report_run or list_report_runs)get_report_run — Inspect a report run, including validation errors if file generation fails.poll_report_run_download — Start or poll async file generation. Poll until status is file_creation_completed.poll_report_run_download)download_file — Download the generated report file after poll_report_run_download returns file_slug."List reports"
list_reports.category when the user names a domain, for example payroll, billing, or another available category.published_to=reporting_library."List payroll reports"
list_reports with category=payroll.published_to=reporting_library unless the user asks for customer-created reports."Create/run a report for X"
list_reports to resolve the template. Use category=payroll when the user asks for payroll. If the report the user named does not exist, tell them clearly and show what is available.get_report_building_blocks for the chosen template and identify required filters.list_unified_payroll_runs (or the relevant domain-list tool) for that window first. If it returns zero rows, do not run an empty report — surface the nearest periods that do have data and offer them as alternatives (recommend the closest match first).employer_resolve_legal_entity_by_name or list_employer_legal_entitieslist_unified_payroll_runs, then get_payroll_run if neededget_report_filter_schema to map required filters to valid filter field names and operators.get_report_filter_values.required_filters from get_report_building_blocks only flags the toggle (e.g. calculate_variance). You must also set the two period brackets (variance_period_1_start/end + variance_period_2_start/end) or the two run slugs (variance_payroll_run_1 + variance_payroll_run_2). Without them, the report is empty. The user will not name these — infer them from their period (e.g. "March variance" → period 2 = March, period 1 = February).preview_report with the template slug, optional sample size, grouping choices, and all required or user-requested filters.preview_report again.create_report_run with the template slug, report name, optional format, grouping choices, and all required filters."Download/export this report"
create_report_run, list_report_runs, or get_report_run.poll_report_run_download.status is file_creation_in_progress, wait briefly and call poll_report_run_download again with the same slug and format.status is file_creation_completed, call download_file with file_slug.download_file returns a data URI, not raw file bytes. Response shape: {"data":{"content":"data:text/csv;base64,<base64>"}}. Strip the data:<mime>;base64, prefix and base64-decode the rest to get usable CSV / XLSX bytes. Save the file somewhere the user can access (e.g. ~/Downloads/<sensible-name>.csv) and tell them the path. Never paste raw base64 or the data URI back at the user.status is file_creation_failed, call get_report_run and explain the validation errors from the report run.poll_report_run_download is asynchronous for MCP: it returns JSON status, not the file bytes.file_slug is only available after status is file_creation_completed.get_report_building_blocks are set and preview_report has shown the expected shape.get_report_filter_schema, then resolve values with get_report_filter_values when available.report = data_export_template and report run = data_export in explanations so users understand whether you are talking about the reusable template or one generated file.These are real, observed failure modes of the underlying tools. Handle them transparently — the user should never have to know they exist unless action on their side is genuinely required.
get_report / get_report_building_blocks are incomplete for variance / comparison reportsSymptom. data_source_config.required_filters only flags a single toggle filter (e.g. calculate_variance: true), but running the report with just that toggle produces empty or meaningless output.
Cause. The toggle gates the variance fields; the actual period boundaries are not marked required even though the report needs them.
Handling.
variance_period_1_start, variance_period_1_end, variance_period_2_start, variance_period_2_end — or the equivalent run-slug pair variance_payroll_run_1 + variance_payroll_run_2.Symptom. User asks for a month or quarter; list_unified_payroll_runs for that window returns 0.
Handling.
list_unified_payroll_runs by period and tally by month).Symptom. Tools like list_unified_payroll_runs, download_file, or unfiltered list_* calls can return responses big enough that the harness saves them to a file instead of returning them inline.
Handling.
fields parameter on list endpoints to project only what you need (e.g. ["payroll_runs", "total_count"] plus a few inner fields). This is the cheapest mitigation.page_size: 50 rather than asking for everything at once.python3 -c "..." via Bash. Do not paste large file contents into a Read tool — slice by character range or load via json.load.download_file returns a data URISymptom. Response is {"data":{"content":"data:text/csv;base64,<...>"}}, not raw CSV.
Handling.
import json, base64
raw = open(tool_output_path).read()
content = json.loads(raw)['data']['content']
prefix = 'data:text/csv;base64,' # or data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64, for xlsx
csv = base64.b64decode(content.split(',', 1)[1]).decode('utf-8')
open('/Users/<user>/Downloads/<name>.csv', 'w').write(csv)
Save to ~/Downloads/<sensible-name>.<ext> and tell the user the path. Never paste the data URI or raw base64 in the response.
preview_report, every column from the template. One short caption underneath (period, filter summary, row count). No "first N shown" truncation.<slug> if you want to revisit it in the UI"). Slugs are agent-internal.list_reports or get_report.create_report_run, list_report_runs, or get_report_run.get_report_building_blocks for the selected template.get_report_building_blocks and get_report_filter_schema (variable_path or field name shown by the schema).employer_resolve_legal_entity_by_name when the user gives a name; otherwise from list_employer_legal_entities.list_unified_payroll_runs; use legal entity, country, period, or status filters to narrow the list.poll_report_run_download once status is file_creation_completed.