{"id":30683184,"url":"https://github.com/getsentry/truffle","last_synced_at":"2026-06-22T19:31:18.232Z","repository":{"id":312026591,"uuid":"1039849852","full_name":"getsentry/truffle","owner":"getsentry","description":null,"archived":false,"fork":false,"pushed_at":"2025-08-22T05:13:32.000Z","size":1200,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-06T10:27:45.672Z","etag":null,"topics":["hackweek2025","tag-non-production"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/getsentry.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null},"funding":{"custom":["https://sentry.io/pricing/","https://sentry.io/"]}},"created_at":"2025-08-18T04:40:36.000Z","updated_at":"2025-08-22T12:46:29.000Z","dependencies_parsed_at":"2025-08-28T10:49:59.721Z","dependency_job_id":"7bac2d80-9d0f-46ac-8563-b0b1cf0b8a88","html_url":"https://github.com/getsentry/truffle","commit_stats":null,"previous_names":["getsentry/truffle"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/getsentry/truffle","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/getsentry%2Ftruffle","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/getsentry%2Ftruffle/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/getsentry%2Ftruffle/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/getsentry%2Ftruffle/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/getsentry","download_url":"https://codeload.github.com/getsentry/truffle/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/getsentry%2Ftruffle/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34663522,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-22T02:00:06.391Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["hackweek2025","tag-non-production"],"created_at":"2025-09-01T19:03:25.222Z","updated_at":"2026-06-22T19:31:18.221Z","avatar_url":"https://github.com/getsentry.png","language":"Python","funding_links":["https://sentry.io/pricing/","https://sentry.io/"],"categories":[],"sub_categories":[],"readme":"\u003cimg src=\"assets/dog-small.jpg\" alt=\"Truffle Logo\" width=\"120\"\u003e\n\n# Truffle\n\nA Slack bot that helps you find the experts in your organization.\n\nTruffle indexes your public Slack channels and assigns domains of expertise to Slack users.\nYou can ask Truffle to find persons of a certain skill and it will reply to with the persons in your organization that demonstrated that skill in the past.\n\nNo private channels or direct messages are read. No user messages are stored.\n\n## System Architecture\n\n                     ┌─────────────────────────────────────────┐\n                     │              TRUFFLE SYSTEM             │\n                     └─────────────────────────────────────────┘\n\n    👥 Slack Users                                    💬 Slack Messages\n         │                                                   │\n         │ @mention bot                                      │ periodic ingestion\n         ▼                                                   ▼\n    ┌─────────────────┐                              ┌──────────────────┐\n    │   Slack Bot     │                              │    Ingestor      │\n    │  (Port 8003)    │                              │  (Port 8001)     │\n    │                 │                              │                  │\n    │ • Event parsing │                              │ • Message proc.  │\n    │ • Query extract │                              │ • Skill extract  │\n    │ • User replies  │                              │ • Classification │\n    └─────────────────┘                              │ • Score aggreg.  │\n         │                                           └──────────────────┘\n         │ search request                                     │\n         ▼                                                    │ stores data\n    ┌─────────────────┐                                       │\n    │   Expert API    │                                       │\n    │  (Port 8002)    │                                       │\n    │                 │                                       │\n    │ • Expert search │                                       │\n    │ • Skill queries │                                       │\n    │ • Fast lookups  │                                       │\n    └─────────────────┘                                       │\n         │                                                    │\n         │ reads from                                         │\n         ▼                                                    ▼\n    ┌─────────────────────────────────────────────────────────────────┐\n    │                       Database (PostgreSQL)                     │\n    │                                                                 │\n    │  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐  ┌─────────┐ │\n    │  │    Users    │  │   Skills    │  │  Evidence   │  │ Scores  │ │\n    │  │             │  │             │  │             │  │         │ │\n    │  │ • slack_id  │  │ • skill_key │  │ • user_id   │  │ • user  │ │\n    │  │ • name      │  │ • name      │  │ • skill_id  │  │ • skill │ │\n    │  │ • timezone  │  │ • domain    │  │ • label     │  │ • score │ │\n    │  │             │  │ • aliases   │  │ • confidence│  │ • count │ │\n    │  └─────────────┘  └─────────────┘  └─────────────┘  └─────────┘ │\n    └─────────────────────────────────────────────────────────────────┘\n\n    Flow:\n    1. Slack messages → Ingestor → Extract skills → Store evidence\n    2. Evidence → Score Aggregation → User skill scores\n    3. User @mentions bot → Slack Bot → Expert API → Query scores → Reply with experts\n\n\n---\nBuilt by [Anton Pirker](https://github.com/antonpirker) during Sentry Hackweek 2025.\n\nThe truffle dog image is from [Vecteezy](https://www.vecteezy.com).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgetsentry%2Ftruffle","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgetsentry%2Ftruffle","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgetsentry%2Ftruffle/lists"}