Preface¶
DeepSeek Harness (hereinafter referred to as DSH) is an open-source agent runtime developed by DeepSeek, with the slogan “Everything is a plugin”: models, tools, skills, and interfaces can all be loaded into the same process as plugins. The official repository is currently in developer preview, and its interfaces are subject to change. The community also maintains a plugin directory site for retrieving third-party plugins; this site has no official affiliation with DeepSeek / Fangfang (Huifang) and should not be treated as an official app store.
It is already common for agents to write code and look up information, but when it comes to delivering a complete lecture—complete with slides, simulators, and interactive sessions—users often have to switch to other products. The dsh-openmaic maintained by the THU-MAIC team at Tsinghua University was developed to fill this gap: it integrates OpenMAIC into DSH, allowing agents to generate lecture-ready links during conversations and render slides, interactive components, and teaching cards in-place.
This article is cross-verified based on the plugin directory page, the GitHub repository’s README, package.json, source code, and the official DeepSeek Harness repository. The installation commands are based on the original text from the directory page, and the web profile installation method recommended by the repository will be noted separately.
What is This¶
dsh-openmaic is a plugin for DeepSeek Harness, maintained by THU-MAIC, licensed under MIT, and primarily written in JavaScript. Its npm package name is @openmaic/dsh-openmaic, and the current version in the repository’s package.json is 0.4.0. The community directory categorizes it under “Models and Providers”. As of the GitHub API query on 2026-08-17, the repository had 13 stars; the directory page still shows 8 stars, which is more like a snapshot taken at the time of inclusion. The GitHub repository was created on 2026-08-13, which matches the latest push time shown on the directory page.
OpenMAIC stands for Open Multi-Agent Interactive Classroom. According to openmaic.io and THU-MAIC/OpenMAIC, it is an open-source teaching platform developed by the THU-MAIC team at Tsinghua University: given a topic or document, it can generate an interactive classroom complete with slides, quizzes, and simulators. dsh-openmaic does not embed the full OpenMAIC suite into DSH; instead, it does two things: first, it submits generation requests to https://open.maic.chat, waits for the asynchronous task to complete, and returns a playable classroom link; second, it allows agents to generate slide JSON, interactive components, and HTML snippets according to the OpenMAIC SDK conventions, and renders them in-place in DSH conversations using the official renderer.
Core Features¶
The repository’s README states that the plugin registers four tools and one Socratic teaching skill. This matches the dsh.plugin.json and dshx.contributes field in package.json.
1. openmaic_generate: Generate a lecture-ready link in one sentence
When a user says “Help me create a lecture on XX”, the agent submits the teaching requirements to open.maic.chat, polls the asynchronous task, and returns the Classroom ID and playable classroom URL once successful. The optional parameters in the source code include:
- language: zh-CN or en-US
- enableWebSearch / enableImageGeneration / enableVideoGeneration / enableTTS
- agentMode: default or generate
The system prompt requires that these optional switches are only passed when explicitly requested by the user, and the classroom URL should be returned to the user as a bare link upon success.
2. openmaic_slide: Render a single OpenMAIC slide
The agent first loads the openmaic-slide skill, writes a PPTist-style Slide JSON (viewportSize, viewportRatio, and elements such as text, image, shape, chart, code, latex, table, etc.), then calls the tool. The plugin uses the official OpenMAIC renderer to draw the slide, supporting rendering of text, shapes, images, tables, charts, formulas, and code. This is for a single slide, not an entire courseware export.
3. openmaic_widget: Stream interactive components and render them as inline cards
Designed for simulators, games, or runnable code challenges. The agent writes a complete HTML document according to the bundled contract, with the code displayed in real-time during writing, and rendered as a sandbox card in the conversation once completed. Currently supported widgetType values are simulation, game, and code. The README’s roadmap also mentions diagram, visualization3d, and procedural-skill, which are not yet implemented and should not be treated as delivered features.
4. openmaic_render: Render teaching HTML snippets as sandbox cards
Used for concept cards, quizzes, and step-by-step explanations. The input is an inline HTML snippet (markup + style + optional script) without a full document skeleton. The source code sets a maximum single-snippet size of 256 KB. The return value for the model is just a confirmation line to avoid re-injecting the snippet into the context; the browser side replays the same card using persisted meta data.
5. openmaic-teach skill: Socratic teaching
Turns the current conversation into an OpenMAIC lesson focused on question-guided learning, and calls the aforementioned slides, components, and cards as teaching aids as needed. package.json also contributes three writing contract skills: openmaic-render, openmaic-widget, and openmaic-slide, for the model to load before first calling the corresponding tools.
One important boundary to clarify: openmaic_generate calls a remote (or self-hosted) OpenMAIC service; openmaic_slide / openmaic_widget / openmaic_render do not perform server-side generation, they only render content written by the agent according to the @openmaic/dsl, @openmaic/generation, and @openmaic/renderer specifications.
Installation and Activation¶
The installation command given on the directory page is:
dsh plugin add github:THU-MAIC/dsh-openmaic
For reproducible installations, the directory page recommends pinning the commit hash:
dsh plugin add github:THU-MAIC/dsh-openmaic#commit
Replace #commit with the actual commit SHA. The repository’s README provides the following command for the Web UI profile:
dsh plugin --profile web add git+https://github.com/THU-MAIC/dsh-openmaic.git
Then restart dsh web and refresh the page. The README notes that the repository already includes the compiled lib/ directory, so no build steps are required when installing via Git. The dsh.client.platform field in package.json is web, meaning the client side is intended for the web interface.
The configuration items match the defaults in the README and source code:
dsh-openmaic:
baseUrl: https://open.maic.chat
accessCode: "" # Invitation code; not enforced on the public instance yet, leave empty for now
pollIntervalMs: 5000
maxWaitMs: 600000
| Configuration Item | Default Value | Description |
|---|---|---|
baseUrl |
https://open.maic.chat |
API root address. Can be changed to http://localhost:3000 when connecting to a local OpenMAIC instance |
accessCode |
"" |
Invitation code for open.maic.chat. The README states that it is not enforced on the public instance yet, fill it in after enforcement is enabled |
pollIntervalMs |
5000 |
Polling interval (in milliseconds). Classroom generation is slow, and the README considers 60000 more friendly than the default value |
maxWaitMs |
600000 |
Maximum wait time for a single task, default is 10 minutes |
The timeout for openmaic_generate aligns with maxWaitMs. If a timeout occurs, the error returned by the source code will prompt that the classroom may still be generating in the background and can be checked later.
Typical Usage¶
The following two examples are from the repository’s README, and can be tested in DSH conversations in the same way.
Generate a lecture
User: Help me create an introductory course on quantum physics
Model → openmaic_generate(requirement="Introductory quantum physics course", language="zh-CN")
← "Classroom ID: class-abc123
Classroom URL:
https://open.maic.chat/classroom/class-abc123"
Model: The classroom has been generated, you can open it to start the lecture:
https://open.maic.chat/classroom/class-abc123
The actual ID and URL will be based on the service’s response. The generation flow is the same chain described in the README and src/client.ts:
1. If an accessCode is configured, first send a POST /api/access-code/verify request, then include the openmaic_access cookie in subsequent requests.
2. Send a POST /api/generate-classroom request with the requirement and any optional switches you pass in the body, and get back a jobId and pollUrl.
3. Send a GET {pollUrl} request repeatedly until the task succeeds (succeeded), fails (failed), or the maxWaitMs timeout is reached.
4. On success, return {baseUrl}/classroom/{classroomId} or the result.url provided by the service.
Create an interactive simulator
User: Create a projectile motion simulator
Model → Write the complete HTML following the openmaic-widget template (streaming output)
→ openmaic_widget(html="<!doctype html>…", widgetType="simulation", title="Projectile Motion")
← "Rendered the simulation widget …"
An interactive OpenMAIC simulator appears in-place in the conversation
The same logic applies to slides and teaching cards: first have the agent load the corresponding skill, then call openmaic_slide or openmaic_render respectively. For a complete playable lecture, use openmaic_generate; for an immediate slide or sandbox component in the conversation, use the latter three tools.
Applicable Scenarios and Notes¶
This plugin is suitable for the following situations:
- Preparing and rehearsing lessons in DSH, needing one-click generation of playable OpenMAIC classrooms.
- Wanting slides, formulas, and charts to appear directly in the conversation when explaining concepts, instead of just outputting Markdown.
- Needing embedded simulators or mini-games for physics, algorithms, and similar content.
- Wanting to use Socratic questioning to guide learning, and easily pulling up cards or slides for assistance.
There are several points to keep in mind before using:
The plugin runs with the permissions of the current DSH process, and may execute code during installation. Please inspect the source code repository and license before installing; for reproducible installations, pin the commit hash.
openmaic_generate depends on the availability of the service pointed to by baseUrl and queue length. The default points to the public site open.maic.chat, and classroom content is not generated locally in the DSH process. When self-hosting OpenMAIC, point baseUrl to your local machine; the main OpenMAIC repository uses AGPL-3.0, which is a different license from this plugin’s MIT, so review it separately before self-hosting.
As per the README, accessCode is “not enforced on the public instance” for now. Once the server enables validation, an empty string will not work, and you will need to fill in the invitation code.
Client-side rendering is for the Web UI. Slides, components, and cards appearing in the conversation depend on the browser side; do not expect “sandbox cards appearing in-place” in a pure terminal environment. The openmaic_widget renders the complete HTML written by the agent, and although it is in a sandbox card, it should still be treated as untrusted content.
The repository roadmap also plans to: complete the remaining widget types, and pass teaching actions (highlighting, annotations, revealing component elements) back to the model. These are future directions and are not available in the current version.
DSH itself is still undergoing rapid iteration, and the official README notes that breaking compatibility changes may occur. The plugin declares an engine requirement of dsh >= 0.0.1, but whether it can actually be loaded depends on your current Harness version.
Summary¶
dsh-openmaic integrates Tsinghua University THU-MAIC’s OpenMAIC into DeepSeek Harness: a single request can return a playable lecture link, and slides, simulators, and teaching cards written by agents can be rendered directly in conversations. It solves the gap of “agents can explain concepts, but cannot deliver a complete lecture”, rather than replacing the OpenMAIC platform itself.
Plugin Directory: https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-openmaic/
GitHub: https://github.com/THU-MAIC/dsh-openmaic