Tintin is your girlfriend and engineer. It allows you to control Codex and other coding agents via Telegram or Slack.
-
Make sure npm and Codex are available, and Codex has been logged in (either via API from environment or ChatGPT UI).
-
Optional (for Telegram
/cc): install and authenticate Claude Code. -
Optional (for Telegram
/cc): add a[claude_code]section inconfig.toml(seeconfig.example.toml). -
Run
npm i -g @fuzzland/tintin. -
Create
config.tomlby copying example config:- Set your projects. For example:
[[projects]] id = "tintin" name = "tintin" path = "/home/ubuntu/tintin" - Optionally set
[bot].github_repos_dirto control wheretintin newclones git repositories. Usegithub:<owner>/<repo>when adding GitHub sources. - Create a Slack bot and channel or create a Telegram bot and a group
- Set
[telegram]and/or[slack]secrets (supportsenv:VAR). - Optional: set
[security].*allowlists to allow only certain users to use the bot in defined set of group chats.
- Set your projects. For example:
-
Run
tintin start.
Quick start (Chinese): docs/quick-start.md
- Add a project:
tintin new "my project" <path-or-git-url> [id](usegithub:<owner>/<repo>for GitHub shorthand; supports--github-dirand--github-token) - Tail logs:
tintin log - Stop:
tintin stop - Status:
tintin status
Tintin can run the Playwright MCP sidecar so Codex / Claude Code can drive a real browser.
- Configure
[playwright_mcp]inconfig.toml(seeconfig.example.toml). Defaults startnpx -y @playwright/mcp@latestwith Chrome, shared user data dir, and an auto-picked port > 10000. - A single shared profile (
user_data_dir) is used across sessions; setexecutable_pathif Chrome is not on PATH. - Codex / Claude Code sessions are automatically pointed at the running Playwright MCP server; every Playwright MCP tool call triggers a screenshot saved under the configured
output_dirand posted to the chat.
- Telegram: mention the bot or send
/codex(Codex) //cc(Claude Code) → choose project → prompt → session is created (topics preferred; reply-thread fallback). - Slack: mention the bot → pick project (select) → modal for prompt (and custom path if needed) → session thread is created.
- List sessions:
- Telegram:
/sessions(or/codex sessions,/cc sessions, or@bot sessions; addpage 2for older sessions,activeto filter) - Slack: mention the bot with “sessions” (e.g.
@bot sessions; addpage 2oractive)
- Telegram:
- Messages posted into a session while it is still running are queued and automatically resumed when the current run exits.