visa
Skill0 starsChanged 2 months agoMITView on GitHub
Check Blue Card eligibility, degree recognition via anabin, and what a posting's work-authorization line actually means for you
In this repository14 other files it gives its agents.
- AGENTS.mdAGENTS.md
- anschreibenSkill
- applySkill
- evaluateSkill
- followupSkill
- interview-prepSkill
- job-searchSkill
- mappeSkill
- network-scanSkill
- patternsSkill
- setupSkill
- tailor-cvSkill
- trackerSkill
- zeugnisSkill
The file
We split this skill into the rules it gives an agent
4 rules. About 0 are common, 3 are distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈3
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 17
Read Arbeitserlaubnis from profile.md.
- Distinctive: line 25
Check anabin for both the institution and the degree.
- Distinctive: line 35
Do this at setup, not against a deadline.
- Distinctive: line 47
Never substitute a remembered figure.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Work Authorization Check
Reference:
shared/references/work-authorization.md
Two jobs: establish the candidate's actual status once, and stop them discarding roles they are eligible for — or chasing ones they are not.
Generic tools reduce this to one boolean and get it wrong in both directions. A Blue Card holder in Germany gets told a "no sponsorship" role is blocked when it is not. A candidate abroad passes the boolean and then fails at the Ausländerbehörde on degree recognition.
Step 1: Status
Read Arbeitserlaubnis from profile.md. If missing, establish it now and store it — citizenship or permit type, validity, whether an employer change needs approval, and whether the degree is recognized.
EU/EEA/Swiss citizen or Niederlassungserlaubnis → say there are no constraints and stop. No need to spend the user's time.
Step 2: Degree recognition (anabin)
For a non-EU degree, and a candidate without permanent residence, this is the gate that decides everything downstream.
Check anabin for both the institution and the degree. An institution rated H+ counts as equivalent to a German higher-education institution.
anabin cannot be read by a plain fetch, and it fails deceptively. Its filter pages answer HTTP 200 with about 2,500 characters that are entirely navigation — no results, no rating letters — because the search runs client-side. The template text even contains the words „Institutionen" and
H+, so a fetched page can look like a successful lookup. Verified 2026-09-16.Never report a rating you did not see in a result row. Either drive it in the browser —
Institutionen, then filter by country and search the institution name — or hand the candidate the two searches to run. Both are fine. AssertingH+from a fetched shell is not, and it is the one answer here that costs months if wrong.
- Recognized → record it in
profile.mdand move on - Not found or not equivalent → explain the Zeugnisbewertung route (a statement of comparability from the ZAB), and that it takes time and a fee
- Cannot determine → say so rather than guessing. Point at the ZAB. A wrong answer here costs months.
Do this at setup, not against a deadline.
Step 3: Blue Card eligibility
Per §18g AufenthG: a recognized degree plus a salary at or above a threshold. There are two thresholds — a general one, and a lower one for shortage occupations (IT, engineering, medicine, mathematics, natural sciences) and for young professionals whose degree is under three years old.
Compute the threshold, never recall it. Per work-authorization.md, §18g AufenthG sets it as a percentage — 50 % generally, 45,3 % for Engpassberufe and for degrees awarded within three years — of the annual Beitragsbemessungsgrenze in der allgemeinen Rentenversicherung. Fetch the current Beitragsbemessungsgrenze, multiply, and show the arithmetic: the percentage, the base, the result, the year, and the date you checked. A candidate can check multiplication; they cannot check an asserted number.
The percentages are recorded in work-authorization.md with the date they were confirmed, and those are the figures to use. gesetze-im-internet.de/aufenthg_2004/__18g.html serves §18g as plain text if you want to re-confirm, but it blocks datacenter IPs — so expect the fetch to fail on Claude Code for web or in a cloud dev environment, and succeed from a home connection. A failed fetch is not a blocker: use the recorded percentages and state when they were last confirmed.
make-it-in-germany.com is not usable either way — client-rendered, 108 characters to a plain fetch.
Never substitute a remembered figure. A stale number makes a candidate discard a role they qualify for, or chase one they do not.
Also check, before concluding anyone is blocked:
- IT specialists without a degree can qualify on roughly three years of relevant recent experience under §19c(2) AufenthG with §6 BeschV, since the 2023 reform.
- Vorabzustimmung — the employer can request pre-approval from the Bundesagentur für Arbeit and materially shorten the process. A concrete, low-cost thing to raise with a keen employer.
- Chancenkarte — for candidates still abroad, a points-based route to come and look for work without an offer first.
Step 4: Against a specific posting
With a job URL, decide what the ad's wording actually means for this candidate:
| Ad says | Candidate holds a permit | Candidate needs one |
| "No visa sponsorship" | Not a blocker. The line targets candidates abroad. | Hard blocker. Skip it. |
| Salary below the Blue Card threshold | Irrelevant if the permit is already held | Blocker for the Blue Card route — check other routes |
| EU citizenship required | Hard blocker | Hard blocker. Legal, and it will not bend. |
| Öffentlicher Dienst | Often extra citizenship or clearance constraints — check | Usually blocked |
| Sicherheitsüberprüfung | Typically needs long-term residency — flag early | Blocked |
State the reasoning, not just the verdict, so the user can sanity-check it against their own wingman.
Step 5: Form answers
Give the exact wording for the questions German forms ask, per the reference table — Benötigen Sie eine Arbeitserlaubnis?, Besitzen Sie einen Aufenthaltstitel?, availability. Save them into application-data.md so every future application answers consistently.
Never misrepresent status. It is verified before a contract is signed; a false answer costs the offer and can affect future permits. Where the truth needs a sentence of context rather than a checkbox, put that sentence in a free-text field or the Anschreiben — accurate and framed, never hidden.
Explains how the rules are structured so applications are not wasted. Not immigration advice. Thresholds, categories and procedures change, and the Ausländerbehörde decides individual cases. For anything consequential: the BAMF, make-it-in-germany.com, or a Fachanwalt für Migrationsrecht.
Response Format
- Status — what the candidate holds and what it allows
- Recognition — anabin result, or the route to get one
- Eligibility — Blue Card and alternatives, with the date thresholds were checked
- This Posting — blocker or not, and why
- Form Answers — exact wording, saved
Permissions
{ "permissions": { "allow": [
"Read(~/.wingman/**)", "Write(~/.wingman/**)", "Edit(~/.wingman/**)",
"mcp__claude-in-chrome__*"
] } }Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

