[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-105372":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":12,"subscribersCount":12,"size":12,"stars1d":12,"stars7d":12,"stars30d":12,"stars90d":12,"forks30d":12,"starsTrendScore":12,"compositeScore":15,"rankGlobal":9,"rankLanguage":9,"license":16,"archived":17,"fork":17,"defaultBranch":18,"hasWiki":19,"hasPages":17,"topics":20,"createdAt":9,"pushedAt":9,"updatedAt":21,"readmeContent":22,"aiSummary":9,"trendingCount":12,"starSnapshotCount":12,"syncStatus":23,"lastSyncTime":24,"discoverSource":25},105372,"jit","chayapats\u002Fjit","chayapats","A self-hosted personal project companion powered by Schway.",null,"TypeScript",171,0,70,14,36,"MIT License",false,"main",true,[],"2026-11-01 00:15:18","> **S14 direction (approved, not shipped):** Jit is moving to persistent Bots and private local computers without required Projects. Research with Parallel is the next MVP; coding-to-PR and email\u002Fcalendar are required later phases. See the [S14 spec](docs\u002Fspecs\u002FS14-bot-first-local-assistant.md), [Opus design](docs\u002Fdesign\u002FS14-bot-first-experience.md) and [roadmap](docs\u002Ftickets\u002FS14-bot-first-roadmap.md). The screenshots and setup instructions below describe the current project-centric pilot.\n\n\u003Cdiv align=\"center\">\n\n\u003Cpicture>\n  \u003Csource media=\"(prefers-color-scheme: dark)\" srcset=\"docs\u002Fdesign\u002Fassets\u002Flockup-dark.svg\">\n  \u003Cimg src=\"docs\u002Fdesign\u002Fassets\u002Flockup-light.svg\" alt=\"Jit\" height=\"72\">\n\u003C\u002Fpicture>\n\n### Just in time. Just for you.\n\nA self-hosted AI team for your software projects.\u003Cbr>\nChat with one assistant, bring in specialists when needed, and pick up where you left off the next day.\n\n[![GitHub stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fchayapats\u002Fjit?style=flat-square&logo=github&color=0a0a0a)](https:\u002F\u002Fgithub.com\u002Fchayapats\u002Fjit\u002Fstargazers)\n[![License: MIT](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-MIT-0a0a0a?style=flat-square)](LICENSE)\n[![Bun](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FBun-%E2%89%A51.4.2-0a0a0a?style=flat-square&logo=bun)](https:\u002F\u002Fbun.sh)\n[![TypeScript](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FTypeScript-7-0a0a0a?style=flat-square&logo=typescript)](tsconfig.json)\n[![Runs on Linux x64 and arm64](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fruns%20on-Linux%20x64%20%7C%20arm64-0a0a0a?style=flat-square&logo=linux)](docs\u002Frunbooks\u002Fops-service.md)\n[![Greptile: The War on Bugs](https:\u002F\u002Fwww.greptile.com\u002Fbadge.svg)](https:\u002F\u002Fwww.greptile.com\u002F?utm_source=oss_badge&utm_medium=readme&utm_campaign=greptile_for_open_source)\n\n**English** · [ไทย](README.th.md)\n\n\u003Cimg src=\"docs\u002Fdesign\u002Fassets\u002Fbot05-continued-dark-en.png\" alt=\"A Jit project topic in dark mode\" width=\"860\">\n\n\u003C\u002Fdiv>\n\n---\n\n## What is Jit?\n\nJit is a personal assistant that runs on a machine you control: a mini PC, a home server, a VPS or a Raspberry Pi. The service runs on 64-bit Linux (x64 or arm64) with systemd. For development, any OS with Bun works. You talk to **Jit**, the main bot. Jit answers every message, suggests specialists when a topic needs them, and asks them for independent analyses. It remembers decisions, tasks and their sources across projects and across days.\n\nJit uses [Schway](https:\u002F\u002Fgithub.com\u002Fchayapats\u002Fschway) as its execution engine. Schway runs the agent loop and the provider sessions. Jit handles everything else: projects, the team, memory, tasks, jobs and channels.\n\n## Highlights\n\n|  |  |\n| --- | --- |\n| **Chat-first** | A Grok-style Web app, dark and light, in Thai and English. You can install it as a PWA. |\n| **A team on demand** | Jit drafts specialists as cards, and a role exists only after you press **Create**. Jit may call existing roles only within the allowance you set. |\n| **Memory with sources** | Every claim links back to where it came from. You can correct it or tell Jit to forget it, and the change carries through everywhere it was used. |\n| **Tasks you accept** | A proposal becomes a task only when you accept that exact revision. Accepting a task does not start any work. |\n| **Private PR review** | Jit reads new pull requests without running them and sends you findings with evidence. |\n| **Quiet by default** | Scheduled runs with nothing new stay silent. You get one notice per finished batch of work, either for everything or only for what needs you. |\n| **Sandboxed execution** | Each project gets one rootless Podman box. Access is Read, Workspace or Full, and only you can raise it. Pushes, deploys and other external effects wait for your approval card. |\n| **Reach it your way** | Web, a loopback CLI (`jit ask`), signed webhooks, and an `.ics` feed of your schedules. The Telegram channel is built, but no live Bot API transport ships yet. |\n\n## How it works\n\n```mermaid\nflowchart LR\n  you([You]) --> web[Web \u002F PWA]\n  you --> tg[Telegram]\n  you --> cli[CLI and webhooks]\n  web & tg & cli --> jit{{Jit}}\n  jit --> db[(SQLite\u003Cbr\u002F>on your machine)]\n  jit --> schway[Schway\u003Cbr\u002F>agent loop]\n  schway --> models[Codex \u002F Grok\u003Cbr\u002F>subscriptions]\n  jit --> box[[Execution box\u003Cbr\u002F>rootless Podman]]\n```\n\n## Principles\n\n- **Authority comes from you.** Model output and retrieved content can never create roles, tasks or decisions, and they cannot widen access.\n- **Proposed, accepted and done stay separate.** Every change has a revision and a receipt you can inspect.\n- **Your data stays on your host.** Jit sends no telemetry. Data goes out only to the model providers, channels and repositories you configure.\n- **Credentials stay out of the box.** No Jit credential, database or backup ever enters the execution box.\n\n## Status\n\nJit is in **pilot** with a single owner. The MVP and specs S09–S11 are implemented. Jit is not tied to one device. Its smallest reference host is a Raspberry Pi 5, and on 2026-10-28 an install there passed packaging, restart, reboot and route-readiness gates on the **Codex** route. The Grok route is deferred until its quota resets, and Telegram stays disabled until a live transport ships. Each installation supports one owner.\n\n## Quick start\n\nYou need [Bun](https:\u002F\u002Fbun.sh) 1.4.2 or later. You do not need a subscription or a Schway build to develop.\n\n```sh\nbun install --frozen-lockfile\nbun run setup        # create the owner (password: 12–256 chars, read from the terminal)\nbun start            # http:\u002F\u002Flocalhost:3000\n```\n\nOpen `http:\u002F\u002Flocalhost:3000`, sign in, and follow the first-run **ตั้งจิต** flow to set Jit's persona. Replies come from scripted fixtures by default. To use real models, set `JIT_RUN_PORT=schway`. First give the user that runs Jit an unlocked Secret Service and a Schway provider login (see [Pi live round](docs\u002Frunbooks\u002Fpi-live-round.md), Round B).\n\n> [!TIP]\n> If you forget the password, run `bun run owner:reset` on the host. It revokes old sessions and keeps your projects. There is no remote reset.\n\n## Configuration\n\nJit reads its settings from environment variables. The most common ones:\n\n| Variable | Default | Purpose |\n| --- | --- | --- |\n| `JIT_DATABASE` | `.local\u002Fjit.sqlite` | Application database (ignored by git, mode 0600) |\n| `JIT_ORIGIN` | `http:\u002F\u002Flocalhost:3000` | The one exact origin. Use HTTPS for anything other than loopback |\n| `JIT_HOST` \u002F `JIT_PORT` | `127.0.0.1` \u002F `3000` | Listen address |\n| `JIT_RUN_PORT` | `scripted` | `scripted` (fixtures) or `schway` (live routes) |\n| `JIT_SESSION_SECONDS` | `28800` | Browser session lifetime |\n\nSee [`src\u002Fconfig.ts`](src\u002Fconfig.ts) for the full list with limits, including job, Telegram and execution-box settings.\n\n> [!IMPORTANT]\n> For remote access, put Jit behind an HTTPS reverse proxy on your VPN that preserves `Host`. Never expose the backend port directly. Jit does not trust `Forwarded` headers, and being on the VPN does not count as owner identity.\n\n## Deploy\n\n| Guide | Covers |\n| --- | --- |\n| [Service install and upgrade](docs\u002Frunbooks\u002Fops-service.md) | Build, plan, install and upgrade the systemd service |\n| [Execution box](docs\u002Frunbooks\u002Fexecution-box.md) | Rootless Podman setup and `box-doctor` |\n| [Pi live round](docs\u002Frunbooks\u002Fpi-live-round.md) | Host, subscription and reboot evidence on a Pi |\n| [Load drill](docs\u002Frunbooks\u002Fops-load-drill.md) | Capacity and release-evidence drills |\n\n## Development\n\n```sh\nbun test             # deterministic: scripted models, protocol fixtures, fake clocks\nbun run typecheck\n```\n\nWork is tracked in GitHub Issues. Before you change behavior, read [`AGENTS.md`](AGENTS.md), [the workflow](docs\u002Fagents\u002Fworkflow.md), the relevant [spec](docs\u002Fspecs\u002FREADME.md) and its [ADRs](docs\u002Fadr).\n\n## Documentation\n\n| | |\n| --- | --- |\n| [Product](docs\u002Fproduct\u002FREADME.md) | Vision, PRD, architecture, security and roadmap |\n| [Specs](docs\u002Fspecs\u002FREADME.md) | MVP, S01, S09–S11 |\n| [Contracts](docs\u002Fcontracts) | Versioned behavior contracts |\n| [ADRs](docs\u002Fadr) | Architecture decisions |\n| [Design](docs\u002Fdesign\u002FREADME.md) | Visual system, tokens and logo |\n| [Glossary](CONTEXT.md) | Domain terms |\n\n## License\n\n[MIT](LICENSE) © Jit contributors. See [NOTICE](NOTICE) for Schway attribution.\n",2,"2026-10-31 04:26:35","CREATED_QUERY"]