diff --git a/_skill-index.md b/_skill-index.md index 6fcebb6..562db8f 100644 --- a/_skill-index.md +++ b/_skill-index.md @@ -24,6 +24,7 @@ description: Master index of all skills in your robot assistant system. Your ass | "add a task," "create a task," "what's on my plate," "show today's tasks," "mark that done," "delete that task," "what's due," "upcoming tasks" | **vikunja-tasks** | | "run system diagnostic," "audit my skills," "check system health," "skill audit," "health check" | **system-diagnostic** | | "write a POV doc," "create a proof of value document," "POV criteria," "proof of concept criteria," "generate a POC document" | **pov-doc** | +| "submit an expense," "navan expense," "file an expense," "upload receipt" | **navan-expense** | --- @@ -101,6 +102,12 @@ description: Master index of all skills in your robot assistant system. Your ass **File:** `skills/system-diagnostic/SKILL.md` **Dependencies:** None +### Navan Expense +**Purpose:** Submit work expenses through Navan via Okta SSO using Chrome browser control. Uploads receipts to Navan's AI expense chat, reviews OCR-parsed data, corrects the expense category if needed, and submits for approval. +**Triggers:** "submit an expense," "navan expense," "file an expense," "upload receipt" +**File:** `skills/navan-expense/SKILL.md` +**Dependencies:** Chrome browser with active Okta session (verkada.okta.com) + --- ## Adding New Skills diff --git a/navan-expense/.env.example b/navan-expense/.env.example new file mode 100644 index 0000000..80e4214 --- /dev/null +++ b/navan-expense/.env.example @@ -0,0 +1,2 @@ +# Navan Expense Skill Configuration +# No credentials required - uses Okta SSO via browser session. diff --git a/navan-expense/.gitignore b/navan-expense/.gitignore new file mode 100644 index 0000000..4c49bd7 --- /dev/null +++ b/navan-expense/.gitignore @@ -0,0 +1 @@ +.env diff --git a/navan-expense/SKILL.md b/navan-expense/SKILL.md new file mode 100644 index 0000000..a05f62a --- /dev/null +++ b/navan-expense/SKILL.md @@ -0,0 +1,76 @@ +--- +name: navan-expense +description: | + Submit work expenses through Navan via Okta SSO using Chrome browser control. + + Triggers when user mentions: + - "submit an expense" + - "navan expense" + - "file an expense" + - "upload receipt" +--- + +# Navan Expense Submission + +Submits work expenses through Navan (Verkada's expense system) by navigating Okta SSO and using Navan's AI expense chat to upload receipts and fill out expense forms. + +## Quick Usage (Already Configured) + +### Submit an expense with a receipt + +The user will provide: +1. A receipt image file (full local path) +2. The expense category (e.g., "Traveling: other", "Traveling: meals for myself") + +### Flow + +1. **Navigate to Okta** - Go to `https://verkada.okta.com` and wait for the dashboard to load +2. **Open Navan** - Click the "Navan" app link. It opens in a new tab. Switch to that tab via `list_pages` and `select_page`. +3. **Go to Expense page** - The travel home page loads first. Navigate directly to `https://app.navan.com/app/liquid/user/home` +4. **Click "New transaction"** - This opens a menu with options. Click "Add receipts" (uid will vary). +5. **Use AI chat** - A beta AI expense chat dialog appears. Click "Generate with AI" to open the chat interface. +6. **Upload receipt** - Click the "Attach file" button inside the iframe, then use `upload_file` to upload the receipt image. +7. **Send receipt** - Click the Send button to process the receipt via OCR. +8. **Wait for processing** - Wait for text like "receipt processed successfully" to appear (can take up to 30s). +9. **Review parsed data** - The AI will show: merchant, amount, date, location, expense type, GL code, etc. +10. **Correct expense type** - If the AI picks the wrong category, type a correction in the chat: e.g., "Change the expense type to Traveling: other" and send it. Wait for confirmation. +11. **Check with user** - Show the parsed expense details and confirm before submitting. +12. **Submit** - When approved, click the "Submit this expense" button. Wait for "Success!" heading. + +## Key URLs + +| Page | URL | +|------|-----| +| Okta Dashboard | `https://verkada.okta.com` | +| Navan Travel Home | `https://app.navan.com/app/user2/home?tripType=corporate` | +| Navan Expense | `https://app.navan.com/app/liquid/user/home` | + +## Common Gotchas + +- **Okta verification delay**: Okta may show a "Verifying your identity" page for a few seconds. Use `wait_for` with a generous timeout. +- **Navan opens in new tab**: Clicking the Navan app from Okta opens it in a new browser tab. Always check `list_pages` and use `select_page` to switch. +- **Travel home loads first**: The direct Navan SSO link lands on the travel booking page, not expenses. Navigate directly to the expense URL. +- **"New transaction" menu is a dropdown**: Clicking it reveals options like "Add receipts", "Type in details", etc. Don't assume it navigates directly. +- **AI chat lives in an iframe**: The expense chat is inside an iframe. Snapshots need to traverse into it. The iframe's RootWebArea is accessible in the a11y tree. +- **OCR can take 10-30 seconds**: After uploading and sending a receipt, the AI needs time to process. Use a 30s timeout on `wait_for`. +- **Expense type may be wrong**: The AI categorizes automatically but can miss. Always ask the user to confirm and correct via chat. +- **Date parsing**: The AI reads the receipt date. The screenshot filename date (e.g., 20260402) may differ from the transaction date on the receipt itself. Trust the OCR, not the filename. +- **No credentials needed**: Everything goes through the existing browser Okta session. No API keys or env vars required. + +## Input Requirements + +From the user you need: +1. **File path** to the receipt image (e.g., `/Users/connor.rhodes/Downloads/Screenshot_20260402-101332.png`) +2. **Expense category** (e.g., "Traveling: other") +3. **Any corrections** to the AI-parsed data before submission + +## Expense Categories (Verkada/Navan) + +Common categories seen in the system: +- Traveling: other +- Traveling: meals for myself +- Traveling: taxi & rideshare +- Airfare & fees +- Lodging +- Distance Driven +- Personal Professional Development