Install
$ agentstack add skill-pssah4-vault-operator-ingest ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
/ingest -- Schneller Single-Pass-Ingest
Wann nutzen
Schnelle Inbox-Aufnahme, image-heavy PDFs, kurze Webclips, Office-Files. Erwartung: 30 Sekunden bis 2 Minuten, eine Datei als Output.
Nicht fuer tiefe Sense-Making-Notes (-> /ingest-deep), nicht fuer Meeting-Transkripte (-> /meeting-summary).
Kosten-Disziplin
- Ein Tool-Call.
ingest_document. Keine read_document-Pre-Reads,
keine list_files-Erkundung.
- STOP-on-Error. Bei Tool-Fehler: User informieren, fertig.
Step 0a: Template lesen (Pflicht, vor dem ingest_document-Aufruf)
Das Frontmatter-Template kommt aus den Settings: vaultIngest.templates.ingestNoteTemplate (vault-relativer Pfad). Wird beim First-Run vom Wizard auf /Quelle Template.md (DE) bzw. /Source Template.md (EN) gesetzt (siehe FEAT-29-14). Der TemplatesFolder kommt aus dem Obsidian-Core-Templates-Plugin (.obsidian/templates.json).
Vorgehen (Reihenfolge ist Pflicht):
- Setting-Wert pruefen. Wenn nicht-leer:
read_file path=""-> extrahiere den Frontmatter-
Block zwischen den ----Zeilen.
- Diese Felder bilden die Frontmatter-Basis fuer den
header_content.
- Werte aus der Quelle (Autor, Jahr, URL etc.) einfuellen,
unbekannte Felder leer lassen.
- Bevorzuge IMMER das User-Template wenn vorhanden -- es
spiegelt die Konvention des Vaults wider (Sprache, custom Felder). Der Inline-Default unten ist NUR Fallback.
- Wenn Setting leer: nutze den Inline-Default.
Inline-Default (Fallback wenn Setting leer):
---
Zusammenfassung:
Autor:
Jahr:
ISBN:
URL:
Notizen:
Themen:
Konzepte:
Meeting-Notizen:
Kategorie:
- Quelle
Typ:
tags:
Permanent: false
---
Pflicht-Felder die der Skill aus der Quelle ableitet und einfuellt: Zusammenfassung, Autor, Jahr, URL, Themen, Konzepte, Typ, tags.
Kategorie-Wert (Pflicht-Format): YAML-Listen-Element mit Bindestrich, ein Wert. Englischer Vault: - Source. Deutscher Vault: - Quelle. Niemals als Inline-Array [Quelle] -- das matcht den Auto-Trigger nicht (FEAT-19-27).
Step 0: Source-Typ und Tool-Wahl
Schau in deinen Kontext:
| Quelle | Aufruf | |---|---| | ` ohne vaultpath (frisch in Chat geladen) | ingestdocument mit attachmentindex: 0 -- **TURN 1 noch waehrend das Attachment lebt**. Auf spaeteren Turns ist das Attachment weg. | | oder User nennt Vault-Pfad | ingestdocument mit sourcepath: "" | | Reine URL ohne Attachment | requestUrl + write_file (Tool-Pfad ohne ingest_document) | | Markdown im Vault | ingestdocument mit sourcepath ist optional; bei reinen MD-Sources reicht updatefrontmatter` + Block-IDs |
Ablage-Regel: ALLE Markdown-Outputs landen in / (Default Inbox/, aus den Plugin-Settings). Originale Binaries (PDF/DOCX/PPTX/XLSX) gehen nach Attachements/--.. Keine neuen Ordner anlegen, kein Sources/, kein Notes/. Wenn der defaultOutputFolder fehlt, legt das Plugin ihn beim ersten Schreibvorgang an. Naming-Convention: -- (englisch transliteriert, Bindestriche statt Leerzeichen). Ohne bekannten Author/Year: ``.
Step 1: ingest_document aufrufen
Aufrufkonvention:
ingest_document
source_path | attachment_index = ""
output_path = "/--.md"
header_content = """
---
source: ...
source_type: pdf | docx | pptx | xlsx | md | url
ingested_at:
cluster:
---
#
## Overview
## Kernaussagen
- . [[#Page |↗]]
- . [[#^block-|↗]]
...
"""
Tool appended automatisch ## Originaltext mit dem geparsten Text.
Step 2: Position-Marker pro Kernaussage (Pflicht)
Jede Kernaussage in ## Kernaussagen traegt am Satzende einen Marker:
| Source-Typ | Marker-Form | |---|---| | PDF | [[#Page \|↗]] -- N aus den ## Page N-Headings im Originaltext | | Markdown / Webclip | [[#^block-\|↗]] | | URL mit Section-IDs | [[#\|↗]] | | DOCX | [[#^block-\|↗]] | | PPTX | [[#Slide \|↗]] | | XLSX | [[#Sheet \|↗]] |
Pflicht-Layout:
- Display-Text immer nur
↗. Kein "Quelle:", kein "[1]". - Inline am Satzende, ein Leerzeichen vor dem Link.
- Eine Block-Ref pro Kernaussage.
Step 3: Verifikation
Tool gibt einen Position-Marker check: X of Y Kernaussagen carry refs- String zurueck. Bei X " und den Frontmatter-Block zwischen den beiden ----Zeilen verbatim als String halten. Werte werden hinter den Doppelpunkten eingefuellt. Niemals YAML neu rendern -- das bricht das Frontmatter.
Pflicht-Werte:
Kategorie:->- Quellen-Notiz(DE) bzw.- Source note(EN).
Aus dem Template uebernehmen wenn vorhanden.
Quellen:->[[]](bidirektionaler Link).Zusammenfassung:-> 1-2-Satz-Quintessenz des Take-Aways.
Step 4b: Naming-Konvention
Sense-Making-Note und Zettel sind eigenstaendige Konzept-Notes mit aussagekraeftigen Titeln. Keinen Source-Basename als Prefix.
| ❌ Falsch | ✅ Richtig | |---|---| | Karpathy ... -- Sense-Making.md | Karpathy zu Vibe Coding und Agentic Engineering.md | | Karpathy ... -- LLMs als Ghosts.md | LLMs als Ghosts.md |
Verbindung zur Quelle: Frontmatter Quellen: [[]] + Backlink in der Source (Step 5).
Step 4c (Modus A): Sense-Making-Note
EINE Note via write_file:
- Pfad:
/.md - Content (Reihenfolge strikt, keine Leerzeile vor dem Frontmatter):
#
## Kernaussage
## Take-Aways
- [[#Page |↗]]
- [[#^block-|↗]]
- ...
Step 4d (Modus B): Multi-Zettel
Ein Zettel pro Take-Away via write_file:
- Pfad:
/.md - Content:
#
## Quelle
[[]] -- siehe [[#Page |↗]]
Wichtig: Body und Frontmatter-Zusammenfassung: ergaenzen sich. Frontmatter ist die Quintessenz fuer Listing/Suche, Body ist die Ausformulierung. Niemals Body leer lassen.
Namens-Kollision: Wenn .md schon existiert, read_file der existierenden Note, User fragen ob Ergaenzung oder Variante ( ().md). Nie stillschweigend ueberschreiben.
Step 5: Backlink in der Quelle (Pflicht nach Step 4)
Wenn in Step 4 Notes erstellt wurden:
- Lade die Quelle-Note via
read_file. - Verifikation (AUDIT-024 I-1): Pruefe im Frontmatter, dass die
Note die Kategorie: - Quelle (oder - Source im englischen Vault) traegt. Wenn nicht, ist der Pfad falsch oder die Note ist die falsche -- STOP und frag den User, bevor du irgendwo Notizen: setzt.
- Lies das
Notizen:-Feld aus dem Frontmatter. update_frontmatter-Tool: setzeNotizen:auf eine Liste mit
[[note1]], [[note2]], .... Bestehende Werte beibehalten (append).
Damit zeigt der Obsidian-Graph die Verbindung Quelle abgeleitete Notes.
Verbote
- Keine
[1]-Marker im Perplexity-Stil. - Kein Multi-Turn-Dialog. Wenn Dialog noetig, ist
/ingest-deep
das richtige Skill.
- Kein Markdown-Mirror-Zwang fuer PDFs.
- Kein Originaltext in der
## Kernaussagen-Section duplizieren. - Kein
read_documentvoringest_document. Tool parst selber. - Kein
list_fileszur Pfad-Suche. User fragen ist billiger. - Keine neuen Ordner. Erlaubte Ziele sind ausschliesslich
Attachements/ (Binaries) und / (Markdown). Kein Sources/, kein Notes/.
- Keine Source-Duplikate. Liegt die Quelle bereits als Markdown im
Vault (source_path zeigt auf eine .md-Datei), schreibe NICHT eine zweite Note in / -- nutze stattdessen update_frontmatter + manuelle Block-ID-Edits direkt in der Original-Note.
- Kein Source-Prefix in Sense-Making-/Zettel-Titeln. Konzept-
Titel sind eigenstaendig, die Verbindung zur Quelle steht im Frontmatter (Quellen:).
- Kein YAML-Re-Render des Templates. Frontmatter-Block ist ein
verbatim String, Werte hinter Doppelpunkten einsetzen. Niemals zerlegen und neu zusammensetzen -- das produziert doppelte --- und kaputte YAML.
- Keine Transkript-Schnipsel als Note-Body. Eigene Worte, ein
klarer Gedanke pro Note. Roher Source-Text gehoert nicht in den Body -- referenziere via Block-Ref.
ThemenundKonzeptenicht vermischen.Themen:haelt
ausschliesslich Wikilinks auf Notes mit Kategorie: Thema (breit/generisch, Hub-Note, z.B. [[Agentic AI]]). Konzepte: haelt ausschliesslich Wikilinks auf Notes mit Kategorie: Konzept (spezifisch/abgegrenzt, z.B. [[AI Agents]]). Im Zweifel kurz mit read_file das Kategorie:-Feld der Ziel-Note pruefen, bevor du sie einsortierst.
- Wikilink-Properties ausschliesslich als YAML-Listen.
Themen,
Konzepte, Personen, Quellen, Notizen jede mit Eintraegen als Listen-Elementen, niemals als Komma-String. Block-Form (Themen:\n - "[[X]]"\n - "[[Y]]") oder Flow-Form (Themen: ["[[X]]", "[[Y]]"]) sind beide ok; Themen: [[X]], [[Y]] ist falsch und wird von Obsidian nicht als Liste geparsed. Auch ein einzelner Wert bleibt eine ein-elementige Liste.
Fehlerfaelle
| Fehler | Was tun | |---|---| | Attachment index 0 out of range. 0 attachment(s) available. | Attachment ist nicht (mehr) verfuegbar -- diesen Turn neu starten oder User um neues Upload bitten. Nicht retryen. | | File not found: | Pfad falsch. User fragen, nicht raten. | | File already exists: | output_path aendern (z.B. (2) anhaengen) oder User fragen. |
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: pssah4
- Source: pssah4/vault-operator
- License: Apache-2.0
- Homepage: https://pssah4.github.io/vault-operator/
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.