RunOfflineTools Logo RunOfflineTools
⚑ Repomix & Gitingest Web Studio · 100% Private Offline

Repomix & Gitingest Web Alternative

In-browser codebase context packer: convert multi-file project directories into single, structured prompts for Claude 3.7 Sonnet, ChatGPT o3, and DeepSeek R1. Includes automated directory tree mapping, live token budgeting, and secret scrubbing.

πŸ“¦

Drag & Drop Codebase Folder or Files

Packs entire nested project repositories into an AI-ready XML or Markdown prompt. Automatically excludes node_modules, .git, .env, and binaries.

Try:
πŸ”’ 100% Client-Side: Zero code is uploaded to any server. Completely safe for private IP & client repos.
Included Files5 / 5
Lines of Code103
Est. Tokens~707
Total Size2.6 KB
Target Model:
Context Budget: ~707 / 2,00,000 tokens0.4% used

πŸ—‚οΈ Included Files (5/5)

|
Ready for Claude / ChatGPT / DeepSeek
This file is a merged representation of the codebase, packed into a single prompt for AI analysis.

<file_summary>
This section contains an overview of the packed repository.

<purpose>
This file contains a packed representation of the entire repository contents, optimized for analysis, debugging, and architectural explanation by Large Language Models.
</purpose>

<metadata>
- Total Files Included: 5
- Total Lines of Code: 103
- Estimated Input Tokens: ~707
</metadata>

<file_list>
- package.json (~94 tokens)
- prisma/schema.prisma (~147 tokens)
- src/app/page.tsx (~229 tokens)
- src/app/actions.ts (~136 tokens)
- src/lib/db.ts (~101 tokens)
</file_list>
</file_summary>

<directory_structure>
β”œβ”€β”€ prisma/
β”‚   └── schema.prisma
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ app/
β”‚   β”‚   β”œβ”€β”€ actions.ts
β”‚   β”‚   └── page.tsx
β”‚   └── lib/
β”‚       └── db.ts
└── package.json
</directory_structure>

<files>
<file path="package.json">
{
  "name": "ai-saas-starter",
  "version": "0.1.0",
  "private": true,
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start"
  },
  "dependencies": {
    "next": "^15.1.0",
    "react": "^19.0.0",
    "react-dom": "^19.0.0",
    "@prisma/client": "^6.0.0",
    "zod": "^3.24.0",
    "lucide-react": "^0.468.0"
  }
}
</file>

<file path="prisma/schema.prisma">
datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

generator client {
  provider = "prisma-client-js"
}

model User {
  id        String   @id @default(cuid())
  email     String   @unique
  name      String?
  role      String   @default("user")
  createdAt DateTime @default(now())
  prompts   Prompt[]
}

model Prompt {
  id        String   @id @default(cuid())
  userId    String
  user      User     @relation(fields: [userId], references: [id])
  content   String
  tokens    Int
  createdAt DateTime @default(now())
}
</file>

<file path="src/app/page.tsx">
import { createPromptAction } from './actions';
import { PromptList } from '@/components/PromptList';

export default async function HomePage() {
  return (
    <main className="max-w-4xl mx-auto p-6 space-y-6">
      <h1 className="text-3xl font-bold tracking-tight">AI Prompt Studio</h1>
      <p className="text-muted-foreground">Manage and analyze your agentic system prompts.</p>
      <form action={createPromptAction} className="space-y-4">
        <textarea
          name="prompt"
          placeholder="Enter prompt instructions..."
          className="w-full p-3 rounded-lg border bg-surface font-mono text-sm"
          rows={4}
          required
        />
        <button type="submit" className="px-4 py-2 bg-primary text-white rounded-lg font-medium">
          Save Prompt
        </button>
      </form>
      <PromptList />
    </main>
  );
}
</file>

<file path="src/app/actions.ts">
'use server';

import { prisma } from '@/lib/db';
import { revalidatePath } from 'next/cache';

export async function createPromptAction(formData: FormData) {
  const content = formData.get('prompt') as string;
  if (!content) throw new Error('Prompt required');

  // Token heuristic estimation
  const estimatedTokens = Math.ceil(content.length / 3.8);

  await prisma.prompt.create({
    data: {
      userId: 'user_default',
      content,
      tokens: estimatedTokens
    }
  });

  revalidatePath('/');
}
</file>

<file path="src/lib/db.ts">
import { PrismaClient } from '@prisma/client';

const globalForPrisma = globalThis as unknown as {
  prisma: PrismaClient | undefined;
};

export const prisma =
  globalForPrisma.prisma ??
  new PrismaClient({
    log: process.env.NODE_ENV === 'development' ? ['query', 'error', 'warn'] : ['error']
  });

if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma;
</file>

</files>
πŸ›‘οΈ Zero Network Uploads

Unlike online web extractors that send code to cloud servers, this tool executes 100% in your local browser.

🏷️ Dual Repomix & Gitingest Spec

Export structured XML tags for Claude 3.7 or clean Markdown code blocks for ChatGPT o3 and DeepSeek R1.

⚑ Automated Secret Scrubbing

Auto-excludes .env, private keys, lockfiles, and media files to prevent credential leakage.

πŸ“Š Live Token Budgeting

Keep prompts under model limits (128k/200k) with real-time per-file token counts and budget progress bars.

Why Feed Full Codebases to LLMs?

Modern frontier reasoning modelsβ€”like Claude 3.7 Sonnet, ChatGPT o3, and DeepSeek R1β€”possess massive context windows ranging from 128,000 to over 1,000,000 tokens. When an AI model has visibility into your complete architecture, it can:

XML (Repomix) vs. Markdown (Gitingest): Which Should You Use?

Depending on which LLM you are conversing with, formatting your code context properly dramatically impacts accuracy and reduces hallucinations:

Format Best Model Target Key Advantages
XML (Repomix Style) Anthropic Claude (3.7 / 3.5 Sonnet, Opus), Google Gemini Hierarchical <file_summary>, <directory_structure>, and <file path="..."> tags prevent prompt injection and delineate file boundaries.
Markdown (Gitingest Style) OpenAI ChatGPT (o3, GPT-4o), DeepSeek (R1, V3) Standard Markdown headings with fenced code blocks (```typescript) preserve clean syntax highlighting and native markdown flow.
Line Numbers Mode Code Reviews, PR Audits, Bug Fixes Prepends line indices (e.g. ' 42 | return user;') so the LLM can reference exact code lines when recommending fixes.

Protecting Proprietary Code: Why In-Browser Packing Matters

Online web scrapers that require you to enter a GitHub repository URL pose serious confidentiality risks:

This tool uses the native HTML5 File System API directly inside your browser's V8 engine. Your code files never touch any network connection, making it 100% safe for proprietary code, client deliverables, and enterprise compliance.