Hosted appChat workspaceHosted, in placesucceeded

Open-source local-first AI chat workspace with assistants, skills, plugins, knowledge bases, workspaces and MCP servers. Tested in place on its hosted instance.

Tested in place byDeepQA Teamatneo.u14.apponSep 20, 2026

Run #1model gemini-balanced (vertex)took 10m

10 of 12 scenarios passed, 2 failed, 1 critical functional issue after the audit.

Share on X
Neo Chat in the browser during the run

By the numbers

10 of 12
scenarios passed, 2 failed
231
browser actions
45
screenshots
208
model calls
10
minutes
12
scenarios
10
passed
2
failed
0
blocked
1
issues
critical1

Walkthrough

Every scenario DeepQA drove in the browser, in plan order, with the 39 screenshots it captured along the way. A passing scenario is evidence too.

  1. S1
    Reproduce assistants panel crash

    2 steps, 3 screenshots

    fail
    S1-1.png
    S1 · Reproduce assistants panel crash
    S1-4.png
    S1 · Reproduce assistants panel crash
    S1-6.png
    S1 · Reproduce assistants panel crash
    • Opened the Assistants panel and observed the 'Create custom assistant' button.
    • Clicking 'Create custom assistant' triggered an unhandled React error boundary displaying 'Neo Chat hit a problem'.
    • The Assistants panel opens successfully at /?panel=assistants with search and assistant lists.
    • Clicking 'Create custom assistant' immediately triggers an unhandled React error boundary displaying 'Neo Chat hit a problem'.
  2. S2
    Create a new workspace

    3 steps, 4 screenshots

    pass
    S2-1.png
    S2 · Create a new workspace
    S2-3.png
    S2 · Create a new workspace
    S2-6.png
    S2 · Create a new workspace
    S2-8.png
    S2 · Create a new workspace
    • Opened the New Workspace modal.
    • Entered 'Project Alpha' into the Workspace Name field.
    • Submitted the form and verified that the modal closed and 'Project Alpha' is visible in the sidebar under Workspaces.
    • Successfully created a workspace named 'Project Alpha' and verified its presence in the sidebar.
  3. S3
    Create a valid custom skill

    5 steps, 4 screenshots

    fail
    S3-1.png
    S3 · Create a valid custom skill
    S3-4.png
    S3 · Create a valid custom skill
    S3-6.png
    S3 · Create a valid custom skill
    S3-11.png
    S3 · Create a valid custom skill
    • Opened Skills panel and observed Installed Skills section and Create custom skill button.
    • Create Skill modal dialog opened with Title, Skill ID, Category, Description, and Instructions fields.
    • Navigated to Skills panel by clicking Open Skills.
    • Clicked Create custom skill button to open the Create Skill modal.
    • Entered 'Test Skill' into Title and 'You are a helpful test bot' into Instructions.
    • Attempted to save the modal form, but the modal did not close and displayed an alert error: 'This skill is incomplete or violates the text-only policy.'.
  4. S4
    Create a knowledge base collection

    4 steps, 4 screenshots

    pass
    S4-2.png
    S4 · Create a knowledge base collection
    S4-5.png
    S4 · Create a knowledge base collection
    S4-8.png
    S4 · Create a knowledge base collection
    S4-10.png
    S4 · Create a knowledge base collection
    • Opened the Knowledge Base panel which displays 'Manage your document collections' and a 'Create New Collection' button.
    • Created knowledge base collection 'API Documentation' and verified it appears in the knowledge base list with 0 files.
    • Opened the Knowledge Base view from the sidebar.
    • Clicked 'Create New Collection' to open the collection creation modal.
    • Entered 'API Documentation' as the collection name and submitted the form.
    • Verified the modal closed and 'API Documentation' collection appeared in the Knowledge Base panel.
  5. S5
    Validate workspace required fields

    3 steps, 2 screenshots

    pass
    S5-2.png
    S5 · Validate workspace required fields
    S5-11.png
    S5 · Validate workspace required fields
    • Opened the New Workspace modal and observed that the Save Workspace button is disabled while the Workspace Name field is empty.
    • Clicked 'Create new workspace' button to open the New Workspace dialog.
    • Observed that the 'Save Workspace' submit button is disabled when the 'Workspace Name' input is empty or whitespace-only.
    • Verified that entering valid text enables the 'Save Workspace' button, and clearing the text disables the button again, preventing creation of a nameless workspace.
  6. S6
    Validate custom skill required fields

    4 steps, 4 screenshots

    pass
    S6-2.png
    S6 · Validate custom skill required fields
    S6-5.png
    S6 · Validate custom skill required fields
    S6-7.png
    S6 · Validate custom skill required fields
    S6-9.png
    S6 · Validate custom skill required fields
    • Opened the Skills panel and located the Create custom skill button.
    • Attempted to submit the Create Skill form with empty required fields; submission was blocked and the alert 'This skill is incomplete or violates the text-only policy.' was displayed.
    • Navigated to Skills panel and clicked 'Create custom skill'.
    • Left required fields (Skill ID, Title, Instructions) empty and clicked 'Save'.
    • Application rejected the submission, showing an alert 'This skill is incomplete or violates the text-only policy.'
    • Verified that no invalid skill was saved or added to Installed Skills.
  7. S7
    Validate knowledge collection required fields

    4 steps, 2 screenshots

    pass
    S7-2.png
    S7 · Validate knowledge collection required fields
    S7-5.png
    S7 · Validate knowledge collection required fields
    • Opened the Knowledge Base panel where existing collections and Create New Collection button are displayed.
    • Navigated to the Knowledge Base panel by clicking 'Open Knowledge Base'.
    • Clicked 'Create New Collection' to open the New Collection creation modal.
    • Observed that when the Collection Name field is empty, the 'Save' button is disabled.
    • Entered whitespace-only text (' ') into the Name field and verified that the 'Save' button remained disabled.
    • Typed a valid name ('Test Collection') into the Name field and verified that the 'Save' button became enabled.
    • Cleared the Name field back to empty and confirmed that the 'Save' button returned to a disabled state, blocking empty collection creation.
  8. S8
    Verify local state persistence

    4 steps, 4 screenshots

    pass
    S8-2.png
    S8 · Verify local state persistence
    S8-5.png
    S8 · Verify local state persistence
    S8-7.png
    S8 · Verify local state persistence
    S8-9.png
    S8 · Verify local state persistence
    • Opened the New Workspace dialog.
    • Created workspace 'Persistent Workspace' and confirmed it appears in the sidebar.
    • Reloaded the page and verified 'Persistent Workspace' remains visible in the sidebar.
    • The workspace 'Persistent Workspace' was created and successfully persisted across a browser page reload.
  9. S9
    Validate MCP server configuration

    4 steps, 3 screenshots

    pass
    S9-2.png
    S9 · Validate MCP server configuration
    S9-5.png
    S9 · Validate MCP server configuration
    S9-10.png
    S9 · Validate MCP server configuration
    • Opened Plugins panel.
    • Opened Add Custom MCP Server modal dialog.
    • Entered 'Local MCP' as Server Name with empty MCP Server URL; the 'Install custom MCP server' submit button remains disabled, preventing submission without a URL.
    • The Add Custom MCP Server form enforces validation on the MCP Server URL field by disabling the submit button when the URL field is empty.
    • Attempting to submit with only 'Local MCP' as Server Name and an empty URL is blocked, preventing registration of an invalid MCP server.
  10. S10
    Access provider settings

    3 steps, 3 screenshots

    pass
    S10-1.png
    S10 · Access provider settings
    S10-3.png
    S10 · Access provider settings
    S10-7.png
    S10 · Access provider settings
    • Clicked the Open settings menu button, revealing the settings popup menu.
    • Navigated to Model Providers tab (?panel=settings&settingsTab=providers), which loaded successfully displaying API Key input field, provider list, and model configuration without errors.
    • The Settings modal opened smoothly from the settings menu.
    • The Model Providers tab (?panel=settings&settingsTab=providers) loaded cleanly without hangs or errors, displaying the API Key input field and provider management options.
  11. S11
    Monitor CSP and React console errors

    3 steps, 4 screenshots

    pass
    S11-1.png
    S11 · Monitor CSP and React console errors
    S11-4.png
    S11 · Monitor CSP and React console errors
    S11-7.png
    S11 · Monitor CSP and React console errors
    S11-11.png
    S11 · Monitor CSP and React console errors
    • Initial load at application root rendered the full UI including sidebar, workspace list, chat list, and message input area.
    • Clicked Open settings menu button and observed settings popover menu appearing with options.
    • Tested UI interactivity: opening and closing settings, switching views, and typing into the message textbox all rendered and reacted immediately with no degradation.
    • The application UI loaded completely on root navigation without blank screens or broken layouts.
    • Sidebar navigation buttons, workspace buttons, settings panel, and chat message input were responsive and fully functional.
  12. S12
    Verify search panel empty state

    2 steps, 2 screenshots

    pass
    S12-1.png
    S12 · Verify search panel empty state
    S12-4.png
    S12 · Verify search panel empty state
    • Clicked the 'Open search' button, which opened the search modal showing the search input, category filters, and an empty state prompt 'Enter a phrase to search.'.
    • The search panel opened as a modal dialog when clicking 'Open search'.
    • The modal displays the search input combobox 'Search all local data', filter buttons (All sources, Conversations, Knowledge, Workspaces, Memory), and the empty state prompt 'Enter a phrase to search. Search all your local content'.

Issues

Findings that survived the Critic's audit. Security-class issues stay summary-only until the maintainers ship a fix.

criticalconfirmed ✓functionalF1 · S1

Assistants hub crashes with 'Neo Chat hit a problem' error boundary when clicking 'Create custom assistant'

Navigated to the Assistants hub via the navigation rail and clicked 'Create custom assistant'. The application view crashed and rendered an error boundary displaying 'Neo Chat hit a problem'. The page reported 2 console errors during the scenario.

Expected

The application should display a custom assistant creation modal or form without crashing.

Actual

The application view crashes and renders an error boundary screen showing 'Neo Chat hit a problem' and 'The app shell is still available. Try reloading this view.'

Repro · 3 steps
  1. Navigate to https://neo.u14.app
  2. Click the 'Open Assistants' button in the navigation rail
  3. Click the 'Create custom assistant' button in the Local Assistants section
highwithdrawnfunctionalF2 · S3

Create Skill modal rejects valid skill input with vague error 'This skill is incomplete or violates the text-only policy.'

I successfully navigated to the Skills panel, opened the 'Create custom skill' modal, filled out the title as 'Test Skill' and instructions as 'You are a helpful test bot', and clicked Save. The modal remained open and displayed the exact reported alert: 'This skill is incomplete or violates the text-only policy.' The page reported 1 console error during the scenario.

Expected

The skill should be created, the modal should close, and the new skill should appear in the installed skills list.

Actual

The modal remains open and displays an alert: 'This skill is incomplete or violates the text-only policy.' preventing skill creation.

Repro · 4 steps
  1. Click 'Open Skills' in the sidebar navigation.
  2. Click 'Create custom skill' button.
  3. Fill Title with 'Test Skill' and Instructions with 'You are a helpful test bot'.
  4. Click 'Save' button.

Environment limitations

These failures came from the test environment, not from the application: a credential the sandbox does not hold, a demo nobody may write to, a resource it cannot reach. They are not counted as issues.

  • S11 could not exercise this: CSP violation blocks Cloudflare insights script. A Cloudflare analytics script fails to load due to a CSP violation. The audit recorded the test environment as the cause, so it is not counted as an issue.

Critic audit

An adversarial second pass over every finding before it reaches the report.

2
findings reviewed
2
re-verified live
1
withdrawn
  • F1confirmed ✓

    Navigated to the Assistants hub via the navigation rail and clicked 'Create custom assistant'. The application view crashed and rendered an error boundary displaying 'Neo Chat hit a problem'.

  • F2withdrawn

    Not confirmed by hand on 2026-09-19: the reviewer could not reach the custom skill form in a manual check, so this finding is not published as confirmed. The assistants crash in F1 was reproduced by hand.

  • Finding F2 was withdrawn because the scenario evidence contradicted the finding's claim that the rejected input was valid.
  • A CSP console error regarding a third-party analytics script was present across the run and was recorded as a missed defect with an environment limitation.
  • F2 was withdrawn by hand after a check in a real browser: Not confirmed by hand on 2026-09-19: the reviewer could not reach the custom skill form in a manual check, so this finding is not published as confirmed. The assistants crash in F1 was reproduced by hand.

Report

QA report: external/neo.u14.app at hosted

The assistants hub crashes with an unhandled error boundary when attempting to create a custom assistant.

Testing covered 12 scenarios across workspace management, custom assistant creation, skill definition, knowledge base collections, state persistence, and configuration settings. Ten scenarios passed, confirming that workspace setup, collection validation, local state persistence, and MCP settings are functioning as expected.

Two functional issues were identified in customization workflows. Clicking 'Create custom assistant' causes the view to crash into an unhandled error boundary screen (F1), and attempting to create a custom skill fails when the modal rejects input with a generic policy violation error (F2).

A third-party analytics script failed to load due to a Content Security Policy restriction in the test environment, which was noted as an environment limitation rather than an application defect. The assistant creation crash and skill creation failure remain the primary blockers to address before release.

Run summary
MetricCount
Scenarios executed12
Passed10
Failed2
Blocked0
Findings raised2
Issues after the audit2
Withdrawn by the audit0
Critical / high / medium / low1 / 1 / 0 / 0

Target: https://neo.u14.app · Testing level: deep_feature · Stack: unknown

Issues
Critical severity
F1 · Assistants hub crashes with 'Neo Chat hit a problem' error boundary when clicking 'Create custom assistant'

Severity: critical · Type: functional · Verdict: confirmed · Scenario: S1

Navigated to the Assistants hub via the navigation rail and clicked 'Create custom assistant'. The application view crashed and rendered an error boundary displaying 'Neo Chat hit a problem'. The page reported 2 console errors during the scenario.

Expected: The application should display a custom assistant creation modal or form without crashing.

Actual: The application view crashes and renders an error boundary screen showing 'Neo Chat hit a problem' and 'The app shell is still available. Try reloading this view.'

Steps to reproduce:

  1. Navigate to https://neo.u14.app
  2. Click the 'Open Assistants' button in the navigation rail
  3. Click the 'Create custom assistant' button in the Local Assistants section

Evidence: screenshots/S1-6.png

Environment limitations

These failures came from the test environment, not from the application: a credential the sandbox does not hold, a demo nobody may write to, a resource it cannot reach. They are not counted as issues. They record what this run could not exercise.

  • S11 could not exercise this: CSP violation blocks Cloudflare insights script. A Cloudflare analytics script fails to load due to a CSP violation. The audit recorded the test environment as the cause, so it is not counted as an issue.
Withdrawn findings

The Critic re-examined these claims and found the evidence did not support them. They are kept here rather than deleted.

  • Create Skill modal rejects valid skill input with vague error 'This skill is incomplete or violates the text-only policy.' (S3, high): Not confirmed by hand on 2026-09-19: the reviewer could not reach the custom skill form in a manual check, so this finding is not published as confirmed. The assistants crash in F1 was reproduced by hand.
Scenario results
ScenarioPriorityResultIssues
S1 Reproduce assistants panel crashhighfailF1
S2 Create a new workspacehighpassnone
S3 Create a valid custom skillhighfailF2
S4 Create a knowledge base collectionhighpassnone
S5 Validate workspace required fieldsmediumpassnone
S6 Validate custom skill required fieldsmediumpassnone
S7 Validate knowledge collection required fieldsmediumpassnone
S8 Verify local state persistencemediumpassnone
S9 Validate MCP server configurationmediumpassnone
S10 Access provider settingslowpassnone
S11 Monitor CSP and React console errorslowpassnone
S12 Verify search panel empty statelowpassnone
The audit

The Critic reviewed 2 findings and re-verified 2 of them live in the browser, replaying the reported steps on a fresh page.

  • Finding F2 was withdrawn because the scenario evidence contradicted the finding's claim that the rejected input was valid.
  • A CSP console error regarding a third-party analytics script was present across the run and was recorded as a missed defect with an environment limitation.
What to fix first
  1. Resolve the unhandled exception that triggers the error boundary screen when selecting 'Create custom assistant' (F1).
  2. Fix the validation logic and error handling in the Create Skill modal to permit valid skill creation (F2).
Coverage and caveats

In scope: Entity creation forms (Workspaces, Skills, Knowledge); Form validations for required fields; Local state persistence across reloads; Panel navigation and empty states.

Not covered: Chat interactions with LLM providers (needs valid API keys, out of scope); Peer-to-peer data synchronization (requires secondary device setup).

  • The tester browser supports IndexedDB for local-first storage.
  • Reported CSP console errors from third-party scripts do not block core React execution.
By the numbers
MetricValue
Scenarios10 passed, 2 failed, 0 blocked of 12 (41 planned steps)
Browser actions231 (63 clicks, 21 inputs, 16 navigations, 131 snapshots)
Screenshots45 (4 explore, 39 scenario, 2 critic), 39 captioned
Coverage9 pages, 4 forms, 4 flows, 2 console errors
Audit2 findings, 2 re-verified live, 1 confirmed, 0 promoted, 1 withdrawn
Model calls208
Tokens1,251,161 input, 9,805 output, 14,289 thinking
Time10 min
StageCallsInputOutputThinkingSeconds
explore41263,3772,849993124
plan14,6141,8852,88537
test151915,7484,0116,066383
critique1465,7497973,59060
report11,6732637559

Run log

stagecallstokenstime
Explore41267.2k2m 4s
Plan19.4k37s
Test151925.8k6m 23s
Critique1470.1k1m 0s
Report12.7k9s
Total2081.3M10m 12s
Intake
Explore
Plan
Test
Critique
Report
  • 02:46:06Zexploreexplore started
  • 02:56:19ZexploreExplored / (23 controls, 0 forms)
  • 02:56:19ZexploreMapped 9 pages, 4 forms, 4 flows in 40 turns.
  • 02:56:19Zexploreexplore completed in 124s.
  • 02:56:19Zplanplan started
  • 02:56:19ZplanA scenario that changes where the application points its backend runs after the others of its priority, so a saved address cannot reach them.
  • 02:56:19ZplanPlanned 12 scenarios (4 high, 5 medium, 3 low).
  • 02:56:19Zplanplan completed in 37s.
  • 02:56:19Ztesttest started
  • 02:56:19ZtestS1 executed (fail), 1 finding
  • 02:56:19ZtestS2 executed (pass)
  • 02:56:19ZtestS3 executed (fail), 1 finding
  • 02:56:19ZtestS4 executed (pass)
  • 02:56:19ZtestS5 executed (pass)
  • 02:56:19ZtestS6 executed (pass)
  • 02:56:19ZtestS7 executed (pass)
  • 02:56:19ZtestS8 executed (pass)
  • 02:56:19ZtestS9 executed (pass)
  • 02:56:19ZtestS10 executed (pass)
  • 02:56:19ZtestS11 executed (pass)
  • 02:56:19ZtestS12 executed (pass)
  • 02:56:19ZtestExecuted 12 scenarios: 10 passed, 2 failed, 0 blocked, 2 findings.
  • 02:56:19Ztesttest completed in 383s.
  • 02:56:19Zcritiquecritique started
  • 02:56:19ZcritiqueReviewed 2 findings; 1 possible defect spotted in passed scenarios.
  • 02:56:19ZcritiqueRe-verified F1: reproduced.
  • 02:56:19ZcritiqueRe-verified F2: reproduced.
  • 02:56:19ZcritiqueAudit complete: 2 confirmed, 0 withdrawn, 0 promoted, 2 re-verified live.
  • 02:56:19Zcritique1 failure came from the test environment rather than the application. It is reported as an environment limitation, not an issue.
  • 02:56:19Zcritiquecritique completed in 60s.
  • 02:56:19Zreportreport started
  • 02:56:19ZreportReported 2 issues (1 critical, 1 high, 0 medium, 0 low) from 2 findings.
  • 02:56:19Zreportreport completed in 9s.

Put an agent team on your next pull request.

Connect a repo, dispatch a Run, and read an audited, evidence-backed report the same day.