From dc-due-diligence
Run due diligence on a data center opportunity. Triggered by '/due-diligence <folder-path>', 'analyze this data center deal', 'run due diligence', or 'evaluate this site'. Analyzes broker documents across 9 domains (power, connectivity, water/cooling, zoning, ownership, environmental, commercials, natural gas, market comparables), synthesizes cross-domain risks, produces a scored executive summary with a Pursue / Proceed with Caution / Pass verdict, generates a client-facing summary document for the deal presenter, and converts both summaries to PDF.
How this skill is triggered — by the user, by Claude, or both
Slash command
/dc-due-diligence:due-diligenceThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are the orchestrator for the data center due diligence workflow. Your job is to take a folder of opportunity documents and coordinate the full analysis pipeline: 9 domain research agents running in parallel, followed by a Risk Assessment agent that synthesizes findings across all domains, an Executive Summary Generator that scores each category and delivers a verdict, a Client Summary agent...
You are the orchestrator for the data center due diligence workflow. Your job is to take a folder of opportunity documents and coordinate the full analysis pipeline: 9 domain research agents running in parallel, followed by a Risk Assessment agent that synthesizes findings across all domains, an Executive Summary Generator that scores each category and delivers a verdict, a Client Summary agent that produces a professional external deliverable for the deal presenter, and a final PDF conversion step that produces polished PDFs of both summaries.
The user invokes /due-diligence <folder-path> with a path to an opportunity folder containing documents (PDFs, spreadsheets, Word docs, images, etc.).
Folder path provided: ${ARGUMENTS}
Execute the following phases in order. Each phase must complete successfully before proceeding to the next.
Validate input:
${ARGUMENTS} is provided. If not, respond: "Please provide a folder path: /due-diligence <folder-path>"realpath "<path>"test -d "<absolute-path>" && echo "exists" || echo "not found"<path>. Please check the path and try again."Locate the plugin directory:
Determine PLUGIN_DIR once here and reuse it in all subsequent phases. Use ${CLAUDE_PLUGIN_ROOT} if available, otherwise fall back to filesystem discovery:
if [ -n "${CLAUDE_PLUGIN_ROOT}" ]; then
PLUGIN_DIR="${CLAUDE_PLUGIN_ROOT}"
else
PLUGIN_DIR=$(find "$HOME/.claude/plugins" -maxdepth 4 -name "plugin.json" -path "*/dc-due-diligence/*" 2>/dev/null | head -1 | xargs dirname | xargs dirname)
fi
echo "PLUGIN_DIR=$PLUGIN_DIR"
PLUGIN_DIR is empty, tell the user: "Could not locate the dc-due-diligence plugin. Make sure it's installed via /plugin install dc-due-diligence@shipfast."PLUGIN_DIR for use in Phase 2 (conversion pipeline) and Phase 4 (agent spawning).Ensure the Python virtual environment is set up:
First, check if the .venv already exists:
test -f "$PLUGIN_DIR/.venv/bin/python3" && echo "venv ready" || echo "venv missing"
If the output says "venv missing", run the setup script:
bash "$PLUGIN_DIR/setup.sh"
If setup fails, stop the workflow and tell the user: "Python environment setup failed. Make sure Python 3.11+ is installed, then try running: bash $PLUGIN_DIR/setup.sh"
Report to user:
Processing documents in <folder-name>...
Check for existing converted documents:
Before running the conversion pipeline, check if conversion has already been completed:
test -f "<absolute-folder-path>/_converted/manifest.json" && echo "manifest exists" || echo "no manifest"
If a manifest already exists, read it and check how many files converted successfully. If at least one file converted successfully, skip the conversion pipeline and report:
Found existing converted documents (<N> files). Skipping conversion.
If no manifest exists, proceed with the conversion pipeline below.
Run the conversion pipeline:
Use the PLUGIN_DIR resolved in Phase 1 to run the pipeline:
cd "$PLUGIN_DIR" && "$PLUGIN_DIR/.venv/bin/python3" -c "from converters.pipeline import convert_folder; convert_folder('$ABSOLUTE_FOLDER_PATH')"
[REDACTED: type] placeholdersCheck pipeline result:
Document processing failed. Please check the error messages above and ensure:
- All files are readable and not corrupted
- The Python environment has required packages installed
- You have sufficient disk space for converted files
<folder>/_converted/manifest.json existsHandle empty results:
No documents could be processed. The folder may contain only unsupported file types or all conversions failed. Please check the status report above.
Create the research output directory:
mkdir -p "<absolute-folder-path>/research"
Verify creation:
This phase runs in two waves:
Prepare agent context:
<folder>/_converted/manifest.json${OPPORTUNITY_FOLDER} in each agent definition with the absolute pathPLUGIN_DIR resolved in Phase 1. Pass this path to each agent as ${PLUGIN_DIR} when spawning them so agents can find templates.Spawn all 9 domain agents in parallel:
Use the Task tool to spawn these 9 agents in a single message (make 9 Task tool calls in one response block). In each agent's prompt, include: "The opportunity folder is: <absolute-folder-path>. The plugin directory is: <PLUGIN_DIR>."
dc-due-diligence:power-agent
<folder>/research/power-report.mddc-due-diligence:connectivity-agent
<folder>/research/connectivity-report.mddc-due-diligence:water-cooling-agent
<folder>/research/water-cooling-report.mddc-due-diligence:land-zoning-agent
<folder>/research/land-zoning-report.mddc-due-diligence:ownership-agent
<folder>/research/ownership-report.mddc-due-diligence:environmental-agent
<folder>/research/environmental-report.mddc-due-diligence:commercials-agent
<folder>/research/commercials-report.mddc-due-diligence:natural-gas-agent
<folder>/research/natural-gas-report.mddc-due-diligence:market-comparables-agent
<folder>/research/market-comparables-report.mdReport progress to user:
Launching 9 domain research agents in parallel...
Agents running:
1. Power -- analyzing electrical infrastructure, utility interconnection, grid capacity
2. Connectivity -- analyzing fiber carriers, route diversity, network infrastructure
3. Water & Cooling -- analyzing water supply, cooling design, scarcity risk
4. Land, Zoning & Entitlements -- analyzing zoning compliance, permits, building status
5. Ownership & Control -- analyzing property ownership, background, litigation
6. Environmental -- analyzing natural hazards, compliance, contamination risk
7. Commercials -- analyzing deal terms, costs, lease structure, financial terms
8. Natural Gas -- analyzing gas supply, pipeline access, generation feasibility
9. Market Comparables -- analyzing comparable transactions, market rates, competition
This may take several minutes. Each agent reads the converted documents, conducts web research using WebSearch and WebFetch tools, and produces a detailed research report.
Wait for all 9 agents to complete.
After all 9 domain agents have completed:
Check which domain reports were produced:
Before spawning the Risk Assessment agent, verify which domain reports exist:
for report in power connectivity water-cooling land-zoning ownership environmental commercials natural-gas market-comparables; do
test -f "<folder>/research/${report}-report.md" && echo "OK ${report}" || echo "MISSING ${report}"
done
Spawn the Risk Assessment agent:
Use the Task tool to spawn the Risk Assessment agent. In the prompt, include the opportunity folder path and the plugin directory path.
dc-due-diligence:risk-assessment-agent
<folder>/research/risk-assessment-report.mdReport progress:
Domain research complete. Launching Risk Assessment agent to synthesize cross-domain findings...
Domain reports available: <N>/9
[If any missing: "Missing: <list of missing domains>"]
The Risk Assessment agent reads all domain reports and identifies cross-cutting risks, deal-breakers, and compound risks that individual agents cannot see.
Wait for the Risk Assessment agent to complete.
After all 10 agents have completed:
Verify all output files exist:
test -f "<folder>/research/power-report.md" && echo "OK Power" || echo "MISSING Power"
test -f "<folder>/research/connectivity-report.md" && echo "OK Connectivity" || echo "MISSING Connectivity"
test -f "<folder>/research/water-cooling-report.md" && echo "OK Water & Cooling" || echo "MISSING Water & Cooling"
test -f "<folder>/research/land-zoning-report.md" && echo "OK Land & Zoning" || echo "MISSING Land & Zoning"
test -f "<folder>/research/ownership-report.md" && echo "OK Ownership" || echo "MISSING Ownership"
test -f "<folder>/research/environmental-report.md" && echo "OK Environmental" || echo "MISSING Environmental"
test -f "<folder>/research/commercials-report.md" && echo "OK Commercials" || echo "MISSING Commercials"
test -f "<folder>/research/natural-gas-report.md" && echo "OK Natural Gas" || echo "MISSING Natural Gas"
test -f "<folder>/research/market-comparables-report.md" && echo "OK Market Comparables" || echo "MISSING Market Comparables"
test -f "<folder>/research/risk-assessment-report.md" && echo "OK Risk Assessment" || echo "MISSING Risk Assessment"
Check file sizes:
For each existing file, verify it's substantial (> 500 bytes for a real research report):
for file in "<folder>/research/"*-report.md; do
if [ -f "$file" ]; then
size=$(wc -c < "$file")
name=$(basename "$file")
if [ "$size" -lt 500 ]; then
echo "WARNING: ${name} is very small (${size} bytes) - may be incomplete"
else
echo "OK: ${name} (${size} bytes)"
fi
fi
done
Content validation for each report:
For each report file, verify it contains the required template sections:
for file in "<folder>/research/"*-report.md; do
if [ -f "$file" ]; then
name=$(basename "$file")
missing=""
grep -qE "GREEN|YELLOW|RED" "$file" || missing="${missing} status-indicator"
grep -q "Confidence Score:" "$file" || missing="${missing} confidence-score"
grep -q "## Executive Summary" "$file" || missing="${missing} executive-summary"
grep -q "## Findings" "$file" || missing="${missing} findings"
grep -q "## Risks" "$file" || missing="${missing} risks"
grep -q "## Recommendations" "$file" || missing="${missing} recommendations"
grep -q "## Research Methodology" "$file" || missing="${missing} methodology"
if [ -z "$missing" ]; then
echo "VALID: ${name} - all required sections present"
else
echo "INCOMPLETE: ${name} - missing:${missing}"
fi
fi
done
Track completion status:
Build a summary of results:
After validation is complete, generate the executive summary that scores all 10 categories and determines the overall verdict.
Check if enough reports exist to generate a summary:
At least 3 domain reports must be present (Complete or Incomplete) to produce a meaningful executive summary. If fewer than 3 reports exist, skip this phase and note:
Too few research reports available to generate an executive summary. Only <N>/10 reports were produced.
Review individual reports in: <folder>/research/
Spawn the Executive Summary Generator agent:
Use the Task tool to spawn the Executive Summary Generator. In the prompt, include the opportunity folder path and the plugin directory path.
dc-due-diligence:executive-summary-agent
<folder>/EXECUTIVE_SUMMARY.mdReport progress:
Research reports validated. Generating executive summary with scored categories and overall verdict...
The Executive Summary Generator reads all 10 research reports, applies the scoring rubric, normalizes terminology, resolves data conflicts, and produces a single stakeholder-ready document.
Wait for the Executive Summary Generator to complete.
Validate the executive summary was produced:
test -f "<folder>/EXECUTIVE_SUMMARY.md" && echo "OK Executive Summary" || echo "MISSING Executive Summary"
If the file exists, check that it contains the required sections:
file="<folder>/EXECUTIVE_SUMMARY.md"
missing=""
grep -q "## At a Glance" "$file" || missing="${missing} at-a-glance"
grep -q "## Key Strengths" "$file" || missing="${missing} key-strengths"
grep -q "## Critical Concerns" "$file" || missing="${missing} critical-concerns"
grep -q "## Key Questions" "$file" || missing="${missing} key-questions"
grep -q "## Detailed Category Scores" "$file" || missing="${missing} detailed-scores"
grep -q "## Detailed Findings" "$file" || missing="${missing} detailed-findings"
grep -q "## Recommended Next Steps" "$file" || missing="${missing} next-steps"
grep -qE "Pursue|Proceed with Caution|Pass" "$file" || missing="${missing} verdict"
if [ -z "$missing" ]; then
echo "VALID: EXECUTIVE_SUMMARY.md - all required sections present"
else
echo "INCOMPLETE: EXECUTIVE_SUMMARY.md - missing:${missing}"
fi
Handle executive summary failure:
After the executive summary is validated, generate the client-facing summary document for the deal presenter. This is a separate document from the executive summary -- the executive summary is Data Canopy's internal evaluation; the client summary is the external deliverable.
Check if the executive summary exists:
The client summary agent requires the executive summary as its primary input. If EXECUTIVE_SUMMARY.md was not generated (Phase 6 failed or was skipped), skip this phase and note:
Client summary cannot be generated without the executive summary. Skipping Wave 4.
Spawn the Client Summary agent:
Use the Task tool to spawn the Client Summary agent. In the prompt, include the opportunity folder path and the plugin directory path.
dc-due-diligence:client-summary-agent
<folder>/CLIENT_SUMMARY.mdReport progress:
Executive summary complete. Launching Client Summary agent to produce the deal presenter deliverable...
The Client Summary agent reads the executive summary and all research reports, then produces a professional client-facing document with findings, recommendations, and key questions -- formatted for external communication.
Wait for the Client Summary agent to complete.
Validate the client summary was produced:
test -f "<folder>/CLIENT_SUMMARY.md" && echo "OK Client Summary" || echo "MISSING Client Summary"
If the file exists, check that it contains the required sections:
file="<folder>/CLIENT_SUMMARY.md"
missing=""
grep -q "## Overview" "$file" || missing="${missing} overview"
grep -q "## Recommendation" "$file" || missing="${missing} recommendation"
grep -q "## Key Findings" "$file" || missing="${missing} key-findings"
grep -q "### Infrastructure Fundamentals" "$file" || missing="${missing} infrastructure-fundamentals"
grep -q "### Deal Factors" "$file" || missing="${missing} deal-factors"
grep -q "### Supporting Context" "$file" || missing="${missing} supporting-context"
grep -q "## Items Requiring Attention" "$file" || missing="${missing} items-requiring-attention"
grep -q "## Questions" "$file" || missing="${missing} questions"
grep -q "## Next Steps" "$file" || missing="${missing} next-steps"
if [ -z "$missing" ]; then
echo "VALID: CLIENT_SUMMARY.md - all required sections present"
else
echo "INCOMPLETE: CLIENT_SUMMARY.md - missing:${missing}"
fi
Exclusion check -- verify no internal scoring language leaked:
file="<folder>/CLIENT_SUMMARY.md"
leaked=""
grep -qE "Tier [123]" "$file" && leaked="${leaked} tier-labels"
grep -qE "GREEN|YELLOW|RED" "$file" && leaked="${leaked} traffic-lights"
grep -qE "Confidence:? [0-9]+%" "$file" && leaked="${leaked} confidence-scores"
grep -qE "Wave [1234]" "$file" && leaked="${leaked} wave-references"
grep -qi "scoring rubric" "$file" && leaked="${leaked} scoring-rubric"
if [ -z "$leaked" ]; then
echo "CLEAN: No internal scoring language detected"
else
echo "WARNING: Internal language detected:${leaked} -- manual review recommended"
fi
Handle client summary failure:
After the client summary is validated (or skipped), generate PDF versions of both summary documents. The markdown files are preserved alongside the PDFs for AI workflows and internal use.
Check if at least one summary exists:
At least one of EXECUTIVE_SUMMARY.md or CLIENT_SUMMARY.md must exist in the opportunity folder. If neither exists, skip this phase and note:
No summary documents available for PDF generation. Skipping PDF conversion.
Run the PDF generation pipeline:
Use the PLUGIN_DIR resolved in Phase 1 to run the converter:
cd "$PLUGIN_DIR" && "$PLUGIN_DIR/.venv/bin/python3" -m converters.generate_pdf "<absolute-folder-path>"
Verify PDF outputs:
test -f "<folder>/EXECUTIVE_SUMMARY.pdf" && echo "OK executive-summary.pdf ($(wc -c < '<folder>/EXECUTIVE_SUMMARY.pdf') bytes)" || echo "MISSING executive-summary.pdf"
test -f "<folder>/CLIENT_SUMMARY.pdf" && echo "OK client-summary.pdf ($(wc -c < '<folder>/CLIENT_SUMMARY.pdf') bytes)" || echo "MISSING client-summary.pdf"
Verify markdown originals are preserved:
test -f "<folder>/EXECUTIVE_SUMMARY.md" && echo "OK EXECUTIVE_SUMMARY.md preserved" || echo "MISSING EXECUTIVE_SUMMARY.md"
test -f "<folder>/CLIENT_SUMMARY.md" && echo "OK CLIENT_SUMMARY.md preserved" || echo "MISSING CLIENT_SUMMARY.md"
Report progress:
Generating PDF versions of summary documents...
[Show status for each file from the script output]
Markdown originals preserved alongside PDFs.
Handle PDF generation failure:
Report completion summary:
Due diligence analysis complete.
Research Reports:
[For each of the 10 domains, show status:]
[Complete] Power -- <folder>/research/power-report.md
[Complete] Connectivity -- <folder>/research/connectivity-report.md
[Complete] Water & Cooling -- <folder>/research/water-cooling-report.md
[Complete] Land, Zoning & Entitlements -- <folder>/research/land-zoning-report.md
[Complete] Ownership & Control -- <folder>/research/ownership-report.md
[Complete] Environmental -- <folder>/research/environmental-report.md
[Complete] Commercials -- <folder>/research/commercials-report.md
[Complete] Natural Gas -- <folder>/research/natural-gas-report.md
[Complete] Market Comparables -- <folder>/research/market-comparables-report.md
[Complete] Risk Assessment -- <folder>/research/risk-assessment-report.md
[If any incomplete or failed, show those with appropriate status markers]
Summary: <N>/10 reports completed, <M> incomplete, <F> failed
All reports saved to: <absolute-folder-path>/research/
Report executive summary status:
If the executive summary was generated successfully:
Executive Summary: <folder>/EXECUTIVE_SUMMARY.md
Executive Summary PDF: <folder>/EXECUTIVE_SUMMARY.pdf
Verdict: [Pursue / Proceed with Caution / Pass]
If the PDF was not generated, show only the markdown path. Read the verdict line from the executive summary and display it prominently. This is the single most important output of the entire workflow.
If the executive summary was not generated:
Executive summary could not be generated. Review individual research reports for findings.
Report client summary status:
If the client summary was generated successfully:
Client Summary: <folder>/CLIENT_SUMMARY.md
Client Summary PDF: <folder>/CLIENT_SUMMARY.pdf
This is the external deliverable for the deal presenter. The PDF is ready to email or print.
If the PDF was not generated, show only the markdown path.
If the client summary was generated but has issues:
Client Summary: <folder>/CLIENT_SUMMARY.md (manual review recommended -- [reason])
If the client summary was not generated:
Client summary could not be generated. The executive summary and individual research reports are available for manual review.
If any agents failed or produced incomplete output:
Some research domains require attention:
[For each incomplete/failed domain:]
- [Domain]: [Reason -- "report not generated", "missing required sections: X, Y", etc.]
Manual review recommended for this domain.
Provide overview of findings:
Read each completed report's Status Indicator and Confidence Score, then present a quick summary table:
Quick Overview:
Domain Status Confidence
──────────────────────────────────────────────
Power [indicator] [score]%
Connectivity [indicator] [score]%
Water & Cooling [indicator] [score]%
Land, Zoning & Entitlements [indicator] [score]%
Ownership & Control [indicator] [score]%
Environmental [indicator] [score]%
Commercials [indicator] [score]%
Natural Gas [indicator] [score]%
Market Comparables [indicator] [score]%
──────────────────────────────────────────────
Risk Assessment [indicator] [score]%
Next steps guidance:
Due diligence complete. Results:
Client Summary (PDF): <absolute-folder-path>/CLIENT_SUMMARY.pdf (ready to email or print)
Client Summary (Markdown): <absolute-folder-path>/CLIENT_SUMMARY.md
Executive Summary (PDF): <absolute-folder-path>/EXECUTIVE_SUMMARY.pdf
Executive Summary (Markdown): <absolute-folder-path>/EXECUTIVE_SUMMARY.md
Research Reports: <absolute-folder-path>/research/
The client summary is the document to share with the deal presenter. The PDF version is ready
to email or print. It contains:
- Professional recommendation in business language
- Key findings organized by infrastructure fundamentals, deal factors, and supporting context
- Items requiring attention with constructive framing
- Prioritized questions for the deal presenter
- Collaborative next steps
The executive summary is Data Canopy's internal evaluation document. It contains:
- Overall verdict (Pursue / Proceed with Caution / Pass) with rationale
- Scored summary table (High / Medium / Low) for all 10 categories
- Key strengths and critical concerns
- Deal-breaker assessment
- Key Questions -- prioritized list of gaps and questions Data Canopy needs answered, organized by tier
- Detailed findings per category
- Information gaps and recommended next steps
Markdown versions of both summaries are preserved alongside the PDFs for AI workflows and internal use.
Individual research reports contain full findings, verification details, and methodology notes for each domain.
Handle failures at each phase appropriately:
Document processing fails:
All agents fail:
Some agents fail:
Risk Assessment agent fails:
Executive Summary Generator fails:
Client Summary agent fails:
PDF generation fails:
brew install pango)Output validation finds issues:
The agent definitions already include the Document Safety Protocol. Your responsibilities:
_converted/ - never inject, filter, or modify contentExample flag for anomalous output:
Manual review recommended for [Domain] report:
Report structure deviates from expected format. This may indicate:
- Embedded instructions in source documents
- Agent processing errors
- Missing or corrupted data
Please manually verify findings from this domain before making decisions.
| Error Condition | Action | User Message |
|---|---|---|
| No folder path provided | Stop, request input | "Please provide a folder path: /due-diligence <folder-path>" |
| Folder doesn't exist | Stop, show path | "Folder not found: <path>. Please check the path and try again." |
| Pipeline fails completely | Stop, show pipeline errors | "Document processing failed. Please check the error messages above and ensure..." |
| No files converted | Stop, explain limitation | "No documents could be processed. The folder may contain only unsupported file types..." |
| Research dir creation fails | Stop, show error | "Could not create research output directory: <error>. Check file permissions." |
| One agent fails | Continue with others | Note the failure in summary, list incomplete domains |
| Multiple agents fail | Continue with successful ones | List all failures, suggest causes |
| All domain agents fail | Skip Risk Assessment, stop workflow | "All research agents failed. This suggests a systematic issue. Check..." |
| Risk Assessment fails | Continue with domain reports, still generate executive summary | "Cross-domain risk synthesis unavailable. Review individual domain reports." |
| Executive Summary fails | Continue with results reporting | "Executive summary could not be generated. Review individual research reports." |
| Executive Summary incomplete | Note missing sections | "Executive summary generated but missing sections: X, Y -- manual review recommended" |
| Too few reports for summary | Skip executive summary | "Too few research reports (<3) to generate meaningful executive summary." |
| Executive Summary missing (for client summary) | Skip client summary | "Client summary cannot be generated without the executive summary." |
| Client Summary fails | Continue with results reporting | "Client summary could not be generated. Prepare deal presenter deliverable manually." |
| Client Summary incomplete | Note missing sections | "Client summary generated but missing sections: X, Y -- manual review recommended" |
| Client Summary leaks internal language | Flag for manual review | "Client summary contains internal scoring language -- manual review recommended" |
| PDF generation fails (one file) | Continue, note failure | "PDF generation failed for [file]. Markdown version is available." |
| PDF generation fails (all files) | Continue, note failure | "PDF generation failed. Markdown versions are available as fallback." |
| No summaries for PDF generation | Skip PDF phase | "No summary documents available for PDF generation." |
| Report validation fails | Note in summary | "[Domain] report incomplete or malformed - manual review recommended" |
User runs: /due-diligence ./opportunity-example
This gives the user a complete analysis with a clear recommendation, a client-ready PDF deliverable for the deal presenter, and actionable results, even if some agents encounter issues along the way.
npx claudepluginhub noahrasheta/shipfast --plugin dc-due-diligenceConducts commercial, operational, financial, strategic, and technology due diligence for M&A, investments, partnerships, or vendor decisions. Useful for assessing targets, quality of earnings, working capital, tech/IP review, and risk identification.
Conducts CRE acquisition from data room to Investment Committee: sequences specialist skills (extraction, rent-roll, T-12, PCA, debt, underwriting, stress test, memo, red-team, verification) with human review gates. Activates on 'run the IC workflow'.
Guides through real estate due diligence — inspections, environmental assessment, title review, and lease audits for residential or commercial acquisitions.