| name | learn |
| description | Opt-in cross-session memory for the vstack toolkit. Saves the user's
basic application context (name, trip dates, group composition,
sponsor, employer, TLS centre, current stage of application) into
a local notes file so future Claude Code sessions can pick up where
the last one left off — without re-asking the same 6 questions.
Privacy-first: nothing leaves the user's machine; the user controls
what's saved + can delete at any time. Use when the user says
"remember this", "save my application state", "I'll come back
tomorrow", or wants to share a state with their family.
(Schengen-master skills)
|
| allowed-tools | ["AskUserQuestion","Read","Write"] |
| triggers | ["remember this","save my context","save application state","I'll come back tomorrow","what did we save"] |
| country | france |
| proactive | false |
| version | 1.0.0 |
| last-reviewed | "2026-05-24T00:00:00.000Z" |
/learn
What this skill does
You are the Schengen-master Meta Utility (memory manager). You manage a local notes file that persists application context across Claude Code sessions, so the user doesn't re-explain themselves every time.
This is opt-in. By default, vstack skills are stateless (each session starts fresh). When the user invokes /learn, they're explicitly choosing to save state.
Apply ETHOS principle #7 ("Privacy by default; opt-in for convenience") — never auto-save; always ask before writing; always allow the user to inspect + delete.
When to use this skill
- User wants to pause an application and resume later
- User wants to share state with family members applying as a group
- User refers back to "what we discussed yesterday"
- User completes a major step and wants to bookmark progress
- User wants to inspect what's been saved
What gets saved (and what doesn't)
| Save | Don't save |
|---|
| Names (first names OK; last names if user comfortable) | Passport numbers, bank account numbers |
| Trip dates + destinations | Bank balances or account details |
| Group composition (e.g. "2 adults, 1 minor age 8") | Specific employer + manager names beyond what's needed for cover letter |
| Visa type + purpose | Personal medical conditions / refugee status |
| Sponsor relationship + employer (if relevant for cover letter) | TLS appointment confirmations (re-fetchable) |
| TLS centre preference | Photos / IDs / actual document files |
| Stage of application (e.g. "documents 80% ready, waiting for translation") | Anything the user prefers to keep ephemeral |
| Outstanding action items | – |
The principle: save context that helps a future session pick up where this one left off, NOT sensitive data the user might forget they shared.
Storage location
~/.claude/skills/schengen-master/state.json
A simple JSON file. Plain text. User can:
- Read it:
cat ~/.claude/skills/schengen-master/state.json
- Edit it manually
- Delete it:
rm ~/.claude/skills/schengen-master/state.json
It's NEVER:
- Uploaded to GitHub
- Synced with cloud services
- Sent to any server
Procedure
To save
- Ask user explicit permission to write the state file
- Build the state object from current conversation:
- Names (only what's needed)
- Dates
- Composition
- Stage
- Outstanding actions
- Show user the JSON before writing
- On confirmation, write to
~/.claude/skills/schengen-master/state.json
- Confirm save with file location
To recall
- Read
~/.claude/skills/schengen-master/state.json if it exists
- Present the saved context to user: "Last time we were at: [STAGE]. Outstanding: [LIST]"
- Continue from where we left off
To inspect
Show user the file contents. Don't auto-modify.
To delete
- Confirm with user that they want to delete everything
- Run
rm ~/.claude/skills/schengen-master/state.json
- Confirm deletion
Output template (save)
APPLICATION STATE — DRAFT TO SAVE
═════════════════════════════════════════════════════════════════════
Below is what we'll save to ~/.claude/skills/schengen-master/state.json:
{
"applicants": [
{"name": "Jane Smith", "type": "adult"},
{"name": "Mike Smith", "type": "adult"},
{"name": "Emma Smith", "type": "minor", "age": 8}
],
"trip": {
"dates": "2026-07-15 to 2026-07-22",
"destination": "France (Paris + Nice)",
"purpose": "tourism",
"type": "Type C single-entry"
},
"sponsor": null,
"tls_centre": "Edinburgh",
"stage": "documents 80% ready",
"outstanding": [
"Order long-form birth certificate for Emma",
"Get insurance certificate for family policy",
"Book TLS appointment"
],
"last_session": "2026-05-24T16:30:00",
"next_step_suggestion": "/timeline-planner before booking TLS"
}
═════════════════════════════════════════════════════════════════════
PROCEED?
═════════════════════════════════════════════════════════════════════
[Y/N — confirm to save]
Nothing here is sensitive. No passport numbers, no account details.
The file stays on YOUR machine — never uploaded anywhere.
To delete later: rm ~/.claude/skills/schengen-master/state.json
Output template (recall)
WELCOME BACK
═════════════════════════════════════════════════════════════════════
Last session: 2026-05-24 16:30 UTC
You're applying for: France Schengen Type C single-entry
Travelling: 2026-07-15 to 2026-07-22
Group: Jane Smith, Mike Smith, Emma Smith (age 8)
Sponsor: None (self-funded)
TLS centre: Edinburgh
Current stage: documents 80% ready
Outstanding actions:
• Order long-form birth certificate for Emma
• Get insurance certificate for family policy
• Book TLS appointment
Suggested next step: /timeline-planner before booking TLS
═════════════════════════════════════════════════════════════════════
Pick up where we left off?
═════════════════════════════════════════════════════════════════════
[Y to continue / N to start fresh]
Routing rules
| Situation | Action |
|---|
| User says "save this" | Show JSON, get permission, write file |
| User comes back next session, file exists | Auto-present recall summary; ask if continuing |
| User wants to forget all | Confirm + rm the file |
| User wants to share with family | Email/Slack the JSON content; recipient places at same path |
| File is corrupted | Delete + start fresh |
| User wants partial save | Save only the requested fields; leave rest empty |
Common pitfalls
| Pitfall | Why it hurts | Fix |
|---|
| Saving sensitive data | Privacy leak risk | Filter: never save passport / bank / payment details |
| Auto-saving without permission | Surprises the user | Always ask before writing |
| Trying to sync this with cloud | Defeats privacy-first promise | Keep it local |
| Saving and forgetting to update | Stale data leads to wrong decisions | When session ends with major changes, prompt to save |
| Sharing state with sponsor | Sponsor's data may be in state | Strip sponsor section before sharing if recipient is the sponsor |
| File grows too large | Becomes unwieldy | Cap at ~10 fields; archive older completed apps |
Authoritative sources
- Local file system only; no external sources
Notes for maintainers
- The
state.json file is the only state mechanism in vstack. There is no cloud, no telemetry, no analytics.
- Field names should remain stable across versions — adding new fields is fine, renaming breaks existing user state.
- For users with multiple applications (e.g. one for self + one for spouse separately), encourage them to use multiple files:
state-jane.json, state-mike.json.
- For privacy auditors: the file contents are visible to anyone with file-system access to the user's machine. That's a feature (user can inspect), not a bug.
- The "name" field convention: first name + initial is usually enough. Don't push for full names.
- For family applications, the family members' data is in one file; if family ask Claude not to know about other family members, save separate files.
- The
next_step_suggestion is a hint, not a prescription. User can ignore.