AI assistant helper commands for the Dragonfly platform
Project description
agentic-devtools
AI assistant helper commands for the Dragonfly platform. This package provides simple CLI commands that can be easily auto-approved by VS Code AI assistants.
Audience: End users of the AGDT CLI. This README focuses on installation and usage.
Installation
Option 1: Using pipx (Recommended)
A pip-installable Python package that provides CLI commands for AI agents to interact with Git, Azure DevOps, Jira, and other services.
# Install pipx if you don't have it
pip install pipx
pipx ensurepath
# ⚠️ IMPORTANT: Restart your terminal for PATH changes to take effect
# Or refresh PATH in current PowerShell session:
Workflow steps can be started from VS Code Copilot Chat using
`/agdt.<workflow>.<step>` commands.
# Install agentic-devtools
cd agentic_devtools
pipx install .
# For development (editable install)
pipx install -e .
```text
### Option 2: Global pip install
Install directly into your system Python. May require administrator privileges
on Windows.
```bash
cd agentic_devtools
# Global install (may need admin/sudo)
pip install .
# For development (editable)
pip install -e .
# With dev dependencies
pip install -e ".[dev]"
```text
> **Note:** Avoid `pip install --user` as it places scripts in a directory that
may not be on your PATH (`%APPDATA%\Python\PythonXXX\Scripts` on Windows).
### Verify Installation
After installation, verify the commands are available:
```bash
agdt-set --help
agdt-show
```text
If commands are not found after installation:
- **pipx:** Run `pipx ensurepath` and restart your terminal
- **pip global:** Ensure `C:\PythonXXX\Scripts` (or equivalent) is on your PATH
## Design Principles
1. **Auto-approvable commands**: Commands are designed to be auto-approved by
VS Code
2. **JSON state file**: Single `agdt-state.json` file stores all parameters
3. **Generic set/get pattern**: One `agdt-set` command works for all keys
(approve once, use for everything)
4. **Native special character support**: Python CLI handles `()[]{}` and
multiline content directly!
5. **Test-driven development**: Tests first with strict coverage expectations
6. **UX consistency**: Predictable command patterns and actionable output
7. **Performance responsiveness**: Long-running operations use background tasks
## Quick Start
```bash
# Set state values (approve agdt-set once, use for any key)
agdt-set pr_id 23046
agdt-set thread_id 139474
agdt-set content "Thanks for the feedback!
I've made the changes you suggested."
# Execute action (parameterless - approve once)
agdt-reply-to-pr-thread
```text
## Copilot Chat Commands
Use the new Copilot Chat agents to start workflow steps from VS Code:
- Type `/agdt.` in Copilot Chat to browse available workflow step commands.
- Example: `/agdt.work-on-jira-issue.planning` to start planning.
- Example: `/agdt.pull-request-review.file-review` to review a PR file.
For the full workflow step list and usage details, see
[specs/001-add-workflow-step-agents/quickstart.md](specs/001-add-workflow-step-agents/quickstart.md).
## State Management Commands
```bash
# Set any key-value pair
agdt-set <key> <value>
# Get a value
agdt-get <key>
# Delete a key
agdt-delete <key>
# Clear all state
agdt-clear
# Show all state
agdt-show
```text
### Examples
```bash
# Simple values
agdt-set pr_id 23046
agdt-set thread_id 139474
agdt-set dry_run true
# Content with special characters (works directly!)
agdt-set content "Fix: handle (optional) [array] parameters"
# Multiline content (works directly!)
agdt-set content "Thanks for the feedback!
I've addressed your concerns:
- Fixed the null check
- Added unit tests
- Updated documentation"
# View current state
agdt-show
```text
## Azure DevOps Commands
### Reply to PR Thread
```bash
agdt-set pr_id 23046
agdt-set thread_id 139474
agdt-set content "Your reply message"
agdt-reply-to-pr-thread
# Optionally resolve the thread after replying
agdt-set resolve_thread true
agdt-reply-to-pr-thread
```text
### Add New PR Comment
```bash
agdt-set pr_id 23046
agdt-set content "Your comment"
agdt-add-pr-comment
# For file-level comment
agdt-set path "src/example.py"
agdt-set line 42
agdt-add-pr-comment
```text
### Dry Run Mode
```bash
agdt-set dry_run true
agdt-reply-to-pr-thread # Previews without making API calls
```text
## Git Commands
The package provides streamlined Git workflow commands that support the
single-commit policy.
### Initial Commit & Publish
```bash
# Option A: With CLI parameter (explicit)
| `agdt-get-pull-request-threads` | Get all PR comment threads |
- Change 1
- Change 2
[DFLY-1234](https://jira.swica.ch/browse/DFLY-1234)"
# Option B: Parameterless (uses current state)
# Current commit_message: run `agdt-get commit_message` to check
agdt-git-save-work
```text
### Smart Commit (Auto-detects Amend)
The `agdt-git-save-work` command automatically detects if you're updating an
existing commit:
```bash
# First commit - creates new commit and publishes branch
agdt-git-save-work --commit-message "feature(DFLY-1234): initial implementation"
# Subsequent commits on same issue - automatically amends and force pushes
agdt-git-save-work --commit-message "feature(DFLY-1234): refined implementation
- Original changes
- Additional updates"
# Auto-detects and amends!
```text
**Detection logic:**
1. If branch has commits ahead of `origin/main` AND
2. Last commit message contains the current Jira issue key (from
`jira.issue_key` state)
3. Then: amend existing commit and force push
4. Otherwise: create new commit and publish
### Individual Git Operations
```bash
agdt-git-stage # Stage all changes (git add .)
agdt-git-push # Push changes (git push)
agdt-git-force-push # Force push with lease
agdt-git-publish # Push with upstream tracking
```text
### Git State Options
| Key | Purpose |
| ---------------- | ------------------------------------------------ |
| `commit_message` | The commit message (multiline supported) |
| `dry_run` | If true, preview commands without executing |
| `skip_stage` | If true, skip staging step |
| `skip_push` | If true, skip push step (for agdt-git-save-work) |
## Workflow Commands
The package provides workflow commands for managing structured work processes.
### Work on Jira Issue Workflow
```bash
# Start work on a Jira issue
agdt-set jira.issue_key "DFLY-1234"
agdt-initiate-work-on-jira-issue-workflow
```text
**Workflow Steps:**
1. **setup** - Create worktree and branch (if pre-flight fails)
2. **retrieve** - Auto-fetches Jira issue details
3. **planning** - Analyze issue and post plan comment to Jira
4. **checklist-creation** - Create implementation checklist from plan
5. **implementation** - Code changes, tests, documentation
6. **implementation-review** - Review completed checklist items
7. **verification** - Run tests and quality gates
8. **commit** - Stage and commit changes
9. **pull-request** - Create PR
10. **completion** - Post final Jira comment
### Checklist Management
```bash
# Create implementation checklist
agdt-create-checklist "item1" "item2" "item3"
# Update checklist (mark items complete)
agdt-update-checklist --completed 1 3 # Mark items 1 and 3 as complete
# View current checklist
agdt-show-checklist
# Update during commit (auto-marks items and advances workflow)
agdt-git-save-work --completed 1 2 # Marks items complete before committing
```text
### Workflow Navigation
```bash
# View current workflow state
agdt-get-workflow
# Advance to next step
agdt-advance-workflow
# Clear workflow
agdt-clear-workflow
```text
## PyPI Release Commands
Verwende die `pypi.*` Namespace-Keys für Release-Parameter. Setze deine PyPI
Tokens via Umgebungsvariablen:
- `TWINE_USERNAME=__token__`
- `TWINE_PASSWORD=<pypi-token>`
### PyPI Release starten
```bash
# Parameter setzen
agdt-set pypi.package_name agentic-devtools
agdt-set pypi.version 0.1.0
agdt-set pypi.repository pypi # oder testpypi
agdt-set pypi.dry_run false
# Release starten (parameterlos)
agdt-release-pypi
```text
### Status prüfen
```bash
agdt-task-status
agdt-task-log
agdt-task-wait
```text
## Jira Commands
All Jira commands use the `jira.*` namespace for state values. Set
`JIRA_COPILOT_PAT` environment variable with your Jira API token.
### Get Issue Details
```bash
agdt-set jira.issue_key "DFLY-1234"
agdt-get-jira-issue
```text
### Add Comment to Issue
Commands with optional CLI parameters support two usage patterns:
```bash
# Option A: With CLI parameters (explicit)
agdt-add-jira-comment --jira-comment "Your comment text"
# Option B: Parameterless (uses current state)
# Current jira.issue_key: run `agdt-get jira.issue_key` to check
# Current jira.comment: run `agdt-get jira.comment` to check
agdt-add-jira-comment
```text
### Create Epic
```bash
agdt-set jira.project_key "DFLY"
agdt-set jira.summary "Epic Title"
agdt-set jira.epic_name "EPIC-KEY"
agdt-set jira.role "developer"
agdt-set jira.desired_outcome "implement feature"
agdt-set jira.benefit "improved UX"
agdt-create-epic
# Optional: Add acceptance criteria
agdt-set jira.acceptance_criteria "- Criterion 1
- Criterion 2"
agdt-create-epic
```text
### Create Issue (Task/Bug/Story)
```bash
agdt-set jira.project_key "DFLY"
agdt-set jira.summary "Issue Title"
agdt-set jira.description "Issue description"
agdt-create-issue
# Or use user story format
agdt-set jira.role "developer"
agdt-set jira.desired_outcome "complete task"
agdt-set jira.benefit "value delivered"
agdt-create-issue
```text
### Create Subtask
```bash
agdt-set jira.parent_key "DFLY-1234"
agdt-set jira.summary "Subtask Title"
agdt-set jira.description "Subtask description"
agdt-create-subtask
```text
### Dry Run Mode for Jira
```bash
agdt-set jira.dry_run true
agdt-create-issue # Previews payload without API call
```text
## Environment Variables
| Variable | Purpose
| --------------------------- | ------------------------------------------------
| `AZURE_DEV_OPS_COPILOT_PAT` | Azure DevOps PAT for API calls
| `JIRA_COPILOT_PAT` | Jira API token for authentication
| `JIRA_BASE_URL` | Override default Jira URL (default: jira.swica.c
| `JIRA_SSL_VERIFY` | Set to `0` to disable SSL verification
| `JIRA_CA_BUNDLE` | Path to custom CA bundle PEM file for Jira SSL
| `REQUESTS_CA_BUNDLE` | Standard requests library CA bundle path (fallba
| `AGDT_STATE_FILE` | Override default state file path
## State File Location
By default, state is stored in `scripts/temp/agdt-state.json` (relative to the
repo root).
## Why This Design?
### Auto-Approval Friendly
VS Code's auto-approval matches exact command strings. By using:
- Generic `agdt-set key value` - approve once, use for any key
- Parameterless action commands like `agdt-reply-to-pr-thread`
...you only need to approve a few commands once, then they work for all future
operations.
### No Replacement Tokens Needed
Unlike PowerShell, Python's CLI parsing handles special characters natively:
```bash
# This just works!
agdt-set content "Code with (parentheses) and [brackets]"
```text
### No Multi-line Builder Needed
Python preserves multiline strings from the shell:
```bash
agdt-set content "Line 1
Line 2
Line 3"
```text
## GitHub Actions: SpecKit Issue Trigger
The repository includes a GitHub Action that automatically triggers the SpecKit
specification process when a `speckit` label is added to an issue.
### Visual Documentation
For a comprehensive visual representation of the complete workflow, see the
[SpecKit Workflow Sequence
Diagram](specs/002-github-action-speckit-trigger/workflow-sequence-diagram.md).
The diagram shows:
- All 8 workflow phases from initiation to completion
- Interactions between actors (User, GitHub, SpecKit Action, AI Provider,
Repository)
Repository)
- Decision points and error handling
- Integration with the Spec-Driven Development (SDD) pattern
### How It Works
1. Create a GitHub issue describing your feature
2. Add the `speckit` label to the issue (optionally assign it to Copilot or a
team member)
3. The action posts an acknowledgment comment within 30 seconds
4. A feature specification is generated from the issue title and body
5. A new branch and pull request are created with the specification
6. Status comments are posted to the issue throughout the process
The `speckit` trigger label is automatically removed once processing starts,
and
replaced with status labels (`speckit:processing`, `speckit:completed`, or
`speckit:failed`).
### Configuration
Configure the action using repository variables:
| Variable | Default | Description |
|----------|---------|-------------|
| `SPECKIT_TRIGG | `speckit` | The label that |
| `SPECKIT_AI_PR | `claude` | AI provider fo |
| `SPECKIT_COMMENT_ON_ISSUE` | `true` | Post status comments to the issue |
| `SPECKIT_CREATE_BRANCH` | `true` | Create a feature branch |
| `SPECKIT_CREATE_PR` | `true` | Create a pull request |
### Required Secrets
| Secret | Required For | Description |
|--------|--------------|-------------|
| `ANTHROPIC_API_KEY` | `claude` provider | Claude API key for spec generation |
| `OPENAI_API_KEY` | `openai` provider | OpenAI API key for spec generation |
### Usage
1. Create a GitHub issue with a descriptive title and body
2. Add the `speckit` label (or your configured trigger label)
3. Wait for the workflow to generate the specification
4. Review the generated spec in the pull request
### Manual Trigger
You can also trigger the workflow manually for testing:
```bash
gh workflow run speckit-issue-trigger.yml -f issue_number=123
```text
### Labels
The workflow uses labels to manage state:
- `speckit` - **Trigger label**: Add this to an issue to start specification
generation
generation
- `speckit:processing` - Specification generation in progress
- `speckit:completed` - Specification created successfully
- `speckit:failed` - Generation failed (check workflow logs)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file agentic_devtools-0.2.2.tar.gz.
File metadata
- Download URL: agentic_devtools-0.2.2.tar.gz
- Upload date:
- Size: 569.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1076d9fbd367bd349c3a17f9f3b70a777f651f21889d9e8911aa9386f8563eb9
|
|
| MD5 |
8903fec2ab305824679c693a1cf8e831
|
|
| BLAKE2b-256 |
932c7e6d4cf971a4b7bbb47a3464f27865c4540f8b8e6fb24adbfb4b14fa2b23
|
Provenance
The following attestation bundles were made for agentic_devtools-0.2.2.tar.gz:
Publisher:
publish.yml on ayaiayorg/agentic-devtools
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agentic_devtools-0.2.2.tar.gz -
Subject digest:
1076d9fbd367bd349c3a17f9f3b70a777f651f21889d9e8911aa9386f8563eb9 - Sigstore transparency entry: 962623096
- Sigstore integration time:
-
Permalink:
ayaiayorg/agentic-devtools@0d5ed6610de4130555f67b1113cebae6166a7392 -
Branch / Tag:
refs/tags/v0.2.2 - Owner: https://github.com/ayaiayorg
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0d5ed6610de4130555f67b1113cebae6166a7392 -
Trigger Event:
release
-
Statement type:
File details
Details for the file agentic_devtools-0.2.2-py3-none-any.whl.
File metadata
- Download URL: agentic_devtools-0.2.2-py3-none-any.whl
- Upload date:
- Size: 252.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7105f8a47bd0108f14ad2d77cee5d4bb45cb52a07866ab5fd7c2eb017e3fd768
|
|
| MD5 |
1a00c5cd48c4018a4b0e9c66fd5210c5
|
|
| BLAKE2b-256 |
2050b71e0cfaa2468dbd205fd9c7d3fe564e472e7538ab2edaffbe8f2a1ba860
|
Provenance
The following attestation bundles were made for agentic_devtools-0.2.2-py3-none-any.whl:
Publisher:
publish.yml on ayaiayorg/agentic-devtools
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agentic_devtools-0.2.2-py3-none-any.whl -
Subject digest:
7105f8a47bd0108f14ad2d77cee5d4bb45cb52a07866ab5fd7c2eb017e3fd768 - Sigstore transparency entry: 962623110
- Sigstore integration time:
-
Permalink:
ayaiayorg/agentic-devtools@0d5ed6610de4130555f67b1113cebae6166a7392 -
Branch / Tag:
refs/tags/v0.2.2 - Owner: https://github.com/ayaiayorg
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0d5ed6610de4130555f67b1113cebae6166a7392 -
Trigger Event:
release
-
Statement type: