{"id":37073896,"url":"https://github.com/melvio/hopla","last_synced_at":"2026-01-14T08:40:54.642Z","repository":{"id":45960334,"uuid":"389400634","full_name":"melvio/hopla","owner":"melvio","description":"A Python CLI for habitica.com","archived":false,"fork":false,"pushed_at":"2024-12-21T21:43:58.000Z","size":789,"stargazers_count":18,"open_issues_count":12,"forks_count":7,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-09-25T01:14:02.313Z","etag":null,"topics":["bash","cli","command-line","command-line-tool","commandline","habitica","productivity","python-click","python-requests","python3","task-management","todo","todo-list"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/melvio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","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":"2021-07-25T17:09:24.000Z","updated_at":"2025-07-07T21:38:51.000Z","dependencies_parsed_at":"2024-03-20T21:45:25.165Z","dependency_job_id":"51439edb-ab51-4ee4-ada5-c2cc9001c7e9","html_url":"https://github.com/melvio/hopla","commit_stats":{"total_commits":534,"total_committers":2,"mean_commits":267.0,"dds":"0.0018726591760299671","last_synced_commit":"83c50c3387a93298411323a4cce071992ae0004e"},"previous_names":[],"tags_count":32,"template":false,"template_full_name":null,"purl":"pkg:github/melvio/hopla","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/melvio%2Fhopla","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/melvio%2Fhopla/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/melvio%2Fhopla/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/melvio%2Fhopla/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/melvio","download_url":"https://codeload.github.com/melvio/hopla/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/melvio%2Fhopla/sbom","scorecard":{"id":636117,"data":{"date":"2025-08-11","repo":{"name":"github.com/melvio/hopla","commit":"f5e09a835bef6776e8f2b74c7279393557aa1a55"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci-lint-and-test.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Code-Review","score":0,"reason":"Found 0/10 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci-lint-and-test.yml:9: update your workflow using https://app.stepsecurity.io/secureworkflow/melvio/hopla/ci-lint-and-test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci-lint-and-test.yml:11: update your workflow using https://app.stepsecurity.io/secureworkflow/melvio/hopla/ci-lint-and-test.yml/main?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/ci-lint-and-test.yml:16","Warn: pipCommand not pinned by hash: .github/workflows/ci-lint-and-test.yml:17","Warn: pipCommand not pinned by hash: .github/workflows/ci-lint-and-test.yml:18","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   3 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":5,"reason":"5 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: PYSEC-2014-14 / GHSA-652x-xj99-gmcc","Warn: Project is vulnerable to: GHSA-9hjg-9r4m-mvj7","Warn: Project is vulnerable to: GHSA-9wx4-h78v-vm56","Warn: Project is vulnerable to: PYSEC-2014-13 / GHSA-cfj3-7x9c-4p3h","Warn: Project is vulnerable to: PYSEC-2018-28 / GHSA-x84v-xcm2-53pg"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 28 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-21T09:12:24.264Z","repository_id":45960334,"created_at":"2025-08-21T09:12:24.264Z","updated_at":"2025-08-21T09:12:24.264Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28414680,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T08:38:59.149Z","status":"ssl_error","status_checked_at":"2026-01-14T08:38:43.588Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["bash","cli","command-line","command-line-tool","commandline","habitica","productivity","python-click","python-requests","python3","task-management","todo","todo-list"],"created_at":"2026-01-14T08:40:54.000Z","updated_at":"2026-01-14T08:40:54.628Z","avatar_url":"https://github.com/melvio.png","language":"Python","readme":"# Hopla\n\n[![hopla](https://img.shields.io/static/v1?label=melvio\u0026message=hopla\u0026color=blue\u0026logo=github)](https://github.com/melvio/hopla)\n[![stars - hopla](https://img.shields.io/github/stars/melvio/hopla?style=social)](https://github.com/melvio/hopla)      \n[![Continuous Integration](https://github.com/melvio/hopla/actions/workflows/ci-lint-and-test.yml/badge.svg)](https://github.com/melvio/hopla/actions/workflows/ci-lint-and-test.yml)\n\nhopla - a command line interface (CLI) for [habitica.com](https://habitica.com)\n\nHopla is a XDG-compliant CLI which uses `python3` to interact with\nthe [Habitica API](https://habitica.com/apidoc/).\n\nHopla is currently under active development so new features are added rapidly.\n\n## How to Use Hopla\n\n### Installation\n\nHopla can be installed by running the following command:\n\n```bash\npython3 -m pip install --user hopla-cli\n```\n\n\n### First Time Usage\n\nHopla needs your `User Id` and `API Token` to connect to Habitica. \nYou can find these over at `https://habitica.com/user/settings/api`. \n\nRun the following command to configure this automatically:\n\n```bash\n$ hopla authenticate \nPlease enter your credentials.\nYou can find them over at \u003chttps://habitica.com/user/settings/api\u003e.\nThey have the following format: 'c0ffee69-dada-feed-abb1-5ca1ab1ed004'.\nThe user id can be found under 'User ID'.\nPlease paste your user ID here (press Ctrl-C to abort): c0ffee69-dada-feed-abb1-5ca1ab1ed004\nPlease paste your user API Token here (input remains hidden):\n```\n\nThis will create a credentials file at `~/.config/hopla/authenticate.conf` that Hopla uses. \nIf you want to use a different file, you can set the `${HOPLA_AUTH_FILE}` environment \nvariable to choose your own file.\n\n##### Autocompletion\n\nIf you want bash autocompletion, you can run the following command:\n\n```bash\n$ hopla complete bash --enable\nenabled autocompletion\nrestart bash to make use of it\n```\n\nTo make use of the autocompletion you need to reload your bashrc.\nYou can do this by either opening up a new terminal window, or\nrunning `bash` again, or running `source ~/.bashrc`.\n\n\nTo print the autocomplete code for bash|zsh|fish, so that you can install \nit yourself, optionally run:\n\n```bash\n# optionally, install the autocomplete code yourself:\nhopla complete bash\nhopla complete zsh\nhopla complete fish\n```\n\n## Everyday Usage\n\nAfter installation, you can use `hopla`. \nThe supported commands can be found by running:\n\n```bash\n$ hopla --help\nUsage: hopla [OPTIONS] COMMAND [ARGS]...\n\n  hopla - a command line interface (CLI) to interact with habitica.com\n\nOptions:\n  --version   Show the version and exit.\n  -h, --help  Show this message and exit.\n\nCommands:\n  add                  GROUP for adding things to Habitica.\n  api                  GROUP for requesting Habitica API metadata.\n  authenticate         Authorize yourself to access the Habitica.com API.\n  buy                  GROUP to buy things.\n  complete             Print or enable shell autocompletion.\n  # etcetera\n```\n\nMore functionality is currently being implemented. \nHopla is open-source. \nPull request, feature requests, and issues are welcomed at \u003chttps://github.com/melvio/hopla\u003e. \nIf you want to contribute, but don't know where to start, you might want to look at\n`.github/CONTRIBUTING.md` and the `./developers` folder.\n\n[![License](https://img.shields.io/badge/License-apache--2.0-blue)](#license)\n\n### Environment Variables for Hopla's options\n\n*Use case*: You can use environment variables to set default values for all Hopla options. \n\nHopla automatically recognizes environment variables starting with `HOPLA_`. \nAll option (such as `--difficulty` for `hopla add todo` and `--times` for `hopla feed`) can be \nset in this manner.\n\nTo get the right environment variable name, use this logic:\n\n1. Define an environment variable starting with `HOPLA_`\n\n2. Append the subcommand to the environment variable as follows:\n    * `hopla add todo` -\u003e `HOPLA_ADD_TODO_`\n    * `hopla support-development` -\u003e `HOPLA_SUPPORT_DEVELOPMENT_`\n    * `hopla feed` -\u003e `HOPLA_FEED_`\n \n3. Append the option name that you want to set as follows:\n    * `hopla add todo --difficulty` -\u003e `HOPLA_ADD_TODO_DIFFICULTY`\n    * `hopla support-development --gems` -\u003e `HOPLA_SUPPORT_DEVELOPMENT_GEMS`\n    * `hopla feed --times` -\u003e `HOPLA_FEED_TIMES`\n\n\nFor example:\n\n```bash\nHOPLA_ADD_TODO_DIFFICULTY=hard    hopla add todo \"Hello\"\nHOPLA_SUPPORT_DEVELOPMENT_GEMS=8  hopla support-development\nHOPLA_FEED_AMOUNT=3               hopla feed Wolf-Shade Chocolate\n````\n\n\nOther examples:\n\n```bash\n# add a To-Do for today\nHOPLA_ADD_TODO_DUE_DATE=today hopla add todo \"Task with Deadline from today\"\n\n# automatically enable autocomplete for bash \nHOPLA_COMPLETE_ENABLE=true    hopla complete bash\nHOPLA_COMPLETE_ENABLE=yes     hopla complete bash\nHOPLA_COMPLETE_ENABLE=1       hopla complete bash\n\n# only print autocomplete for bash\nHOPLA_COMPLETE_ENABLE=0       hopla complete bash   \nHOPLA_COMPLETE_ENABLE=false   hopla complete bash   \nHOPLA_COMPLETE_ENABLE=no      hopla complete bash   \n```\n\n### Background\n\nHopla is a XDG-compliant bash-based command line interface (CLI). \nIt was created because no other CLI supported the creation of To-Dos with both a \ndue date and a checklist. \nHopla provides the following command to create these with the following command:\n\n```bash\n# Add a hard To-Do. Every line in the specified file will being added as\n#  an item of this To-Do's checklist.\nhopla add todo --difficulty hard \\\n               --due-date 2027-12-07 \\\n               --checklist ./my_todo.txt \\\n               \"my todo name here\"\n```\n\nThe most simple way to add a To-Do would be to run `hopla add todo` without arguments.\nHopla will then prompt you for a To-Do name:\n\n```bash\n$ hopla add todo\nPlease provide a name for your todo: Feed the dog\n```\n\n\n\n\n\n\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmelvio%2Fhopla","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmelvio%2Fhopla","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmelvio%2Fhopla/lists"}