Jinni: Bringen Sie Ihr Projekt in den Kontext
Jinni ist ein Tool, das Large Language Models effizient den Kontext Ihrer Projekte bereitstellt. Es bietet eine konsolidierte Ansicht relevanter Projektdateien und überwindet so die Einschränkungen und Ineffizienzen, die beim Lesen einzelner Dateien entstehen. Jedem Dateiinhalt ist ein einfacher Header vorangestellt, der den Pfad angibt:
Die Philosophie hinter diesem Tool besteht darin, dass LLM-Kontextfenster groß und Modelle intelligent sind und dass das Modell durch die direkte Anzeige Ihres Projekts optimal für alle Aufgaben gerüstet ist, die Sie ihm stellen.
Es gibt einen MCP-Server (Model Context Protocol) für die Integration mit KI-Tools und ein Befehlszeilenprogramm (CLI) für die manuelle Verwendung, das den Projektkontext in die Zwischenablage kopiert und ihn dort einfügt, wo Sie ihn benötigen.
Diese Tools haben eine klare Meinung dazu, was als relevanter Projektkontext gilt, um in den meisten Anwendungsfällen sofort einsatzbereit zu sein, und schließen Folgendes automatisch aus:
Einschlüsse/Ausschlüsse können bei Bedarf mithilfe von .contextfiles vollständig detailliert angepasst werden – dies funktioniert wie .gitignore, außer dass Einschlüsse definiert werden.
Der MCP-Server kann beliebig viele oder wenige Projektinhalte bereitstellen. Standardmäßig umfasst der Umfang das gesamte Projekt, das Modell kann jedoch bestimmte Module, passende Muster usw. anfordern.
MCP-Schnellstart
MCP-Serverkonfigurationsdatei für Cursor / Roo / Claude Desktop / Client der Wahl:
Sie können den Server optional aus Sicherheitsgründen so einschränken, dass er nur innerhalb eines Baums liest, falls Ihr LLM ausfällt: Fügen Sie der args
"--root", "/absolute/path/"
hinzu.
Installieren Sie uv, falls es nicht auf Ihrem System vorhanden ist: https://docs.astral.sh/uv/getting-started/installation/
Laden Sie Ihre IDE neu und Sie können den Agenten jetzt bitten, im Kontext zu lesen.
Wenn Sie dies auf bestimmte Module/Pfade beschränken möchten, fragen Sie einfach – z. B. „Kontext für Tests lesen“.
In Aktion mit Cursor:
Hinweis für Cursor-Benutzer
Der Cursor kann Kontext, der größer als das zulässige Maximum ist, stillschweigend löschen. Wenn Sie also ein umfangreiches Projekt haben und der Agent so tut, als hätte der Tool-Aufruf nie stattgefunden, versuchen Sie, die Menge, die Sie einbringen, zu reduzieren („Kontext für xyz lesen“).
Komponenten
jinni
MCP-Server:- Integriert mit MCP-Clients wie Cursor, Cline, Roo, Claude Desktop usw.
- Stellt ein
read_context
-Tool bereit, das eine zusammengesetzte Zeichenfolge mit relevanten Dateiinhalten aus einem angegebenen Projektverzeichnis zurückgibt.
jinni
-CLI:- Ein Befehlszeilentool zum manuellen Generieren des Projektkontext-Dumps.
- Nützlich, um LLMs Kontext per Kopieren und Einfügen oder Dateieingabe zuzuführen. Oder leiten Sie die Ausgabe dorthin weiter, wo Sie sie benötigen.
Merkmale
- Effiziente Kontexterfassung: Liest und verkettet relevante Projektdateien in einem Vorgang.
- Intelligente Filterung (Einbeziehung im Gitignore-Stil):
- Verwendet ein auf
.gitignore
-Syntax basierendes System (gitwildmatch
derpathspec
Bibliothek). - Unterstützt hierarchische Konfiguration mithilfe von
.contextfiles
in Ihren Projektverzeichnissen. Regeln werden dynamisch basierend auf der verarbeiteten Datei/dem verarbeiteten Verzeichnis angewendet. - Abgleichsverhalten: Muster werden mit dem Pfad relativ zum verarbeiteten Zielverzeichnis (oder dem Projektstammverzeichnis, wenn kein spezifisches Ziel angegeben ist) abgeglichen. Wenn beispielsweise
src/
als Zielverzeichnis verwendet wird, entspricht die Regel!app.py
insrc/.contextfiles``app.py
. Ausgabepfade bleiben relativ zum ursprünglichen Projektstammverzeichnis. - Overrides: Unterstützt
--overrides
(CLI) oderrules
(MCP), um einen bestimmten Regelsatz exklusiv zu verwenden. Bei aktiven Overrides werden sowohl integrierte Standardregeln als auch alle.contextfiles
ignoriert. Die Pfadzuordnung für Overrides erfolgt weiterhin relativ zum Zielverzeichnis. - Explizite Zielaufnahme: Explizit als Ziele angegebene Dateien werden immer aufgenommen (Regelprüfungen werden umgangen, Binär-/Größenprüfungen jedoch nicht). Explizit als Ziele angegebene Verzeichnisse werden immer eingegeben, und die Regelerkennung/-abgleichung erfolgt dann relativ zu diesem Zielverzeichnis.
- Verwendet ein auf
- Anpassbare Konfiguration (
.contextfiles
/Overrides):- Definieren Sie genau, welche Dateien/Verzeichnisse ein- oder ausgeschlossen werden sollen, indem Sie Muster im
.gitignore
-Stil auf den relativen Pfad anwenden. - Muster, die mit
!
beginnen, negieren die Übereinstimmung (ein Ausschlussmuster). (Siehe Abschnitt „Konfiguration“ weiter unten).
- Definieren Sie genau, welche Dateien/Verzeichnisse ein- oder ausgeschlossen werden sollen, indem Sie Muster im
- Handhabung großer Kontexte: Der Vorgang wird mit einem
DetailedContextSizeError
abgebrochen, wenn die Gesamtgröße der eingeschlossenen Dateien einen konfigurierbaren Grenzwert (Standard: 100 MB) überschreitet. Die Fehlermeldung enthält eine Liste der zehn größten Dateien, die zur Größe beitragen, sodass Sie Kandidaten für den Ausschluss identifizieren können. Hinweise zur Verwaltung der Kontextgröße finden Sie im Abschnitt „Fehlerbehebung“. - Metadaten-Header: Die Ausgabe enthält einen Pfad-Header für jede eingebundene Datei (z. B. ````path=src/app.py
). This can be disabled with
. - Kodierungsbehandlung: Versucht mehrere gängige Textkodierungen (UTF-8, Latin-1 usw.).
- Nur-Liste-Modus: Option zum Auflisten nur der relativen Pfade der einzuschließenden Dateien ohne deren Inhalt.
Verwendung
MCP-Server ( read_context
-Tool)
- Setup: Konfigurieren Sie Ihren MCP-Client (z. B.
claude_desktop_config.json
von Claude Desktop), um denjinni
-Server überuvx
auszuführen. - Aufruf: Bei der Interaktion mit Ihrem LLM über den MCP-Client kann das Modell das Tool
read_context
aufrufen.project_root
(Zeichenfolge, erforderlich): Der absolute Pfad zum Stammverzeichnis des Projekts. Regelerkennungs- und Ausgabepfade sind relativ zu diesem Stammverzeichnis.targets
(JSON-Array von Strings, erforderlich): Gibt eine obligatorische Liste der zu verarbeitenden Dateien/Verzeichnisse innerhalbproject_root
an. Es muss sich um ein JSON-Array von Stringpfaden handeln (z. B.["path/to/file1", "path/to/dir2"]
). Pfade können absolut oder relativ zu CWD sein. Alle Zielpfade müssen auf Speicherorte innerhalbproject_root
verweisen. Bei Angabe einer leeren Liste[]
wird das gesamteproject_root
verarbeitet.rules
(JSON-Array von Zeichenfolgen, erforderlich): Eine obligatorische Liste von Inline-Filterregeln (mit.gitignore
-Syntax, z. B.["src/**/*.py", "!*.tmp"]
). Geben Sie eine leere Liste[]
an, wenn keine spezifischen Regeln benötigt werden (dadurch werden integrierte Standardwerte verwendet). Wenn die Liste nicht leer ist, werden ausschließlich diese Regeln verwendet, wobei integrierte Standardwerte und.contextfiles
ignoriert werden.list_only
(boolesch, optional): Wenn „true“, wird anstelle des Inhalts nur die Liste der relativen Dateipfade zurückgegeben.size_limit_mb
(Ganzzahl, optional): Überschreibt die Kontextgrößenbeschränkung in MB.debug_explain
(boolesch, optional): Aktivieren Sie die Debug-Protokollierung auf dem Server.
- Ausgabe: Das Tool gibt eine einzelne Zeichenfolge zurück, die den verknüpften Inhalt (mit Headern) oder die Dateiliste enthält. Pfade in Headern/Listen sind relativ zum angegebenen
project_root
. Im Falle eines Kontextgrößenfehlers gibt es einenDetailedContextSizeError
mit Details zu den größten Dateien zurück.
MCP-Server ( usage
)
- Aufruf: Das Modell kann das
usage
aufrufen (keine Argumente erforderlich). - Ausgabe: Gibt den Inhalt der Datei
README.md
als Zeichenfolge zurück.
(Detaillierte Anweisungen zur Servereinrichtung variieren je nach MCP-Client. Im Allgemeinen müssen Sie den Client so konfigurieren, dass er den Jinni-Server ausführt.)
Ausführen des Servers:
- Empfohlene Methode: Verwenden Sie
uvx
, um den Server-Einstiegspunkt direkt auszuführen (erfordert, dass dasjinni
-Paket auf PyPI veröffentlicht ist oder vonuvx
gefunden werden kann):Beispiel einer MCP-Clientkonfiguration (z. B.Copyclaude_desktop_config.json
):Copy
Sie können den Server optional aus Sicherheitsgründen so einschränken, dass er nur innerhalb eines Baums liest, falls Ihr LLM ausfällt: Fügen Sie der args
"--root", "/absolute/path/"
hinzu.
Die genauen Einrichtungsschritte finden Sie in der Dokumentation Ihres MCP-Clients. Stellen Sie sicher, dass uv
installiert ist.
Befehlszeilenprogramm ( jinni
CLI)
<PATH...>
(optional): Ein oder mehrere Pfade zu den zu analysierenden Projektverzeichnissen oder Dateien. Standardmäßig wird das aktuelle Verzeichnis (.
) verwendet, wenn keines angegeben ist.-r <DIR>
/--root <DIR>
(optional): Gibt das Stammverzeichnis des Projekts an. Falls angegeben, beginnt die Regelerkennung hier, und die Ausgabepfade sind relativ zu diesem Verzeichnis. Andernfalls wird das Stammverzeichnis aus dem gemeinsamen Vorgänger der<PATH...>
Argumente abgeleitet (oder CWD, wenn nur '.' verarbeitet wird).--output <FILE>
/-o <FILE>
(optional): Schreibt die Ausgabe in<FILE>
, anstatt sie auf der Standardausgabe zu drucken.--list-only
/-l
(optional): Listet nur die relativen Pfade der Dateien auf, die eingeschlossen werden sollen.--overrides <FILE>
(optional): Verwenden Sie Regeln aus<FILE>
, anstatt.contextfiles
zu ermitteln.--size-limit-mb <MB>
/-s <MB>
(optional): Überschreibt die maximale Kontextgröße in MB.--debug-explain
(optional): Druckt detaillierte Einschluss-/Ausschlussgründe in stderr undjinni_debug.log
.--root <DIR>
/-r <DIR>
(optional): Siehe oben.--no-copy
(optional): Verhindert das automatische Kopieren des Ausgabeinhalts in die Systemzwischenablage beim Drucken in die Standardausgabe (die Standardeinstellung ist „Kopieren“).
Installation
Sie können Jinni mit pip
oder uv
installieren:
Verwenden von pip:
Verwendung von UV:
Dadurch wird der jinni
CLI-Befehl in Ihrer Umgebung verfügbar. Informationen zum Starten des MCP-Servers je nach Installationsmethode finden Sie oben im Abschnitt „Server ausführen“.
Plattformspezifische Hinweise
Windows + WSL
Jinni v0.1.7+ konvertiert WSL-Pfade automatisch.
Geben Sie eines davon als project_root
(CLI --root
oder MCP-Argument):
Keine Wrapper, Mounts oder zusätzlichen Flags erforderlich – Jinni löst den UNC-Pfad ( \\wsl$\...
) unter Windows automatisch auf.
UNC-Pfadformat: Jinni verwendet immer \\wsl$\<distro>\...
für maximale Kompatibilität mit allen Windows-Versionen, die WSL unterstützen. Handhabung des Distributionsnamens: Leerzeichen und die meisten Sonderzeichen sind im Distributionsnamen zulässig. Nur wirklich unzulässige UNC-Zeichen werden durch _
ersetzt. Caching: WSL-Pfadsuchen und -Konvertierungen werden aus Performancegründen zwischengespeichert. Wenn Sie WSL installieren, während Jinni ausgeführt wird, starten Sie Jinni neu, um den neuen wslpath
zu übernehmen. Opt-out: Setzen Sie die Umgebungsvariable JINNI_NO_WSL_TRANSLATE=1
um die gesamte WSL-Pfadübersetzungslogik zu deaktivieren.
Nur wsl+<distro>
-URIs und absolute POSIX-Pfade (beginnend mit /
) werden übersetzt. Führen Sie Jinni für SSH- oder Container-Remotes innerhalb dieser Umgebung aus.
Laufzeitbetriebssystem | Was Sie weitergeben | Was _translate_wsl_path() zurückgibt |
---|---|---|
Windows | vscode-remote://wsl+Ubuntu/home/a/b | \\wsl$\\Ubuntu\home\a\b |
Windows | /home/a/b | \\wsl$\\Ubuntu\home\a\b (über wslpath) |
Linux/WSL | vscode-remote://wsl+Ubuntu/home/a/b | /home/a/b |
Linux/WSL | /home/a/b | /home/a/b (unverändert) |
Beispiele
- Kontext von
my_project/
in die Konsole kopieren:Copy - Listen Sie Dateien auf, die ohne Inhalt in
my_project/
aufgenommen würden:Copy - Dumpen Sie den Kontext von
my_project/
in eine Datei mit dem Namencontext_dump.txt
:Copy - Verwenden Sie Override-Regeln aus
custom.rules
anstelle von.contextfiles
:Copy - Debug-Informationen anzeigen:Copy
- Kontext ausgeben (die Ausgabe wird standardmäßig automatisch in die Zwischenablage kopiert):Copy
- Kontext ausgeben, aber nicht in die Zwischenablage kopieren:Copy
Konfiguration ( .contextfiles
und Overrides)
Jinni verwendet .contextfiles
(oder eine Override-Datei), um basierend auf Mustern im .gitignore
-Stil zu bestimmen, welche Dateien und Verzeichnisse ein- oder ausgeschlossen werden sollen.
- Grundprinzip: Regeln werden während der Durchquerung dynamisch angewendet, relativ zum aktuell verarbeiteten Zielverzeichnis.
- Speicherort (
.contextfiles
): Platzieren Sie.contextfiles
in einem beliebigen Verzeichnis. Bei der Verarbeitung eines Verzeichnisses (entweder des ursprünglichen Zielverzeichnisses oder eines Unterverzeichnisses) sucht Jinni von diesem Verzeichnis abwärts nach.contextfiles
. Regeln von übergeordneten Verzeichnissen außerhalb des aktuellen Zielverzeichnisses werden bei der Verarbeitung innerhalb dieses Zielverzeichnisses ignoriert. - Format: Klartext, UTF-8-kodiert, ein Muster pro Zeile.
- Syntax: Verwendet die Standard-Syntax
.gitignore
Musters (insbesondere diegitwildmatch
-Implementierung vonpathspec
).- Kommentare: Zeilen, die mit
#
beginnen, werden ignoriert. - Einschlussmuster: Geben Sie die einzuschließenden Dateien/Verzeichnisse an (z. B.
src/**/*.py
,*.md
,/config.yaml
). - Ausschlussmuster: Zeilen, die mit
!
beginnen, geben an, dass eine übereinstimmende Datei ausgeschlossen werden soll (negiert das Muster). - Verankerung: Ein vorangestellter
/
verankert das Muster im Verzeichnis, das die.contextfiles
enthält. - Verzeichnisübereinstimmung: Ein abschließender
/
stimmt nur mit Verzeichnissen überein. - Platzhalter:
*
,**
,?
funktionieren wie in.gitignore
.
- Kommentare: Zeilen, die mit
- Regelanwendungslogik:
- Ziel bestimmen: Jinni identifiziert das Zielverzeichnis (entweder explizit angegeben oder das Projektstammverzeichnis).
- Override-Prüfung: Wenn
--overrides
(CLI) oderrules
(MCP) angegeben sind, werden ausschließlich diese Regeln verwendet. Alle.contextfiles
und integrierten Standardwerte werden ignoriert. Die Pfadübereinstimmung erfolgt relativ zum Zielverzeichnis. - Dynamische Kontextregeln (keine Überschreibungen): Beim Verarbeiten einer Datei oder eines Unterverzeichnisses innerhalb des Zielverzeichnisses:
- Jinni findet alle
.contextfiles
vom Zielverzeichnis bis hinunter zum Verzeichnis des aktuellen Elements. - Es kombiniert die Regeln aus diesen erkannten
.contextfiles
mit den integrierten Standardregeln. - Es fasst diese kombinierten Regeln in einer Spezifikation (
PathSpec
) zusammen. - Es gleicht den aktuellen Datei-/Unterverzeichnispfad, berechnet relativ zum Zielverzeichnis , mit dieser Spezifikation ab.
- Jinni findet alle
- Übereinstimmung: Das letzte Muster im kombinierten Regelsatz, das mit dem relativen Pfad des Elements übereinstimmt, bestimmt dessen Weiterverwendung.
!
hebt die Übereinstimmung auf. Wenn kein benutzerdefiniertes Muster übereinstimmt, wird das Element eingeschlossen, es sei denn, es entspricht einem integrierten Standardausschluss (z. B.!.*
). - Zielbehandlung: Explizit ausgewählte Dateien umgehen Regelprüfungen. Explizit ausgewählte Verzeichnisse werden zum Stammverzeichnis für die Regelerkennung und den Abgleich ihrer Inhalte. Ausgabepfade bleiben immer relativ zum ursprünglichen
project_root
.
Beispiele ( .contextfiles
)
Beispiel 1: Python-Quelle und Root-Konfiguration einschließen
Befindet sich unter my_project/.contextfiles
:
Beispiel 2: Überschreiben in einem Unterverzeichnis
Befindet sich unter my_project/src/.contextfiles
:
Entwicklung
- Designdetails: DESIGN.md
- Server lokal ausführen: Während der Entwicklung (nach der Installation mit
uv pip install -e .
oder ähnlich) können Sie das Servermodul direkt ausführen:Beispiel einer MCP-Clientkonfiguration für die lokale Entwicklung:CopyCopy
Fehlerbehebung
Kontextgrößenfehler ( DetailedContextSizeError
)
Wenn eine Fehlermeldung angezeigt wird, dass die Kontextgrößenbeschränkung überschritten wurde, stellt Jinni eine Liste der zehn größten Dateien bereit, die es einzuschließen versuchte. Dies hilft Ihnen, potenzielle Kandidaten für den Ausschluss zu identifizieren.
So beheben Sie dieses Problem:
- Überprüfen Sie die größten Dateien: Überprüfen Sie die Liste in der Fehlermeldung. Gibt es große Dateien (z. B. Datendateien, Protokolle, Build-Artefakte, Medien), die nicht Teil des LLM-Kontexts sein sollten?
- Ausschlüsse konfigurieren: Verwenden Sie
.contextfiles
oder die Optionen--overrides
/rules
um unnötige Dateien oder Verzeichnisse auszuschließen.- Beispiel (
.contextfiles
): So schließen Sie alle.log
Dateien und ein bestimmtes großes Datenverzeichnis aus:Copy - Ausführliche Informationen zur Syntax und Verwendung finden Sie im Abschnitt „Konfiguration“ oben.
- Beispiel (
- Erhöhen Sie das Limit (mit Vorsicht): Wenn alle enthaltenen Dateien wirklich benötigt werden, können Sie das Größenlimit mit
--size-limit-mb
(CLI) odersize_limit_mb
(MCP) erhöhen. Beachten Sie die LLM-Kontextfensterlimits und den Verarbeitungsaufwand. - Verwenden Sie
jinni usage
/usage
“: Wenn Sie bei der Fehlerbehebung auf diese Anweisungen oder die Konfigurationsdetails zurückgreifen müssen, verwenden Sie den Befehljinni usage
oder das MCP-Tool „usage
“.
You must be authenticated.
hybrid server
The server is able to function both locally and remotely, depending on the configuration or use case.
Tools
Jinni ist ein Tool, das Large Language Models effizient den Kontext Ihrer Projekte bereitstellt. Es bietet eine konsolidierte Ansicht relevanter Projektdateien mit Metadaten und überwindet so die Einschränkungen und Ineffizienzen, die beim Lesen einzelner Dateien entstehen.
Die Philosophie hinter diesem Tool ist, dass LLM-Kontext wi
- Include all Python files in the src directory and subdirectories
- Include the main config file at the root of the project
- Include all markdown files anywhere
- Exclude any test data directories found anywhere
- In addition to rules inherited from parent .contextfiles...
- Include specific utility scripts in this directory
- Exclude a specific generated file within src, even if *.py is included elsewhere
Related MCP Servers
- -securityFlicense-qualityThis server provides an API to query Large Language Models using context from local files, supporting various models and file types for context-aware responses.Last updated -1TypeScript
- AsecurityFlicenseAqualityEnables natural language interaction with Jira for managing projects, issues, tasks, and workflows through the Model Context Protocol, allowing users to delegate PM tasks through Claude Desktop.Last updated -934JavaScript
- -securityAlicense-qualityA Model Context Protocol (MCP) server that helps large language models index, search, and analyze code repositories with minimal setupLast updated -9PythonMIT License
- AsecurityAlicenseAqualityA Model Context Protocol server that provides integration with Jira, allowing Large Language Models to interact with Jira projects, boards, sprints, and issues through natural language.Last updated -5872TypeScriptMIT License