Package: indydevtools
IndyDevToolsAn opinionated, Agentic Engineering toolbox powered by LLM Agents to solve problems autonomously.Table of ContentsIndyDevToolsTable of ContentsUsage, maintenance plan, and usage guide of this toolTool OverviewPrinciples> USE THE RIGHT TOOL (AGENT) FOR THE JOB> EVERYTHING IS A FUNCTION> GREAT QUESTIONS YIELD GREAT ANSWERS> CREATE REUSABLE BUILDING BLOCKS> Prompts (Agents) are THE new fundamental unit of programmingDirectory StructureUpcoming Tool (Live, Planned, Maybe)Tool Guide✍️ Simple Prompt System (idt sps)Use caseGet StartedspsCommandsidt sps helpidt sps configidt sps promptidt sps listidt sps getApplication Flow Diagramidt spsImprovements / What's Next📹 Multi Agent Youtube Metadata Generation (idt yt)Use caseGet StartedytCommandsyt titlesCommandsyt scriptCommandsyt descCommandsyt tagsCommandsyt refsCommandsyt thumbCommandsApplication Flow Diagramidt ytImprovements / What's NextThe Configuration FileconfigCommandsStructureDeveloper CommandsDeployInstallVideo SeriesResourcesUsage, maintenance plan, and usage guide of this toolIndyDevTools is a suite of tools focused on solving problems using AI agents.The each tool, down to the code is designed to be highly modular, and composable, so you can use the tools in combination with each other, or use them on their own to solve specific problems.This tool was created to solve problems utilizing agents, and to share ideas, principles, and patterns that can help you thrive in the rapidly expanding age of AI.This repo is highly opinionated, as it's a principle driven project designed to solve specific problems that I run into on a consistent basis.If you have a solution to a problem that you think should be included, feel free to crack open a PR.If you see, or think of a tool that's missing that would be beneficial to all users, feel free to crack open an issue.Feel free to fork it and make it your own.Tool OverviewSimple Prompt SystemYoutube Metadata GenerationPrinciplesPrinciples drive decisions, decisions drive actions, actions drive results.
Understanding the principles behind a tool will help you understand how to use it, and how to use it effectively.> USE THE RIGHT TOOL (AGENT) FOR THE JOBEvery tool in this toolbox consists of one or more agents designed to solve a specific set of problems.Agent > Code > Manual InputCRUD[:2]-> Prefer Create, and Read over Update, and Delete when using AI Agents> EVERYTHING IS A FUNCTIONEvery tool in this toolbox is a function that takes inputs and returns outputs.Every function can be called on it's own in isolation, or used in combination with other functions to create a more complex process.By treating every critical unit of code as a function, we can create a library of reusable building blocks that can be used to solve many problems.> GREAT QUESTIONS YIELD GREAT ANSWERSAt the core of every product, there is a question that it attempts to answer.The quality of the answer is directly proportional to the quality of the question.IndyDevTools attempts to answer the question:"What's the best way to build multi-agent systems that can solve problems autonomously on my behalf?"The harsh truth is that the answer to your question is buried in questions, experiments, failed attempts, and iterations. IndyDevTools is an ongoing experiment to answer the question of how to build multi-agent systems that can solve problems autonomously on your behalf.> CREATE REUSABLE BUILDING BLOCKSIn the age of AI where code, data, and models are becoming a commodity, the most valuable thing you can create is a reusable building block that can be used to solve many problems.Build small, composable, and reusable functions that can be used together, or only one at a time.> Prompts (Agents) are THE new fundamental unit of programmingJust like loops, variables, and functions, we treat prompts as a fundamental unit of programming.In the age of AI, prompts are the most powerful way to design, build, and engineer systems that can solve problems autonomously on your behalf.They should be treated with the same level of respect (as time goes on, even more) and care as any other fundamental unit of programming.Directory StructureUpcoming Tool (Live, Planned, Maybe)[Live ✅] Multi Agent Youtube Metadata Generation (idt yt)[Live ✅] Simple Prompt System (idt sps)[Planned 📆] Sora video generation tool (idt sora)[Maybe 🟡] OpenAI Assistant tool (idt oass)[Maybe 🟡] Git Diff AI Peer Review (portdiffbro) (idt dbro)[Maybe 🟡] Midjourney Image Generator[Maybe 🟡] Fast Notion Idea DumpTool Guide✍️ Simple Prompt System (idt sps)This tool is a simple system to help you reuse and run your prompts.Use caseIf you've created a great prompt and proceeded to lose track of it or forget it this tool is for you. Maybe you built a prompt that debugs code for you, writes tests, generates docs, generates marketing content, helps you ask questions about a topic, or helps you generate ideas. This tool will help you save, edit, run and reuse your prompts.You have a set of prompts that you use frequently and want to streamline the process of running these prompts with different variables.The Simple Prompt System (idt sps) allows you to define templates for these prompts and quickly execute them with custom variables, saving you time by reusing your favorite prompts.The best way to get started is to runidt sps prompt -a "pyq" -p "reverse a string"to see how the system works.Then you can runidt sps configto view the configuration file and add your own prompt templates.Since this is a CLI app, you can pipe the output of the prompt to a file, or to your clipboard, or right into another command. For example, you can runidt sps prompt -a "pyq" -p "reverse a string" | pbcopyto copy the output of the prompt to your clipboard and throw it into your code editor.Get StartedInstall IndyDevToolspipinstallindydevtoolsInitialize and view the configuration file for the Simple Prompt SystemidtspsconfigThis will print open your configuration file in your default editor based on the file type, allowing you to view, open and edit your prompt templates.Add or edit prompt templates in the configuration file as needed.Run a test command to execute a promptidtspsprompt-a"pyq"-p"reverse a string"Verify the output of the prompt in the console.Open the config and add your own prompt templates for rapid reuse.spsCommandsidt sps helpidt sps --helpView all available commands for the Simple Prompt System.idt sps configidt sps config -p?Open the configuration file to the console, creates the file if it doesn't exist.Inputs-p(optional): A flag to only print the configuration file to the console.OutputsThe configuration file content printed to the console or opened in the default editor.idt sps promptidt sps prompt -a <alias> -p <prompt> -v? <vars> -ns?Run a prompt using a template with custom variables.Inputs-a: The alias for the prompt template.-p: The prompt to run.-v(optional): Custom variables in key=value format separated by commas.'-ns' (optional): No stream, dont stream the output of the prompt to the console.OutputsThe result of the prompt streamed to the console.idt sps listidt sps listList all available prompt templates.InputsNoneOutputsThe list of all available prompt templates.idt sps getidt sps get -a <alias>Get the prompt template for the given alias.Inputs-a: The alias for the prompt template.OutputsThe prompt template.Application Flow Diagramgraph LR
A["I want to call one of my prompts"]
AV["I want to call one of my prompts with variables"]
AA["I want to save/edit this prompt for reuse"]
AAA["I want to list my existing prompts"]
AAAA["I want to view one of my prompts"]
B["I need help with the commands"]
C["I want to view the configuration file"]

subgraph Simple Prompt System
    API1["idt sps prompt 'alias' -p 'prompt'"]
    API1V["idt sps prompt 'alias' -p 'prompt' -v? 'key1=value1,key2=value2'"]
    API2["idt sps --help"]
    API3["idt sps list"]
    API4["idt sps get -a 'alias'"]
    API5["idt sps config"]
    API6["idt config view"]
end

subgraph Output
    OUTPUT1["Response of your prompt"]
    OUTPUT2["Help information"]
    OUTPUT3["List of all available prompt templates"]
    OUTPUT4["Prompt template for the given alias"]
    OUTPUT5["Configuration file content"]
end

A --> API1
AV --> API1V
API1V --> OUTPUT1
AA --> API6
AAA --> API3
AAAA --> API4
B --> API2
C --> API5

API1 --> OUTPUT1
API2 --> OUTPUT2
API3 --> OUTPUT3
API4 --> OUTPUT4
API5 --> OUTPUT5
API6 --> OUTPUT5idt spsImprovements / What's Next[] Addidt sps new -a 'alias' -pt 'prompt template' -n? 'name' -d? 'description'feature to save a new prompt template into the configuration file.📹 Multi Agent Youtube Metadata Generation (idt yt)This tool generates the metadata for a youtube video.Use caseYou've just finished rendering a video to upload to youtube, and you need to generate the metadata for the video. This tool will help you generate the title, description, tags, and thumbnail for the video.It's not meant to be a 100% replacement for your metadata, but it's meant to jump start you to 80% completion.The best command to run isidt yt gen-meta-autowhich will walk you through key steps to generate the metadata for your video. It willTranscribe the videoPrompt you for key information likeRough Draft TitleSEO KeywordsHow many iterations of the title, description, and thumbnail you want to generateGenerate multiple titles, descriptions, and thumbnails for you to choose fromThe description will combine the hashtags, references, and the descriptionGenerate the final metadata for you to upload to youtubeIn addition to outputting these assets to thefinal/directory, it will also output the drafts to thedrafts/directory so you can review them and make any changes if necessary.The goal is to make it as easy as possible to generate the metadata for your video, and to make it as easy as possible to make changes to the metadata if necessary.Get StartedInstall IndyDevToolspipinstallindydevtoolsView and initialize the configuration fileidtytconfig(oridtconfigview)This will create the configuration file if it doesn't exist and the/draftsand/finaldirectories in the operating directory.Edit the configuration file to add your openai key and path to your audio/video filesRun a test commandidtytthumbcreate-p"bird writing code"oridtyttitlescreate-r"Using AI Coding Assistants to code faster than ever"Make sure the thumbnail was created in the<config.yt.operating_dir>/draftsdirectoryRun the full metadata generation commandidtytgen-meta-autoSeeCommandsfor more informationytCommandsidt yt --helpview all available commandsidt yt configDump the configuration file to the console, creates the file if it doesn't existyt titlesCommandsidt yt titles create -r <rough_draft_title> -s? <script_file.txt> -c? <count> -k? <seo_keywords>Generate a title for a youtube videoInputs-r: The rough draft title-s(optional): The script file to use-c(optional, default1): The number of titles to generate-k(optional): The SEO keywordsOutputsA file with the generated titles in<config.yt.operating_dir>/drafts/titles.jsonyt scriptCommandsidt yt script transcribe --file <video_file> --json? <create_json_file> --seconds? <duration_limit_in_sec>Transcribe the audio of a video file into text.Inputs-f: The path to the video file to transcribe.-j(optional, defaultFalse): Create an additional JSON file of the transcript with segments and word timestamps.-s(optional, default120): The maximum seconds to process.OutputsA transcript of the video's audio. If-jis used, a JSON file with the transcript will be created in the<config.yt.operating_dir>/transcriptsdirectory.yt descCommandsidt yt desc composeCompose a description given a completed draft directory.Inputs<config.yt.operating_dir>/draft/descriptions.json<config.yt.operating_dir>/draft/hashtags.json<config.yt.operating_dir>/draft/references.txt(optional)OutputsThe finalized description ready for youtube in<config.yt.operating_dir>/final/description.txtidt yt desc create -s <script_file> -r? <rough_draft_title> -c? <count> -k? <seo_keywords>Create a new description for a video.Inputs-s: The path to the script file.-r(optional): The rough draft title of the video.-c(optional, default3): The number of descriptions to generate.-k(optional): SEO keywords to be included in the description.OutputsA file with the generated descriptions in<config.yt.operating_dir>/drafts/descriptions.jsonidt yt desc iterate <prompt> <description>Iterate over the description to improve it. (Note: This command is currently not implemented.)yt tagsCommandsidt yt tags composeCompose the final set of hashtags for a video.Inputs/draft/hashtags.jsonOutputsFinalized/final/hashtags.txtwith a list of tags to use in the video.idt yt tags create --title <rough_draft_title> --keywords <seo_keywords>Generate hashtags for a video (list of 10 comma sep, and top three).Inputs--r: The rough draft title of the video.--k: The SEO keywords for the video.OutputsTags and top three hashtags for the video output to/draft/hashtags.json.yt refsCommandsidt yt refs format -r <references> -t <rough_draft_title> -k? <seo_keywords>Format the references for a video.Inputs-r: The references (links) to format.-t: The rough draft title of the video.-k(optional): The SEO keywords for the video.OutputsFormatted references output to/draft/references.txt.yt thumbCommandsidt yt thumb composeCompose the final thumbnail for a video.Inputs/draft/thumbnail_<count>.pngOutputsFinalized/final/thumbnail.pngthumbnail to use in the video.idt yt thumb create_from_prompt -c <count>Create thumbnails from a generated prompt.Inputs-c: The number of thumbnails to create from a selected prompt.Outputs/drafts/thumbnail_<count>.pngthumbnail drafts to potentially use in the video.idt yt thumb create_prompt -r <rough_draft_title> -k <seo_keywords> -c <count> -a <art_style>Create a prompt for generating a thumbnail.Inputs-r: The rough draft title of the video.-k: The SEO keywords for the video.-c: The number of thumbnail prompts to create.-a: The art style to be used in the thumbnail.Outputs/draft/thumbnail_prompt.jsonwith the generated thumbnail prompts.idt yt thumb create -p <prompt> -c <count>Create an image with the specified prompt and download it.Inputs-p: The prompt to create thumbnail with.-c: The number of thumbnails to create.Outputs/draft/thumbnail_<count>.pngthumbnail drafts to potentially use in the video.idt yt thumb rescale -f <image_file_path> -w <width> -h <height> -o <output_file>Rescale an image to the specified width and height. Defaults to youtube thumbnail size.Inputs-f: The path to the input image file.-w(default 1280): The width to rescale the image to.-h(default 720): The height to rescale the image to.-o(default input file path): The path to the output image file.OutputsThe rescaled image saved to the specified output file.Application Flow Diagramgraph LR
Z[Rendered YouTube Video]

subgraph Youtube Metadata Automation Tool
    A[Generate Youtube Metadata]
    B(Transcribe - CODE)
    C{Script Ready}
    D(Generate Title - LLM AGENT)
    E(Generate Description - LLM AGENT)
    F(Generate Thumbnails - LLM AGENT)
    G(Resize Thumbnails - CODE)
    H{Title Ready}
    I{Description Ready}
    K{Resized Thumbnails Ready}
    L[[Review for Upload - MANUAL INPUT]]
    N(Format References - CODE)
    O{References Ready}
    P(Generate Hashtags - LLM AGENT)
    Q{Hashtags Ready}
    R(Compose Hashtags - CODE)
    S(Compose Description - CODE)
    T(Compose Title - CODE)
    U(Compose Thumbnail - CODE)
end

M[Upload to YouTube]

Z --> A
A --> B
B --> C
C --> D
C --> E
A --> F
F --> G
A --> B
D --> H
E --> I
G --> K
L --> M
A --> N
N --> O
A --> P
P --> Q
O --> S
R --> L
S --> L
T --> L
U --> L
I --> S
H --> T
K --> U
Q --> R
Q --> Sidt ytImprovements / What's Next[] Stream text responses and print them to the console/logs as they come in.[] Add support for Gemini models[] Add support for local models (start w apis/ollama)[] Create 'Trending' agents to find topics that are trending based on a few keywordsidt yt trending -k <keywords> -n <number of results>[] Script SEO keyword extractionidt yt script extract-seo -s <script_file>[] Create SEO Keyword Agent that researches related SEO keywords based on a topic or the scriptidt yt script research-seo -t <topic> -s <script file> -n <number of results>[] Add logging so we can see where the log is coming from (what file + function)https://chat.openai.com/c/d2ae52f4-0706-4cec-b047-3364bea3bd05[] Add 'tone' to description to reduce buzzwordyness[] Implementthumb iterateto improve an image[] Implementdesc iterateto improve a description[] Implementtitles iterateto improve a description[] Improved 'inquirer' prompts that hold terminal scroll position[] Make the code run in parallel, right now it's running one by one, this is inefficient[] Add a loader to let users know which state the application is inThe Configuration FileThe configuration file is the primary source of truth for all the tools in the IndyDevTools suite.configCommandsidt config view [--only-print|-p]View the configuration file. Use the--only-printor-poption to only print the configuration file to the console without opening it in the editor.Inputs--only-printor-p(optional): A flag to only print the configuration file to the console.OutputsThe configuration file content printed to the console or opened in the default editor.StructureSee each tool's documentation for the structure of the configuration file for that tool.yt:config_file_path:<path to this config file for you to open and edit>openai_api_key:<your openai api key will fallback to env var OPENAI_API_KEY>operating_dir:<Path to your rendered video/audio, also the output path where the /draft and /final assets that will be generated>sps:config_file_path:<path to this config file for you to open and edit>openai_api_key:<your openai api key will fallback to env var OPENAI_API_KEY>templates:-alias:<alias>description:<description>name:<name>prompt_template:<prompt_template>variables:-default:<default>description:<description>name:<name>Developer Commands(deploy, publish)DeployBump version inpyproject.toml: versionpublish to test pypipoetry run python scripts/publish_testpypi.pypublish to pypipoetry run python scripts/publish_pypi.pyInstallInstall bleeding edge test version fromTestPyPipip install --upgrade --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple indydevtoolsInstall public version fromPyPipip install indydevtoolsVideo SeriesJoin the discussion - watch the videos that created this tool.Part 1:How to Engineer Multi-Agent Tools: LLM PrinciplesPart 2:Apple Vision Pro & LLMs: Proof Of ConceptPart 3:Sora + Gemini: Building Adaptive LLM appsPart 4:Let Your AI Coding Assistant Write Your DocsResourcesIndyDevTools PyPihttps://pypi.org/project/indydevtools/IndyDevTools TestPyPihttps://test.pypi.org/project/indydevtools/IndyDevTools Repohttps://github.com/disler/indydevtoolsAider AI Coding Assistanthttps://aider.chat/Chat with async + parallelization + threadinghttps://chat.openai.com/c/73d1859d-fb3a-430e-9e04-be68b4d8a7bdTyper Docs For Multi Sub Commandshttps://typer.tiangolo.com/tutorial/subcommands/add-typer/Python openaihttps://github.com/openai/openai-python