An autonomous LangGraph pipeline that generates AI-resistant technical take home assignments.
Project description
An autonomous LangGraph pipeline that generates AI-resistant technical assignment PRDs. Give it a role, tech stack, and domain — it handles everything else.
What it does
Takes a single employer input and runs it through an 8-node agentic pipeline: generating ideas, filtering out AI-solvable ones, injecting real-world constraints, red-teaming for shortcuts, and producing a structured PRD.
pip install prd-inator
Setup
Requires uv.
uv venv
uv sync
Copy .env.example to .env and add your API keys:
cp .env.example .env
Usage
As a Library
from prd_inator import generate_prd
from langchain_openai import ChatOpenAI
# Initialize your LLM
llm = ChatOpenAI(model="gpt-4o", temperature=0.7)
result = generate_prd(
role="Backend Engineer",
tech_stack="Python, FastAPI, PostgreSQL",
domain="Fintech",
seniority="Mid-level",
llm=llm
)
# Access output
print(result.candidate_prd) # Assignment for candidate
# Save to file
with open("assignment.md", "w") as f:
f.write(result.candidate_prd)
As a CLI
uv run main.py
LLM Configuration
Simple: Single LLM for All Nodes
Pass a pre-configured LLM instance to use for all pipeline nodes:
from langchain_openai import ChatOpenAI
from prd_inator import generate_prd
llm = ChatOpenAI(model="gpt-4o", temperature=0.7)
result = generate_prd(
role="Backend Engineer",
tech_stack="Python, FastAPI, PostgreSQL",
domain="Fintech",
seniority="Mid-level",
llm=llm
)
Advanced: Per-Node LLM Configuration
Use different LLMs for specific nodes:
from langchain_openai import ChatOpenAI
from langchain_anthropic import ChatAnthropic
from prd_inator import generate_prd
# Default LLM for most nodes
default_llm = ChatOpenAI(model="gpt-4o", temperature=0.7)
# Use Claude for adversarial thinking
adversarial_llm = ChatAnthropic(model="claude-3-5-sonnet-20241022", temperature=0.9)
# Use cheaper model for diversity enforcement
cheap_llm = ChatOpenAI(model="gpt-4o-mini", temperature=0.3)
result = generate_prd(
role="Frontend Developer",
tech_stack="React, TypeScript",
domain="Healthcare",
seniority="Senior",
llm=default_llm,
node_llms={
"adversarial_agent": adversarial_llm,
"diversity_enforcer": cheap_llm
}
)
Why This Approach?
- Bring your own LLM: Use any LangChain-compatible model (OpenAI, Anthropic, local models, custom wrappers)
- Full control: Configure temperature, max_tokens, timeouts, retries, etc.
- No coupling: The library doesn't manage API keys or provider initialization
- Flexible: Mix and match models per node for cost/quality optimization
Available Nodes for Configuration
idea_divergencediversity_enforceranti_ai_filterconstraint_injectorscenario_transformeradversarial_agentpatch_nodeprd_generator
Pipeline overview
Employer inputs
→ Idea divergence engine
→ Diversity enforcer
→ Anti-AI filter ↺ loops back if ideas are too weak (max 3x)
→ Constraint injector
→ Scenario transformer (generates structured PRD components)
→ Adversarial agent
→ Patch node (hardens PRD against shortcuts)
→ PRD generator (assembles final document)
→ Output
Output
Each run produces a single structured PRD document with:
- Objective & Context — business problem and what to build
- Technical Stack — required technologies
- Core Requirements — 3-5 main requirements with details
- Functional Requirements — API endpoints/interfaces with specifications
- Non-Functional Requirements — performance, resilience, security, developer experience
- User Flow — end-to-end step-by-step flow
Stack
Project details
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 prd_inator-0.3.2.tar.gz.
File metadata
- Download URL: prd_inator-0.3.2.tar.gz
- Upload date:
- Size: 116.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7df9eaf6f654ec85c5b5c48027902b41c7358b75a54baa7f7ed497b12bee4fe7
|
|
| MD5 |
21cb0b2e57d7e363d3e582f913b6f356
|
|
| BLAKE2b-256 |
00ea2c1daa6c14857803f719c882f249ab9d807c73b22b09e7c3f59e2356717e
|
Provenance
The following attestation bundles were made for prd_inator-0.3.2.tar.gz:
Publisher:
publish.yml on starthackHQ/prd-inator
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
prd_inator-0.3.2.tar.gz -
Subject digest:
7df9eaf6f654ec85c5b5c48027902b41c7358b75a54baa7f7ed497b12bee4fe7 - Sigstore transparency entry: 1374256231
- Sigstore integration time:
-
Permalink:
starthackHQ/prd-inator@0061f75d7d72301eeef6a8f55886641c011ba0dd -
Branch / Tag:
refs/tags/v0.3.2 - Owner: https://github.com/starthackHQ
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0061f75d7d72301eeef6a8f55886641c011ba0dd -
Trigger Event:
release
-
Statement type:
File details
Details for the file prd_inator-0.3.2-py3-none-any.whl.
File metadata
- Download URL: prd_inator-0.3.2-py3-none-any.whl
- Upload date:
- Size: 18.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cf3dff6234e22d5bfcf62464d6d506c952f746601db7654b97dfaa9147efc789
|
|
| MD5 |
b4aff8d71e9729b5c67db75df0503bf1
|
|
| BLAKE2b-256 |
e890711da23cb45f149a39baf3903a984892b52dbe09ce94b5c1f32388a9b998
|
Provenance
The following attestation bundles were made for prd_inator-0.3.2-py3-none-any.whl:
Publisher:
publish.yml on starthackHQ/prd-inator
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
prd_inator-0.3.2-py3-none-any.whl -
Subject digest:
cf3dff6234e22d5bfcf62464d6d506c952f746601db7654b97dfaa9147efc789 - Sigstore transparency entry: 1374256273
- Sigstore integration time:
-
Permalink:
starthackHQ/prd-inator@0061f75d7d72301eeef6a8f55886641c011ba0dd -
Branch / Tag:
refs/tags/v0.3.2 - Owner: https://github.com/starthackHQ
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0061f75d7d72301eeef6a8f55886641c011ba0dd -
Trigger Event:
release
-
Statement type: