Human-in-the-loop coding harness: plan, review, iterate, commit with transcript provenance
Project description
Human-in-the-loop coding harness with transcript provenance
Weld generates structured prompts for AI-assisted development workflows. Instead of ad-hoc prompting, weld provides templates for: research → plan → implement → review → commit.
Why Weld?
- Structured Prompts: Generate focused prompts for research, planning, and review
- Full Auditability: Every AI interaction linked via transcript gists in commits
- Codebase Discovery: Analyze existing codebases before making changes
- Spec Refinement: Interview-style Q&A to improve specifications
Spec Doc --> Research Prompt --> Plan Prompt --> Review --> Commit
+ transcript
Table of Contents
- Quickstart
- Installation
- Workflow Overview
- Commands Reference
- Configuration
- Developer Guide
- Exit Codes
- Requirements
Quickstart
Get running in under 5 minutes:
# 1. Install weld globally
git clone https://github.com/ametel01/weld-cli.git && cd weld-cli
uv tool install . # or: pipx install .
# 2. Initialize in your project
cd /path/to/your-project
weld init
# 3. Check your environment
weld doctor
# 4. Research a specification (generates prompt, runs Claude)
weld research specs/my-feature.md -o research.md
# 5. Generate a plan from your spec
weld plan specs/my-feature.md -o plan.md
# 6. Execute the plan interactively
weld implement plan.md
# 7. Review a document against the codebase
weld review plan.md --apply
# 8. Review code changes before committing
weld review --diff --staged
# 9. Commit with transcript provenance (auto-generates message)
weld commit --all
Installation
Prerequisites
- Python 3.11+
- uv or pipx - For global CLI installation
- git - Version control
- gh - GitHub CLI (authenticated)
- claude - Claude Code CLI (AI provider)
- claude-code-transcripts - For transcript gist generation (optional)
Install Globally (Recommended)
Install weld as a global CLI tool so you can use it in any project:
# Option 1: Using uv (recommended)
git clone https://github.com/ametel01/weld-cli.git && cd weld-cli
uv tool install .
# Option 2: Using pipx
git clone https://github.com/ametel01/weld-cli.git && cd weld-cli
pipx install .
# Verify installation
weld --help
Now weld is available system-wide. Use it in any project:
cd /path/to/your-project
weld init
weld doctor
Install for Development
For contributing to weld itself:
git clone https://github.com/ametel01/weld-cli.git && cd weld-cli
make setup
eval $(make venv-eval)
# weld is now available in this shell
weld --help
Verify Toolchain
# Check all required dependencies
weld doctor
This validates:
- Required:
git,gh(GitHub CLI authenticated) - Optional:
claude,claude-code-transcripts
Workflow Overview
Weld provides prompts for a structured development workflow:
1. Discovery (optional) | Analyze existing codebase architecture
2. Interview (optional) | Refine specification through Q&A
3. Research | Deep dive into implementation approach
4. Planning | Generate step-by-step implementation plan
5. Implement | Execute plan steps interactively
6. Review | Validate documents against codebase
7. Commit | Create commit with transcript link
Key Concepts
- Prompt Generation: Weld creates structured prompts that you run in Claude Code
- History Tracking: Commands log their inputs/outputs to
.weld/<command>/history.jsonl - Transcript: A Claude Code session record, published as a GitHub gist and linked in commit messages
Commands Reference
Global Options
All commands support these global options:
| Option | Short | Description |
|---|---|---|
--version |
-V |
Show version and exit |
--verbose |
-v |
Increase verbosity (-v for verbose, -vv for debug) |
--quiet |
-q |
Suppress non-error output |
--json |
Output in JSON format for automation | |
--no-color |
Disable colored output | |
--dry-run |
Preview effects without applying changes | |
--debug |
Enable file-based debug logging to .weld/debug.log |
weld init
Initialize weld in the current git repository.
weld init
Creates:
.weld/config.toml- Configuration file
Exit codes:
0- Success2- Missing or unauthenticated tool3- Not a git repository
weld plan <input> [--output <path>]
Generate an implementation plan from a specification.
weld plan specs/feature.md # Writes to .weld/plan/feature-{timestamp}.md
weld plan specs/feature.md --output plan.md # Explicit output path
weld plan specs/feature.md -o plan.md --quiet # Suppress streaming
Options:
--output,-o- Path to write the plan (optional, defaults to.weld/plan/)--quiet,-q- Suppress streaming output
The command:
- Reads the specification file
- Generates a planning prompt
- Runs Claude to create the plan
- Writes the result to the output file
Plan Format
Plans follow a hierarchical Phase → Step structure:
## Phase 1: <Title>
Brief description of what this phase accomplishes.
### Phase Validation
\`\`\`bash
# Command(s) to verify the entire phase is complete
\`\`\`
### Step 1: <Title>
#### Goal
What this step accomplishes.
#### Files
- `path/to/file.py` - What changes to make
#### Validation
\`\`\`bash
# Command to verify this step works
\`\`\`
#### Failure modes
- What could go wrong and how to detect it
---
### Step 2: <Title>
...
## Phase 2: <Title>
### Step 1: <Title>
(Step numbers restart at 1 for each phase)
...
Phase guidelines:
- Each phase is a logical milestone (e.g., "Data Models", "Core Logic", "CLI Integration")
- Phases are incremental - each builds on the foundation of previous phases
- Include Phase Validation to verify the entire phase works before moving on
Step guidelines:
- Step numbers restart at 1 within each phase
- Each step should be atomic and independently verifiable
- Include specific file paths and validation commands
weld implement <plan>
Interactively execute a phased implementation plan.
weld implement plan.md # Interactive menu to select phase/step
weld implement plan.md --phase 2 # Start at phase 2
weld implement plan.md --step 3 # Start at step 3 of current phase
weld implement plan.md --phase 2 --step 1 # Non-interactive: specific step
Options:
--phase,-p- Start at a specific phase number--step,-s- Start at a specific step number--quiet,-q- Suppress streaming output
Features:
- Interactive mode: Arrow-key navigable menu for selecting phases/steps
- Non-interactive mode: Use
--phaseand--stepflags for CI/automation - Progress tracking: Steps are marked complete with
[COMPLETE]in the plan file - Graceful interruption: Ctrl+C preserves progress (completed steps stay marked)
The command:
- Parses the plan to extract phases and steps
- Shows an interactive menu (or jumps to specified step)
- Generates implementation prompts for each step
- Runs Claude to implement the step
- Marks the step complete in the plan file
weld research <input> [--output <path>]
Research a specification before planning.
weld research specs/feature.md # Writes to .weld/research/feature-{timestamp}.md
weld research specs/feature.md --output research.md # Explicit output path
weld research specs/feature.md -o research.md --focus "security concerns"
Options:
--output,-o- Path to write research (optional, defaults to.weld/research/)--focus,-f- Specific areas to focus on--quiet,-q- Suppress streaming output
The research prompt guides Claude to analyze:
- Architecture and existing patterns
- Dependencies and integration points
- Risks and open questions
weld discover [--output <path>]
Analyze codebase and generate architecture documentation.
weld discover # Writes to .weld/discover/{timestamp}.md
weld discover --output docs/architecture.md # Explicit output path
weld discover -o docs/arch.md --focus "authentication system"
weld discover --prompt-only # Just show the prompt
Options:
--output,-o- Path to write discover output (optional, defaults to.weld/discover/)--focus,-f- Specific areas to focus on--prompt-only- Output prompt without running Claude--quiet,-q- Suppress streaming output
The discover prompt covers:
- High-level architecture
- Directory structure
- Key files and entry points
- Testing patterns
- Security considerations
weld discover show
Show a previously generated discover prompt.
weld discover show
weld interview <file>
Refine a specification through interactive Q&A.
weld interview specs/feature.md
weld interview specs/feature.md --focus "edge cases"
Options:
--focus,-f- Topic to focus questions on
Outputs a prompt for Claude Code that:
- Asks in-depth questions using the
AskUserQuestiontool - Covers implementation, UI/UX, edge cases, tradeoffs
- Rewrites the specification when complete
weld review [<file>] [--diff] [--apply]
Review documents or code changes.
Document review (verifies docs against codebase):
weld review plan.md # Review document accuracy
weld review plan.md --apply # Apply corrections in place
weld review research.md --prompt-only # Just show the prompt
Code review (reviews git diff for issues):
weld review --diff # Review all uncommitted changes
weld review --diff --staged # Review only staged changes
weld review --diff --apply # Review and fix all issues directly
weld review --diff --prompt-only # Generate prompt without running
Options:
--diff,-d- Review git diff instead of a document--staged,-s- Review only staged changes (requires--diff)--apply- Apply corrections/fixes directly--prompt-only- Output prompt without running Claude--quiet,-q- Suppress streaming output--timeout,-t- Timeout in seconds for Claude (default: 1800 from config)
Document reviews check for:
- Errors and inaccuracies
- Missing implementations
- Gaps in coverage
- Wrong evaluations
Code reviews check for:
- Bugs and logic errors
- Security vulnerabilities
- Missing implementations
- Test issues (assertions, coverage)
- Significant improvements needed
weld commit [--all] [--no-split]
Auto-generate commit message(s) from diff, update CHANGELOG, and commit with transcript.
Automatically analyzes the diff and creates multiple logical commits when appropriate (e.g., separating typo fixes from version updates from documentation changes).
weld commit --all # Stage all changes, auto-split into logical commits
weld commit # Commit only staged changes
weld commit --no-split # Force single commit (disable auto-split)
weld commit --edit # Review/edit commit message in $EDITOR
weld commit --skip-transcript # Skip transcript generation
weld commit --skip-changelog # Skip CHANGELOG.md update
Options:
--all,-a- Stage all changes before committing--no-split- Force single commit (disable automatic splitting)--edit,-e- Edit generated message in $EDITOR before commit--skip-transcript- Skip transcript generation--skip-changelog- Skip CHANGELOG.md update--quiet,-q- Suppress Claude streaming output
The final commit message includes a transcript trailer:
Implement user auth
Claude-Transcript: https://gist.github.com/...
Exit codes:
0- Committed1- Weld not initialized20- No changes to commit21- Claude failed to generate message22- Git commit failed23- Failed to parse Claude response24- Editor error
weld doctor
Check environment and dependencies.
weld doctor
Validates:
- Required tools: git, gh (GitHub CLI)
- Optional tools: claude, claude-code-transcripts
Exit codes:
0- All required dependencies available2- Required dependencies missing
Configuration
Configuration lives in .weld/config.toml:
[project]
name = "your-project"
[claude]
exec = "claude" # Claude CLI path
model = "claude-sonnet-4-20250514" # Default model (optional)
timeout = 1800 # Timeout in seconds for AI operations (30 min default)
[claude.transcripts]
exec = "claude-code-transcripts"
visibility = "secret" # or "public"
[git]
commit_trailer_key = "Claude-Transcript"
Developer Guide
Architecture
Weld follows a simple layered architecture:
src/weld/
├── cli.py # Typer app entry point, global options
├── config.py # Configuration management
├── output.py # Console output formatting
├── logging.py # Logging configuration
├── validation.py # Input validation
│
├── commands/ # CLI command modules
│ ├── init.py # weld init
│ ├── plan.py # weld plan
│ ├── implement.py # weld implement
│ ├── research.py # weld research
│ ├── discover.py # weld discover
│ ├── interview.py # weld interview
│ ├── doc_review.py # weld review
│ ├── commit.py # weld commit
│ └── doctor.py # weld doctor
│
├── core/ # Business logic
│ ├── history.py # JSONL command history tracking
│ ├── weld_dir.py # .weld directory utilities
│ ├── plan_parser.py # Plan parsing and completion tracking
│ ├── discover_engine.py # Codebase discovery prompts
│ ├── interview_engine.py # Specification refinement
│ └── doc_review_engine.py # Document review prompts
│
├── services/ # External integrations
│ ├── git.py # Git operations
│ ├── claude.py # Claude CLI integration
│ ├── transcripts.py # Transcript gist generation
│ └── filesystem.py # File system operations
│
└── models/ # Pydantic data models
├── discover.py # DiscoverMeta
└── issues.py # Issue, Issues
Key Design Patterns
- Commands delegate to core:
commands/*.pyhandle CLI parsing, then callcore/*.pyfor logic - Services wrap external CLIs: All subprocess calls go through
services/(nevershell=True) - JSONL history: Each command logs to
.weld/<command>/history.jsonl
Project Structure
weld-cli/
├── pyproject.toml # Package configuration
├── Makefile # Build automation
├── src/
│ └── weld/ # Main package
├── tests/ # Test suite
│ ├── conftest.py # Pytest fixtures
│ ├── test_cli.py
│ ├── test_claude.py
│ ├── test_history.py
│ └── ...
└── .weld/ # Created per-project
├── config.toml
├── debug.log # Debug log (with --debug)
├── plan/
│ └── history.jsonl
├── research/
│ └── history.jsonl
├── discover/
│ └── history.jsonl
└── reviews/ # Backup of reviewed docs
Data Models
DiscoverMeta
Metadata for discover artifacts.
class DiscoverMeta(BaseModel):
discover_id: str
created_at: datetime
focus: list[str]
Issues
Review result from AI provider.
class Issue(BaseModel):
severity: Literal["blocker", "major", "minor"]
file: str
hint: str
class Issues(BaseModel):
pass_: bool = Field(alias="pass")
issues: list[Issue]
Development Commands
# Essential commands
make setup # First-time setup
make check # All quality checks
make test # Run tests
make ci # Full CI pipeline
# Testing
make test-unit # Unit tests only
make test-cli # CLI integration tests
make test-cov # Tests with coverage
# Code quality
make lint-fix # Auto-fix linting
make format # Format code
make typecheck # Run pyright
Exit Codes
| Code | Meaning |
|---|---|
| 0 | Success |
| 1 | General error / file not found / weld not initialized |
| 2 | Dependency missing / unauthenticated gh |
| 3 | Not a git repository |
| 12 | AI provider invocation failed |
| 20 | No changes to commit |
| 21 | Transcript generation failed |
| 22 | Git commit failed |
Requirements
For using weld:
- Python 3.11+
- uv or pipx (for global installation)
- git
- gh (GitHub CLI, authenticated)
- claude (Claude Code CLI)
Python dependencies (installed automatically):
- typer, rich - CLI framework
- pydantic - Data validation
- simple-term-menu - Interactive menus for
weld implement
Optional:
- claude-code-transcripts (for transcript gist generation)
For development:
- make (build automation)
- uv (package manager)
License
See LICENSE for details.
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 weld_cli-0.3.1.tar.gz.
File metadata
- Download URL: weld_cli-0.3.1.tar.gz
- Upload date:
- Size: 388.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b1fb3591307565122b1eff6e10586aee38fbdd2839a15a592ea537fa1f97eb0d
|
|
| MD5 |
3188bc83e6d902e858d57ac34b8f91ba
|
|
| BLAKE2b-256 |
20f3712471aef78470a9c8313d6479b0b62df8c50dfe0208195b4ed4d7cde372
|
Provenance
The following attestation bundles were made for weld_cli-0.3.1.tar.gz:
Publisher:
release.yml on ametel01/weld-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
weld_cli-0.3.1.tar.gz -
Subject digest:
b1fb3591307565122b1eff6e10586aee38fbdd2839a15a592ea537fa1f97eb0d - Sigstore transparency entry: 799067859
- Sigstore integration time:
-
Permalink:
ametel01/weld-cli@f9d6379485b613f21ab801303263afe744151ee7 -
Branch / Tag:
refs/tags/v0.3.1 - Owner: https://github.com/ametel01
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@f9d6379485b613f21ab801303263afe744151ee7 -
Trigger Event:
push
-
Statement type:
File details
Details for the file weld_cli-0.3.1-py3-none-any.whl.
File metadata
- Download URL: weld_cli-0.3.1-py3-none-any.whl
- Upload date:
- Size: 64.6 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 |
a5d0af07712d38ef548a60f4224d0425fa052ab414975f5da86f6d437bc55815
|
|
| MD5 |
c14b75ff0ad14be6864062cf80413ad8
|
|
| BLAKE2b-256 |
1a7cac976024d0cb1b055380e3751a1c340415744c2e6c7912e79a954590369c
|
Provenance
The following attestation bundles were made for weld_cli-0.3.1-py3-none-any.whl:
Publisher:
release.yml on ametel01/weld-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
weld_cli-0.3.1-py3-none-any.whl -
Subject digest:
a5d0af07712d38ef548a60f4224d0425fa052ab414975f5da86f6d437bc55815 - Sigstore transparency entry: 799067861
- Sigstore integration time:
-
Permalink:
ametel01/weld-cli@f9d6379485b613f21ab801303263afe744151ee7 -
Branch / Tag:
refs/tags/v0.3.1 - Owner: https://github.com/ametel01
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@f9d6379485b613f21ab801303263afe744151ee7 -
Trigger Event:
push
-
Statement type: