Slack-first sidekick layer for durable AI work sessions.
Project description
Innie
Every worker deserves an innie: an AI work-self you can trigger from Slack anywhere, any time.
Innie is an early prototype. The repo contains local setup, guided Slack setup, durable state, hooks, session inspection, the local dashboard, and Codex and Claude Code adapter paths.
What Is Innie?
Innie is the thinnest customizable layer between Slack and agent harnesses. The current repo supports Codex CLI and Claude Code; custom runtimes are future adapter targets. You run Innie in your own dev environment, local or cloud. It keeps Slack-triggered work durable, visible, resumable where the harness supports it, and observable while the selected harness does the actual agent work.
The human is the Outie: the person who asks from Slack, follows progress, and receives the result.
The bet is simple: harnesses keep getting better. Innie should not replace their planning, coding, permissions, tools, or model behavior. Innie owns the operating envelope around them:
- Slack in, Slack out: trigger work from Slack and get replies back in the thread.
- Harness adapter boundary: keep Codex CLI, Claude Code, and future runtimes behind adapters.
- Your environment, your access: run the harness where your repos, CLIs, MCP servers, credentials, and local tools already work.
- Durable by default: persist sessions, queued follow-ups, progress events, harness resume ids, hooks, artifacts, and observability data.
Innie is NOT a new agent loop, policy engine, model runtime, or semantic memory system. It is the minimum product shell that can make a harness feel like a dependable worker.
How It Works
Slack
user asks from phone or desktop
|
Innie
session state, queue, hooks, progress, dashboard, observability
|
Harness adapter
Codex CLI, Claude Code, echo, or future runtime
|
Your dev environment
repo, tests, skills, MCPs, tools, logs, artifacts
Quickstart
The path is:
- Download the repo.
- Check and install dependencies with the provided script.
- Set up the Slack bot with the guided setup wizard.
- Start the fun.
1. Download The Repo
git clone https://github.com/darinyu/innie.git
cd innie
2. Check And Install Dependencies
Install the innie command from this checkout. The provided script checks local
dependencies and installs the command:
python3 scripts/install.py
3. Set Up The Slack Bot
Create local state and start the guided Slack setup wizard:
innie init
To create local state without Slack setup:
innie init --skip-slack-setup
To run the Slack setup wizard later:
innie slack setup
For the guided Slack checklist, see
docs/slack-setup.md.
4. Start The Fun
Run a first Slack-routed smoke test, then keep Innie running when you are ready:
innie run --once --harness codex
innie run
Run
Test the local route without Slack by feeding one Slack-shaped event file through the diagnostic echo adapter:
innie run --once --event-file event.json --harness echo
After innie slack setup, test one real Slack-routed Codex event and exit:
innie run --once --harness codex
Claude Code is available as an opt-in peer harness:
innie run --once --harness claude
--once is a smoke-test mode: Innie connects, waits for one routed Slack event,
processes it, prints the session id and log command, then exits.
Run continuously with:
innie run
Stop it with Ctrl-C.
Use --harness echo when you want to debug Slack routing without starting
Codex or Claude.
Development
Innie is a Python project built with Hatchling.
python3 -m pip install -e .
PYTHONPATH=src python3 -m unittest discover -s tests -v
Useful local commands:
innie init --skip-slack-setup
innie status <session-id>
innie logs <session-id>
innie cancel <session-id>
innie dash
innie dash starts a lightweight local web dashboard for the selected
workspace. It reads .innie/innie.db and .innie/logs/innie.log directly, so it
is read-only and can be run alongside innie run. The dashboard is intended for
local inspection of sessions, task events, hooks, artifacts, health, and logs.
Read docs/initial-plan.md for the current product and
architecture plan.
PyPI Release Goal
Innie is not published on PyPI yet. The repo-side release path targets 0.1.0,
a first alpha release that should install with:
pipx install innie
Before publishing, the package must build clean wheel and source distributions,
pass metadata checks, smoke-test the installed wheel in CI, and have PyPI trusted
publishing configured for this repository. See
docs/pypi-release.md for the release checklist.
Requirements
- Python 3.10+.
- SQLite 3 for local durable session state.
- Rich for colored, wrapped terminal setup screens.
scripts/install.pyasks before installing it, and Innie falls back to plain text if you skip it. - A Slack app for DM and channel mention triggers.
- Codex CLI or Claude Code CLI. Codex remains the default; Claude is opt-in via
--harness claude. OpenCode, Goose, and custom runtimes are future adapters. - Optional MCP servers, skills, CLIs, and credentials from your own dev environment.
Local State And Secrets
Innie stores local runtime state under .innie/ in the selected workspace.
Slack tokens and generated Slack metadata are part of that setup flow.
Do not commit .innie/ or Slack credentials. The prototype is designed for
local development first, so review generated files and permissions before using
it in a shared or remote environment.
Roadmap
Near-term prototype milestones:
- Harden the Codex path into the first stable adapter contract.
- Improve Slack-triggered task progress and result delivery.
- Persist enough state to explain, retry, or resume interrupted work.
- Make lifecycle hooks stable enough for local customization.
- Improve observability events, status output, and failure diagnostics.
- Add scheduled runs after the Slack-triggered loop is stable.
- Add OpenCode, Goose, or custom adapters after the Codex and Claude paths prove the adapter contract.
- Add production-oriented docs after the local prototype proves the core loop.
Contributing
This repo is still early, so small, focused PRs are the best way to contribute.
Good first areas:
- Tighten the Slack onboarding flow.
- Improve setup validation and error messages.
- Add focused tests for session, hook, runtime, and adapter behavior.
- Implement or refine a harness adapter.
- Improve observability events and status output.
- Refine docs, logo assets, and demo materials.
Design constraints:
- Keep Innie thin.
- Keep state durable.
- Keep Slack useful first.
- Keep harness behavior behind adapters.
- Prefer simple local defaults before distributed infrastructure.
Open-source hygiene still to add:
CODE_OF_CONDUCT.mdif the project wants an explicit community standard.- GitHub issue templates once the contribution surface is clearer.
License
Innie is licensed under the Apache License, Version 2.0. See LICENSE
for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file innie-0.1.0.tar.gz.
File metadata
- Download URL: innie-0.1.0.tar.gz
- Upload date:
- Size: 88.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
64d78c3080adfa63aa9add330fa8129c5cb4100fb8ae218d99f8add870e13c67
|
|
| MD5 |
9dc87237e9e48e6f50fdf6e907911c08
|
|
| BLAKE2b-256 |
22a82fd33ed8df4c9231a65a7ac94bd2147d7c7af1d3366d436c7eb61d6c6c1f
|
Provenance
The following attestation bundles were made for innie-0.1.0.tar.gz:
Publisher:
publish.yml on darinyu/innie
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
innie-0.1.0.tar.gz -
Subject digest:
64d78c3080adfa63aa9add330fa8129c5cb4100fb8ae218d99f8add870e13c67 - Sigstore transparency entry: 1618577727
- Sigstore integration time:
-
Permalink:
darinyu/innie@c8c9ad1ed2bc463afe1b1d10205df714c5ddfcf4 -
Branch / Tag:
refs/tags/0.1.0 - Owner: https://github.com/darinyu
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@c8c9ad1ed2bc463afe1b1d10205df714c5ddfcf4 -
Trigger Event:
release
-
Statement type:
File details
Details for the file innie-0.1.0-py3-none-any.whl.
File metadata
- Download URL: innie-0.1.0-py3-none-any.whl
- Upload date:
- Size: 70.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e26db665854b85f262ca8e6ac6f6c71ca88d90ed37e74ed41414c0640d2dc1e4
|
|
| MD5 |
02961bf7f63b558f77bc77958990e570
|
|
| BLAKE2b-256 |
1716af8658a0b7b8d6df8bda384fca27011f62cf82fb3dbdfb49a586b975a1ff
|
Provenance
The following attestation bundles were made for innie-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on darinyu/innie
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
innie-0.1.0-py3-none-any.whl -
Subject digest:
e26db665854b85f262ca8e6ac6f6c71ca88d90ed37e74ed41414c0640d2dc1e4 - Sigstore transparency entry: 1618577929
- Sigstore integration time:
-
Permalink:
darinyu/innie@c8c9ad1ed2bc463afe1b1d10205df714c5ddfcf4 -
Branch / Tag:
refs/tags/0.1.0 - Owner: https://github.com/darinyu
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@c8c9ad1ed2bc463afe1b1d10205df714c5ddfcf4 -
Trigger Event:
release
-
Statement type: