Show HN: Qitt – An agent that triages my Slack and Jira and drafts my replies A developer released Qitt, an open-source "chief of staff" agent built on T3 Code threads and scheduled tasks that triages incoming Slack and Jira requests and drafts replies for the owner to review, but never sends anything itself. Qitt runs on one always-on machine, keeps its behavior in Markdown AGENTS.md charters and a local context.md, ships Slack and Jira as folders under input-sources/ with a _template/ skeleton for adding Teams, email or Trello, and requires Node.js 22.19 or later; it has run on Claude only so far, and events arriving while the machine is down are lost by design. A proactive chief of staff that lives inside T3 Code https://github.com/pingdotgg/t3code . - Chief of staff. One pinned thread watches the requests that reach its owner and keeps a live picture of all work in flight, so it can be asked anything without context. - Proactive. It triages each request as it arrives and starts a worker thread to research it ahead of time. It never sends anything: every output is proposed text for the owner to review. - Vendor-agnostic. It is built from T3 Code threads and scheduled tasks, and its rules are AGENTS.md files any coding agent reads. It has run on Claude only so far. - Customizable. Its behaviour is plain Markdown: two charters written in the owner's voice, and a local context file for your people, priorities and playbooks. - Extendable. Slack and JIRA ship as two folders under input-sources/ . Teams, email, Trello or anything else is one more folder https://github.com/bquenin/qitt/blob/main/docs/input-sources.md . - T3 constructs only. qitt is a thread; intake and the ticket sweep are scheduled tasks bound to it. Code outside T3 exists only where something must hold a connection. - Never sends. Each source's send tools are denied for qitt and its workers. Workers are research-only, except the routine field edits a ticket playbook lists and work the owner asks a worker for directly. - Runs on one always-on machine. Events that arrive while it is down are lost, by design. docs/architecture.md https://github.com/bquenin/qitt/blob/main/docs/architecture.md describes each part and how a request travels through them. Planned, not in this repo yet: an interval supervision pass and a JQL backstop. | Path | What | |---|---| | agents/ | The two agents qitt is made of, qitt and worker . For each, a charter AGENTS.md with the rules that hold for every source, and .claude/settings.json for qitt a 150k auto-compact window: every call re-reads the whole thread, and its durable state lives in the threads, not its context . | | input-sources/ | One folder per input source, a place requests come from: its charter sections, its webhook task's prompt, the send tools to deny, and a bridge if it needs one. slack/ and jira/ ship here; template/ is a skeleton for your own. | | bin/ | install-agents assembles each agent's T3 project root from its charter, the enabled sources and your local context.md re-run it after editing any of them ; qitt-filter and qitt-bridge keep the filter and the Slack bridge running; qitt-mute mutes Slack conversations for the bridge. | | docs/ | architecture.md : the parts and how a request travels. input-sources.md : what a source is made of and how to add one. setup.md : how the thread, intake tasks, and endpoint are wired, and every config key. | | filter/ | Path filter that exposes only the T3 webhook routes, with optional HMAC signature checks bin/qitt-filter runs it . Shared by every source that calls a webhook. | | config/example/ | Placeholder versions of the local config files. | - A T3 Code https://github.com/pingdotgg/t3code server, with the qitt and worker projects registered see docs/setup.md https://github.com/bquenin/qitt/blob/main/docs/setup.md . - Node.js 22.19 or later for the installer, the bridge and the filter. - What each source you enable needs: - Skills and MCP servers come from your own agent setup, not from this repo. context.md names the ones workers use for evidence, documents and ticket playbooks. The repo holds code and generic templates only. Everything specific to a workplace or a person names, timezone, people, Slack and JIRA IDs, hostnames, tokens stays on the machine and is never committed: - ~/.config/qitt/ for config and secrets start from config/example/ ; keys in docs/setup.md https://github.com/bquenin/qitt/blob/main/docs/setup.md configuration , and for sources of your own - ~/.local/state/qitt/ for the installed project roots, the bridge's state, and logs npm test --prefix input-sources/slack/bridge node --test "filter/test/ .test.mjs" node --test "bin/test/ .test.mjs"