Skip to main content

Web UI for deepagents — AI-powered workspace with streaming, file browser, and canvas

Project description

Cowork Dash

Web UI for LangGraph and deepagents agents. Provides a chat interface with real-time streaming, a workspace file browser, and a canvas for visualizations.

Cowork Dash

Stack: Python (FastAPI + WebSocket) backend, React (TypeScript + Vite) frontend.

Features

  • Chat with real-time token streaming via WebSocket
  • Tool call visualization — inline display of arguments, results, duration, and status
  • Rich inline content — HTML, Plotly charts, images, DataFrames, PDFs, and JSON rendered directly in the chat
  • Canvas panel — persistent report surface for charts, tables, diagrams, images, and narrative markdown. Opt-in via CanvasMiddleware; auto-detected by the UI.
  • File browser — workspace file tree with syntax-highlighted viewer and live file change detection
  • Task tracking — sidebar todo list with progress bar, synced with agent write_todos calls
  • Human-in-the-loop — interrupt dialog for reviewing and approving agent actions
  • Slash commands/save-workflow, /create-workflow, and /run-workflow with autocomplete
  • Print / export — print conversations via browser Print dialog with optimized CSS
  • Token usage — cumulative counter with per-turn breakdown chart
  • Authentication — optional HTTP Basic Auth for all endpoints
  • Theming — light, dark, and system-auto modes
  • Customization — title, subtitle, welcome message, agent name, and custom icon

Installation

pip install cowork-dash

Quick Start

From Python

from cowork_dash import CoworkApp

app = CoworkApp(
    agent=your_langgraph_agent,  # Any LangGraph CompiledGraph
    workspace="./workspace",
    title="My Agent",
)
app.run()

From CLI

# Point to a Python file exporting a LangGraph agent
cowork-dash run --agent my_agent.py:agent --workspace ./workspace

# With options
cowork-dash run --agent my_agent.py:agent --port 8080 --theme dark --title "My Agent"

Shorthand

from cowork_dash import run_app

run_app(agent=your_agent, workspace="./workspace")

Enabling the Canvas

The canvas is opt-in. Attach CanvasMiddleware to your agent and the Canvas tab appears in the UI automatically:

from deepagents import create_deep_agent
from cowork_dash import CoworkApp
from cowork_dash.middleware import CanvasMiddleware

agent = create_deep_agent(
    tools=[...],
    middleware=[CanvasMiddleware()],   # <-- adds canvas tools + report guidance
    ...
)

CoworkApp(agent=agent, workspace="./workspace").run()

The middleware injects five tools (add_to_canvas, update_canvas_item, remove_canvas_item, add_canvas_section, reorder_canvas) and appends report-building instructions to the system prompt at each model call. Canvas items persist to .canvas/canvas.md in the workspace.

To force the tabs on/off regardless of middleware: --show-canvas/--no-show-canvas, --show-files/--no-show-files, or the Python-API show_canvas / show_files kwargs.

Configuration

Configuration priority: Python args > CLI args > environment variables > defaults.

Option CLI Flag Env Var Default
Agent spec --agent DEEPAGENT_AGENT_SPEC Built-in default agent
Workspace --workspace DEEPAGENT_WORKSPACE_ROOT .
Host --host DEEPAGENT_HOST localhost
Port --port DEEPAGENT_PORT 8050
Debug --debug DEEPAGENT_DEBUG false
Title --title DEEPAGENT_TITLE Agent's .name or "Cowork Dash"
Subtitle --subtitle DEEPAGENT_SUBTITLE "AI-Powered Workspace"
Welcome message --welcome-message DEEPAGENT_WELCOME_MESSAGE (empty)
Theme --theme DEEPAGENT_THEME auto
Agent name --agent-name DEEPAGENT_AGENT_NAME Agent's .name or "Agent"
Icon URL --icon-url DEEPAGENT_ICON_URL (none)
Auth username --auth-username DEEPAGENT_AUTH_USERNAME admin
Auth password --auth-password DEEPAGENT_AUTH_PASSWORD (none — auth disabled)
Save workflow prompt --save-workflow-prompt DEEPAGENT_SAVE_WORKFLOW_PROMPT (built-in)
Run workflow prompt --run-workflow-prompt DEEPAGENT_RUN_WORKFLOW_PROMPT (built-in, use {filename})
Create workflow prompt --create-workflow-prompt DEEPAGENT_CREATE_WORKFLOW_PROMPT (built-in)
Show Canvas tab --show-canvas/--no-show-canvas DEEPAGENT_SHOW_CANVAS Auto — on when CanvasMiddleware is attached
Show Files tab --show-files/--no-show-files DEEPAGENT_SHOW_FILES true

Slash Commands

Type / in the chat input to access built-in commands:

Command Description
/save-workflow Capture the current conversation as a reusable workflow in ./workflows/
/create-workflow Create a new workflow from scratch — prompts for a topic description
/run-workflow Execute a saved workflow — shows an autocomplete dropdown of .md files from ./workflows/

All commands support inline arguments:

/save-workflow focus on the data cleaning steps
/create-workflow daily sales report pipeline
/run-workflow etl-pipeline.md skip step 3

The prompt templates behind each command are configurable via Python API, CLI flags, or environment variables (see Configuration table above).

Stream Parser Config

Control how agent events are parsed by passing stream_parser_config to CoworkApp:

app = CoworkApp(
    agent=agent,
    stream_parser_config={
        "extractors": [...],  # Custom tool extractors
    },
)

See langgraph-stream-parser for details.

Architecture

Browser  <--WebSocket-->  FastAPI  <--astream_events-->  LangGraph Agent
            /ws/chat         |
                        REST APIs:
                          /api/config
                          /api/files/tree
                          /api/files/{path}
                          /api/canvas/items

The frontend is pre-built and bundled into the Python package as static files. No Node.js required at runtime.

Development

# Backend
pip install -e ".[dev]"
pytest tests/

# Frontend
cd frontend
npm install
npm run build    # outputs to cowork_dash/static/
npm run dev      # dev server with hot reload (proxy to backend on :8050)

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cowork_dash-0.4.0.tar.gz (1.9 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cowork_dash-0.4.0-py3-none-any.whl (1.1 MB view details)

Uploaded Python 3

File details

Details for the file cowork_dash-0.4.0.tar.gz.

File metadata

  • Download URL: cowork_dash-0.4.0.tar.gz
  • Upload date:
  • Size: 1.9 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.15 {"installer":{"name":"uv","version":"0.11.15","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for cowork_dash-0.4.0.tar.gz
Algorithm Hash digest
SHA256 da5e63aa82cdda1c899ff21792f4d816dbc33cf714e708436e7f4db91b47f02f
MD5 2c20aa6e36e0b3be187fd43c2491eec4
BLAKE2b-256 652f35daf8c9b896f54b0876142173d5e808c79bcbaa56199cb5f0a668ef0f76

See more details on using hashes here.

File details

Details for the file cowork_dash-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: cowork_dash-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.15 {"installer":{"name":"uv","version":"0.11.15","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for cowork_dash-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f1c440f6521df926fbb4f01d5035a8ef8e280224457e79e9d5c67cda5aa9f5a5
MD5 e174c5153bb5e67e9e8e67f1dfc6308c
BLAKE2b-256 24580b43cd83254f916cfd2e25bf80e69016639c344fa4fd4405a7cd17770648

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page