Skip to content

Projects & Workspaces

Projects are the central organizing unit in OpenMLR. A project provides a persistent workspace where all research artifacts -- papers, code, data, notes, experiment logs, and a knowledge graph -- accumulate across multiple conversations.

Overview

ConceptDescription
ProjectA named research initiative (e.g., "Attention Mechanism Survey")
WorkspaceThe filesystem directory backing a project, stored in a Docker volume
Knowledge GraphA lightweight graph of entities and relationships, persisted as JSON
ConversationA chat session; multiple conversations can belong to one project

Key Principle: Workspace vs. Compute

The workspace and compute resource are decoupled:

  • Workspace (persistent, local): Always available. Stores all project files. Survives compute changes and new conversations.
  • Compute (swappable): Only used for code execution. Can be local Docker, SSH remote, or Modal cloud. Changing compute does not affect workspace files.

Creating a Project

Projects are mandatory -- every conversation must belong to a project. New users create their first project during onboarding (after selecting an LLM provider and model).

To create additional projects:

  1. Click the project selector dropdown in the header
  2. Click "New Project"
  3. Enter a name and optional description
  4. A workspace directory is created automatically, and a new conversation is started in the project

Workspace Directory Structure

.workspaces/
  my-project/
    code/                   # Scripts, notebooks, source code
    data/                   # Downloaded datasets
    models/                 # Trained models, checkpoints
    outputs/                # Experiment results, plots, figures
    papers/                 # Paper drafts (auto-saved by writing tool)
    research/
      searches/             # Saved search results (JSON)
      notes/                # Agent-generated research notes (.md)
      citations/            # Bibliography, references
    logs/
      tool_failures/        # Timestamped logs of failed tools/APIs
      compute/              # Compute probe results
      experiments/          # Experiment execution logs
    venvs/                  # Python virtual environments
    .project-meta/
      project.json          # Project metadata
      knowledge.json        # Knowledge graph (networkx JSON)
      state.json            # Cross-conversation state
      plans/                # Task plans per conversation

Knowledge Graph

Each project has a lightweight knowledge graph powered by networkx. The graph stores entities and their relationships, enabling cross-conversation knowledge accumulation.

Entity Types

TypeDescriptionExample
paperResearch paper"Attention Is All You Need"
conceptAbstract concept"Self-attention"
methodTechnique or algorithm"Multi-head attention"
datasetDataset"WMT 2014 EN-DE"
findingResearch finding"Attention outperforms RNNs on translation"
questionOpen research question"Does attention scale to 1B params?"
experimentExperiment run"BLEU comparison on WMT"
toolSoftware tool"PyTorch"
authorResearcher"Vaswani et al."
code_artifactCode implementation"transformer.py"

Relationship Types

RelationshipDescription
citesPaper cites another paper
proposesPaper proposes a method
implementsCode implements a method
evaluates_onExperiment uses a dataset
introducesPaper introduces a dataset
relates_toGeneral association
answersFinding answers a question
depends_onMethod/code depends on another
usesExperiment uses a method
producesExperiment produces a finding
contradictsFinding contradicts another
extendsMethod extends another

Agent Usage

The agent uses the workspace tool to interact with the knowledge graph:

workspace knowledge_add entity_id="attention-paper" entity_type="paper" label="Attention Is All You Need"
workspace knowledge_add entity_id="mha" entity_type="method" label="Multi-Head Attention"
workspace knowledge_relate source_id="attention-paper" target_id="mha" relationship="proposes"
workspace knowledge_summary   # Get full graph context

Cross-Conversation Persistence

When you start a new conversation within a project, the agent can:

  1. Read the knowledge graph summary to understand prior work
  2. Check recent tool failures to avoid known issues
  3. Review research notes from previous conversations
  4. Build on existing code and data in the workspace

This is powered by the .project-meta/state.json file, which tracks:

  • Key findings across conversations
  • Open research questions
  • Active experiments

File Tree

The right panel includes a Files tab (visible when a project is active) that shows the workspace directory tree. You can:

  • Browse directories
  • View file contents
  • See file sizes and types

Interactive Terminal

A terminal panel at the bottom of the screen provides a real shell connected to the project workspace directory. Use it for:

  • Quick file inspections
  • Running one-off commands
  • Interactive debugging
  • Package management

The terminal connects to the workspace directory regardless of which compute resource is selected.

Docker Volume

Project workspaces are stored in a Docker volume that persists across container rebuilds:

Development (docker-compose.yml):

yaml
volumes:
  workspaces:  # Named volume

Production (docker-compose.prod.yml):

yaml
volumes:
  - ${OPENMLR_WORKSPACES_PATH:-./.workspaces}:/app/.workspaces

For production, set OPENMLR_WORKSPACES_PATH in your .env to a bind mount location for easy backup.

API Reference

EndpointMethodDescription
/api/projectsGETList projects
/api/projectsPOSTCreate project
/api/projects/:uuidGETProject details
/api/projects/:uuidPUTUpdate project
/api/projects/:uuidDELETEArchive project
/api/projects/:uuid/conversationsGETList project conversations
/api/projects/:uuid/attach/:conv_uuidPOSTAttach conversation
/api/projects/:uuid/detach/:conv_uuidPOSTDetach conversation
/api/projects/:uuid/filesGETList workspace files
/api/projects/:uuid/files/:pathGETRead file
/api/projects/:uuid/files/:pathPUTWrite file
/api/projects/:uuid/files/:pathDELETEDelete file
ws://host/api/terminal/:uuidWSInteractive terminal