{"id":20481458,"url":"https://github.com/ethanbaker/horus","last_synced_at":"2025-07-25T08:06:55.596Z","repository":{"id":240384472,"uuid":"802306434","full_name":"ethanbaker/horus","owner":"ethanbaker","description":"My personal assistant bot, used to converse with GPT and custom modules, perform outreach, and be accessible through many implementations","archived":false,"fork":false,"pushed_at":"2024-07-07T01:03:21.000Z","size":154,"stargazers_count":0,"open_issues_count":16,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-07-18T10:34:21.541Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ethanbaker.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}},"created_at":"2024-05-18T00:15:52.000Z","updated_at":"2024-05-27T15:05:53.000Z","dependencies_parsed_at":"2024-05-19T17:59:51.105Z","dependency_job_id":null,"html_url":"https://github.com/ethanbaker/horus","commit_stats":null,"previous_names":["ethanbaker/horus"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ethanbaker%2Fhorus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ethanbaker%2Fhorus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ethanbaker%2Fhorus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ethanbaker%2Fhorus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ethanbaker","download_url":"https://codeload.github.com/ethanbaker/horus/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242058081,"owners_count":20065062,"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":[],"created_at":"2024-11-15T16:08:32.695Z","updated_at":"2025-03-05T15:43:55.879Z","avatar_url":"https://github.com/ethanbaker.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!--\n  Created by: Ethan Baker (contact@ethanbaker.dev)\n  \n  Adapted from:\n    https://github.com/othneildrew/Best-README-Template/\nHere are different preset \"variables\" that you can search and replace in this template.\n--\u003e\n\n\u003cdiv id=\"top\"\u003e\u003c/div\u003e\n\n\n\u003c!-- PROJECT SHIELDS/BUTTONS --\u003e\n\u003c!-- \n  Netlify buttons:\n[![Netlify Status]()]()\n  Golang specific buttons:\n[![Go Report Card](https://goreportcard.com/badge/github.com/ethanbaker/horus)](https://goreportcard.com/report/github.com/ethanbaker/horus)\nNEED GITHUB WORKFLOW [![Go Coverage](https://github.com/ethanbaker/horus/wiki/coverage.svg)](https://raw.githack.com/wiki/ethanbaker/horus/coverage.html)\n--\u003e\n![alpha](https://img.shields.io/badge/status-alpha-red)\n[![Contributors][contributors-shield]][contributors-url]\n[![Forks][forks-shield]][forks-url]\n[![Stargazers][stars-shield]][stars-url]\n[![Issues][issues-shield]][issues-url]\n[![License][license-shield]][license-url]\n[![LinkedIn][linkedin-shield]][linkedin-url]\n\n\n[![GoDoc](https://godoc.org/github.com/ethanbaker/horus?status.svg)](https://godoc.org/github.com/ethanbaker/horus)\n\n\u003c!-- PROJECT LOGO --\u003e\n\u003cbr\u003e\u003cbr\u003e\u003cbr\u003e\n\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://github.com/ethanbaker/horus\"\u003e\n    \u003cimg src=\"./docs/logo.png\" alt=\"Logo\" height=\"80\"\u003e\n  \u003c/a\u003e\n\n  \u003ch3 align=\"center\"\u003eHorus\u003c/h3\u003e\n\n  \u003cp align=\"center\"\u003e\n    A personal assistant bot, created for all my needs\n  \u003c/p\u003e\n\u003c/div\u003e\n\n\n\u003c!-- TABLE OF CONTENTS --\u003e\n\u003cdetails\u003e\n  \u003csummary\u003eTable of Contents\u003c/summary\u003e\n  \u003col\u003e\n    \u003cli\u003e\n      \u003ca href=\"#about-the-project\"\u003eAbout\u003c/a\u003e\n      \u003cul\u003e\n        \u003cli\u003e\u003ca href=\"#built-with\"\u003eBuilt With\u003c/a\u003e\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#getting-started\"\u003eGetting Started\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#usage\"\u003eUsage\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#roadmap\"\u003eRoadmap\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#contributing\"\u003eContributing\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#license\"\u003eLicense\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#contact\"\u003eContact\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#acknowledgments\"\u003eAcknowledgments\u003c/a\u003e\u003c/li\u003e\n  \u003c/ol\u003e\n\u003c/details\u003e\n\n\n\u003c!-- ABOUT --\u003e\n## About\n\nHorus is my personal assistant bot for any and all purposes. The desire to create them came from a wish for a personal assistant that could tie into specific user information, such as emails, calendars, Notion databases, and more.\n\nHorus currently has two main capacities: functioning as a GPT assistant (off of OpenAI's client and function calling, though with goals to eventually pivot to Llama3), and performing outreach to the user to give live updates/reminders.\n\nThese functions are achieved using implementations, which use basic Horus functionality in a specific user interface, such as a Discord bot, speech to text, or website. All communications occur through HTTP channels so the same base Horus runner can supply multiple implemenations with consistent information.\n\nThe `bot` directory contains a generic assistant template for Horus to run off of. Custom modules are utilized with OpenAI's tool functionality to handle custom functions. The main idea of this module is to take advantage of GPT assistants with easily maintainable, custom-made modules.\n\nThe `outreach` directory contains code used to reach out to the user unprompted, such as for reminders or alarms. Different types of 'messages' exist to contact the user and are defined as follows:\n* **Dyanmic Messages**: used to check dynamic content repeatedly and send a message to the user (ex: check a schedule database every given interval and send the user a message when the start time lines up)\n* **Static Messages**: used to message the user at a set, fixed time according to a cron string (ex: send a daily calendar digest every morning at 7:00)\n* **Timed Messages**: used to message the user once after a given time (ex: send the user a reminder after 3 hours, or send the user a reminder on August 11th at 16:00)\n\nThe `implementations` directory contains different implementations of Horus. These implementations allow the user to interact with Horus, and can contain utility functions specific to the implementation type. Current implementations include\n* Discord Bot\n* Terminal Interface\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n### Built With\n\n* [OpenAI GPT Models](https://platform.openai.com/docs/models)\n* [Golang](https://go.dev/)\n* [GORM](https://github.com/go-gorm/gorm)\n* [Discord Go](https://github.com/bwmarrin/discordgo)\n* [Notion API](https://developers.notion.com/)\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\u003c!-- GETTING STARTED --\u003e\n## Getting Started\n\nHorus is built by me, for me. A plethroa of generalized assistant bots exist to use for a wide variety of general purposes, but this bot was built with specific intent to provide me with specialized usecases. Because of this, Horus is not an \"install right out of the box\" kind of assistant. If you'd like to make use any of this functionality here, I'd recommend using the code as a template and custom-coding your own modules.\n\nHere is a list of different sections of the code base and how they can be customized:\n* `/bot`: add/modify custom modules according to the `/bot/template` directory. Implemented modules contain details about usage and credential needs\n* `/outreach`: add/modify custom messages according to other examples\n* `/implementations`: add/modify configuration setup to meet personal needs\n\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\u003c!-- USAGE EXAMPLES --\u003e\n## Usage\n\nHorus can be used as a personal assistant through many implementations. Pictures of example usage will be located here in the future.\n\n_For more examples, please refer to the [documentation][documentation-url]._\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\u003c!-- ROADMAP --\u003e\n## Roadmap\n\n- [x] Outreach\n- [ ] Speech to text implementation\n- [ ] Horus API\n    - [ ] API Wrapper\n    - [ ] Implementation API Usage\n\nSee the [open issues][issues-url] for a full list of proposed features (and known issues).\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\u003c!-- CONTRIBUTING --\u003e\n## Contributing\n\nFor issues and suggestions, please include as much useful information as possible.\nReview the [documentation][documentation-url] and make sure the issue is actually\npresent or the suggestion is not included. Please share issues/suggestions on the\n[issue tracker][issues-url].\n\nFor patches and feature additions, please submit them as [pull requests][pulls-url]. \nPlease adhere to the [conventional commits][conventional-commits-url]. standard for\ncommit messaging. In addition, please try to name your git branch according to your\nnew patch. [These standards][conventional-branches-url] are a great guide you can follow.\n\nYou can follow these steps below to create a pull request:\n\n1. Fork the Project\n2. Create your Feature Branch (`git checkout -b branch_name`)\n3. Commit your Changes (`git commit -m \"commit_message\"`)\n4. Push to the Branch (`git push origin branch_name`)\n5. Open a Pull Request\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\u003c!-- LICENSE --\u003e\n## License\n\nThis project uses the GNU General Public License.\n\nYou can find more information in the [LICENSE][license-url] file.\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\u003c!-- CONTACT --\u003e\n## Contact\n\nEthan Baker - contact@ethanbaker.dev - [LinkedIn][linkedin-url]\n\nProject Link: [https://github.com/ethanbaker/horus][project-url]\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\u003c!-- ACKNOWLEDGMENTS --\u003e\n## Acknowledgments\n\n* [The Egyptian god Horus](https://en.wikipedia.org/wiki/Horus)\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\u003c!-- MARKDOWN LINKS \u0026 IMAGES --\u003e\n\u003c!-- https://www.markdownguide.org/basic-syntax/#reference-style-links --\u003e\n[contributors-shield]: https://img.shields.io/github/contributors/ethanbaker/horus.svg\n[forks-shield]: https://img.shields.io/github/forks/ethanbaker/horus.svg\n[stars-shield]: https://img.shields.io/github/stars/ethanbaker/horus.svg\n[issues-shield]: https://img.shields.io/github/issues/ethanbaker/horus.svg\n[license-shield]: https://img.shields.io/github/license/ethanbaker/horus.svg\n[linkedin-shield]: https://img.shields.io/badge/-LinkedIn-black.svg?logo=linkedin\u0026colorB=555\n\n[contributors-url]: \u003chttps://github.com/ethanbaker/horus/graphs/contributors\u003e\n[forks-url]: \u003chttps://github.com/ethanbaker/horus/network/members\u003e\n[stars-url]: \u003chttps://github.com/ethanbaker/horus/stargazers\u003e\n[issues-url]: \u003chttps://github.com/ethanbaker/horus/issues\u003e\n[pulls-url]: \u003chttps://github.com/ethanbaker/horus/pulls\u003e\n[license-url]: \u003chttps://github.com/ethanbaker/horus/blob/master/LICENSE\u003e\n[linkedin-url]: \u003chttps://linkedin.com/in/ethandbaker\u003e\n[project-url]: \u003chttps://github.com/ethanbaker/horus\u003e\n\n[product-screenshot]: path_to_demo\n[documentation-url]: \u003chttps://godoc.org/github.com/ethanbaker/horus\u003e\n\n[conventional-commits-url]: \u003chttps://www.conventionalcommits.org/en/v1.0.0/#summary\u003e\n[conventional-branches-url]: \u003chttps://docs.microsoft.com/en-us/azure/devops/repos/git/git-branching-guidance?view=azure-devops\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fethanbaker%2Fhorus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fethanbaker%2Fhorus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fethanbaker%2Fhorus/lists"}