{"id":48545135,"url":"https://github.com/mvaltas/devcli","last_synced_at":"2026-04-08T06:03:40.886Z","repository":{"id":24344315,"uuid":"27742179","full_name":"mvaltas/devcli","owner":"mvaltas","description":"A command line tool to create command line tools.","archived":false,"fork":false,"pushed_at":"2025-10-28T17:02:22.000Z","size":417,"stargazers_count":36,"open_issues_count":0,"forks_count":10,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-10-28T18:12:10.380Z","etag":null,"topics":["automation","productivity","programming"],"latest_commit_sha":null,"homepage":"https://devcli.io/","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/mvaltas.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":"CONTRIBUTING.rst","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2014-12-09T00:35:58.000Z","updated_at":"2025-10-28T17:02:26.000Z","dependencies_parsed_at":"2025-01-18T16:30:31.764Z","dependency_job_id":"cf9028b9-e802-482c-94b8-1c8ccd91f7d0","html_url":"https://github.com/mvaltas/devcli","commit_stats":null,"previous_names":["mvaltas/devcli","mavcunha/devcli"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mvaltas/devcli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mvaltas%2Fdevcli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mvaltas%2Fdevcli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mvaltas%2Fdevcli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mvaltas%2Fdevcli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mvaltas","download_url":"https://codeload.github.com/mvaltas/devcli/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mvaltas%2Fdevcli/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31542385,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T16:28:08.000Z","status":"online","status_checked_at":"2026-04-08T02:00:06.127Z","response_time":54,"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":["automation","productivity","programming"],"created_at":"2026-04-08T06:03:40.815Z","updated_at":"2026-04-08T06:03:40.881Z","avatar_url":"https://github.com/mvaltas.png","language":"Python","readme":"devcli - A command line tool to create command line tools\n=========================================================\n\nWhy\n---\n\nThere's probably no shortage of tools for developers. *devcli* came from two\nnecessities I had. First, I wanted to avoid memorizing complex command lines\nand the order of commands for daily repetitive tasks—something like `The\nGeneral Problem \u003chttps://xkcd.com/974/\u003e`_. During my time as a software\nconsultant, I had to memorize a lot of these commands for each new project. The\nsecond necessity was a consequence of the first. Since new commands had to be\nadded and removed easily, I needed a way to \"framework\" the creation of these\ncommands, and that's when I decided to create *devcli*.\n\nInstallation\n------------\n\nFor now the easiest way to use *devcli* is to clone this repository and\nusing `just \u003chttps://github.com/casey/just\u003e`_. You can install ``just`` using\n`homebrew \u003chttps://brew.sh/\u003e`_ on macOS. I don't have the resources to support\nother platforms. Dependencies are managed through `poetry \u003chttps://python-poetry.org/\u003e`_ so you need to install\nit too if you don't have it::\n\n    $ brew install just\n    $ git clone https://github.com/mvaltas/devcli.git\n    $ cd devcli\n    $ just install\n\nThis should be enough to install *devcli* and make it available on your path.\n\nUsage\n-----\n\nThis tool is designed with the principle of **discoverability**, which means\nthat to explore the tool you can run it without arguments and be able to explore\nthe commands available and find more about them::\n\n    devcli\n\n    Usage: devcli [OPTIONS] COMMAND [ARGS]...\n\n    ╭─ Options ────────────────────────────────────────────────────────────╮\n    │ --debug            Enable debug log                                  │\n    │ --verbose          Enable info log                                   │\n    │ --help             Show this message and exit.                       │\n    ╰──────────────────────────────────────────────────────────────────────╯\n    ╭─ Commands ───────────────────────────────────────────────────────────╮\n    │ example          Examples on how create cli commands with *devcli*   │\n    │ op               Shortcuts for 1Password CLI                         │\n    ╰──────────────────────────────────────────────────────────────────────╯\n\nExtending\n---------\n\n*devcli* will scan for directories called ``.devcli`` in these directories it will expect two things,\nother commands to load and a configuration file ``devcli.toml`` (which can be empty). You can check\nthe `example \u003chttps://github.com/mvaltas/devcli/blob/main/.devcli/example.py\u003e`_ for some examples\nof how you can extend. For the simplest case we can create a file ``hello.py`` in your ``.devcli``\ndirectory, like so::\n\n    import devcli.framework as cmd\n    cli = cmd.new(\"This is a hello world command\")\n    @cli.command()\n    def say():\n        \"\"\"Simply replies with a Hello, World!\"\"\"\n        print(\"Hello, World!\")\n\nOnce you did that, running *devcli* again you see a new command available called ``hello``::\n\n    $ devcli\n\n     Usage: devcli [OPTIONS] COMMAND [ARGS]...\n\n    ╭─ Options ────────────────────────────────────────────────────────────╮\n    │ --debug            Enable debug log                                  │\n    │ --verbose          Enable info log                                   │\n    │ --help             Show this message and exit.                       │\n    ╰──────────────────────────────────────────────────────────────────────╯\n    ╭─ Commands ───────────────────────────────────────────────────────────╮\n    │ example          Examples on how create cli commands with *devcli*   │\n    │ hello            This is a hello world command                       │\n    │ op               Shortcuts for 1Password CLI                         │\n    ╰──────────────────────────────────────────────────────────────────────╯\n\nThat's it, now you can run the ``--help`` to inspect your new command documentation::\n\n    $ devcli hello --help\n\n     Usage: devcli hello [OPTIONS] COMMAND [ARGS]...\n\n     This is a hello world command\n\n    ╭─ Options ───────────────────────────────────────────╮\n    │ --help          Show this message and exit.         │\n    ╰─────────────────────────────────────────────────────╯\n    ╭─ Commands ──────────────────────────────────────────╮\n    │ say          Simply replies with Hello, World!      │\n    ╰─────────────────────────────────────────────────────╯\n\nAnd if you call your new command::\n\n    $ devcli hello say\n    Hello, World!\n\nNow you have created your first *devcli* command. To learn more about how to create commands check\nthe `example \u003chttps://github.com/mvaltas/devcli/blob/main/.devcli/example.py\u003e`_ command for more\nadvanced options.\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmvaltas%2Fdevcli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmvaltas%2Fdevcli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmvaltas%2Fdevcli/lists"}