# Nuuk TMS
> Staff fleet TMS. Sign in is required. Write tools propose. Confirm applies a pending action in Nuuk or via `confirm_action` when it is still confirmable.
Do not invent VINs, treat trailers as trucks, or invent a confirmation token.
## Discovery
- [/llms.txt](/llms.txt): this brief
- [/llms.json](/llms.json): machine catalog of destinations, query keys, and DOM hooks
- [/.well-known/llms.txt](/.well-known/llms.txt): pointer for operators that look in well-known
- [/robots.txt](/robots.txt): Allow list pointing here
- HTML `` and `` on every page
## Destinations
Every signed-in staff page is operable. The page stays visible. The assistant docks beside it unless you are on `/assistant`.
Ask AI, the header assistant button, and the command palette write `mode=docked` (and `prompt` / `entity` when known) onto the **current** URL so the destination is shareable without leaving the page.
### Records
- [/loads](/loads) · [/loads/42](/loads/42): Loads. Detail infers `entity=load/42`.
- [/trips](/trips) · [/trips/7](/trips/7): Trips.
- [/list/drivers](/list/drivers): Drivers.
- [/accounting/invoices](/accounting/invoices): Invoices. Pass `?entity=invoice/9` (detail is a drawer).
- [/accounting/customers](/accounting/customers): Customers.
- [/trailers](/trailers): Trailers (not trucks).
- [/vehicle](/vehicle): Trucks only.
### Workspaces
- [/dispatch-board](/dispatch-board)
- [/integrations](/integrations)
- [/email-intake](/email-intake)
- [/fuel](/fuel)
- [/fleet/gps-trackers](/fleet/gps-trackers)
- [/maintenance](/maintenance)
- [/files](/files)
- [/accounting/driver-financials](/accounting/driver-financials)
- [/accounting/vendor-bills](/accounting/vendor-bills)
- [/accounting/credit-memos](/accounting/credit-memos)
- [/accounting/reports](/accounting/reports)
- [/payroll](/payroll)
- [/toll](/toll)
- [/accidents](/accidents)
- [/inventory](/inventory)
- [/documents](/documents)
- [/team](/team)
- [/sent-emails](/sent-emails)
- [/owner-dashboard](/owner-dashboard)
- [/collisions](/collisions)
- [/hr/applicants](/hr/applicants)
- [/accounting/deductions](/accounting/deductions)
- [/accounting/banking](/accounting/banking)
- [/compliance-matrix](/compliance-matrix)
- [/subscription](/subscription)
- [/audit-logs](/audit-logs)
- [/notification-settings](/notification-settings)
- [/cameras](/cameras)
- [/live-cameras](/live-cameras)
- [/video-library](/video-library)
- [/accounting/bank-accounts](/accounting/bank-accounts)
- [/accounting/reconciliation](/accounting/reconciliation)
- [/hr/documents](/hr/documents)
- [/hr/tasks](/hr/tasks)
- [/companies](/companies)
- [/users](/users)
- [/billing](/billing)
### Assistant
- [/assistant](/assistant): Dedicated chat workspace. `mode=agent` fills this page only.
- [/assistant?prompt=Diagnose%20this%20load&entity=load/42&mode=agent](/assistant?prompt=Diagnose%20this%20load&entity=load/42&mode=agent): Prefill. Does not send. Does not Confirm.
- [/loads/42?prompt=Diagnose%20this%20load](/loads/42?prompt=Diagnose%20this%20load): Same prefill on the load page. Page stays visible. `mode=agent` docks.
- [/assistant/settings](/assistant/settings): Staff MCP key.
Query `prompt`: composer text only (max 2000 characters).
Query `entity`: `load/{id}`, `trip/{id}`, `driver/{id}`, `invoice/{id}`, or `customer/{id}`. Not trailers or vehicles. On a detail URL the record is inferred when `entity` is omitted.
Query `mode`: `agent` fills `/assistant` only. On any other page it docks so the record stays usable.
Logged-out visits go to `/login?next=…` (same-origin only).
## MCP
- Endpoint: `{API}/api/agent/mcp` (streamable HTTP). POST JSON-RPC 2.0 (`initialize`, `tools/list`, `tools/call`, `resources/list`, `resources/read`). GET with `Accept: text/event-stream` opens the session stream.
- Auth: header `X-API-KEY: nuuk_mcp_…` or `Authorization: Bearer nuuk_mcp_…`. Company integration API keys cannot call this (401).
- Write tools return a pending action (60 minutes). Call `list_pending_actions` to recover `actionId` + `confirmationToken`, `reissue_action` to extend TTL, then `confirm_action` to apply or `reject_action` to discard. Do not invent a token.
- Page context: `set_page_context`, header `X-Nuuk-Pathname` / `X-Nuuk-Entity`, `describe_page`, or read `nuuk://pages/catalog` and `nuuk://context/current`.
- Files: `POST {API}/api/agent/mcp/files` (same MCP key, multipart field `file`) returns `companyFileId`. Pass that on propose tools. Fuel Confirm commits when headers match field names or you pass `mapping`.
## How to operate any page
- Current page: `[data-nuuk-region="main"][data-nuuk-page]`. Examples: `loads`, `load`, `trips`, `trip`, `invoices`, `integrations`.
- Current record: `[data-nuuk-entity]` such as `load:42` on the main column and on the assistant panel.
- Page title: `[data-nuuk-heading="page"]` (visible `h1` or sr-only heading).
- Header: `[data-nuuk-region="header"]`. Nav: `[data-nuuk-region="nav"]`.
- Sidebar leaf: `[data-nuuk-nav="loads"]` (path without a leading slash).
- List surface: `[data-nuuk-list]` values include `loads`, `trips`, `drivers`, `invoices`, `customers`, `trailers`, `vehicles`, `files`, `email-intake`, `locations`, `expenses`, `vendor-bills`, `fuel-transactions`, `fuel-cards`, `team`, `accidents`, `inventory`, `statements`, `deductions`, `sent-emails`, `documents`, `credit-memos`, `collisions`, `hr-applicants`, `hr-documents`, `hr-tasks`, `hr-applicant-documents`, `toll-transactions`, `toll-transponders`, `payroll-scheduled-payments`, `payroll-driver-balances`, `payroll-one-time-charges`, `payroll-one-time-credits`, `settlement-batches`, `driver-settlements`, `service-records`, `pm-schedules`, `service-types`, `maintenance-vendors`, `bank-accounts`, `bank-transactions`, `reconciliation-transactions`, `reconciliation-sessions`, `audit-logs`, `gps-trackers`, `billing-invoices`, `billing-payments`, `camera-devices`, `video-clips`, `dispatch-board`, `dispatch-planning`, `driver-financial-summary`, `invoice-batches`, `companies`, `users`, `ar-aging`, `ap-aging`, `top-customers-ar`, `financial-transactions`, `driver-loans`.
- List row: `[data-nuuk-row="load"][data-nuuk-entity="load:42"]`. Same pattern for trip, driver, invoice, customer. Other row types are click targets only — do not pass them as `entity=`.
- Page Ask AI: button name starts with "Ask AI about". Suggestion chips: `[data-nuuk-suggestion]`.
- Open assistant: button name starts with "Open assistant". Ask AI buttons use `[data-nuuk-ask="true"]`.
- Composer: textbox "Message to assistant".
- Send: "Send message". Enter sends; it does not auto-apply a proposal.
- Confirm a proposal: `[data-nuuk-region="action-card"] [data-nuuk-action="confirm"]`, or MCP `confirm_action` with that action's `actionId` and `confirmationToken`. Reject uses `data-nuuk-action="reject"` or MCP `reject_action`.
- Other regions: `assistant` | `composer` | `action-card` | `assistant-page` | `assistant-mcp-settings`.
## Docs
- [Assistant usage](/docs/guide/tms-agent): Propose → Confirm, page destinations, MCP.
- [Help Center](/docs/guide): Product guide index.
- [Getting started](/docs/guide/getting-started): Sign-in and navigation.
## Rules
- Staff roles only (same as `/api/agent/*`). Drivers cannot use the assistant.
- External agents may propose. Confirm applies only a pending, token-matched action owned by this staff user.
- Trailers are not trucks. `search_vehicles` is trucks only.
- Do not invent a CMV VIN. Confirm copy must stay honest.