Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added .github/images/kits/workplace-artifacts.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added .github/images/kits/workplace-group.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added .github/images/kits/workplace-hire.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
22 changes: 21 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ work.

## The kits

Five working products, each launched from **Starter Kits** in the HarnessRouter console. Launching
Six working products, each launched from **Starter Kits** in the HarnessRouter console. Launching
one provisions the Harness it needs and serves the app from the HarnessRouter image. There is no
separate service to deploy, no database to configure, and no API key to paste into the app.

Expand All @@ -48,6 +48,7 @@ separate service to deploy, no database to configure, and no API key to paste in
| **[Dashboards](./kits/dashboard)** | Live charts generated from questions about your database. |
| **[Videos](./kits/video)** | A storyboard, timeline, and exported film from one description. |
| **[Super Mario](./kits/mario)** | A live browser game controlled by a System One decision loop. |
| **[My Workplace](./kits/workplace)** | A team chat of AI teammates you hire by answering questions; they work together in groups. |

<a href="https://github.com/HarnessRouter/starter-kit" title="Star HarnessRouter Starter Kit on GitHub">
<picture>
Expand Down Expand Up @@ -138,6 +139,25 @@ control text.

<br>

### My Workplace: hire a team and put it in a room

A recruiter interviews you with a short questionnaire and installs the teammate it designs as a
Harness of its own, with a face, a role and a package of its own. Message a teammate one to one
in a conversation it remembers, or put several in a group: the mentioned answer first, the rest
judge whether a message needs them, and a plan's pieces go to the teammates whose roles fit. Files
one makes arrive in the next one's working directory, and whichever window has the group open
runs the replies, so nothing is lost when a tab closes.

<p align="center">
<img src=".github/images/kits/workplace-group.png" width="100%" alt="A My Workplace group: four AI teammates finishing a launch campaign for a client, every file they made in the details rail with who made it.">
<br>
<sub>Four teammates on the DeepSeek Harness with Claude Sonnet 5.5 deliver a launch campaign: brief, email, two images, posts and a schedule, then a review round.</sub>
</p>

**[Open the My Workplace kit →](./kits/workplace)**

<br>

All five are launched from one page in the console:

![The Starter Kits page in the HarnessRouter console](.github/images/kits/starter-kits-page.png)
Expand Down
4 changes: 4 additions & 0 deletions kits.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,10 @@
{
"name": "mario",
"include": true
},
{
"name": "workplace",
"include": true
}
]
}
87 changes: 87 additions & 0 deletions kits/workplace/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
# My Workplace

A team chat where every teammate is an AI agent with its own face and its own job. You hire one
by answering a few questions; you message it one to one, in a conversation it remembers; you put
several in a group where they answer when it is their turn, hand work to each other with
@mentions, browse the web in front of you, and leave what they make in a shared library.

![A group in My Workplace: four teammates finishing a launch campaign for a client, the copywriter and the social manager reporting their fixes to the strategist, every file they made in the details rail with who made it](../../.github/images/kits/workplace-group.png)

Launch it from **Starter Kits** in the HarnessRouter console. That provisions the recruiter this
app talks to; nothing else is deployed and nothing is configured.

## What is in the room

**The recruiter** is the one Harness the kit launches. It interviews you (three or four
multiple-choice questions, one more round at most) and writes the new teammate's profile: a name,
a face from the kit's own set of twelve, a tagline, a greeting and the instructions the teammate
works by. You can change the name and the face before the teammate joins.

![Hiring a teammate: the recruiter's questionnaire, multiple choice with a free answer on every question](../../.github/images/kits/workplace-hire.png)

**A teammate** is a Harness of its own, on the same base and model as the recruiter (the kit
recommends the DeepSeek Harness with Claude Sonnet 5.5), with the `harnessrouter-workplace-teammate`
package installed. The package carries the teammate's profile and the one Skill every teammate
shares: how direct messages and groups work here, when to stay quiet, how to @mention a colleague,
and that files saved in its working directory are shared. Every plugin your workspace has
connected (the browser, GitHub, Microsoft 365, and so on) is connected to the teammate when it is
hired; the package itself asks for the browser, and a workspace that has not connected the
browser yet gets it connected at the first hire.

**A direct message** is one session on the teammate's Harness, per person, forever. The first
message opens it; every message after is a turn on it, so the teammate's memory of you is the
conversation itself.

**A group** is one session on the recruiter's Harness whose workspace holds `group.json`: the
roster, the transcript, and how far each teammate has read. Each teammate has its own session per
group and is handed only the messages it has not seen.

## How a group answers

The group document says who still owes the room a turn, and whichever window has the group open
runs those turns, one at a time:

1. The teammates you @mentioned answer first, in the order you mentioned them.
2. Every other teammate in the group looks at what is new and either answers or replies `[skip]`,
which the room never shows. A plan or a request that puts work in a teammate's role is that
teammate's to do, mentioned or not; silence is the normal outcome for everything else.
3. A reply that @mentions a teammate pulls that teammate in for another turn, up to three hops
from your message. Nobody answers themselves and nobody answers the same message twice.
4. Anything you post while that runs is answered next; a second window that posts meanwhile
leaves the answering to the one already running.

Every teammate is handed the roster with each colleague's role and expertise, so work is handed
to the teammate whose job it is, and the files colleagues shared since it last looked are in the
`shared/` folder of its working directory. Teammates answer one at a time, so each one sees what
the others said before it. While one is working, its message shows the tools it is using in
every window that has the group open, not only the one that posted; if it opens the browser, the
live view appears in the details rail, where you can take the browser over and hand it back.

Closing or reloading the window that was running the replies loses nothing: the turn goes on in
the teammate's session, and the next window to open the group takes over after a minute, writes
that reply into the room and continues with whoever still owes an answer.

## Artifacts

Anything a teammate saves in its working directory is an artifact. The details rail shows the
files of the conversation you are in; **Artifacts** in the sidebar shows every conversation's
files, read from the sessions themselves when the page opens, with who made each one and where,
a search box, and a preview pane for images, Markdown, code, HTML and spreadsheets.

![The artifacts library: the brief, the email, two campaign images, the script that drew them and the posting schedule, each with its maker](../../.github/images/kits/workplace-artifacts.png)

## Identity

The person is the console's signed-in member. A self-hosted instance has one; a hosted workspace
has many, and each member's direct messages are their own. The app never holds a token: the
console session rides on every same-origin request.

## Files

- `kit.json` — the kit: the recruiter Harness and the app.
- `plugin/` — the recruiter's package (its Skill: the two JSON shapes it answers with).
- `teammate-plugin/` — the package installed on every teammate; `teammate.json` is added per teammate.
- `app/` — the Vite app the console serves at `/kits/workplace`, built on `reifyui`.
`npm test` runs the logic tests (the recruiter protocol, mentions, the group document).

Licensed under the HarnessRouter Starter Kit License (`../LICENSE.md`).
9 changes: 9 additions & 0 deletions kits/workplace/app/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>My Workplace</title>
</head>
<body><div id="root"></div><script type="module" src="/src/main.jsx"></script></body>
</html>
Loading
Loading