claude-afk
You're running Claude Code on your terminal. It's writing code, you're approving. But you have groceries to pick up, a dentist appointment, or a filter coffee waiting at Rameshwaram Cafe. The coding shouldn't stop - Claude writes the code anyway, you just approve. Why sit in front of the computer? Go touch grass.
claude-afk routes Claude's prompts to your Slack DMs so you can keep things moving from your phone. Proceed with Caution.
Install
pip install claude-afk
Slack app setup (One time, for admins)
-
Go to api.slack.com/apps → Create New App → From an app manifest
-
Paste the manifest:
Slack app manifest (click to expand)
{ "display_information": { "name": "Claude AFK", "description": "Control Claude Code remotely via Slack", "background_color": "#505870" }, "features": { "app_home": { "messages_tab_enabled": true, "messages_tab_read_only_enabled": false }, "bot_user": { "display_name": "Claude AFK", "always_online": false } }, "oauth_config": { "scopes": { "bot": [ "chat:write", "im:history", "im:write", "reactions:read" ] } }, "settings": { "event_subscriptions": { "bot_events": [ "message.im", "reaction_added" ] }, "interactivity": { "is_enabled": true }, "org_deploy_enabled": false, "socket_mode_enabled": true, "token_rotation_enabled": false } }
-
Install the app to your workspace
-
Grab the tokens:
- Bot Token (
xoxb-...): OAuth & Permissions → Bot User OAuth Token - App-Level Token (
xapp-...): Basic Information → App-Level Tokens → Generate (scope:connections:write)
- Bot Token (
-
Find your Slack User ID: click your profile → three dots → Copy member ID
Usage
1. Run setup
This prompts for your Slack tokens and user ID, verifies the connection by sending a code to your DMs, and installs hooks into Claude Code's ~/.claude/settings.json.
✗ claude-afk setup
Slack Bot Token (xoxb-...): <xoxb-your-bot-token>
Slack App-Level Token (xapp-...): <xapp-your-app-level-token>
Your Slack User ID (e.g. U05ABC123): <your-user-id>
Opening DM conversation...
Sent a verification code to your Slack DMs.
Enter the 6-digit code from Slack: <code-you-just-received>
Verified!
Config saved to .../.claude-afk/config.json
Hooks installed in .../.claude/settings.json
Done! Use `claude-afk enable all` to start routing to Slack.
2. Enable and keep coding
claude-afk enable <session-id> # or `claude-afk enable all`
Then keep using Claude Code like before:
claude --resume <session-id>
When Claude needs a permission, asks a question, or finishes - it gets routed to your Slack DMs. Reply in the thread to respond.
3. When you're back, disable
claude-afk disable <session-id> # disable one session
claude-afk disable all # disable all sessions
claude --resume <session-id> # continue like before
Other commands
claude-afk status # show config and enabled sessions
claude-afk add-home ~/.claude-personal # register another Claude Code config dir
claude-afk uninstall --claude-home ~/.claude # remove hooks from one home
claude-afk uninstall # remove hooks from all registered homes
How it works
claude-afk installs hooks into Claude Code that route interactive prompts to your Slack DMs:
- Stop - when Claude finishes, posts the last message to Slack. Reply in the thread to continue the session.
- PreToolUse - tool permission requests and
AskUserQuestionprompts are forwarded to Slack. Reply to approve/deny or answer. - Notification - one-way DM when Claude needs attention.
Caution
This is new. Please proceed with care.
settings.jsonmodification -claude-afkmerges hooks into your Claude Code config. It's tested to preserve existing settings, but back up yoursettings.jsonto be safe.- Security - this effectively gives you remote control of your machine through Slack. Anyone with access to your Slack DM can approve tool executions.
- Not fully tested - edge cases exist. If something breaks,
claude-afk uninstallremoves all hooks cleanly.
Metadata
Release files for claude-afk 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| claude_afk-0.1.1.tar.gz | 66.8 kB | Without provenance | Details for claude_afk-0.1.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| claude_afk-0.1.1-py3-none-any.whl | Python 3 | none | any | Details for claude_afk-0.1.1-py3-none-any.whl |
Total release size: 100.7 kB
Release files / claude_afk-0.1.1.tar.gz
| Download URL | claude_afk-0.1.1.tar.gz |
|---|---|
| Size | 66.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7d3d73cd7afd0f4d3e2db7716421529426ef9816a8c2ff55d7bb8dcfeb9b2071
|
|
BLAKE2b-256 checksum How to use checksums |
1949ed012d17a0db5cda9dd337bcd4b93b4193cc071dc85629c7dd21a332e586
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.10.6 {"installer":{"name":"uv","version":"0.10.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / claude_afk-0.1.1-py3-none-any.whl
| Download URL | claude_afk-0.1.1-py3-none-any.whl |
|---|---|
| Size | 33.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7d8388a7e6850663f04a81aeedfc0236e72458ddc43eb21aa2ffd5dd03ca05b7
|
|
BLAKE2b-256 checksum How to use checksums |
d39868f8a84f835cfaff20f501e7bdc74a5c2d2d9875e5e07112ce305aaafa27
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.10.6 {"installer":{"name":"uv","version":"0.10.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for claude-afk 0.1.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.