Skip to main content

Slack-first sidekick layer for durable AI work sessions.

Project description

Innie

CI License: Apache-2.0 Python 3.10+

Innie wordmark

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.

Innie Slack-to-agent workflow

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:

  1. Download the repo.
  2. Check and install dependencies with the provided script.
  3. Set up the Slack bot with the guided setup wizard.
  4. 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.py asks 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.md if 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

innie-0.1.0.tar.gz (88.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

innie-0.1.0-py3-none-any.whl (70.7 kB view details)

Uploaded Python 3

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

Hashes for innie-0.1.0.tar.gz
Algorithm Hash digest
SHA256 64d78c3080adfa63aa9add330fa8129c5cb4100fb8ae218d99f8add870e13c67
MD5 9dc87237e9e48e6f50fdf6e907911c08
BLAKE2b-256 22a82fd33ed8df4c9231a65a7ac94bd2147d7c7af1d3366d436c7eb61d6c6c1f

See more details on using hashes here.

Provenance

The following attestation bundles were made for innie-0.1.0.tar.gz:

Publisher: publish.yml on darinyu/innie

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

Hashes for innie-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e26db665854b85f262ca8e6ac6f6c71ca88d90ed37e74ed41414c0640d2dc1e4
MD5 02961bf7f63b558f77bc77958990e570
BLAKE2b-256 1716af8658a0b7b8d6df8bda384fca27011f62cf82fb3dbdfb49a586b975a1ff

See more details on using hashes here.

Provenance

The following attestation bundles were made for innie-0.1.0-py3-none-any.whl:

Publisher: publish.yml on darinyu/innie

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page