Preparing your environment ...

NetSuite Connection Required

{{ authError }}

{{ welcomeGreeting }}

{{ welcomeDateLine }} · Here's your business at a glance.

{{ config.labels?.settings || 'Settings' }}

Provider: {{ aiProvider.name || aiProvider.type || 'Not configured' }}

Current Model: {{ aiProvider.model || 'Not selected' }}

Choose the AI model for processing requests

Dashboard

How many pinned portlets can live on the dashboard at once.

Demo Mode

Fills the dashboard with polished sample portlets and matching conversations. Your real pins are hidden (not deleted) while it is on, and sample cards never contact NetSuite, so they can never show a connection or session error. Turn off to restore your own dashboard.

{{ userSettings.demoMode ? 'On — dashboard is showing sample data' : 'Off' }}

Company Branding

Sets the logo, name, and colours used across the app and in exported letterhead reports.

PNG, JPG, WEBP or SVG · max 3MB

Colours auto-fill from the logo on upload; Smart match refines them with AI.

{{ brandingForm.companyName || 'Company Name' }}
13 July 2026
Sample Report Title
Highlight
{{ brandingForm.error }} {{ brandingForm.success }}

Intelligence Profile

The learnable business context that sharpens answers over time — a business profile, industry brief and how-we-work notes, with drift detection that flags when a recurring question is not yet in your brief.

Coming next

Integrations

NetSuite
{{ netsuiteAuth.isAuthenticated ? 'Connected' : 'Not connected' }}

Xero, Microsoft Dynamics 365 and Workday connectors are in development.

Profile

{{ netsuiteAuth.currentUser && netsuiteAuth.currentUser.firstName ? netsuiteAuth.currentUser.firstName.charAt(0) : 'U' }}
{{ netsuiteAuth.currentUser ? netsuiteAuth.currentUser.firstName : 'User' }}
{{ config.companyName }}

Provider and API keys are configured via the config/providers.json file on the server.

Data Sources

Connect the systems TaskDrive AI reads from. NetSuite is your live source today; the rest are on the integration roadmap.

Oracle NetSuite
Account {{ netsuiteAuth.accountId || '—' }} · {{ netsuiteAuth.currentUser.firstName }} · Bundle role: TaskDrive AI
{{ netsuiteAuth.isAuthenticated ? 'Connected' : 'Not connected' }}
No integrations match your search.

Briefs

The business context TaskDrive AI uses to interpret every question. Edit any layer to sharpen your answers.

Profile drift detected

Your team asked about "{{ drift.term }}" {{ drift.count }} times in the last {{ drift.windowDays }} days, but it isn't in any brief yet. Adding it keeps answers consistent for this recurring topic.

Loading briefs…
{{ b.title }}
{{ b.description }}
{{ b.scope==='user' ? 'Personal' : 'Org' }}

{{ b.content }}

No context added yet.

{{ b.updatedAt ? 'Updated ' + formatTime(b.updatedAt) : 'Not set' }}

{{ config.labels?.conversations || 'Conversations' }}

Recent

{{ conversations.length ? 'No conversations match your search.' : 'No conversations yet' }}
{{ conv.title }}
{{ formatConvDate(conv.updatedAt) }}

{{ isEditMode ? 'Edit Item' : (showAddForm ? 'Add Entry' : (config.labels?.promptLibrary || 'Agent Studio')) }}

Access level: {{ (config.accessLevels.find(l => l.id === config.accessLevel) || {}).label || config.accessLevel }}
{{ promptTabs.find(t => t.k === promptTab).count === 0 ? 'No prompts in ' + promptTabs.find(t => t.k === promptTab).label + ' yet.' : 'No prompts match this category.' }}
{{ item.category || item.groupLabel }} {{ item.tier }} {{ item.access }}
{{ item.label }}
{{ item.description }}
{{ item.type === 'search' ? 'Saved Search' : 'Report' }} · {{ item.nsId }}
{{ promptLibrarySuccessMessage }}
No groups exist — add a group first.
{{ promptLibraryFormErrors.groupId }}
{{ promptLibraryForm.tier || 'user' }}
{{ promptLibraryFormErrors.label }}
{{ promptLibraryFormErrors.prompt }}
Something went wrong
{{ errorMessage }}
Done
{{ successMessage }}

{{ agentRun.title }}

live run
Running against live NetSuite data. This can take up to a minute.
{{ agentRun.error }}
{{ agentRun.loading ? '' : 'Read-only run. No records were modified.' }}

{{ confirmModal.title }}

{{ confirmModal.message }}

Fill in parameters

Pin to Dashboard

The prompt below re-runs against current data (daily on dashboard open, or on demand) and its latest result shows as a card.

Phrase timeframes relatively ("this week", "last 7 days") so every refresh uses the current timeline.

{{ pinModal.error }}

Save Conversation to {{ config.labels?.promptLibrary || 'Agent Studio' }}

{{ saveToPromptModal.error }}
{{ saveToPromptModal.success }}