Repository files navigation

File Agent

An AI agent that navigates construction project documents like a filesystem — thinking in bash, not vectors.

Note: The application UI, all documents, and agent responses are in German, targeting German-speaking construction professionals. This README is in English.

Live Demo

Try it here -- No SSL (self-hosted on a VPS without a custom domain).

Architectural Thesis

For document collections with natural hierarchy (like construction projects), filesystem navigation produces more auditable results than embedding-based retrieval.

Construction projects have well-established document hierarchies — contracts, change orders, meeting minutes, punch lists, correspondence, daily logs, invoices, permits. These map naturally to folder structures with numeric prefixes:

/01_vertraege/ # Contracts
/02_nachtraege/ # Change orders
/03_genehmigungen/ # Permits
/04_protokolle/ # Meeting minutes
/05_maengel/ # Punch lists / defects
/06_schriftverkehr/ # Correspondence
/07_bautagebuch/ # Daily construction logs
/08_plaene/ # Technical drawings
/09_rechnungen/ # Invoices

The agent executes bash commands (ls, cat, grep, find) against a virtual in-memory filesystem built from these documents. Every navigation step is visible to the user — the trace IS the evidence. There is no vector database, no embeddings, no RAG pipeline. Just bash.

This approach trades recall breadth for auditability: you can see exactly which documents the agent opened, which search terms it used, and how it arrived at its answer. For domains with structured document hierarchies, this transparency is more valuable than statistical similarity scores.

Architecture

Features

  • Virtual filesystem with realistic German construction documents (PDF, Excel, text, SVG drawings)
  • AI agent navigates via bash commands (ls, cat, grep, find)
  • Real-time streaming responses with visible command trace
  • Inline citations referencing source documents
  • Evaluation harness with A/B testing capability
  • All documents in German construction terminology (VOB, HOAI, etc.)

Tech Stack

TechnologyVersionPurpose
Next.js16App Router, SSR, deployment
AI SDK6Agent loop, streaming, tool orchestration
@ai-sdk/anthropic3Claude model provider
just-bash + bash-tool2 / 1Virtual in-memory filesystem + bash interpreter
Tailwind CSS4Styling
Vitest4Testing
TypeScript5Type safety

Try It

Once running, try these example questions (in German):

  • "Welche Nachtraege gibt es und was ist deren aktueller Status?" — Lists all change orders and their current status
  • "Welche Maengel sind noch nicht behoben?" — Finds unresolved defects across punch lists
  • "Wer sind die beteiligten Nachunternehmer und welche Gewerke fuehren sie aus?" — Identifies subcontractors and their trades

Local Setup

git clone https://github.com/USER/file-agent.git
cd file-agent
npm install
cp .env.example .env.local
# Add your ANTHROPIC_API_KEY to .env.local
npm run dev
# Open http://localhost:3000

Deployment

Pre-deploy checks

npm run build
npm test

Option A: Self-hosted with Coolify (recommended)

The live demo uses Coolify on a self-hosted VPS. This avoids serverless function timeouts — the agent runs multi-step bash navigation loops that can take 15-30 seconds, which exceeds Vercel's Hobby plan limits.

  1. Install Coolify on any VPS (1 vCPU, 2 GB RAM is sufficient)
  2. Add the GitHub repo as a new resource (Nixpacks build pack)
  3. Set ANTHROPIC_API_KEY as an environment variable
  4. Deploy — Coolify auto-detects Next.js and handles build/start

Note: The live demo runs on HTTP via a free sslip.io domain. For HTTPS, point a custom domain to the VPS and Coolify will auto-provision a Let's Encrypt certificate.

Option B: Vercel

The codebase is standard Next.js and deploys to Vercel with zero code changes. Connect the GitHub repo in the Vercel Dashboard, or deploy via CLI:

npx vercel deploy --prod

Set ANTHROPIC_API_KEY in Vercel Dashboard > Project Settings > Environment Variables.

Note: Vercel Pro plan (60s function timeout) is recommended. The Hobby plan's 10-second timeout may cut off multi-step agent responses.

Runtime Notes

  • Edge runtime is not supportedjust-bash uses Node.js APIs internally. The default Node.js serverless runtime is required.
  • Streaming keeps the connection alive — both Vercel and Coolify support streamed responses natively.

Project Structure

src/
app/ # Next.js App Router pages and API routes
components/ # Chat UI, tool trace, citations, example questions
corpus/ # Virtual filesystem data and loader
lib/agent/ # System prompt and agent configuration
eval/ # Evaluation harness, test questions, A/B comparison
docs/ # Architecture diagrams (Excalidraw)

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

File Agent

An AI agent that navigates construction project documents like a filesystem — thinking in bash, not vectors.

Note: The application UI, all documents, and agent responses are in German, targeting German-speaking construction professionals. This README is in English.

Live Demo

Try it here -- No SSL (self-hosted on a VPS without a custom domain).

Architectural Thesis

For document collections with natural hierarchy (like construction projects), filesystem navigation produces more auditable results than embedding-based retrieval.

Construction projects have well-established document hierarchies — contracts, change orders, meeting minutes, punch lists, correspondence, daily logs, invoices, permits. These map naturally to folder structures with numeric prefixes:

/01_vertraege/ # Contracts
/02_nachtraege/ # Change orders
/03_genehmigungen/ # Permits
/04_protokolle/ # Meeting minutes
/05_maengel/ # Punch lists / defects
/06_schriftverkehr/ # Correspondence
/07_bautagebuch/ # Daily construction logs
/08_plaene/ # Technical drawings
/09_rechnungen/ # Invoices

The agent executes bash commands (ls, cat, grep, find) against a virtual in-memory filesystem built from these documents. Every navigation step is visible to the user — the trace IS the evidence. There is no vector database, no embeddings, no RAG pipeline. Just bash.

This approach trades recall breadth for auditability: you can see exactly which documents the agent opened, which search terms it used, and how it arrived at its answer. For domains with structured document hierarchies, this transparency is more valuable than statistical similarity scores.

Architecture

Features

  • Virtual filesystem with realistic German construction documents (PDF, Excel, text, SVG drawings)
  • AI agent navigates via bash commands (ls, cat, grep, find)
  • Real-time streaming responses with visible command trace
  • Inline citations referencing source documents
  • Evaluation harness with A/B testing capability
  • All documents in German construction terminology (VOB, HOAI, etc.)

Tech Stack

TechnologyVersionPurpose
Next.js16App Router, SSR, deployment
AI SDK6Agent loop, streaming, tool orchestration
@ai-sdk/anthropic3Claude model provider
just-bash + bash-tool2 / 1Virtual in-memory filesystem + bash interpreter
Tailwind CSS4Styling
Vitest4Testing
TypeScript5Type safety

Try It

Once running, try these example questions (in German):

  • "Welche Nachtraege gibt es und was ist deren aktueller Status?" — Lists all change orders and their current status
  • "Welche Maengel sind noch nicht behoben?" — Finds unresolved defects across punch lists
  • "Wer sind die beteiligten Nachunternehmer und welche Gewerke fuehren sie aus?" — Identifies subcontractors and their trades

Local Setup

git clone https://github.com/USER/file-agent.git
cd file-agent
npm install
cp .env.example .env.local
# Add your ANTHROPIC_API_KEY to .env.local
npm run dev
# Open http://localhost:3000

Deployment

Pre-deploy checks

npm run build
npm test

Option A: Self-hosted with Coolify (recommended)

The live demo uses Coolify on a self-hosted VPS. This avoids serverless function timeouts — the agent runs multi-step bash navigation loops that can take 15-30 seconds, which exceeds Vercel's Hobby plan limits.

  1. Install Coolify on any VPS (1 vCPU, 2 GB RAM is sufficient)
  2. Add the GitHub repo as a new resource (Nixpacks build pack)
  3. Set ANTHROPIC_API_KEY as an environment variable
  4. Deploy — Coolify auto-detects Next.js and handles build/start

Note: The live demo runs on HTTP via a free sslip.io domain. For HTTPS, point a custom domain to the VPS and Coolify will auto-provision a Let's Encrypt certificate.

Option B: Vercel

The codebase is standard Next.js and deploys to Vercel with zero code changes. Connect the GitHub repo in the Vercel Dashboard, or deploy via CLI:

npx vercel deploy --prod

Set ANTHROPIC_API_KEY in Vercel Dashboard > Project Settings > Environment Variables.

Note: Vercel Pro plan (60s function timeout) is recommended. The Hobby plan's 10-second timeout may cut off multi-step agent responses.

Runtime Notes

  • Edge runtime is not supportedjust-bash uses Node.js APIs internally. The default Node.js serverless runtime is required.
  • Streaming keeps the connection alive — both Vercel and Coolify support streamed responses natively.

Project Structure

src/
app/ # Next.js App Router pages and API routes
components/ # Chat UI, tool trace, citations, example questions
corpus/ # Virtual filesystem data and loader
lib/agent/ # System prompt and agent configuration
eval/ # Evaluation harness, test questions, A/B comparison
docs/ # Architecture diagrams (Excalidraw)

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

File Agent

An AI agent that navigates construction project documents like a filesystem — thinking in bash, not vectors.

Note: The application UI, all documents, and agent responses are in German, targeting German-speaking construction professionals. This README is in English.

Live Demo

Try it here -- No SSL (self-hosted on a VPS without a custom domain).

Architectural Thesis

For document collections with natural hierarchy (like construction projects), filesystem navigation produces more auditable results than embedding-based retrieval.

Construction projects have well-established document hierarchies — contracts, change orders, meeting minutes, punch lists, correspondence, daily logs, invoices, permits. These map naturally to folder structures with numeric prefixes:

/01_vertraege/ # Contracts
/02_nachtraege/ # Change orders
/03_genehmigungen/ # Permits
/04_protokolle/ # Meeting minutes
/05_maengel/ # Punch lists / defects
/06_schriftverkehr/ # Correspondence
/07_bautagebuch/ # Daily construction logs
/08_plaene/ # Technical drawings
/09_rechnungen/ # Invoices

The agent executes bash commands (ls, cat, grep, find) against a virtual in-memory filesystem built from these documents. Every navigation step is visible to the user — the trace IS the evidence. There is no vector database, no embeddings, no RAG pipeline. Just bash.

This approach trades recall breadth for auditability: you can see exactly which documents the agent opened, which search terms it used, and how it arrived at its answer. For domains with structured document hierarchies, this transparency is more valuable than statistical similarity scores.

Architecture

Features

  • Virtual filesystem with realistic German construction documents (PDF, Excel, text, SVG drawings)
  • AI agent navigates via bash commands (ls, cat, grep, find)
  • Real-time streaming responses with visible command trace
  • Inline citations referencing source documents
  • Evaluation harness with A/B testing capability
  • All documents in German construction terminology (VOB, HOAI, etc.)

Tech Stack

TechnologyVersionPurpose
Next.js16App Router, SSR, deployment
AI SDK6Agent loop, streaming, tool orchestration
@ai-sdk/anthropic3Claude model provider
just-bash + bash-tool2 / 1Virtual in-memory filesystem + bash interpreter
Tailwind CSS4Styling
Vitest4Testing
TypeScript5Type safety

Try It

Once running, try these example questions (in German):

  • "Welche Nachtraege gibt es und was ist deren aktueller Status?" — Lists all change orders and their current status
  • "Welche Maengel sind noch nicht behoben?" — Finds unresolved defects across punch lists
  • "Wer sind die beteiligten Nachunternehmer und welche Gewerke fuehren sie aus?" — Identifies subcontractors and their trades

Local Setup

git clone https://github.com/USER/file-agent.git
cd file-agent
npm install
cp .env.example .env.local
# Add your ANTHROPIC_API_KEY to .env.local
npm run dev
# Open http://localhost:3000

Deployment

Pre-deploy checks

npm run build
npm test

Option A: Self-hosted with Coolify (recommended)

The live demo uses Coolify on a self-hosted VPS. This avoids serverless function timeouts — the agent runs multi-step bash navigation loops that can take 15-30 seconds, which exceeds Vercel's Hobby plan limits.

  1. Install Coolify on any VPS (1 vCPU, 2 GB RAM is sufficient)
  2. Add the GitHub repo as a new resource (Nixpacks build pack)
  3. Set ANTHROPIC_API_KEY as an environment variable
  4. Deploy — Coolify auto-detects Next.js and handles build/start

Note: The live demo runs on HTTP via a free sslip.io domain. For HTTPS, point a custom domain to the VPS and Coolify will auto-provision a Let's Encrypt certificate.

Option B: Vercel

The codebase is standard Next.js and deploys to Vercel with zero code changes. Connect the GitHub repo in the Vercel Dashboard, or deploy via CLI:

npx vercel deploy --prod

Set ANTHROPIC_API_KEY in Vercel Dashboard > Project Settings > Environment Variables.

Note: Vercel Pro plan (60s function timeout) is recommended. The Hobby plan's 10-second timeout may cut off multi-step agent responses.

Runtime Notes

  • Edge runtime is not supportedjust-bash uses Node.js APIs internally. The default Node.js serverless runtime is required.
  • Streaming keeps the connection alive — both Vercel and Coolify support streamed responses natively.

Project Structure

src/
app/ # Next.js App Router pages and API routes
components/ # Chat UI, tool trace, citations, example questions
corpus/ # Virtual filesystem data and loader
lib/agent/ # System prompt and agent configuration
eval/ # Evaluation harness, test questions, A/B comparison
docs/ # Architecture diagrams (Excalidraw)

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

File Agent

An AI agent that navigates construction project documents like a filesystem — thinking in bash, not vectors.

Note: The application UI, all documents, and agent responses are in German, targeting German-speaking construction professionals. This README is in English.

Live Demo

Try it here -- No SSL (self-hosted on a VPS without a custom domain).

Architectural Thesis

For document collections with natural hierarchy (like construction projects), filesystem navigation produces more auditable results than embedding-based retrieval.

Construction projects have well-established document hierarchies — contracts, change orders, meeting minutes, punch lists, correspondence, daily logs, invoices, permits. These map naturally to folder structures with numeric prefixes:

/01_vertraege/ # Contracts
/02_nachtraege/ # Change orders
/03_genehmigungen/ # Permits
/04_protokolle/ # Meeting minutes
/05_maengel/ # Punch lists / defects
/06_schriftverkehr/ # Correspondence
/07_bautagebuch/ # Daily construction logs
/08_plaene/ # Technical drawings
/09_rechnungen/ # Invoices

The agent executes bash commands (ls, cat, grep, find) against a virtual in-memory filesystem built from these documents. Every navigation step is visible to the user — the trace IS the evidence. There is no vector database, no embeddings, no RAG pipeline. Just bash.

This approach trades recall breadth for auditability: you can see exactly which documents the agent opened, which search terms it used, and how it arrived at its answer. For domains with structured document hierarchies, this transparency is more valuable than statistical similarity scores.

Architecture

Features

  • Virtual filesystem with realistic German construction documents (PDF, Excel, text, SVG drawings)
  • AI agent navigates via bash commands (ls, cat, grep, find)
  • Real-time streaming responses with visible command trace
  • Inline citations referencing source documents
  • Evaluation harness with A/B testing capability
  • All documents in German construction terminology (VOB, HOAI, etc.)

Tech Stack

TechnologyVersionPurpose
Next.js16App Router, SSR, deployment
AI SDK6Agent loop, streaming, tool orchestration
@ai-sdk/anthropic3Claude model provider
just-bash + bash-tool2 / 1Virtual in-memory filesystem + bash interpreter
Tailwind CSS4Styling
Vitest4Testing
TypeScript5Type safety

Try It

Once running, try these example questions (in German):

  • "Welche Nachtraege gibt es und was ist deren aktueller Status?" — Lists all change orders and their current status
  • "Welche Maengel sind noch nicht behoben?" — Finds unresolved defects across punch lists
  • "Wer sind die beteiligten Nachunternehmer und welche Gewerke fuehren sie aus?" — Identifies subcontractors and their trades

Local Setup

git clone https://github.com/USER/file-agent.git
cd file-agent
npm install
cp .env.example .env.local
# Add your ANTHROPIC_API_KEY to .env.local
npm run dev
# Open http://localhost:3000

Deployment

Pre-deploy checks

npm run build
npm test

Option A: Self-hosted with Coolify (recommended)

The live demo uses Coolify on a self-hosted VPS. This avoids serverless function timeouts — the agent runs multi-step bash navigation loops that can take 15-30 seconds, which exceeds Vercel's Hobby plan limits.

  1. Install Coolify on any VPS (1 vCPU, 2 GB RAM is sufficient)
  2. Add the GitHub repo as a new resource (Nixpacks build pack)
  3. Set ANTHROPIC_API_KEY as an environment variable
  4. Deploy — Coolify auto-detects Next.js and handles build/start

Note: The live demo runs on HTTP via a free sslip.io domain. For HTTPS, point a custom domain to the VPS and Coolify will auto-provision a Let's Encrypt certificate.

Option B: Vercel

The codebase is standard Next.js and deploys to Vercel with zero code changes. Connect the GitHub repo in the Vercel Dashboard, or deploy via CLI:

npx vercel deploy --prod

Set ANTHROPIC_API_KEY in Vercel Dashboard > Project Settings > Environment Variables.

Note: Vercel Pro plan (60s function timeout) is recommended. The Hobby plan's 10-second timeout may cut off multi-step agent responses.

Runtime Notes

  • Edge runtime is not supportedjust-bash uses Node.js APIs internally. The default Node.js serverless runtime is required.
  • Streaming keeps the connection alive — both Vercel and Coolify support streamed responses natively.

Project Structure

src/
app/ # Next.js App Router pages and API routes
components/ # Chat UI, tool trace, citations, example questions
corpus/ # Virtual filesystem data and loader
lib/agent/ # System prompt and agent configuration
eval/ # Evaluation harness, test questions, A/B comparison
docs/ # Architecture diagrams (Excalidraw)

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

File Agent

An AI agent that navigates construction project documents like a filesystem — thinking in bash, not vectors.

Note: The application UI, all documents, and agent responses are in German, targeting German-speaking construction professionals. This README is in English.

Live Demo

Try it here -- No SSL (self-hosted on a VPS without a custom domain).

Architectural Thesis

For document collections with natural hierarchy (like construction projects), filesystem navigation produces more auditable results than embedding-based retrieval.

Construction projects have well-established document hierarchies — contracts, change orders, meeting minutes, punch lists, correspondence, daily logs, invoices, permits. These map naturally to folder structures with numeric prefixes:

/01_vertraege/ # Contracts
/02_nachtraege/ # Change orders
/03_genehmigungen/ # Permits
/04_protokolle/ # Meeting minutes
/05_maengel/ # Punch lists / defects
/06_schriftverkehr/ # Correspondence
/07_bautagebuch/ # Daily construction logs
/08_plaene/ # Technical drawings
/09_rechnungen/ # Invoices

The agent executes bash commands (ls, cat, grep, find) against a virtual in-memory filesystem built from these documents. Every navigation step is visible to the user — the trace IS the evidence. There is no vector database, no embeddings, no RAG pipeline. Just bash.

This approach trades recall breadth for auditability: you can see exactly which documents the agent opened, which search terms it used, and how it arrived at its answer. For domains with structured document hierarchies, this transparency is more valuable than statistical similarity scores.

Architecture

Features

  • Virtual filesystem with realistic German construction documents (PDF, Excel, text, SVG drawings)
  • AI agent navigates via bash commands (ls, cat, grep, find)
  • Real-time streaming responses with visible command trace
  • Inline citations referencing source documents
  • Evaluation harness with A/B testing capability
  • All documents in German construction terminology (VOB, HOAI, etc.)

Tech Stack

TechnologyVersionPurpose
Next.js16App Router, SSR, deployment
AI SDK6Agent loop, streaming, tool orchestration
@ai-sdk/anthropic3Claude model provider
just-bash + bash-tool2 / 1Virtual in-memory filesystem + bash interpreter
Tailwind CSS4Styling
Vitest4Testing
TypeScript5Type safety

Try It

Once running, try these example questions (in German):

  • "Welche Nachtraege gibt es und was ist deren aktueller Status?" — Lists all change orders and their current status
  • "Welche Maengel sind noch nicht behoben?" — Finds unresolved defects across punch lists
  • "Wer sind die beteiligten Nachunternehmer und welche Gewerke fuehren sie aus?" — Identifies subcontractors and their trades

Local Setup

git clone https://github.com/USER/file-agent.git
cd file-agent
npm install
cp .env.example .env.local
# Add your ANTHROPIC_API_KEY to .env.local
npm run dev
# Open http://localhost:3000

Deployment

Pre-deploy checks

npm run build
npm test

Option A: Self-hosted with Coolify (recommended)

The live demo uses Coolify on a self-hosted VPS. This avoids serverless function timeouts — the agent runs multi-step bash navigation loops that can take 15-30 seconds, which exceeds Vercel's Hobby plan limits.

  1. Install Coolify on any VPS (1 vCPU, 2 GB RAM is sufficient)
  2. Add the GitHub repo as a new resource (Nixpacks build pack)
  3. Set ANTHROPIC_API_KEY as an environment variable
  4. Deploy — Coolify auto-detects Next.js and handles build/start

Note: The live demo runs on HTTP via a free sslip.io domain. For HTTPS, point a custom domain to the VPS and Coolify will auto-provision a Let's Encrypt certificate.

Option B: Vercel

The codebase is standard Next.js and deploys to Vercel with zero code changes. Connect the GitHub repo in the Vercel Dashboard, or deploy via CLI:

npx vercel deploy --prod

Set ANTHROPIC_API_KEY in Vercel Dashboard > Project Settings > Environment Variables.

Note: Vercel Pro plan (60s function timeout) is recommended. The Hobby plan's 10-second timeout may cut off multi-step agent responses.

Runtime Notes

  • Edge runtime is not supportedjust-bash uses Node.js APIs internally. The default Node.js serverless runtime is required.
  • Streaming keeps the connection alive — both Vercel and Coolify support streamed responses natively.

Project Structure

src/
app/ # Next.js App Router pages and API routes
components/ # Chat UI, tool trace, citations, example questions
corpus/ # Virtual filesystem data and loader
lib/agent/ # System prompt and agent configuration
eval/ # Evaluation harness, test questions, A/B comparison
docs/ # Architecture diagrams (Excalidraw)

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

File Agent

An AI agent that navigates construction project documents like a filesystem — thinking in bash, not vectors.

Note: The application UI, all documents, and agent responses are in German, targeting German-speaking construction professionals. This README is in English.

Live Demo

Try it here -- No SSL (self-hosted on a VPS without a custom domain).

Architectural Thesis

For document collections with natural hierarchy (like construction projects), filesystem navigation produces more auditable results than embedding-based retrieval.

Construction projects have well-established document hierarchies — contracts, change orders, meeting minutes, punch lists, correspondence, daily logs, invoices, permits. These map naturally to folder structures with numeric prefixes:

/01_vertraege/ # Contracts
/02_nachtraege/ # Change orders
/03_genehmigungen/ # Permits
/04_protokolle/ # Meeting minutes
/05_maengel/ # Punch lists / defects
/06_schriftverkehr/ # Correspondence
/07_bautagebuch/ # Daily construction logs
/08_plaene/ # Technical drawings
/09_rechnungen/ # Invoices

The agent executes bash commands (ls, cat, grep, find) against a virtual in-memory filesystem built from these documents. Every navigation step is visible to the user — the trace IS the evidence. There is no vector database, no embeddings, no RAG pipeline. Just bash.

This approach trades recall breadth for auditability: you can see exactly which documents the agent opened, which search terms it used, and how it arrived at its answer. For domains with structured document hierarchies, this transparency is more valuable than statistical similarity scores.

Architecture

Features

  • Virtual filesystem with realistic German construction documents (PDF, Excel, text, SVG drawings)
  • AI agent navigates via bash commands (ls, cat, grep, find)
  • Real-time streaming responses with visible command trace
  • Inline citations referencing source documents
  • Evaluation harness with A/B testing capability
  • All documents in German construction terminology (VOB, HOAI, etc.)

Tech Stack

TechnologyVersionPurpose
Next.js16App Router, SSR, deployment
AI SDK6Agent loop, streaming, tool orchestration
@ai-sdk/anthropic3Claude model provider
just-bash + bash-tool2 / 1Virtual in-memory filesystem + bash interpreter
Tailwind CSS4Styling
Vitest4Testing
TypeScript5Type safety

Try It

Once running, try these example questions (in German):

  • "Welche Nachtraege gibt es und was ist deren aktueller Status?" — Lists all change orders and their current status
  • "Welche Maengel sind noch nicht behoben?" — Finds unresolved defects across punch lists
  • "Wer sind die beteiligten Nachunternehmer und welche Gewerke fuehren sie aus?" — Identifies subcontractors and their trades

Local Setup

git clone https://github.com/USER/file-agent.git
cd file-agent
npm install
cp .env.example .env.local
# Add your ANTHROPIC_API_KEY to .env.local
npm run dev
# Open http://localhost:3000

Deployment

Pre-deploy checks

npm run build
npm test

Option A: Self-hosted with Coolify (recommended)

The live demo uses Coolify on a self-hosted VPS. This avoids serverless function timeouts — the agent runs multi-step bash navigation loops that can take 15-30 seconds, which exceeds Vercel's Hobby plan limits.

  1. Install Coolify on any VPS (1 vCPU, 2 GB RAM is sufficient)
  2. Add the GitHub repo as a new resource (Nixpacks build pack)
  3. Set ANTHROPIC_API_KEY as an environment variable
  4. Deploy — Coolify auto-detects Next.js and handles build/start

Note: The live demo runs on HTTP via a free sslip.io domain. For HTTPS, point a custom domain to the VPS and Coolify will auto-provision a Let's Encrypt certificate.

Option B: Vercel

The codebase is standard Next.js and deploys to Vercel with zero code changes. Connect the GitHub repo in the Vercel Dashboard, or deploy via CLI:

npx vercel deploy --prod

Set ANTHROPIC_API_KEY in Vercel Dashboard > Project Settings > Environment Variables.

Note: Vercel Pro plan (60s function timeout) is recommended. The Hobby plan's 10-second timeout may cut off multi-step agent responses.

Runtime Notes

  • Edge runtime is not supportedjust-bash uses Node.js APIs internally. The default Node.js serverless runtime is required.
  • Streaming keeps the connection alive — both Vercel and Coolify support streamed responses natively.

Project Structure

src/
app/ # Next.js App Router pages and API routes
components/ # Chat UI, tool trace, citations, example questions
corpus/ # Virtual filesystem data and loader
lib/agent/ # System prompt and agent configuration
eval/ # Evaluation harness, test questions, A/B comparison
docs/ # Architecture diagrams (Excalidraw)

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

File Agent

An AI agent that navigates construction project documents like a filesystem — thinking in bash, not vectors.

Note: The application UI, all documents, and agent responses are in German, targeting German-speaking construction professionals. This README is in English.

Live Demo

Try it here -- No SSL (self-hosted on a VPS without a custom domain).

Architectural Thesis

For document collections with natural hierarchy (like construction projects), filesystem navigation produces more auditable results than embedding-based retrieval.

Construction projects have well-established document hierarchies — contracts, change orders, meeting minutes, punch lists, correspondence, daily logs, invoices, permits. These map naturally to folder structures with numeric prefixes:

/01_vertraege/ # Contracts
/02_nachtraege/ # Change orders
/03_genehmigungen/ # Permits
/04_protokolle/ # Meeting minutes
/05_maengel/ # Punch lists / defects
/06_schriftverkehr/ # Correspondence
/07_bautagebuch/ # Daily construction logs
/08_plaene/ # Technical drawings
/09_rechnungen/ # Invoices

The agent executes bash commands (ls, cat, grep, find) against a virtual in-memory filesystem built from these documents. Every navigation step is visible to the user — the trace IS the evidence. There is no vector database, no embeddings, no RAG pipeline. Just bash.

This approach trades recall breadth for auditability: you can see exactly which documents the agent opened, which search terms it used, and how it arrived at its answer. For domains with structured document hierarchies, this transparency is more valuable than statistical similarity scores.

Architecture

Features

  • Virtual filesystem with realistic German construction documents (PDF, Excel, text, SVG drawings)
  • AI agent navigates via bash commands (ls, cat, grep, find)
  • Real-time streaming responses with visible command trace
  • Inline citations referencing source documents
  • Evaluation harness with A/B testing capability
  • All documents in German construction terminology (VOB, HOAI, etc.)

Tech Stack

TechnologyVersionPurpose
Next.js16App Router, SSR, deployment
AI SDK6Agent loop, streaming, tool orchestration
@ai-sdk/anthropic3Claude model provider
just-bash + bash-tool2 / 1Virtual in-memory filesystem + bash interpreter
Tailwind CSS4Styling
Vitest4Testing
TypeScript5Type safety

Try It

Once running, try these example questions (in German):

  • "Welche Nachtraege gibt es und was ist deren aktueller Status?" — Lists all change orders and their current status
  • "Welche Maengel sind noch nicht behoben?" — Finds unresolved defects across punch lists
  • "Wer sind die beteiligten Nachunternehmer und welche Gewerke fuehren sie aus?" — Identifies subcontractors and their trades

Local Setup

git clone https://github.com/USER/file-agent.git
cd file-agent
npm install
cp .env.example .env.local
# Add your ANTHROPIC_API_KEY to .env.local
npm run dev
# Open http://localhost:3000

Deployment

Pre-deploy checks

npm run build
npm test

Option A: Self-hosted with Coolify (recommended)

The live demo uses Coolify on a self-hosted VPS. This avoids serverless function timeouts — the agent runs multi-step bash navigation loops that can take 15-30 seconds, which exceeds Vercel's Hobby plan limits.

  1. Install Coolify on any VPS (1 vCPU, 2 GB RAM is sufficient)
  2. Add the GitHub repo as a new resource (Nixpacks build pack)
  3. Set ANTHROPIC_API_KEY as an environment variable
  4. Deploy — Coolify auto-detects Next.js and handles build/start

Note: The live demo runs on HTTP via a free sslip.io domain. For HTTPS, point a custom domain to the VPS and Coolify will auto-provision a Let's Encrypt certificate.

Option B: Vercel

The codebase is standard Next.js and deploys to Vercel with zero code changes. Connect the GitHub repo in the Vercel Dashboard, or deploy via CLI:

npx vercel deploy --prod

Set ANTHROPIC_API_KEY in Vercel Dashboard > Project Settings > Environment Variables.

Note: Vercel Pro plan (60s function timeout) is recommended. The Hobby plan's 10-second timeout may cut off multi-step agent responses.

Runtime Notes

  • Edge runtime is not supportedjust-bash uses Node.js APIs internally. The default Node.js serverless runtime is required.
  • Streaming keeps the connection alive — both Vercel and Coolify support streamed responses natively.

Project Structure

src/
app/ # Next.js App Router pages and API routes
components/ # Chat UI, tool trace, citations, example questions
corpus/ # Virtual filesystem data and loader
lib/agent/ # System prompt and agent configuration
eval/ # Evaluation harness, test questions, A/B comparison
docs/ # Architecture diagrams (Excalidraw)

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

File Agent

An AI agent that navigates construction project documents like a filesystem — thinking in bash, not vectors.

Note: The application UI, all documents, and agent responses are in German, targeting German-speaking construction professionals. This README is in English.

Live Demo

Try it here -- No SSL (self-hosted on a VPS without a custom domain).

Architectural Thesis

For document collections with natural hierarchy (like construction projects), filesystem navigation produces more auditable results than embedding-based retrieval.

Construction projects have well-established document hierarchies — contracts, change orders, meeting minutes, punch lists, correspondence, daily logs, invoices, permits. These map naturally to folder structures with numeric prefixes:

/01_vertraege/ # Contracts
/02_nachtraege/ # Change orders
/03_genehmigungen/ # Permits
/04_protokolle/ # Meeting minutes
/05_maengel/ # Punch lists / defects
/06_schriftverkehr/ # Correspondence
/07_bautagebuch/ # Daily construction logs
/08_plaene/ # Technical drawings
/09_rechnungen/ # Invoices

The agent executes bash commands (ls, cat, grep, find) against a virtual in-memory filesystem built from these documents. Every navigation step is visible to the user — the trace IS the evidence. There is no vector database, no embeddings, no RAG pipeline. Just bash.

This approach trades recall breadth for auditability: you can see exactly which documents the agent opened, which search terms it used, and how it arrived at its answer. For domains with structured document hierarchies, this transparency is more valuable than statistical similarity scores.

Architecture

Features

  • Virtual filesystem with realistic German construction documents (PDF, Excel, text, SVG drawings)
  • AI agent navigates via bash commands (ls, cat, grep, find)
  • Real-time streaming responses with visible command trace
  • Inline citations referencing source documents
  • Evaluation harness with A/B testing capability
  • All documents in German construction terminology (VOB, HOAI, etc.)

Tech Stack

TechnologyVersionPurpose
Next.js16App Router, SSR, deployment
AI SDK6Agent loop, streaming, tool orchestration
@ai-sdk/anthropic3Claude model provider
just-bash + bash-tool2 / 1Virtual in-memory filesystem + bash interpreter
Tailwind CSS4Styling
Vitest4Testing
TypeScript5Type safety

Try It

Once running, try these example questions (in German):

  • "Welche Nachtraege gibt es und was ist deren aktueller Status?" — Lists all change orders and their current status
  • "Welche Maengel sind noch nicht behoben?" — Finds unresolved defects across punch lists
  • "Wer sind die beteiligten Nachunternehmer und welche Gewerke fuehren sie aus?" — Identifies subcontractors and their trades

Local Setup

git clone https://github.com/USER/file-agent.git
cd file-agent
npm install
cp .env.example .env.local
# Add your ANTHROPIC_API_KEY to .env.local
npm run dev
# Open http://localhost:3000

Deployment

Pre-deploy checks

npm run build
npm test

Option A: Self-hosted with Coolify (recommended)

The live demo uses Coolify on a self-hosted VPS. This avoids serverless function timeouts — the agent runs multi-step bash navigation loops that can take 15-30 seconds, which exceeds Vercel's Hobby plan limits.

  1. Install Coolify on any VPS (1 vCPU, 2 GB RAM is sufficient)
  2. Add the GitHub repo as a new resource (Nixpacks build pack)
  3. Set ANTHROPIC_API_KEY as an environment variable
  4. Deploy — Coolify auto-detects Next.js and handles build/start

Note: The live demo runs on HTTP via a free sslip.io domain. For HTTPS, point a custom domain to the VPS and Coolify will auto-provision a Let's Encrypt certificate.

Option B: Vercel

The codebase is standard Next.js and deploys to Vercel with zero code changes. Connect the GitHub repo in the Vercel Dashboard, or deploy via CLI:

npx vercel deploy --prod

Set ANTHROPIC_API_KEY in Vercel Dashboard > Project Settings > Environment Variables.

Note: Vercel Pro plan (60s function timeout) is recommended. The Hobby plan's 10-second timeout may cut off multi-step agent responses.

Runtime Notes

  • Edge runtime is not supportedjust-bash uses Node.js APIs internally. The default Node.js serverless runtime is required.
  • Streaming keeps the connection alive — both Vercel and Coolify support streamed responses natively.

Project Structure

src/
app/ # Next.js App Router pages and API routes
components/ # Chat UI, tool trace, citations, example questions
corpus/ # Virtual filesystem data and loader
lib/agent/ # System prompt and agent configuration
eval/ # Evaluation harness, test questions, A/B comparison
docs/ # Architecture diagrams (Excalidraw)

Contributors

Languages