{"id":40777434,"url":"https://github.com/potatoqualitee/aitools","last_synced_at":"2026-01-21T19:13:17.000Z","repository":{"id":332678916,"uuid":"1034698742","full_name":"potatoqualitee/aitools","owner":"potatoqualitee","description":"🧠 PowerShell wrapper for AI coding assistants with batch processing, persistent config, and Pester v4→v5 migration automation","archived":false,"fork":false,"pushed_at":"2026-01-15T06:59:31.000Z","size":841,"stargazers_count":53,"open_issues_count":0,"forks_count":6,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-01-15T07:35:58.576Z","etag":null,"topics":["ai","aider","automation","claude","claude-code","cli","codex","gemini","gemini-cli","github-copilot","github-copilot-cli","openai-codex","openai-codex-cli","powershell"],"latest_commit_sha":null,"homepage":"","language":"PowerShell","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/potatoqualitee.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,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-08-08T20:36:08.000Z","updated_at":"2026-01-15T06:59:34.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/potatoqualitee/aitools","commit_stats":null,"previous_names":["potatoqualitee/aitools"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/potatoqualitee/aitools","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/potatoqualitee%2Faitools","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/potatoqualitee%2Faitools/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/potatoqualitee%2Faitools/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/potatoqualitee%2Faitools/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/potatoqualitee","download_url":"https://codeload.github.com/potatoqualitee/aitools/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/potatoqualitee%2Faitools/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28640572,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-21T18:04:35.752Z","status":"ssl_error","status_checked_at":"2026-01-21T18:03:55.054Z","response_time":86,"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":["ai","aider","automation","claude","claude-code","cli","codex","gemini","gemini-cli","github-copilot","github-copilot-cli","openai-codex","openai-codex-cli","powershell"],"created_at":"2026-01-21T19:13:16.931Z","updated_at":"2026-01-21T19:13:16.989Z","avatar_url":"https://github.com/potatoqualitee.png","language":"PowerShell","readme":"# aitools\n\n[![PowerShell Gallery](https://img.shields.io/powershellgallery/v/aitools)](https://www.powershellgallery.com/packages/aitools)\n[![Downloads](https://img.shields.io/powershellgallery/dt/aitools)](https://www.powershellgallery.com/packages/aitools)\n[![GitHub Stars](https://img.shields.io/github/stars/potatoqualitee/aitools?style=social)](https://github.com/potatoqualitee/aitools)\n\n\u003cimg align=\"left\" src=\"https://raw.githubusercontent.com/potatoqualitee/aitools/main/logo.png\" alt=\"aitools logo\" width=\"96\"\u003e\n\n**Batch-process your code with AI CLI editors.**\n\naitools is a PowerShell module that wraps AI coding assistants like Claude Code, Aider, Gemini CLI, and GitHub Copilot CLI. It automates code refactoring, migrations, and documentation tasks by making these AI tools scriptable through PowerShell.\n\n\u003cbr clear=\"left\"/\u003e\n\n---\n\n## What is aitools?\n\naitools wraps *agentic CLI tools* - AI assistants that actually read, understand, and rewrite your code - and makes them scriptable through PowerShell. Every run starts fresh with no conversation drift, just consistent output.\n\n**In 30 seconds:**\n\n```powershell\n# Install the module\nInstall-Module aitools\n\n# Install Claude\nInstall-AITool -Name Claude\n\n# Migrate all your Pester tests from v4 to v5\nGet-ChildItem tests\\*.Tests.ps1 | Update-PesterTest\n```\n\naitools handles the AI coordination, file I/O, and change tracking while giving you PowerShell's predictability.\n\n---\n\n## Why I built this\n\nEach AI CLI has different flags, installation steps, and quirks. Processing 100 files means clicking through each one in an IDE or writing shell scripts that break when the CLI changes. I built a wrapper and figured I'd share it.\n\n**What it does:**\n\n- One consistent interface across multiple AI CLIs\n- Simple batch operations: pipe files in, get results out\n- Handles installation, updates, and configuration\n- Tracks changes for review before committing\n\nEach file is processed in a fresh session, which means consistent output without conversation drift. Parallel processing, automatic retry logic, and the ability to skip already-modified files make it practical for large-scale operations.\n\n---\n\n# Getting started\n\n## Requirements\n\n- PowerShell 3+ or later\n- Windows, Linux, or macOS\n\n## Install aitools\n\n```powershell\nInstall-Module aitools -Scope CurrentUser\n```\n\n## Install AI tools\n\nPick the AI assistant you want:\n\n```powershell\n# Install one\nInstall-AITool -Name Claude\n\n# Install a specific version\nInstall-AITool -Name Claude -Version 2.0.52\n\n# Install a specific version and auto-remove other versions\nInstall-AITool -Name Aider -Version 0.45.0 -UninstallOtherVersions\n\n# Or several tools\nInstall-AITool -Name Gemini, Aider\n\n# Or all of them\nInstall-AITool -Name All\n```\n\n### Installation Scope (Linux)\n\nBy default, tools install to user-local directories (`CurrentUser` scope) without requiring elevated privileges. On Linux, you can optionally install system-wide:\n\n```powershell\n# User-local installation (default, no sudo required)\nInstall-AITool -Name Aider -Scope CurrentUser\n\n# System-wide installation (requires sudo on Linux)\nInstall-AITool -Name Gemini -Scope LocalMachine\n```\n\nWhen using `-Scope LocalMachine` on Linux:\n- You'll be prompted for your sudo password if needed\n- Prerequisites (Node.js, pipx) are installed via apt-get\n- Tools are available to all users on the system\n\nOn macOS, Homebrew handles installations without requiring sudo, so both scopes work without elevated privileges.\n\n## Set your default\n\n```powershell\nSet-AIToolDefault -Tool Claude\n```\n\nNow any aitools command will use Claude unless you specify otherwise.\n\n---\n\n# Quick examples\n\n## Migrate test frameworks\n\n```powershell\nGet-ChildItem ./tests/*.Tests.ps1 | Update-PesterTest\n```\n\nUpdates your Pester v4 tests to v5 syntax, handling BeforeAll/AfterAll blocks, Context/Describe changes, and parameter validation.\n\n## Add documentation\n\n```powershell\nGet-ChildItem ./public/*.ps1 |\n  Invoke-AITool -Prompt \"Add complete comment-based help with 3 examples\"\n```\n\n## Enforce code style\n\n```powershell\nGet-ChildItem *.ps1 -Recurse |\n  Invoke-AITool -Prompt \"Apply One True Brace Style formatting\"\n```\n\n## Compare multiple AI tools\n\n```powershell\nInvoke-AITool -Path ./script.ps1 -Prompt \"Optimize this\" -Tool All\n```\n\nRuns the same task through all installed AI tools and compares results.\n\n## Choosing the right tool\n\n```powershell\n# Complex refactoring: Claude for deep understanding\nGet-ChildItem src\\*.ps1 | Invoke-AITool -Tool Claude -Prompt ./prompts/refactor-dependency-injection.md\n\n# Large-scale refactoring: Gemini for massive context (entire codebase awareness)\nGet-ChildItem src\\*.ps1 | Invoke-AITool -Tool Gemini -Prompt ./prompts/modernize-ps7.md\n\n# Quick metadata fixes: Copilot for speed\nGet-ChildItem recipes\\*.md | Invoke-AITool -Tool Copilot -Prompt ./prompts/fix-recipe-metadata.md\n\n# T-SQL case sensitivity: Copilot for fast processing\nGet-ChildItem sql\\*.sql | Invoke-AITool -Tool Copilot -Prompt \"Convert all keywords to uppercase\"\n\n# Blog updates: Copilot for rapid content corrections\nGet-ChildItem blog\\*.md | Invoke-AITool -Tool Copilot -Prompt ./prompts/update-blog-links.md\n```\n\n---\n\n# Supported AI Tools\n\n| Tool | Best For | Pricing | Status |\n| --- | --- | --- | --- |\n| **Claude** | Complex refactoring, architectural changes | Subscription | ✅ Supported |\n| **Gemini CLI** | Massive context (1M tokens), multimodal | Free + paid | ✅ Supported |\n| **Copilot** | Fast tasks, blog updates, GitHub workflow | Free + paid | ✅ Supported |\n| **Aider** | Reliable diffs, fast iteration | Free + paid | ✅ Supported |\n| **Codex CLI** | Fast processing, vision support | Subscription | ✅ Supported |\n| **Cursor AI** | IDE integration | Free + paid | ✅ Supported |\n| **Ollama** | Offline use, completely free | Free | ✅ Supported |\n| **PSOpenAI** | Image/video/audio generation | Pay-per-use | ✅ Supported |\n\n## Which one to use\n\n- **Claude** excels at complex refactoring and architectural changes where deep code understanding is critical, but can struggle with files over 400 lines\n- **Gemini 3** handles complex refactoring with a massive 1 million-token context window, allowing you to process entire large codebases in one session. Strong at multimodal understanding (code, images, video, audio) and offers a generous free tier\n- **Copilot** shines for fast, focused tasks like blog updates, T-SQL case conversion, metadata fixes, or quick content corrections\n- **Ollama** runs completely offline with no API costs\n\n\u003e **Note:** PSOpenAI is a PowerShell module wrapper (not a CLI), providing capabilities that agentic tools don't yet support like image editing, video generation, and text-to-speech.\n\n\u003e **Tool Name Change:** As of v1.0.5, `ClaudeCode` has been renamed to `Claude` and `GitHubCopilot` to `Copilot` for simplicity. The old names still work as aliases for backward compatibility.\n\n## How it differs from API wrappers\n\nMost of aitools wraps *agentic CLI tools* - AI assistants that read, understand, and rewrite code - but it also includes [PSOpenAI](https://github.com/mkht/PSOpenAI) for image/video/audio generation and editing.\n\n| API Wrappers (like PSOpenAI)             | Agentic CLI Tools (like Claude Code)        |\n| ---------------------------------------- | -------------------------------------------- |\n| Send prompts, receive text/media         | Open files, understand code, make edits      |\n| You handle file I/O and context          | Built-in file management and context         |\n| Great for generating new content         | Great for refactoring existing code          |\n| Excels at image/video/audio generation   | Specialized for code editing workflows       |\n\nPSOpenAI support is included for image editing and generation capabilities that CLI tools don't yet provide.\n\n---\n\n# How it works\n\n## The three-step process\n\nEvery aitools operation follows the same pattern:\n\n1. **Input** - Provide files and a prompt\n2. **Processing** - AI reads, understands, and edits\n3. **Review** - You see diffs and decide to keep or discard\n\nThis mirrors manual code review but scales to hundreds of files.\n\n## Prompts and context\n\nYou can provide:\n\n- **Inline prompts**: Quick instructions right in the command\n- **Prompt files**: Reusable `.md` files with detailed instructions\n- **Context files**: Reference docs, style guides, API specifications\n\nExample with all three:\n\n```powershell\n$params = @{\n    Path            = \"./src/*.ps1\"\n    PromptFilePath  = \"./prompts/api-migration.md\"\n    ContextFilePath = @(\n        \"./docs/new-api-spec.md\",\n        \"./docs/style-guide.md\"\n    )\n    Tool            = \"Claude\"\n}\nInvoke-AITool @params\n```\n\nThe AI reads the prompt for what to do, the context for how to do it, and processes each file accordingly.\n\n---\n\n# Real-World Examples\n\n## Case Study: Modernizing a Windows Module\n\nThe [BurntToast](https://github.com/Windos/BurntToast) module wraps Windows notification APIs. When Microsoft updated from Windows 10 to Windows 11 APIs, the module needed refactoring across multiple files.\n\n```powershell\n$params = @{\n    Path            = \"./burnttoast/*.ps1\"\n    PromptFilePath  = \"./prompts/api-upgrade.md\"\n    ContextFilePath = @(\n        \"./docs/windows11-toast-sdk.md\",\n        \"./docs/styleguide.md\"\n    )\n    Tool            = \"Claude\"\n}\nInvoke-AITool @params\n```\n\nThis handled namespace changes, XML property renames, and layout differences, automatically refactoring the entire module.\n\n## Case Study: Updating dbatools.io Blog\n\nThe [dbatools.io blog](https://dbatools.io) needed systematic updates to fix broken links, deprecated commands, outdated screenshots, and stale Twitter embeds. This required judgment, not mechanical find-replace.\n\n**Requirements:**\n\n- Fix broken links but preserve historical context\n- Remove Twitter/X embeds while keeping meaning\n- Convert PowerShell screenshots to Hugo shortcodes\n- Update deprecated command names\n- Consider splatting for readability (but not blindly)\n- Maintain author voice and historical accuracy\n\n**Solution:**\n\n```powershell\nSet-AIToolDefault -Tool Claude\nGet-ChildItem *.md | Invoke-AITool -Prompt ./prompts/audit-blog.md\n```\n\nUsing a 300-line prompt that encoded all the nuance, Claude processed hundreds of posts, making judgment calls throughout:\n\n- Tested and replaced dead links\n- Converted Twitter embeds to paraphrased statements\n- Extracted commands from screenshots and converted to shortcodes\n- Applied splatting only where it improved clarity\n- Updated deprecated references while preserving historical context\n\nThis demonstrates what agentic CLIs do well: read complex requirements, maintain context, and exercise judgment at scale.\n\n---\n\n## Advanced Usage\n\n### PDF to Structured Data Extraction\n\nConvert PDFs to images and extract structured data using AI vision:\n\n```powershell\n# Convert PDF to images and extract data as JSON\n$params = @{\n    Tool    = \"Claude\"\n    Prompt  = \"Extract pet immunization data from this image\"\n    Context = \"./Tests/pdf/immunization.json\"\n}\n\nGet-ChildItem ./Tests/pdf/immunization.pdf | ConvertTo-AITImage | Invoke-AITool @params\n```\n\n`ConvertTo-AITImage` automatically installs [pdf2img](https://github.com/potatoqualitee/pdf2img) on first use and converts PDFs to PNG images optimized for AI vision models. When you pass a single `.json` file as context, aitools automatically instructs the AI to return raw JSON (no markdown fences) for direct parsing with `ConvertFrom-Json`.\n\n**Free Tier Example: Extract and Write to SQL Server**\n\nUsing Copilot's free tier with GPT-5-mini, you can extract structured data and write directly to a database:\n\n```powershell\n$params = @{\n    Tool    = \"Copilot\"\n    Model   = \"gpt-5-mini\"\n    Raw     = $true\n    Prompt  = \"Extract data from this image as JSON matching the context schema.\"\n    Context = \"./Tests/pdf/immunization.json\"\n}\n\nGet-ChildItem ./Tests/pdf/immunization.pdf |\n    ConvertTo-AITImage |\n    Invoke-AITool @params |\n    ConvertFrom-Json |\n    Select-Object -ExpandProperty vaccinations |\n    Write-DbaDataTable -SqlInstance localhost -Database tempdb -Table vaccinations -AutoCreateTable\n```\n\n\u003e **Tip:** Free tier models can be inconsistent. For reliable results at minimal cost, use Claude Haiku 4.5 (`claude-haiku-4-5`) at $0.33 per 1K calls - it's remarkably capable for structured extraction. GPT-5-mini is the best free option; avoid GPT-4.1 for this task.\n\nIf the model returns extra data, filter the JSON objects:\n\n```powershell\n# Filter to only records containing \"immunization\"\n... | ConvertFrom-Json | Where-Object { $PSItem -match \"immunization\" }\n```\n\n```powershell\n# Pipeline-friendly: returns FileInfo objects\n$images = Get-ChildItem *.pdf | ConvertTo-AITImage\n\n# Adjust DPI for quality vs file size tradeoff\nGet-ChildItem document.pdf | ConvertTo-AITImage -DPI 300\n\n# Mix PDFs with other files using -PassThru\nGet-ChildItem ./docs | ConvertTo-AITImage -PassThru | Invoke-AITool -Prompt \"Analyze these files\"\n```\n\n### Working with Images\n\n**Image Analysis and Code Generation (Codex, Claude, Gemini)**\n\nVision-capable tools can analyze images and generate code based on visual input:\n\n```powershell\n# Using the -Attachment parameter\nInvoke-AITool -Tool Codex -Attachment design.png -Prompt \"Create a Hugo website using colors from this design\"\n\n# Piping image files directly (Codex treats them as attachments)\nGet-ChildItem screenshot.png | Invoke-AITool -Tool Codex -Prompt \"What UI framework was used?\"\n\n# Other tools treat piped images as regular files for analysis\nGet-ChildItem diagram.png | Invoke-AITool -Tool Claude -Prompt \"Describe this architecture\"\n```\n\nThe `-Attachment` parameter works with common image formats (PNG, JPG, GIF, etc.). Codex automatically treats piped image files as attachments, while other vision-capable tools analyze them as regular files.\n\n**Image Editing and Generation (PSOpenAI)**\n\nPSOpenAI provides direct image manipulation capabilities that CLI tools don't yet support:\n\n```powershell\n# Install and configure PSOpenAI\nInstall-AITool -Name PSOPenAI\nInitialize-AITool -Tool PSOPenAI\n$env:OPENAI_API_KEY = 'sk-your-api-key'\n\n# Edit an existing image\nGet-ChildItem C:\\images\\photo.png |\n  Invoke-AITool -Tool PSOPenAI -Prompt \"remove the background and add a white sticker border. make transparent. save with descriptive name\"\n\n# Generate a new image from text\nInvoke-AITool -Tool PSOPenAI -Prompt \"A serene mountain landscape at sunset\"\n```\n\n**Key Differences:**\n- **Codex** (and other CLI tools with vision): Analyze images and write code/scripts to manipulate them\n- **PSOpenAI**: Directly edit or generate images through OpenAI's image API endpoints\n\n**Authentication:** PSOpenAI requires an OpenAI API key. Set `$env:OPENAI_API_KEY` or run `Initialize-AITool -Tool PSOPenAI` for configuration instructions.\n\n### Extended Thinking / Reasoning\n\nEnable deeper reasoning for supported models (Claude, Aider, Codex, Cursor):\n\n```powershell\n# Claude: triggers extended thinking tokens\nInvoke-AITool -Path complex.ps1 -Tool Claude -ReasoningEffort high\n\n# Codex: uses OpenAI's o1/o3 reasoning models\nInvoke-AITool -Path complex.ps1 -Tool Codex -ReasoningEffort medium\n\n# Aider: enables reasoning-capable models\nInvoke-AITool -Path complex.ps1 -Tool Aider -ReasoningEffort low\n```\n\nReasoning effort levels: `low`, `medium`, `high`. Best for complex refactoring or architectural changes.\n\n### Custom Configuration\n\n```powershell\n# Set default model\nSet-AIToolConfig -Tool Claude -Model claude-sonnet-4-5\n\n# Set default reasoning effort\nSet-AIToolConfig -Tool Claude -ReasoningEffort medium\n\n# Configure Aider output directory (defaults to temp directory)\nSet-AIToolConfig -Tool Aider -AiderOutputDir \"C:\\MyAiderHistory\"\n\n# Update all installed tools\nUpdate-AITool\n```\n\n**Aider Output Configuration**\n\nBy default, Aider generates history and metadata files (`.aider.input.history`, `.aider.chat.history.md`, `.aider.model.settings.yml`, `.aider.model.metadata.json`, `.aiderignore`, `.env`) in your current directory. aitools redirects these to a temporary directory that gets cleaned up automatically.\n\nTo preserve Aider's history and metadata files, configure a custom output directory:\n\n```powershell\nSet-AIToolConfig -Tool Aider -AiderOutputDir \"C:\\AiderHistory\"\n```\n\nThis keeps all Aider output files in one location instead of cluttering your working directories.\n\n### Parallel Processing\n\nBy default, when processing 4 or more files, Invoke-AITool runs them in parallel with up to 3 concurrent threads:\n\n```powershell\n# Processes files in parallel (default for 4+ files)\nGet-ChildItem src\\*.ps1 | Invoke-AITool -Prompt \"Add error handling\"\n\n# Force sequential processing\nGet-ChildItem src\\*.ps1 | Invoke-AITool -Prompt \"Add error handling\" -NoParallel\n\n# Increase concurrency (may trigger API rate limits)\nGet-ChildItem src\\*.ps1 | Invoke-AITool -Prompt \"Add error handling\" -MaxThreads 5\n```\n\nResults stream as they complete, providing real-time feedback.\n\n### Automatic Retry with Exponential Backoff\n\nTransient errors (timeouts, rate limits, server errors) are automatically retried with delays of 2, 4, 8, 16, 32, 64 minutes until the cumulative delay exceeds 4 hours:\n\n```powershell\n# Default: automatic retry enabled\nGet-ChildItem src\\*.ps1 | Invoke-AITool -Prompt \"Refactor code\"\n\n# Disable retry - fail immediately on error\nGet-ChildItem src\\*.ps1 | Invoke-AITool -Prompt \"Refactor code\" -DisableRetry\n\n# Customize max retry time (1 hour instead of 4)\nGet-ChildItem src\\*.ps1 | Invoke-AITool -Prompt \"Refactor code\" -MaxRetryMinutes 60\n```\n\n### Skip Modified Files\n\nResume interrupted batch operations by skipping files that have already been changed:\n\n```powershell\n# Skip files with uncommitted, staged, or unpushed changes\nGet-ChildItem src\\*.ps1 | Invoke-AITool -Prompt \"Add error handling\" -SkipModified\n\n# When on main branch, check last 10 commits for modified files\nGet-ChildItem src\\*.ps1 | Invoke-AITool -Prompt \"Add error handling\" -SkipModified -CommitDepth 10\n```\n\nUseful for resuming after hitting rate limits or fixing errors mid-batch.\n\n### Processing Subsets\n\n```powershell\n# Process only the first 5 files\nGet-ChildItem tests\\*.Tests.ps1 | Invoke-AITool -Prompt \"Fix bugs\" -First 5\n\n# Skip the first 2 files, process the next 3\nGet-ChildItem tests\\*.Tests.ps1 | Invoke-AITool -Prompt \"Fix bugs\" -Skip 2 -First 3\n\n# Process only the last 3 files\nGet-ChildItem tests\\*.Tests.ps1 | Invoke-AITool -Prompt \"Fix bugs\" -Last 3\n```\n\nUseful for debugging prompts or testing on a subset before full batch processing.\n\n### Rate Limiting\n\nAdd delays between file processing to spread API calls over time:\n\n```powershell\n# Wait 10 seconds between each file\nGet-ChildItem src\\*.ps1 | Invoke-AITool -Prompt \"Add docs\" -DelaySeconds 10\n```\n\nHelps manage credit usage or avoid aggressive API throttling.\n\n---\n\n## Demo Walkthrough\n\nThe included Jupyter notebook (`demo.ipynb`) walks through migrating dbatools' 3,500+ Pester tests from v4 to v5. It shows:\n\n1. **Setup** - Import module, configure defaults, prepare workspace\n2. **Execution** - Open a real test file and run `Update-PesterTest`\n3. **Review** - Examine structural changes, parameter updates, style enforcement\n\nThe demo achieves ~80% automation accuracy, with remaining fixes needed due to legacy code quality. It illustrates how aitools combines PowerShell's predictability with AI's flexible reasoning.\n\n---\n\n## Contributing\n\nPull requests are welcome. Please ensure:\n\n- Code follows PowerShell best practices\n- All parameter passing uses splatting\n- Functions include complete comment-based help\n- Changes are tested on Windows, Linux, and macOS\n- New tools follow the existing `$ToolDefinitions` pattern\n\n---\n\n## Support\n\n- **Issues**: [GitHub Issues](https://github.com/potatoqualitee/aitools/issues)\n- **Module Gallery**: [PowerShell Gallery](https://www.powershellgallery.com/packages/aitools)","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpotatoqualitee%2Faitools","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpotatoqualitee%2Faitools","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpotatoqualitee%2Faitools/lists"}