Jot
A general-purpose agent loop where Jev picks the next move and Jot runs it.
A general-purpose agent loop where Jev picks the next move and Jot runs it. No license file at the time of writing.
### The first general-purpose System One agent for Jev
Jev picks the next move. Jot runs the loop.
[](https://github.com/runta-dev/jot/stargazers)
[](https://github.com/runta-dev/jot/issues)
[](https://github.com/runta-dev/jot/commits)
[](https://www.typescriptlang.org/)
[](https://nodejs.org/)
[](https://www.apple.com/macos/)
[](https://typesafe.ai/)
[Quick start](#quick-start) · [The loop](#the-loop) · [Packages](#packages)
</div>
<p align="center">
<a href="https://github.com/runta-dev/jot/raw/main/videos/demo.mp4">
<img src="videos/demo.png" alt="Jot demo" width="100%">
</a>
</p>
## What it does
Jot is the first general-purpose [System One](https://typesafe.ai/) agent for [Jev](https://typesafe.ai/). Jev chooses tools and arguments. Jot runs the loop: execute, put the real results back into context, ask Jev again until it can reply.
You see every tool call. Credentials stay on the server. Chats stay in this browser.
## The loop
```text
You → Jev chooses a tool → execute → tool result → Jev again → reply
```
```text
You: Add 6 and 7, then multiply by 2.
calculate({ left: "6", operator: "add", right: "7" }) → 13
calculate({ left: "13", operator: "multiply", right: "2" }) → 26
Jot: 26
```
The calculator does the math. Jev only decides the calls.
## Quick start
Needs Node.js, a [TypeSafe](https://typesafe.ai/) API key, and Apple Silicon with `uv` for local drafts.
```sh
npm install
cp .env.example .env # set TYPESAFE_API_KEY
npm run draft:serve # terminal 1
npm run dev # terminal 2
```
Open [localhost:3000](http://localhost:3000). Loopback only.
```sh
npm test && npm run build
```
## Packages
```text
packages/ui Chat UI and tool-call trace
packages/agent Provider-independent loop
packages/jev-core TypeSafe