Hoi, ik ben Soraya van Haarvisie. Wat leuk dat je naar onze podcast luistert. Vandaag ga ik je meer uitleggen over iTerm2 Shell Integration. Dat klinkt technisch, maar het gaat eigenlijk over iets heel praktisch. Namelijk: hoe je terminal jou kan vertellen wat er aan de hand is, in plaats van dat jij dat zelf moet uitzoeken.
Ik begin bij het begin. Je terminal is normaal gesproken dom. Hij toont letters. Meer niet. Hij weet niet wat een commando is, hij weet niet waar jouw prompt begint, en hij weet niet wat de uitvoer van een programma is. Voor de terminal is dat allemaal dezelfde soep van tekens.
Shell Integration lost dat op. Het is een klein scriptje dat je in je zsh-startbestand zet. Vanaf dat moment gaat je shell zelf melden wat er gebeurt. Hij stuurt onzichtbare codes mee naar iTerm2. Die codes vertellen zes dingen. Waar je prompt begint en eindigt. Waar je commando ophoudt en de uitvoer begint. De foutcode van het laatste commando. Je gebruikersnaam. De naam van de computer waar je op zit. En in welke map je staat.
Die codes zie je nooit op je scherm. iTerm2 vangt ze af. Ze komen oorspronkelijk van een oude terminal die FinalTerm heette. Die is allang verdwenen, maar zijn codes leven voort. Er zijn er vier voor de basis, en iTerm2 heeft er daarnaast nog een stuk of tien van zichzelf bij gemaakt. Voor jou is alleen belangrijk wat ze doen, niet hoe ze eruitzien.
Wat levert het je op? Best veel.
Het eerste is de mark. Bij elke prompt zet iTerm2 een klein blauw driehoekje in de linkermarge. Daarmee kun je door je scherm springen met commando plus shift plus de pijltjestoetsen. In een venster waar een agent honderden regels heeft uitgespuugd is dat goud waard. Je springt van commando naar commando in plaats van eindeloos te scrollen.
Het tweede is de status van je commando's. Mislukt een commando, dan wordt dat driehoekje rood. Klik je er met rechts op, dan zie je de foutcode. Je kunt ook per commando uit het verleden opvragen hoe lang het duurde en in welke map het draaide.
Het derde is misschien wel het handigste. Je kunt iTerm2 laten waarschuwen zodra een lang commando klaar is. Je start iets dat een tijd duurt, je drukt op commando, optie, A, en je gaat wat anders doen. Zodra de prompt terugkomt, ploept er een venster op dat je erop wijst dat het af is.
Dan is er nog je geschiedenis. iTerm2 onthoudt je commando's, en wel apart per gebruiker en per computer. Je kunt erin zoeken. Zet je in de instellingen aan dat de geschiedenis bewaard blijft, dan overleeft die een herstart, tot tweehonderd commando's per computer. Hetzelfde geldt voor je mappen. iTerm2 onthoudt welke mappen je gebruikt en sorteert ze op hoe vaak en hoe recent je er was. Je kunt een map een sterretje geven, dan staat hij altijd onderaan de lijst en vind je hem zo terug.
Bestanden ophalen gaat ook makkelijker. Zit je ingelogd op een server en typ je een lijst met bestanden, dan kun je met rechts op een bestandsnaam klikken en hem gewoon downloaden. Andersom sleep je een bestand vanuit Finder je terminal in terwijl je de optietoets ingedrukt houdt, en dan wordt het geüpload naar de map waar je op dat moment zat.
Bij de installatie krijg je ook een pakketje losse gereedschappen mee. Daar zitten een paar hele leuke tussen. Er is er een waarmee je een afbeelding zomaar in je terminal kunt tonen. Er is er een die het dock-icoon laat springen, of zelfs een klein vuurwerkje bij je cursor toont. En er is er een die simpelweg it2 heet, waarmee je iTerm2 vanaf de opdrachtregel kunt besturen. Vensters openen, tabbladen maken, tekst sturen, en, dit is de belangrijkste, de status van een tabblad zetten. Ik heb gekeken: op jouw MacBook staan die gereedschappen al klaar, want iTerm2 zeven levert ze tegenwoordig zelf mee.
Kun je dat scriptje ergens niet installeren, bijvoorbeeld op een server van iemand anders? Dan kun je hetzelfde effect bereiken met wat triggers heet. Een trigger kijkt naar de tekst op je scherm en doet iets zodra hij een patroon herkent. Met drie triggers vertel je iTerm2 alsnog wie je bent, waar je zit, en waar je prompt begint. Er is wel één ding waar je aan moet denken: zet bij die triggers het vinkje Instant aan, anders werken ze pas als er een nieuwe regel binnenkomt, en dan ben je te laat.
Triggers kunnen trouwens veel meer. Ze kunnen de kleur van een tabblad zetten, een melding sturen, het dock laten springen, een regel oplichten, of een venster tonen met je eigen tekst. En er zijn niet alleen triggers die naar tekst kijken. Er zijn er ook die reageren op wat er gebeurt. Bijvoorbeeld: een commando is klaar. Of: een commando draait al langer dan zestig seconden. Of: er is al twee minuten niets gebeurd in dit venster. Of: het programma claude is net gestart, of net gestopt. Dat is voor jou heel bruikbaar.
Nu iets anders, want dit gaat verder dan Shell Integration alleen. iTerm2 kan sinds kort automatisch van profiel wisselen. Dat betekent: hij weet wie je bent en op welke computer je zit, en op basis daarvan zet hij een ander uiterlijk op. Je kunt dus afspreken dat je terminal een andere achtergrondkleur krijgt zodra je op de VPS zit. Dan kun je nooit meer per ongeluk denken dat je lokaal bezig bent terwijl je eigenlijk op de server zit.
En dan de statusbalk. Die kun je per profiel aanzetten en zelf inrichten. Je kunt er dingen in zetten als: welk programma draait er nu, in welke map zit ik, welke git-tak is dit en zijn er nog wijzigingen, hoe laat is het. Je kunt er zelfs je eigen tekst in zetten. Dat werkt allemaal veel beter zodra Shell Integration aanstaat, want dan kloppen de map en de computernaam ook als je via ssh ergens anders zit.
Nu komt het stuk dat voor jou het meest oplevert. iTerm2 versie zeven heeft een eigen Claude Code-integratie. En jij hebt precies die versie, dat heb ik nagekeken.
Wat die integratie doet, is dit. Je krijgt in het zijpaneel een lijstje met al je sessies, en per sessie een gekleurd bolletje. Er zijn drie standen. Bezig, als Claude aan het werk is. Wachtend, als Claude jou nodig heeft, bijvoorbeeld om iets goed te keuren. En klaar, als Claude uitgewerkt is en op je volgende bericht wacht.
Twee dingen maken dat echt bruikbaar. Ten eerste tellen achtergrond-agents mee. Een sessie blijft op bezig staan zolang subagenten nog draaien, ook als het hoofdgesprek even stilligt. Zo denkt het systeem niet ten onrechte dat er niets gebeurt. Ten tweede sorteert dat lijstje op urgentie. De sessies die jou nodig hebben komen bovenaan te staan. Eén klik en je bent er.
Dat lost precies het probleem op waar jij de hele dag mee zit. Jij hebt een rij tabbladen vol agenten. Conductor, Appel, de gastvrouw, de boekhouder, SEO. Je grootste last is niet dat een agent iets niet kan. Je grootste last is weten welk tabblad jou nodig heeft. Dit meet dat van buitenaf, precies zoals in jouw eigen regels staat dat het moet.
Er zit ook nog een handigheidje bij dat een werkgroep heet. Die maakt uit één sessie drie bij elkaar horende vensters. Je gesprek met Claude, een venster met je wijzigingen naast elkaar, en een apart venster om die wijzigingen na te lopen. Dat gaat vanzelf open als claude start en weer dicht als hij stopt.
Nu de eerlijke kant, want er zijn ook valkuilen.
De eerste, en die is voor jou belangrijk: Claude Code herschrijft af en toe je instellingenbestand en gooit dan het haakje eruit dat die statusbolletjes voedt. Dat staat gewoon zo in de handleiding. iTerm2 merkt het en biedt aan het te herstellen, maar jouw instellingenbestand is groot en zit vol met je eigen haakjes. Dus maak daar eerst een kopie van.
De tweede valkuil is tmux. Shell Integration werkt daar standaard niet mee. Er is een omweg, en met de eigen tmux-koppeling van iTerm2 werkt het wel goed, maar met het gewone tmux dus niet.
De derde: gebruik je een zsh-thema dat je prompt zelf regelt, dan botsen die twee. Daar is een oplossing voor, maar je moet het wel weten.
De vierde gaat over bestanden versturen. iTerm2 gebruikt daarvoor zijn eigen ingebouwde techniek, en niet het gewone scp-commando. Hij begrijpt maar een deel van je ssh-instellingen: alleen de computernaam, de gebruiker, de poort en het sleutelbestand. De rest niet. En wat er in dat instellingenbestand staat, wint van wat Shell Integration doorgeeft. Goed om te weten als je met je VPS werkt.
Over snelheid ben ik eerlijk: daar staan geen cijfers over in de handleiding, en ik heb het niet gemeten. Ik ga er dus niets over beweren.
Aanzetten is trouwens heel eenvoudig. De nette manier is een vinkje in de instellingen, bij je profiel, onder Algemeen. Dan verandert er niets aan je startbestand. Er is ook een menuknop die het voor je installeert, en je kunt het met de hand doen met één regel onderaan je zshrc. Uitzetten is even makkelijk: vinkje uit, of die ene regel weer weghalen. Alles is omkeerbaar.
Op jouw MacBook staat het nu overigens uit. Dat heb ik gemeten. Er is geen integratiebestand en je zshrc noemt iTerm2 nergens.
Wat zou ik doen als ik jou was? Drie dingen, in deze volgorde. Eerst de Claude Code-integratie installeren, want dat is de grootste winst met het minste werk. Maak wel eerst een kopie van je instellingenbestand. Dan Shell Integration aanzetten via dat vinkje, zodat je marks en je geschiedenis krijgt. En dan een statusbalk per tabblad met daarin welk programma draait, in welke map je zit en welke git-tak het is.
En als toetje: dat gereedschap it2 kun je gewoon in je eigen scripts gebruiken. Dan kan een klus die op de achtergrond draait zelf het tabblad kleuren of zichzelf melden als hij klaar is. Dat past precies bij jouw eigen regel dat een klus zichzelf moet melden, in plaats van dat jij zit te wachten op iets dat nooit komt. En het werkt zelfs over ssh, dus een klus op de VPS kan een seintje terugsturen naar je MacBook.
Zo, dat was het. Nu weet je van de hoed en de rand hoe iTerm2 Shell Integration werkt en wat je eraan hebt. Ik heb niets voor je aangezet of geïnstalleerd, dat is aan jou. Het hele verslag met alle details, alle codes en alle instellingen staat op verslag punt haartips punt nl.
Bedankt voor het luisteren, en tot de volgende keer. Fijne dag nog.
Volledige analyse van de officiele iTerm2-documentatie. Bronnen die ik echt geopend heb:
de pagina Shell Integration, plus de sub-pagina's Utilities, Badges, Triggers,
Automatic Profile Switching, Status Bar, Proprietary Escape Codes, tmux Integration en
Claude Code Integration (allemaal op iterm2.com).
Alles wat hieronder staat komt daaruit, of uit een meting op jouw eigen MacBook.
~/.iterm2_shell_integration.zsh en je ~/.zshrc noemt iTerm2 nergens.~/.zshrc erbij, of die regeliTerm2 is normaal gesproken dom. Het toont letters die de computer stuurt. Het weet niet
wat een prompt is, wat een commando is en wat uitvoer is. Voor iTerm2 is dat allemaal
dezelfde soep van tekens.
Shell Integration lost dat op. Je shell (bij jou: zsh) gaat zelf melden wat er gebeurt.
De documentatie noemt dit letterlijk zo. Shell Integration werkt door je shell op elke
computer waar je inlogt zo in te stellen dat hij speciale codes stuurt met deze informatie:
Het werkt met bash, fish (2.3 en nieuwer), tcsh, xonsh (iTerm2 3.6.10 en nieuwer) en zsh.
De basis komt van een oude terminal die FinalTerm heette. Die is verdwenen, maar zijn
codes leven voort. iTerm2 gebruikt ze nog steeds. De documentatie noemt ze FTCS-codes.
| Code | Wat het betekent |
|---|---|
OSC 133 ; A ST |
vlak voor het begin van de prompt |
OSC 133 ; B ST |
vlak na het eind van de prompt, dus waar jij begint te typen |
OSC 133 ; C ST |
vlak voor het begin van de uitvoer van het commando |
OSC 133 ; D ; [code] ST |
het commando is klaar, met de foutcode erbij (0 tot 255) |
Bij die laatste geldt: 0 is gelukt, alles wat niet 0 is, is mislukt. De terminal mag dat
zichtbaar maken. Dat is precies waarom je mark rood kleurt bij een fout.
Daarbovenop heeft iTerm2 zijn eigen codes. Die beginnen met OSC 1337.
| Code | Wat het doet |
|---|---|
OSC 1337 ; RemoteHost=gebruiker@computer ST |
meldt wie je bent en waar je zit |
OSC 1337 ; CurrentDir=[map] ST |
meldt in welke map je staat |
OSC 1337 ; SetMark ST |
zet een mark, hetzelfde als Cmd-Shift-M |
OSC 1337 ; SetUserVar=[naam]=[base64] ST |
zet je eigen variabele die iTerm2 kan tonen |
OSC 1337 ; ShellIntegrationVersion=[nummer] ; [shell] ST |
meldt welke versie van het script draait |
OSC 1337 ; StealFocus ST |
haalt iTerm2 naar de voorgrond |
OSC 1337 ; RequestAttention=[waarde] ST |
laat het dock-icoon springen |
OSC 9 ; [tekst] ST |
stuurt een macOS-melding |
OSC 1337 ; SetBadgeFormat=[base64] ST |
zet de badge (grote tekst rechtsboven) |
ST is gewoon het teken dat de code afsluit. Je ziet deze codes nooit op je scherm.
iTerm2 vangt ze af en toont ze niet.
Over ShellIntegrationVersion: iTerm2 weet zelf welke versie "de huidige" is. Ziet hij een
lager nummer, dan krijg je de vraag om bij te werken.
Het script hangt zich aan je prompt. Bij zsh en bash betekent dat: het bemoeit zich met je
PS1 (bash) of je prompt-functie. Daarom staat er in de handleiding uitdrukkelijk dat je
de source-regel onderaan je startbestand moet zetten. Andere scripts kunnen anders
overschrijven wat Shell Integration nodig heeft.
Heb je een prompt over meerdere regels en wil je de mark op een andere plek?
Dan zet je dit zelf in je prompt:
%{$(iterm2_prompt_mark)%}\[$(iterm2_prompt_mark)\]iterm2_prompt_mark ergens in je fish_prompt-functie$PROMPT = '{iterm2_prompt_start}' + $PROMPT + '{iterm2_prompt_end}'Belangrijk voor jou als je ooit een zsh-thema gebruikt dat je prompt zelf regelt
(Powerlevel10k, Oh My Zsh en dat soort dingen): dan mag Shell Integration niet aan je prompt
zitten. Zet dan export ITERM2_SQUELCH_MARK=1 voor de source-regel, en plaats de mark
zelf via je thema.
Dit is de functie die voor jou het meest voor de hand ligt.
Je start iets dat lang duurt. Dan kies je Edit > Marks and Annotations > Alert on next mark
(Cmd-Opt-A). Je gaat iets anders doen. Zodra de prompt terugkomt, krijg je een venster
in beeld dat je erop wijst dat het klaar is.
cd naar de map waar je toen zat.cd van.ls) enprintf "\e]1337;SetBadgeFormat=%s\a" \
$(echo -n "\(session.name) \(user.gitBranch)" | base64)
Klik op een commando om het te selecteren. Daarna werken Find, Filter en
Select All alleen nog binnen de uitvoer van dat ene commando. Handig als je scherm
vol staat.
Shell Integration zorgt dat je prompt altijd links begint, ook als het vorige commando
niet netjes met een nieuwe regel eindigde.
Bij de installatie krijg je de vraag of je ook het Utilities Package wilt. Doe dat.
Dat zijn losse commando's die je gewoon kunt aanroepen. De meeste werken zelfs zonder
Shell Integration.
| Commando | Wat het doet |
|---|---|
imgcat |
toont een afbeelding gewoon in je terminal, ook animaties |
imgls |
een ls met kleine voorbeeldjes van de afbeeldingen |
it2 |
bestuurt iTerm2 vanaf de opdrachtregel: vensters, tabs, splitsingen, tekst sturen, status van een sessie zetten, gebeurtenissen volgen |
it2attention |
vraagt aandacht: start laat het dock-icoon springen, stop stopt dat, fireworks geeft een explosie bij je cursor |
it2check |
controleert of je wel echt in iTerm2 zit |
it2copy |
kopieert tekst naar je klembord, ook via ssh |
it2dl |
downloadt een bestand van een computer waar je op ingelogd bent |
it2getvar |
haalt een sessie-variabele op, bijvoorbeeld it2getvar session.name |
it2setcolor |
verandert de kleuren, ook de tabkleur |
it2setkeylabel |
labels op de Touch Bar |
it2ul |
uploadt bestanden |
it2universion |
zet de unicode-versie, belangrijk voor emoji-breedte |
Twee dingen die er voor jou uitspringen:
it2 set-status zet de status van een sessie: het bolletje, de ondertitel en de kleurit2setcolor tab [kleur] kleurt de tab. Terug naar standaard met it2setcolor tab default.De scripts komen in $HOME/.iterm2/ te staan. Onderaan je
~/.iterm2_shell_integration.zsh komen verwijzingen ernaartoe.
Ik heb het op jouw MacBook nagekeken: it2 en it2attention staan al op je PATH, want
iTerm2 3.7 levert ze mee in de app zelf (/Applications/iTerm.app/Contents/Resources/utilities/).
imgcat heb je al staan in ~/.local/bin/.
Nog iets: it2 werkt ook over ssh. Draai je het op een computer waar je via de
SSH-integratie van iTerm2 naartoe bent gegaan, dan komt het verzoek terug bij je eigen
iTerm2. De eerste keer wordt om toestemming gevraagd, per sessie.
Soms kun je het script niet installeren. Op een server van iemand anders bijvoorbeeld. Of als
root, wat volgens de documentatie meestal een slecht idee is.
Dan gebruik je triggers. Een trigger kijkt naar de tekst op je scherm en doet iets als er
een patroon in staat. Drie triggers doen samen bijna hetzelfde als Shell Integration:
Het voorbeeld uit de documentatie gaat uit van een prompt als
george@example.com:/home/george%. Voor gebruiker en computer:
^(\w+)@([\w.]+):.+%
met als parameter \1@\2. En voor de map:
^\w+@[\w.]+:([^%]+)%
met als parameter \1.
Zet bij beide het vinkje "Instant" aan. Anders werken ze pas als er een nieuwe regel
binnenkomt, en dan ben je te laat.
Je mag ook alleen een gebruikersnaam opgeven (gebruiker@) of alleen een computernaam
(@voorbeeld.nl). Wat je weglaat blijft staan zoals het was.
De trigger-pagina noemt een hele lijst acties. Voor jou zijn deze interessant:
En er zijn gebeurtenis-triggers: die kijken niet naar tekst maar naar wat er gebeurt.
Deze zijn voor jou relevant:
| Gebeurtenis | Gaat af als | Filter |
|---|---|---|
| Command Finished | een commando klaar is (heeft Shell Integration nodig) | foutcode: alles, 0, niet-0, of een precies getal |
| Long-Running Command | een commando langer draait dan je grens | grens in seconden (standaard 60) plus eventueel een patroon |
| Idle (Silence) | er even niets meer binnenkomt | aantal seconden (standaard 30) |
| Activity After Idle | er weer iets binnenkomt na stilte | aantal seconden dat "stil" betekent |
| Job Started / Job Ended | een programma start of stopt op de voorgrond | de naam van het programma, bijvoorbeeld claude |
| Prompt Detected | Shell Integration ziet een nieuwe prompt | geen |
| Directory Changed / Host Changed / User Changed | je map, computer of gebruiker verandert | patroon |
| Session Ended | de sessie stopt | geen |
| Variable Changed | een sessie-variabele verandert | naam van de variabele plus eventueel een patroon |
| Notification Posted | er komt een melding binnen via OSC 9 |
patroon op de tekst |
Elke trigger heeft ook een los veld Job. Zet je daar claude in, dan werkt die trigger
alleen zolang claude op de voorgrond draait. De documentatie noemt Claude Code hier zelf
als voorbeeld.
Triggers kun je ook exporteren naar een .it2triggers-bestand of kopieren als link.
Dus je kunt een goede set één keer maken en over al je profielen uitrollen.
Met Shell Integration weet iTerm2 wie je bent, op welke computer je zit en in welke map.
Daarmee kan hij automatisch een ander profiel opzetten. Bijvoorbeeld: een rode achtergrond
zodra je op de VPS zit.
De regels zet je in Settings > Profiles > Advanced. Een regel bestaat uit maximaal drie
delen: gebruikersnaam, computernaam en pad. Minstens één deel moet erin staan.
@, bijvoorbeeld root@/:, bijvoorbeeld iterm2.com:/users/george* is een jokerteken&, bijvoorbeeld &vim! begint is sticky: het profiel blijft staan als de regel niet meerPassen er meerdere regels tegelijk? Dan wint de regel met de hoogste score:
| Onderdeel | Punten |
|---|---|
| computernaam exact | 16 |
| computernaam met jokerteken | 8 |
| programmanaam | 4 |
| gebruikersnaam | 2 |
| pad exact | 1 |
| pad met jokerteken | 0 (telt wel mee als match) |
Klopt geen enkele regel meer, dan gaat de sessie terug naar het profiel waar hij mee begon.
De statusbalk staat los van Shell Integration, maar hij wordt er veel beter van.
Aanzetten: Settings > Profiles > Session > Status bar enabled, dan
Configure Status Bar. Je sleept onderdelen naar boven.
Onderdelen die je kunt neerzetten:
Handig detail: elk onderdeel heeft een Priority (standaard 5). Is er te weinig ruimte,
dan verdwijnen eerst de onderdelen met de laagste prioriteit. Zet het belangrijkste dus hoger.
De git-tegel is niet alleen kijken. Klikken geeft je knoppen voor commit, add en commit,
stash, log, pull, push en wisselen naar recente takken. Het git-commando draait in een
afgeschermd hokje dat alleen naar /tmp en /var mag schrijven, zodat er niets stuk gaat.
iTerm2 3.7 heeft een eigen Claude Code-integratie. Jij hebt versie 3.7.0. Ik heb het
nagekeken.
Installeren: iTerm2 > Install Claude Code Integration. Er opent een venster dat eerst
laat zien wat het gaat veranderen, en dat je dan stap voor stap meeneemt. Elke stap is
optioneel, behalve de Python-API aanzetten.
Wat de installatie doet:
~/.claude/settings.json. Die hook meldt wat Claude aan het doen is.Dit is de kern. De tegel Session Status in de toolbelt toont al je sessies met een
gekleurd bolletje en een label:
| Status | Betekenis |
|---|---|
| working | Claude draait een opdracht of een gereedschap |
| waiting | Claude heeft jou nodig, bijvoorbeeld om iets goed te keuren |
| idle | Claude is klaar en wacht op je volgende bericht |
Twee dingen die het echt bruikbaar maken voor jouw manier van werken:
Er kan ook een extra regeltje bij staan: voor welk gereedschap toestemming gevraagd wordt,
of een stukje van Claudes laatste bericht.
Toolbelt aan- en uitzetten kan altijd zelf: View > Toolbelt > Show Toolbelt of Cmd-Shift-B.
Een Workgroup bouwt uit één sessie een groepje bij elkaar horende sessies. De Claude
Code-Workgroup maakt er drie:
Je wisselt met één klik via de werkbalk van de Workgroup. De hele indeling kun je aanpassen
in Settings > Arrangements > Workgroups. Het is dus geen dichtgetimmerd ding, maar gewoon
instellingen die je mag veranderen.
Heb je de triggers geïnstalleerd, dan gaat de Workgroup vanzelf open als claude start in een
profiel dat je hebt aangewezen, en weer dicht als hij stopt. Die triggers kijken naar de
claude-job, dus ze gaan niet af bij iets anders. En de Exit-trigger geldt alleen voor de
leider: stop je Claude in de Diff- of Code Review-sessie, dan blijft de rest gewoon staan.
Draait Claude Code in een sessie en heb je niets ingesteld? Dan biedt iTerm2 één keer aan:
"Claude Code is running. Want to try the Claude Code integration?" Met Try It Now ga je
tijdelijk de Workgroup in, tot Claude stopt. Met Don't Show Again is de vraag voorgoed weg.
De documentatie is hier eerlijk over: Claude Code herschrijft af en toe je
~/.claude/settings.json en kan de cc-status-hook eruit gooien. Gebeurt dat, dan merkt
iTerm2 het de volgende keer dat Claude draait en biedt aan de hook opnieuw te zetten.
Handmatig kan ook: iTerm2 > Reinstall Claude Code Integration.
Weghalen: iTerm2 > Uninstall Claude Code Integration. Dat haalt de hook, de Workgroup en
de triggers weer weg. De Python-API blijft aan als je dat wilt, want andere scripts kunnen
die inmiddels gebruiken.
Er zijn vier manieren. In volgorde van makkelijk naar precies.
Zet Load shell integration automatically aan in
Settings > Profiles > General, in het blok Command.
Dit kan als je Command op SSH staat, of op Login Shell met een ondersteunde shell.
Dit is de netste manier: er verandert niets aan je ~/.zshrc.
iTerm2 > Install Shell Integration. Je krijgt eerst de vraag of je ook de Utilities wilt.
Daarna kies je:
curl -L https://iterm2.com/shell_integration/install_shell_integration.sh | bashcurl -L https://iterm2.com/shell_integration/zsh -o ~/.iterm2_shell_integration.zsh
En dan onderaan je ~/.zshrc:
source ~/.iterm2_shell_integration.zsh
Voor de volledigheid, de andere shells uit de documentatie:
| Shell | Bestand | Waar de source-regel heen moet |
|---|---|---|
| bash | ~/.iterm2_shell_integration.bash |
onderaan ~/.bash_profile of ~/.profile |
| zsh | ~/.iterm2_shell_integration.zsh |
onderaan ~/.zshrc |
| fish | ~/.iterm2_shell_integration.fish |
onderaan ~/.config/fish/config.fish |
| tcsh | ~/.iterm2_shell_integration.tcsh |
onderaan ~/.login |
| xonsh | ~/.config/xonsh/rc.d/iterm2.xsh |
niets nodig, xonsh laadt die map zelf |
Zie hoofdstuk 5. Voor computers waar je niets mag installeren.
source-regel uit je ~/.zshrc weg en open een nieuwe tab.Verder is er nog het geval root. Wil je Shell Integration ook als root, dan zegt de
documentatie: word root met sudo -s (die laadt je .bashrc als root) en zet dit in je
.bashrc:
test $(whoami) == root && source "${HOME}/.iterm2_shell_integration.bash"
Het alternatief is opnieuw: triggers.
Dit staat allemaal letterlijk in de documentatie.
tmux en screen
export ITERM_ENABLE_SHELL_INTEGRATION_WITH_TMUX=1tmux -CC), maar niet mettmux -CC opent iTerm2 een venster dat aanvoelt als een gewoon venster, maartmux -CC attach alles terug zoals het was.Prompt-thema's
Gebruik je een zsh-thema dat je prompt zelf regelt, dan botst dat. Los het op met
ITERM2_SQUELCH_MARK=1 en zet de mark handmatig. Zie hoofdstuk 2.
Volgorde in je startbestand
De source-regel hoort onderaan. De documentatie zegt het er expliciet bij: andere scripts
kunnen overschrijven wat Shell Integration nodig heeft, bijvoorbeeld PROMPT_COMMAND.
tcsh
Daar kun je de mark niet zelf verplaatsen. Die functie bestaat niet in tcsh.
scp: hoe uploads en downloads echt werken
Dit is belangrijk als je met sleutels en ssh-instellingen werkt, zoals bij jouw VPS.
scp-commando aan./etc/known_hosts en ~/.ssh/known_hosts, en werkt die laatste bij.~/.ssh/id_rsa, id_dsa, id_ed25519 of id_ecdsa.ssh_config begrijpt hij maar een deel: Host, HostName, User, Port enIdentityFile. Meer niet.ssh_config komt overschrijft de computernaam en gebruikersnaam die Shell~/Library/Application Support/iTerm/ssh_config~/.ssh/config/etc/ssh_configNieuw in 3.7
SSH_AUTH_SOCK naar een agent metSnelheid
De documentatie geeft geen snelheidscijfers over Shell Integration zelf. Wat wel genoemd
wordt over prestaties:
Eerlijk: ik kan niet met bewijs zeggen hoeveel milliseconden Shell Integration per prompt
kost. Dat staat er niet. Wat er wel staat, is dat het script zich aan je prompt hangt, dus het
draait bij elke prompt mee. Als je het merkt, is het meestal je thema en niet Shell Integration.
Jij werkt de hele dag in iTerm2 met een rij tabs vol Claude Code-agents: Conductor, Appel,
gastvrouw, boekhouder, SEO, VCA, webdesigner. Je grootste last is niet dat een agent iets niet
kan. Je grootste last is weten welke tab jou nodig heeft.
Daar is dit precies goed voor.
1. De Claude Code-integratie (grootste winst, minste werk)
~/.claude/settings.json soms2. Shell Integration zelf
Bij jou staat hij nu uit. Gemeten: geen ~/.iterm2_shell_integration.zsh, geen regel in
~/.zshrc. Ik zou hem aanzetten via het vinkje
Settings > Profiles > General > Load shell integration automatically. Dan blijft je
~/.zshrc schoon en is uitzetten net zo makkelijk.
Wat je er direct aan hebt:
~/vca-work, ~/financieel-advies,~/salon-coach, ~/seo en de VPS. Dit onthoudt dat voor je.3. Een statusbalk per tab
Zet aan: Settings > Profiles > Session > Status bar enabled.
Wat ik erin zou zetten:
| Onderdeel | Waarom voor jou |
|---|---|
| Job Name | zie meteen of claude, python3 of ssh draait in die tab |
| Current Directory | welk project is dit, ~/vca-work of ~/seo |
| git state | tak, wijzigingen, voor of achter op origin. Jij werkt met veel repos |
| Interpolated String | hier zet je je eigen agent-label in |
| Clock | handig bij je 18:00-besluitenlijst |
Je hebt al agent-labels per tab (~/.claude/agent-labels.json). Die kun je hiermee ook in de
statusbalk zelf zetten, niet alleen in de tabtitel.
4. Badges (grote tekst rechtsboven)
Een badge is groter en beter zichtbaar dan een tabtitel. Zet daar de agentnaam in. Dan zie je
in een gesplitst venster meteen wie waar zit. Instelling:
Settings > Profiles > General > Badge.
5. Automatisch van profiel wisselen
Regel: zodra je op 149.210.171.174 zit, ander profiel met een andere achtergrondkleur. Dan
kun je nooit meer per ongeluk denken dat je lokaal zit terwijl je op de VPS bent. Dat sluit
direct aan op je eigen regel over machine-lookup.py: eerst weten op welke machine je zit.
Voorbeeld van zo'n regel in Settings > Profiles > Advanced:
jamalhaarvisie@149.210.171.174
6. Triggers voor je vloot
Een paar die ik zou maken:
claude → Set Tab Status → tab krijgt een bolletjeEn bedenk: het veld Job zorgt dat een trigger alleen werkt terwijl claude draait. Zo
gaat hij niet af als jij zelf iets aan het typen bent.
Triggers kun je exporteren en in één keer in al je profielen zetten. Dus je maakt de set
één keer goed.
7. it2 in je eigen scripts
Dit is de mooiste. it2 staat al op je PATH. Daarmee kan een script van jou zelf de tab
kleuren of de status zetten als het klaar is.
Dat past precies bij je eigen regel "beloof nooit ik wacht op de melding, laat de klus
zichzelf melden". Je hangt gewoon it2 set-status of it2attention fireworks achter je
achtergrondklus. Dan meldt de tab zichzelf, ook als de sessie al weg is.
En het werkt over ssh: draai je iets op de VPS via de SSH-integratie, dan komt de melding
terug bij je eigen iTerm2 op de MacBook.
~/.claude/settings.json voordat je de Claude Code-integratie installeert.-CC? Daar werkt Shell Integration niet, tenzij je die~/.claude/settings.json. Dat wil ik eerst met jou afspreken.Allemaal echt geopend op 9 september 2026: