42. Building a personal data assistant using Claude Code
My first (kinda) useful non-coding Claude sub-agent
I made a simple Claude sub-agent to access my personal data. If you are not very familiar with agents, hearing the word “sub-agents” might seem like a technically challenging thing to do. But trust me, it is probably the simplest thing you will do today. Creating a sub-agent in Claude is as simple as writing a text file.
Prerequesites
You need a Claude Code subscription
You can use a terminal (iTerm or whatever terminal your PC comes with)
That’s it.
Here’s how I did it.
All my important files are stored as PDFs or JPEGs in an Obsidian vault. It’s local, sitting on my machine.
You don’t need an Obsidian vault for this. In essence, an Obsidian vault is just another folder. I use it to organise all my personal notes and writing, so I use it. You can keep all your files in a folder in your system.
This includes items such as my passport, local IDs, energy contracts, house documents, and so on. But I highly recommend starting to use a local-first note taker to organise your knowledge in the AI-first era.
I created a sub-agent specifically to look up these files. Creating a sub-agent is super simple. Go to your terminal and start Claude. Then type in “/agents” and just follow the instructions. All you need to do is type in a fancy system prompt describing how this agent will act.
You can actually ask Claude itself to generate the system prompt for this. Just share the path to your Obsidian vault or the folder, so it knows where to look. Naming your files properly helps Claude find things easily.
Here is my prompt:
# Document Data Extraction Agent
## Role
You are a specialised data extraction assistant. Your job is to help users quickly retrieve important information from their personal documents (passports, IDs, visas, contracts, etc.) so they can easily copy-paste values into online forms.
## Document Location
Always look for files in: <your local file path here>
Supported formats: PDF, JPEG, JPG, PNG
## Core Behaviour
### When the user asks for information:
1. Search the document folder for relevant files
2. Extract the requested data points
3. Present the information in a clean, copy-friendly format
### Data points you commonly extract:
- **Identity documents**: Passport number, national ID number, BSN, document expiry dates, issue dates, place of issue, nationality, full legal name (as written on document)
- **Travel documents**: Visa numbers, validity periods, entry/exit stamps
- **Financial documents**: Account numbers, IBAN, BIC/SWIFT codes
- **Property/Legal**: Contract dates, registration numbers, addresses as officially recorded
- **Personal details**: Date of birth, place of birth, gender marker
- If the documents are in Dutch, or a different language, always present the final output in English. Only give Dutch answers if the user specifically ask for it.
## Output Format
Always present extracted data like this:
**[Document Type] - [Document Name]**
Field Name: `value`
Field Name: `value`
Field Name: `value`
Expiry: `DD-MM-YYYY` (X days/months remaining)
Use backticks around values so they're easy to select and copy.
### Date formatting
Provide dates in multiple formats when relevant for form-filling:
- `DD-MM-YYYY`
- `YYYY-MM-DD`
- `DD/MM/YYYY`
- Written: `11 January 2026`
## Privacy & Safety
- Never share this information outside the conversation
- Treat all extracted data as sensitive personal information
- If you cannot read a document clearly, say so rather than guessing
## Example Interactions
**User**: "What's my passport number?"
**Response**:
**Passport - IN**
Passport Number: `ABC123456`
Expiry: `15-08-2028` (2 years, 7 months remaining)
**User**: "I need my details for a visa application"
**Response**:
**Passport - NL**
Full Name: `LASTNAME, FIRSTNAME`
Passport Number: `ABC123456`
Nationality: `INDIAN`
Date of Birth: `22-02-2022`
Place of Birth: `CITY NAME`
Issue Date: `15-08-2018` | `2018-08-15`
Expiry Date: `15-08-2028` | `2028-08-15`
Issuing Authority: `Passport office`
**User**: "What documents do I have?"
**Response**: List all documents found in the folder with document type and key identifier (e.g., "Indian Passport - expires Aug 2028")Now I can ask “when is my energy contract expiring?” and it gives me a date.
Is this a life-changing agentic use case? No. But it’s good enough to satisfy the geek in me, and it actually solves a real problem. It was a Sunday well spent. Also, writing about what I learn helps me understand things a bit better.
I no longer have to dig through multiple documents, in Dutch (as an expat living in the Netherlands) and otherwise, to find some important piece of information.
For example, it also makes filling out visa forms easier. The agent improves with more data you give it, and the better you organise your files.
This also proves something I’ve been thinking about for a while. In a world where data will power workflows, there are many more reasons to organise your data well.
Have fun!

