MSP AI Resource Hub · Knowledge Base
TL Agent Intake Form
Relay · Request Pipeline · v1.0 · Audited
Internal structured intake form for submitting AI agent build requests through the Relay / Gate / Deploy pipeline. Proxy-ready wiring applied. This KB covers tool purpose, architecture, every panel, all config fields, exact API endpoints, known limitations, and the proxy activation checklist.
Demo Mode Active ⬡ Relay Review ⬡ Gate Approval ⬡ Deploy Build Proxy Pending
01 · Overview

What Is This Tool

The TL Agent Intake Form is a four-step wizard embedded in the MSP AI Resource Hub. It provides a structured, validated pathway for any team member or client lead to submit an AI agent build request without needing to understand the underlying technical stack.

Completed submissions are serialized into a JSON payload and routed to the Relay pipeline — a three-stage review process that enforces viability checks (Relay), security sign-off (Gate), and build authorization (Deploy). When proxy is live, the payload is POST'd to a local server; in DEMO mode it is held in memory and presented in the summary view for manual copy.

The form inherits the MSP AI Resource Hub design system: JetBrains Mono, Exo 2, Inter, dark background #020406, with the same topbar nav pull from ../nav.js as all sibling pages. A static fallback nav is rendered in the HTML and overridden at runtime by nav.js.

Purpose
Capture structured agent requests and route through Relay / Gate / Deploy approval chain
Current State
DEMO mode — submissions held in-memory. POST endpoint activates when proxy is live.
Nav Integration
Pulls nav.js from parent directory. Fallback static nav rendered if script is absent.
02 · Integration Status

Integration Status

Integration Direction Status Notes
Local Proxy POST Outbound Activates When Proxy Live POST /api/intake/submit — payload delivery to pipeline backend
nav.js Parent Nav Inbound Live Loaded via script src="../nav.js" — static fallback renders if absent
Draft Recovery Endpoint Outbound Activates When Proxy Live GET /api/intake/drafts/:userId — not yet implemented server-side
Status Polling Endpoint Outbound Activates When Proxy Live GET /api/intake/status/:reqId — planned, not yet live
Clipboard Copy Client-only Live navigator.clipboard — works in all modern browsers over HTTPS/localhost
CW Manage CSAT N/A No Endpoint CW Manage does not expose a CSAT API. Relay review status must be tracked manually.
03 · Architecture

Architecture & Data Flow

The intake form is a single-file, self-contained HTML page. It shares the MSP AI Resource Hub parent directory structure and inherits navigation from ../nav.js. No external JS framework is used. All state is held in script-scope variables — no localStorage, no sessionStorage.

01
User Fills Steps 1–4
Client-side validation fires on each "Next" click. Required fields enforce presence; email validated via regex. No data leaves the browser during form fill.
02
buildPayload() Serializes State
All form values are collected into a typed JSON object including reqId (generated client-side), ISO timestamp, and all field values. Systems list merges checkbox selections and free-text "Other" entry.
03
DEMO / LIVE Branch in submitForm()
LIVE_MODE flag gates behavior. DEMO: 900ms simulated delay, then summary render. LIVE: real fetch() POST to /api/intake/submit. On network failure, error banner is shown with proxy diagnostic.
04
populateSummary() Renders Result
Form and progress rail are hidden; summary panel is shown. Routing panel displays Relay / Gate / Deploy stages. Gate flag is set red if PII = Yes.
05
startAutoRefresh(30000) Polls Status
Fires every 30 seconds. DEMO: no-op. LIVE: calls GET /api/intake/status/:reqId to refresh pipeline state in routing panel. Endpoint is planned but not yet live.

LIVE_MODE Flag

// tl-agent-intake.html — top of <script> const LIVE_MODE = false; // flip to true when proxy is running const PROXY_BASE = 'http://localhost:3000'; const SUBMIT_URL = PROXY_BASE + '/api/intake/submit';
Architecture Note
The tool is intentionally stateless between sessions. No localStorage is used — this is by design to avoid stale drafts leaking between users on shared machines. Draft recovery (loadDashboard) will hydrate from the server-side endpoint when proxy is live.
04 · Panels

Step 1 · Requester Info

Captures the identity and organizational context of the person submitting the request. Used for routing notifications and Relay contact if more information is needed.

FieldRequiredValidationNotes
Full NameRequiredNon-empty stringFree text; no format enforcement
DepartmentRequiredNon-empty stringHelps Relay route to correct team lead
EmailRequiredRegex: /^[^\s@]+@[^\s@]+\.[^\s@]+$/Used for Relay notification (when live)
Client / AccountOptionalNoneIf blank, displays "None specified" in summary
04 · Panels

Step 2 · Agent Brief

Core description of what the requested agent should do. Designed for non-technical language — Relay translates the brief into a technical spec during viability review.

FieldRequiredNotes
Agent Name / Working TitleRequiredBecomes the identifier for the request through the pipeline
DescriptionRequiredPlain-language description — no jargon required
Expected Output / Success MetricOptionalQuantifiable outcome if known; displayed in summary
Trigger Type (pill select)RequiredSingle-select: Manual, Scheduled, Event-Driven, User Message, Webhook, Unknown
Design Note
Trigger pill selection is enforced at validation time. Selecting "Not Sure Yet" is a valid option — it signals to Relay that discovery is needed before technical spec can be written.
04 · Panels

Step 3 · Systems & Integrations

Multi-select checklist of every platform the agent needs to interact with. All selections feed directly into Gate's security review. The phase tags (PH1, PH2, PH3, Core) indicate rollout priority in the platform integration roadmap.

CategorySystemsPhase Tags
Endpoint & NetworkNinja RMM, CW Automate, Auvik, Meraki, FortiGatePH1 / PH2
Security PlatformsSentinelOne, Huntress, RocketCyber, Duo, Mimecast, Cisco Umbrella, KeeperPH1 / PH2
Backup & BCDRAcronis, Axcient, Cove, Datto, StorageCraftPH2 / PH3
Business OperationsConnectWise PSA, BrightGauge, IT Glue, Hudu, Liongard, ScalePad, M365/Teams, SharePointPH1 / PH2 / PH3 / Core
Other / CustomFree-text field — comma-separatedN/A

Step 3 has no required validation — it is valid to proceed with zero systems selected if the agent's system dependencies are unknown at intake time. Gate will flag this during review.

04 · Panels

Step 4 · Risk & Priority

Determines Gate routing severity and Relay sequencing. Both fields are required before submission is allowed.

FieldOptionsEffect
PII / Sensitive DataYes / NoYes: sets Gate flag in summary, displays warning banner in routing panel. Mandatory Gate sign-off before Deploy.
PriorityHigh / Medium / LowHigh: immediate pipeline slot. Medium: next sprint cycle. Low: backlog / Phase 2+.
Additional NotesOptional textareaCompliance notes, data residency, dependencies — surfaced in summary for Gate review
Gate Flag Behavior
When PII = Yes, the routing panel renders: ⚠ Gate Flag: This request involves PII or sensitive data. Gate sign-off is mandatory before Deploy can proceed. This is rendered client-side only in DEMO mode. When live, this flag should also be passed in the POST payload to trigger a server-side Gate notification.
04 · Panels

Summary & Routing Panel

Rendered after a successful submission (DEMO or LIVE). The form and progress rail are hidden; the summary panel replaces them. It contains a generated Request ID, timestamp, full data review grid, and a pipeline routing visualization.

Request ID Format
REQ-YYYYMMDD-NNNN
Generated client-side. Server may re-assign a canonical ID on successful POST.
Copy Summary Button
Formats full request as plain-text block and writes to clipboard. Works in DEMO and LIVE mode. Essential fallback when proxy is offline.
New Request Button
Calls resetForm() — clears all fields, resets step nodes, re-shows form. Does not affect any server-side state.
Submission Error Banner
Visible only in LIVE mode when POST fails. Instructs user to copy summary manually. Shows proxy endpoint and contact guidance.
05 · Configuration

Config Fields

All configuration is at the top of the <script> block in the HTML file. No separate config file exists.

VariableDefaultEffect When Changed
LIVE_MODEfalsetrue = real fetch POST; mode badge switches to green LIVE; loadDashboard() and refreshAll() activate
PROXY_BASEhttp://localhost:3000Base URL for all proxy endpoints. Update to match your local or remote proxy address.
SUBMIT_URLPROXY_BASE + '/api/intake/submit'Derived — do not edit directly; change PROXY_BASE instead
Activating Live Mode
Set LIVE_MODE = true at the top of the script block. Ensure your proxy is running and the /api/intake/submit endpoint returns HTTP 200 or 201 on success. The mode badge in the topbar will switch from yellow DEMO to green LIVE automatically.
06 · API Endpoints

API Endpoints

All endpoints route through the local proxy at http://localhost:3000 (configurable via PROXY_BASE).

POST /api/intake/submit Proxy Required

Accepts the full serialized intake payload as JSON. Expected response: HTTP 200 or 201. Any non-2xx response or network error triggers the error banner. Payload schema: reqId, timestamp, name, email, department, client, agentName, description, outcome, trigger, systems[], pii, priority, notes.

GET /api/intake/drafts/:userId Not Yet Live

Called by loadDashboard() when LIVE_MODE = true. Intended to populate draft recovery for returning users. Endpoint not yet implemented server-side. Wire the response into a pre-fill routine when ready.

GET /api/intake/status/:reqId Not Yet Live

Polled every 30 seconds by startAutoRefresh(30000) in LIVE mode. Intended to return current Relay / Gate / Deploy stage for the submitted request and update the routing panel. Endpoint planned but not yet live.

Genuine Limitation
CW Manage has no CSAT endpoint. There is no ConnectWise Manage API endpoint that surfaces a CSAT or approval-status field suitable for Relay / Gate status polling. Pipeline review status must be tracked manually in the CW Manage ticket or a separate Relay queue. This is documented in the source code as a permanent limitation comment.
07 · Limitations

Documented Limitations

These are genuine architectural limitations, not implementation gaps. They are also documented as comments in the source.

LimitationImpactWorkaround
No CW Manage CSAT endpoint Cannot auto-surface Relay / Gate review status from CW Track pipeline stage manually in CW ticket or separate Relay queue
Client-generated reqId Request ID is not server-authoritative in DEMO mode Server should re-assign canonical ID in POST response; client should display server-returned ID in LIVE mode
No persistent storage in browser In-progress drafts are lost on page reload Use Copy Summary before closing. Draft recovery endpoint (GET /api/intake/drafts) planned for LIVE mode.
nav.js is parent-relative If page is served from a different directory, nav will not load Static fallback nav renders correctly — no functionality lost, just dynamic menu items
Clipboard API requires HTTPS or localhost Copy Summary silently fails on non-secure origins Serve from localhost or HTTPS. Fallback: user can manually select and copy summary text.
08 · Operations

Proxy Activation Checklist

Complete all steps before flipping LIVE_MODE to true.

  • [ ]
    Local proxy server is running at http://localhost:3000 (or update PROXY_BASE to match actual address)
  • [ ]
    POST /api/intake/submit endpoint is implemented and returns HTTP 200 or 201 with a server-assigned reqId
  • [ ]
    CORS is configured on proxy to accept requests from the Hub's origin (or served same-origin)
  • [ ]
    Payload schema is accepted: reqId, timestamp, name, email, department, client, agentName, description, outcome, trigger, systems[], pii, priority, notes
  • [ ]
    Test POST with curl or Postman before enabling LIVE_MODE in the HTML
  • [ ]
    Set LIVE_MODE = true in the script block and reload the page
  • [ ]
    Confirm mode badge in topbar shows green LIVE label
  • [ ]
    Submit a test request end-to-end and verify payload arrives at proxy
  • [ ]
    (Optional) Implement GET /api/intake/drafts/:userId for draft recovery, then wire into loadDashboard()
  • [ ]
    (Optional) Implement GET /api/intake/status/:reqId for pipeline status polling, then enable refreshAll() response handling
09 · Troubleshooting

Troubleshooting

Error banner shown after submit

Cause: LIVE_MODE = true but proxy is not reachable or returned a non-2xx response. Fix: Confirm proxy is running at PROXY_BASE. Check browser network tab for the failed POST. Use error banner message to confirm endpoint URL. In the interim, use "Copy Summary" to preserve the request.

Nav bar shows fallback static links

Cause: ../nav.js is not found at the relative path. Fix: Ensure the file is served from the correct subdirectory with nav.js one level up. Check browser console for 404 on nav.js. Static fallback nav remains fully functional.

Copy Summary does nothing

Cause: Page is served over HTTP (not HTTPS or localhost). The Clipboard API requires a secure context. Fix: Serve from localhost or over HTTPS. Alternatively, the user can manually select and copy the text from the summary panel.

Form validation not clearing after correction

Cause: field-error class is applied per-field and only removed on the next goTo() validation pass. Fix: This is expected behavior. Fix the field value and click Next again — validation re-runs on navigation.

reqId duplicates on rapid re-submit

Cause: Client-side reqId uses random 4-digit suffix with date prefix. Collision probability is low but non-zero. Fix: In LIVE mode, the server should return a server-authoritative ID and the client should use that for display and polling. The client-generated ID is a fallback for DEMO mode only.

Systems selection not appearing in summary

Cause: No sys-item elements have the .selected class at time of submit. This is valid — Step 3 has no required validation. Fix: Summary will display "No systems selected." Gate will flag this during review. No action needed unless systems were intended to be selected.

Support Path
For issues not covered here, check the browser developer console (F12) for JavaScript errors. All fetch failures are caught and logged with console.warn(). Proxy connectivity issues will surface there. For pipeline routing questions, contact the Relay team lead directly.