{"id":14064863,"url":"https://github.com/humanloop/coworker","last_synced_at":"2025-04-27T13:32:06.532Z","repository":{"id":193024513,"uuid":"687391082","full_name":"humanloop/coworker","owner":"humanloop","description":"AI Coworker that lives in slack","archived":false,"fork":false,"pushed_at":"2024-06-07T22:09:54.000Z","size":1433,"stargazers_count":34,"open_issues_count":1,"forks_count":3,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-04-05T00:41:16.089Z","etag":null,"topics":["bot","bot-framework","chatbot","gpt-4","openai","slack"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/humanloop.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-09-05T09:05:20.000Z","updated_at":"2024-12-05T04:37:15.000Z","dependencies_parsed_at":"2023-12-17T13:24:51.715Z","dependency_job_id":"652be2ca-6580-421c-a315-993a46ddf63d","html_url":"https://github.com/humanloop/coworker","commit_stats":null,"previous_names":["humanloop/coworker"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/humanloop%2Fcoworker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/humanloop%2Fcoworker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/humanloop%2Fcoworker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/humanloop%2Fcoworker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/humanloop","download_url":"https://codeload.github.com/humanloop/coworker/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251145578,"owners_count":21543069,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bot","bot-framework","chatbot","gpt-4","openai","slack"],"created_at":"2024-08-13T07:04:07.978Z","updated_at":"2025-04-27T13:32:06.222Z","avatar_url":"https://github.com/humanloop.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"# Coworker\n\n![Logo](./logo.png)\n\nYour AI Coworker that lives in Slack.\n\nCoworker is an open source framework for practical, helpful AI assistants. It lives in Slack, will have access to your docs (as you allow) and can take actions in your various tools.\n\n## Principles\n\n1. **Context Aware** - Unlike other AI chatbots, it should have knowledge of your context. The conversation your having, the background goals at your company etc.\n\n2. **Extensible** - It should be extremely easy for a developer to add a new capability to the coworker that's relevant for their company.\n3. **Human in the loop** - We want to give Coworker really powerful capabilities. To do that in a way that maintains trust, it should be transparent to a user what the AI is doing and always get approval for its actions.\n\n## Setup\n\nTo get this working, you need to setup a new Slack App, get API keys for any tools you want to use e.g. Linear, Notion etc, and get Humanloop/OpenAI keys for the AI.\n\n\u003cdetails\u003e\n\u003csummary\u003eSlack App Setup\u003c/summary\u003e\n\n1. Create a New App:\n   1. Go to https://api.slack.com/apps and click on “Create New App”.\n   2. Give it a name and select the workspace you want to install it to.\n   3. Click “Create App”.\n2. Permissions:\n   1. In the sidebar, navigate to “OAuth \u0026 Permissions”.\n   2. Under “Scopes”, add the following bot token scopes: `app_mentions:read`, `channels:history`, `chat:write`, `im:history`\n   3. Install the app to your workspace by clicking “Install App”.\n   4. Find the “Bot User OAuth Token”. This is your `SLACK_BOT_TOKEN` which starts with `xoxb-`.\n3. Enable Socket Mode: 1. In the sidebar, navigate to “Socket Mode”. 2. Turn on “Enable Socket Mode”. 3. Generate a new token under “App-Level Tokens”. This is your `SLACK_APP_TOKEN` which starts with `xapp-`.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\nSet up a Humanloop / OpenAI account for the AI\n\u003c/summary\u003e\n\n1. Go to https://humanloop.com/signup, and start a free trial\n2. Get your `HUMANLOOP_API_TOKEN` from `https://app.humanloop.com/account/api-keys`\n3. Get your `OPENAI_API_TOKEN` from https://platform.openai.com/account/api-keys\n\n\u003c/details\u003e\n\n##### Adding new tools for the AI\n\nTo add a new action, create a python function in `/tools` with type annotations and a good dosctring (this is important as it's what the AI uses to know when to call it). Then import it and add it to `ENABLED_TOOLS` variable in `main.py`.\n\nBy default the app will be in all channels. You can change this by editing the `ENABLED_CHANNELS` variable in `main.py`\n\n## Running locally\n\n### Setup\n\n1. Clone this repo\n2. Copy `.env.example` to `.env` and fill in the values\n3. `poetry install`\n\n### Running\n\n1. `poetry run python main.py`\n\n## Deployment\n\nYou can run this locally indefintely, but if you want to deploy, we recommend using Railway.app.\n\nJust fork this repo, and create a new deployment in Railway linked to that repo.\n\nYou will need to set up your Environment variables only.\n\n## Privacy\n\nYou set this up yourself, with your own Humanloop account and your own OpenAI (or other LLM provider) keys. The data is private to you\nand as this will be using the OpenAI API, this is actually a more privacy preserving approach than using ChatGPT directly as\nyou data will not be used in future training runs of OpenAI's models.\n\n## Road Map\n\n- [x] GPT-4 bot that can read all messages in slack and responds when appropriate\n- [x] Ability to recognise conversation about a bug and offer to write a Linear ticket then do it\n- [x] Ability to recognise conversation about user feedback and save it to a central place\n- [x] Make the AI responses be in threads so as to avoid cluttering the main feed\n- [ ] Ask for permission to do things\n- [ ] Add more knowledge sources like Notion, Drive or Email (could use something like SID to handle access permissions)\n- [ ] Daily/Weekly summaries of the most important conversations had for engineering, product and sales\n- [ ] Integrations with meeting note-takes like Fathom or Otter so that the AI can answer questions\n- [ ] Integration with a vector database or similar that the model can read and write from to maintain long term memory\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhumanloop%2Fcoworker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhumanloop%2Fcoworker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhumanloop%2Fcoworker/lists"}