Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
219 commits
Select commit Hold shift + click to select a range
47c80f2
fix: byg paa macos-15, aerlige forgrunds-loefter, fremmed-mac som ægt…
Sep 28, 2026
dcf361a
vejledning: spørg når du er blokeret, giv ikke op - tre ting er menne…
Sep 28, 2026
6a5868f
docs: regenerer npm-README efter forgrunds-loefte-rettelsen (holder c…
Sep 28, 2026
d1c5cfe
haerdning M1: programlaasen fejler LUKKET ved infra-fejl (ikke aaben)
Sep 28, 2026
b5d0953
haerdning M4: giv aldrig forgrunden fra et menneske der lige skiftede
Sep 28, 2026
4f9c98c
test(mutant): opdater M4-mutanten til den nye give-tilbage-kode
Sep 28, 2026
c063058
doer (slice 1): computer_open - aabn en apps egen indgang bagfra, sik…
Sep 28, 2026
35fbb6a
doer (slice 1) doc-sync: computer_open paa alle flader, tal 30->31
Sep 28, 2026
259c9fb
review-fund (Astra+Fable luknings-review): ret overclaims + dør-timeo…
Sep 29, 2026
03e6f46
oprydning (review-loose-ends): fjern død claude-scheme fra dørens all…
Sep 29, 2026
08641e6
positionér på universaliteten: kører i ENHVER MCP-klient, ikke én app
Sep 29, 2026
226d5fd
distribution: MCPB-bundle-recept (Smithery + selv-install), valideret
Sep 29, 2026
afa2786
vejledning: ret usandt løfte om ask_user (Fable-review) - den bruger …
Sep 29, 2026
7680067
type naegter kodeordsfelter - ogsaa naar fokus flytter derind undervejs
Sep 29, 2026
bf2349b
samtykke-porten viser HELE handlingen foer ja - intet tavst klip
Sep 29, 2026
ce87b6f
samtykke-porten: bevis at den fejler lukket og kommer igen
Sep 29, 2026
8876557
computer_ask_user virker i baggrund - spoergsmaalet venter i menulinj…
Sep 29, 2026
c8672bf
sende-porten: en besked til et rigtigt menneske spoerger hver gang
Sep 30, 2026
74d7e55
skaerm-laanet: mennesket laaner én agent skaermen i ikonet - og tager…
Sep 30, 2026
65f3ef4
B6: computer_permissions siger hvor porten kan gaas udenom
Sep 30, 2026
0ec8013
B7: portenes mutationsbevis koerer paa den fremmede Mac ved hver aend…
Sep 30, 2026
1bf6ceb
ikonets menu maales: --dump-question viser praecis hvad mennesket ser
Sep 30, 2026
736fab4
runde 1-rettelser (lån + samtykke): R1 R2 R8 R9 R12 R13
Sep 30, 2026
297df8a
runde 1-rettelser (sende-port m.m.): R3 R4 R5 R6 R7 R10 R11 R14 R15
Sep 30, 2026
3648aa0
runde 2-rettelser (laan + samtykke): Q1 Q5 Q6 + smaat
Sep 30, 2026
2485a66
runde 2-rettelser (sende-port, kodeord, omveje, instrumenter): Q2 Q3 …
Sep 30, 2026
9370f0d
runde 3-rettelser: kodeordsvagt i alle skriveveje, laan-binding, send…
Sep 30, 2026
b626996
CI 2485a66 roed: browserens «ulaeselig titel = chat» ramte klik-ejer;…
Sep 30, 2026
95470f2
runde 4-rettelser: laan fra kaldets start, Send-bindingens tre omveje…
Sep 30, 2026
f51a1af
runde 5-rettelser: laanets generation, ulaeseligt kontrolvindue, past…
Sep 30, 2026
199612d
paste-stop synkront: SIGUSR1 blokeres og laeses med sigpending() foer…
Sep 30, 2026
6475104
efterkontrol 2: Astra GODKENDT - traad-forudsaetningen for paste-stop…
Sep 30, 2026
37f2c15
udgivelse: npm-jobbet bundet til miljoeet «udgivelse» (Gustav eneste …
Sep 30, 2026
7138e4a
omveje: kun regler der tillader hvad som helst taeller (live-proeven …
Sep 30, 2026
4a7ee8d
proeverne rydder deres midlertidige mapper, naar de er bestaaet (3,4 …
Sep 30, 2026
2ed9b7c
ikonet: boksen siger at et spoergsmaal venter og flytter hen til menn…
Sep 30, 2026
2a14d1b
proeve: 5/10/15 agenter samtidig i baggrunden + film af hver use case…
Oct 1, 2026
b5eb755
parallel-proeven: TextEdit uden aabne-panel + tilstand til egen Mac m…
Oct 1, 2026
7dcc791
porten: et menupunkt der lukker spoerger paa alle sprog - genvejen af…
Oct 1, 2026
5089e22
giv-tilbage river ikke menneskets skift tilbage + maaleren laeser mac…
Oct 1, 2026
2b2682f
mutationsbevis for de 7 skrivende/beskyttende vaerktoejer der ikke ha…
Oct 1, 2026
92834ca
send-porten i rigtig WhatsApp: feltet og modtageren findes (W, 1/10)
Oct 1, 2026
6b44c96
rettelser efter GitHubs Mac (koersel 36859187191): forgrund via AX-fo…
Oct 1, 2026
69d67f5
README: Claude Codes auto-mode afviser skaerm-vaerktoejerne (maalt 1/…
Oct 1, 2026
bd277f0
revisionsloggen: launch uden background siger nu den rigtige grund (A…
Oct 1, 2026
5901f43
giv-tilbage: skrivning er ikke et programskift + proeven lukker sine …
Oct 1, 2026
9903395
knapper der sletter eller rydder spoerger - som README lover (1/10, s…
Oct 1, 2026
fae1055
parallel-prøven: ret falske fejl fra koersel 36869119105 - for streng…
Oct 1, 2026
84a4bed
parallel-prøven: ret tePid-gaetning der inverterede 5.1b-doemmelsen (…
Oct 1, 2026
8d46981
skaerm-koe trin 1+8: skaerm-anmodninger venter 5 min (loft 20), ikke …
Oct 1, 2026
9594feb
parallel-prøven: SIGKILL + bekraeft TextEdit vaek mellem runder (koer…
Oct 1, 2026
6953d8e
parallel-prøven: slaa TextEdits Resume fra - SIGKILL alene genskabte …
Oct 1, 2026
a132053
parallel-prøven: 5.2 bygger nu paa hjaelperens EGEN verified-bekraeft…
Oct 1, 2026
48b3227
giv-tilbage: ny sag 5 beviser at et RIGTIGT tastetryk ikke blokerer e…
Oct 1, 2026
258f7c0
giv-tilbage sag 5: maal den PRAECISE menneskeRoerteNetop-signatur, ik…
Oct 1, 2026
07a4a8f
skaerm-koe trin 2: gater Allow i stedet for at afvise med «optaget»
Oct 2, 2026
2d8ba00
A6: macOS-matrix til Fremmed Mac - Intel + Apple Silicon, begge GA-ve…
Oct 2, 2026
e4b92ef
B3: kontaktark - ét billede pr. use case (før/efter) i en HTML-rapport
Oct 2, 2026
f22496a
sikkerhed: et blindt koordinat-klik fejlede ÅBENT i stedet for lukket
Oct 2, 2026
a3483c5
D3: følg-panelets "Show me where" - peger på agentens mål uden selv a…
Oct 2, 2026
391d958
vejledning: canvas-blinde apps rapporterer tilbage, gætter ikke selv
Oct 2, 2026
6bc27b7
docs(forside): ny forside - scenen bag dit vindue, loglinjer som bevi…
Oct 1, 2026
6a20932
docs(forside): kort udgave + 24 sekunders film af vaerktoejerne + Git…
Oct 2, 2026
fda2434
side: filmen til højre for teksten, og en menneskelig arbejdsgang
Oct 2, 2026
f09d008
side: use cases hvor intet API når frem, og en film der kun viser mål…
Oct 2, 2026
1db17e5
logo: laptop med en blå knap der trykkes, din markør foran og urørt
Oct 2, 2026
8715618
side: filmen viser nu alle fire use cases (32 s)
Oct 2, 2026
73c08d5
side: filmen viser de 19 brugsscenarier vi tester, med ærlig stilling
Oct 2, 2026
0ca5231
side: hvert kort i filmen ligner det rigtige program
Oct 2, 2026
30c41e9
side: skakbrættet rettet, 11 kort på 3 s, værktøjslinjen i billedteksten
Oct 2, 2026
9a7ee0a
side: mange side om side + lever på din Mac, mere ægte programmer, en…
Oct 2, 2026
ede577d
side: tavlen stram: 10 bevist, 5 delvist, 4 ikke testet
Oct 2, 2026
874fcc8
side: ret efter to uafhængige gennemlæsninger (7 bevist, 9 delvist, 3…
Oct 2, 2026
282d9ff
security: søgemaskine-verifikation ligger på siden, ikke i DNS
Oct 2, 2026
b9ea59c
side: stjernetallet sættes ind når siden bygges (slået fra indtil vid…
Oct 2, 2026
440df62
side: hero-videoen med i repoet (den globale gitignore spærrede *.mp4)
Oct 2, 2026
f2fa9c1
kanaler: README på GitHub/npm vises rigtigt, llms.txt siger sandt, ko…
Oct 2, 2026
a46c6a3
sync-tal.py: FORBEHOLD-linjeskiftet forsvandt efter lukkemarkøren
Oct 2, 2026
8e54e4f
Merge release-grenen ind i forsiden (a46c6a3: sync-tal-rettelsen)
Oct 2, 2026
ac7da21
sikkerhed: knapErFarlig var for bred - almindelige klik begyndte at s…
Oct 2, 2026
0f01355
Merge release-grenen (ac7da21) ind i forsiden igen
Oct 2, 2026
0ff9db6
CMCP_FILM_PYNT: ren optagelse til forsiden, uden at røre et eneste tjek
Oct 2, 2026
8363376
side: den tegnede film tilbage øverst, optagelsen ned som bevis
Oct 2, 2026
2aece3d
bevis.sh: "ikke skubbet" målte mod origin/main, ikke husets egen PR-gren
Oct 2, 2026
46e3cdc
sikkerhed: fjern targetBundleId-undtagelsen - den genåbnede Opus' fund
Oct 2, 2026
2ba02e6
rettet mutationsbevis: navnSender's klik-gren var en kopi af kanVaere…
Oct 2, 2026
2fa43d5
side: stjernerne fra 1, ærlig optagelsestekst, lokal socket nævnt
Oct 2, 2026
420b998
udgivelse: ret to konkrete fejl fundet af Astra+Opus panelet 2/10
Oct 2, 2026
fd20db8
side: «Made by Gustav Louv» fra PR #5 med på den nye forside
Oct 2, 2026
b184854
mutant Q9-navnloes-gruppe-er-send: anker peger ikke paa levende kode …
Oct 2, 2026
0e62745
udgivelse: ret tre fejl i faerdiggoer-udgivelsen.sh (Astra+Opus 2/10)
Oct 2, 2026
f460c15
udgivelse: release.sh skubbede altid forgæves eller forkert til prote…
Oct 2, 2026
77ba8b6
sikkerhed F5: computer_press delte klikkets gamle fail-open-fejl
Oct 2, 2026
4441a36
side+README: ret de fund Opus-gennemgangen 3/10 fandt før live
Oct 3, 2026
6439c6d
claims 42b tæller programmer, ikke bundle-ID'er; npm-README afledt igen
Oct 3, 2026
0a9658a
test: skriv-ankommer 3c ventede på en gættet tid, ikke på bevis
Oct 5, 2026
bf9b73a
side: alle 22 undersider får forsidens design
Oct 6, 2026
a9de487
side: undersiderne får en visuel top som forsiden; kodeordspåstanden …
Oct 6, 2026
eba8bcd
side: forsiden linker til alle undersider («Go deeper») og bunden får…
Oct 6, 2026
0bac4b2
flader: Gemini-beskrivelsen og Windsurf rettet (e2e-gennemgang 6/10)
Oct 6, 2026
02b3d29
sikkerhed/tekst: README's "seven others ask every time" var forkert, …
Oct 6, 2026
cb8e118
tekst: serverens egen AI-instruks havde samme forkerte kodeordspåstand
Oct 6, 2026
3361325
Merge #6 (cb8e118: README-rettelserne nu også i 0.2.1) ind i siden; d…
Oct 6, 2026
52e55f5
tekst: Windsurf-kommentar og Gemini-beskrivelse havde samme to fejl
Oct 6, 2026
37922a8
WISHLIST: 0.2.2-ønske - menulinje-spørgsmål skal kunne opdages
Oct 6, 2026
c114153
grafik: de tre gamle mørke billeder udskiftet i det nye design og san…
Oct 6, 2026
2c9bcc2
README: plakatens billedtekst beskriver de tre porte, som den nye pla…
Oct 7, 2026
441e225
proever: 22c og sessions-porten maaler reglen, ikke menneskets skaerm
Oct 7, 2026
2f9bbff
proever: R6 - fast programliste, hele argv og readonly-klikket
Oct 7, 2026
e9531eb
sync-tal: forbeholdet naevner den udgivne versions eget tal (panel R8…
Oct 7, 2026
431c159
porten: spoerg ikke om det umulige; readonly foer sende-porten (panel…
Oct 7, 2026
bb3c5eb
maaling: hvert spoergsmaal i menulinjen faar sin maaling i loggen (pa…
Oct 7, 2026
4464676
MCPB i udgivelsen + pakken mangler aldrig et modul (panel R8-R9, M)
Oct 7, 2026
34c14ac
skaermlaan: skridtet venter paa pause i stedet for «kald igen» (panel…
Oct 7, 2026
e673add
release.sh: sandhed ved hvert eksternt trin (panel R2+R8, E del 1)
Oct 7, 2026
4903ef6
efter udgivelsen: én vej, sandt ved hver fejl (panel R2-R8, E del 2)
Oct 7, 2026
9b61e61
Claude Code-plugin: installation med én kommando (panel R8-R9, K)
Oct 7, 2026
f41cc77
proever: ingen proeve kan ramme menneskets tilstand eller ikon (panel…
Oct 7, 2026
4cbdadb
proever: de sidste skaermafhaengige domme faar faste svar (panel R6-R…
Oct 7, 2026
8555788
fix(proever): fem roede fra den fulde koersel efter I/P/M - proeverne…
Oct 7, 2026
d9c85c5
test(attrap): de fem opslag der afgoer en dom svarer fast som standar…
Oct 7, 2026
1504386
docs(readme): uddrag af revisionsloggen fra en isoleret koersel, bund…
Oct 7, 2026
fbf3d18
feat(ikon): én lyd pr. nyt spoergsmaal, kan slaas til i menuen (punkt S)
Oct 7, 2026
35041ee
fix: panelets R10-fund (Astra + Opus) rettet, hvert med proeve og mutant
Oct 7, 2026
6b1a125
fix(udgivelse): dok-commit tager kun vores egne filer; E7-ankeret ent…
Oct 7, 2026
25067d7
fix(plugin): pluginnet og markedet foelger PUBLICERET og loeftes i do…
Oct 7, 2026
d08d920
test(mutanter): E8's anker fulgte FILER-linjen (B5) - entydigt igen; …
Oct 7, 2026
b7caff8
release: forbered 0.2.2 - intet udgivet, intet skubbet
Oct 7, 2026
f41239a
docs(changelog): 0.2.2-afsnittet lover kun det koden og proeverne vis…
Oct 7, 2026
9b99acd
test(sende-port): r4e - Send-bindingen maales igen efter et fejlet op…
Oct 7, 2026
328c240
fix(0.2.2): to fejl i udgivelsesvejen + plugin-vejen paa fladerne (pa…
Oct 8, 2026
7cbc600
feat(ikon): lyd ved nye spoergsmaal er slaaet TIL som standard (Gusta…
Oct 8, 2026
f5066ef
fix(navne): app "WhatsApp" finder «‎WhatsApp» - i porten og i leveringen
Oct 9, 2026
c3bb330
fix(navne): hjaelperen oversaetter --app ét sted - find, vinduer og s…
Oct 9, 2026
269f9ca
fix(navne): R16 - porten og hjaelperen bruger tegn for tegn samme nav…
Oct 9, 2026
7bc3f41
feat(ikon): boksen i hjoernet - hvor du arbejder, hvad agenterne goer…
Oct 9, 2026
9c8753c
fix(boks): R17 (Astra) - knappen baerer sit spoergsmaal, og seks over…
Oct 9, 2026
9bd135f
fix(port): R17 (Astra + Opus enige) - leveringen faar portens maal, o…
Oct 9, 2026
a6673b4
fix(port): R18 (Astra + Opus) - bindingen holder hele vejen, visnings…
Oct 9, 2026
c563570
test(navne): sammenlign tegn-reglerne for de tegn BEGGE runtimes kender
Oct 9, 2026
e7d03c5
fix(open): R19 (Opus) - open_app kraever et PRAECIST id; visningstjen…
Oct 9, 2026
d40872c
fix(open): R20 (Opus) - formkrav foer opslaget, og noeglering/termina…
Oct 9, 2026
64c2905
ikon: skaermlaanet staar i boksen med «Take the screen back now» (R22)
Oct 9, 2026
10f991a
tekster peger paa boksen; to foraeldede claims-tjek rettet (R22)
Oct 9, 2026
0e96676
skrivevagt: macOS' adgangskodesignal som ekstra nej i type og paste (…
Oct 9, 2026
1166640
find: et tidsudloeb siges, og intet vaelges af sig selv bagefter (R23)
Oct 9, 2026
b527115
README: aerlig om Chrome-sider og sloering af kodeordsfelter i dem (R23)
Oct 9, 2026
8cc7c3b
boks: stopknap i egen raekke, Follow under laan, synlighed og lag pro…
Oct 9, 2026
87799a6
skrivevagt: key med tekst-taster, set_value paa fokus og valget efter…
Oct 9, 2026
22a0aab
tekster: hele laanespoergsmaalet i boksen, 0.2.1 med i noterne, Chrom…
Oct 9, 2026
62bd77d
README: Chrome-saetningen om samme Mac; 5u forbyder level= udefra (R25)
Oct 9, 2026
b888904
ikon: boksen kom aldrig frem - et skjult ikon (open -g -j) goeres syn…
Oct 9, 2026
adc1228
mutantport: R9 taget ud - laanevejens 4000-loft kan ikke laengere naa…
Oct 9, 2026
615c52b
ikon: ogsaa Follow-vinduet vises gennem visBoksen (R26)
Oct 9, 2026
ba7e864
proever: sikkerhedsnettet kender 0.2.2's bundne «=<id>» (brugsscenari…
Oct 10, 2026
11f06ed
0.3 S-B: klik bagved LANDER, og porten doemmer det element klikket ra…
Oct 10, 2026
07ea5c7
fix(helper): et billede af ét program viser vinduerne paa deres rigti…
Oct 10, 2026
3403619
fix: et klik bagved efterlader aldrig en menu over menneskets arbejde
Oct 10, 2026
df703ac
fix: et rul bagved lander paa et punkt i programmet (B4)
Oct 10, 2026
9ba029b
fix(helper): billedet foelger skaermens egen skala (R28 R1)
Oct 10, 2026
ed09c85
fix: rullets punkt er det doemte punkt (R28 R2)
Oct 10, 2026
6e8f31c
fix(helper): porten gaetter ikke, hvad der er under et punkt (R28 R3)
Oct 10, 2026
eca9dbf
fix: ingen menu over menneskets arbejde - ogsaa ved tryk, tast og tek…
Oct 10, 2026
3fc078f
fix(helper): et klik bagved der henter programmet frem, giver forgrun…
Oct 10, 2026
6efc912
fix(helper): et billede af ét program viser vinduerne paa deres rigti…
Oct 10, 2026
3a7cb1b
fix(helper): billedet foelger skaermens egen skala (R28 R1)
Oct 10, 2026
161e4a3
fix: en rullemenu bagved aabner ikke over menneskets arbejde (0.2.2, …
Oct 10, 2026
b0cc985
fix: R29-kravene - ukendt menustatus, kapløbs-prøver, tekstens net, b…
Oct 10, 2026
76ce40b
docs: README siger hvad menuvagten dækker - og hvad den ikke dækker (…
Oct 10, 2026
2e0088c
docs: README om menuvagten og nettet i 0.3 (R29 Opus)
Oct 10, 2026
63ff219
docs: npm-README udledt af README efter menuvagt-saetningen
Oct 10, 2026
1a5d242
fix: R30 - svaret lover ikke mere end koden ved (sidste panelrunde)
Oct 10, 2026
c9dd683
fix(proever): ingen proeve efterlader sine midlertidige mapper (diskc…
Oct 11, 2026
cd55389
fix(proever): ingen proeve efterlader sine midlertidige mapper (diskc…
Oct 11, 2026
df906cd
fix(ci): M9 peger paa boksens titel - ankeret forsvandt i 7bc3f41 (CI…
Oct 12, 2026
fdf95aa
fix(ci): M9 peger paa boksens titel - ankeret forsvandt i 7bc3f41 (CI…
Oct 12, 2026
27b33a7
feat(helper): en webside bagved kan udfyldes - fokus foerst, saa vaer…
Oct 14, 2026
b6d6ff0
feat(helper): en rullemenu bagved kan vaelges - aabnes et oejeblik, p…
Oct 14, 2026
44a1c03
fix(helper): et graat element trykkes ikke - press svarer disabled (m…
Oct 14, 2026
bf84641
fix(helper): rullemenuen bagved efter R31 - aerlig lukning, dubletter…
Oct 14, 2026
d5cbc87
fix: rullemenuen bagved efter R32 - aldrig «lukket» uden at have set …
Oct 14, 2026
874f2c3
fix(helper): rullemenuen efter R33 - vidnerne taeller kun naar de kan…
Oct 14, 2026
cbb4ccc
fix: rullemenuen efter R34 - fejlbevidste opslag, AX lukker kun det A…
Oct 14, 2026
a7c2899
fix(server): fejlsvar afkortes uden at skaere JSON - lange strenge fo…
Oct 15, 2026
ed6e484
feat: S3 - spoergsmaal man ser (banner som standard, intet kald haeng…
Oct 15, 2026
37db21d
fix: S3 efter R39 - et ja bruges atomisk én gang og er bundet til han…
Oct 15, 2026
a25aa6b
fix: S3 efter R40 - senere svar gemmes pr. handling og kun kort; bann…
Oct 15, 2026
e1ba689
feat: S1a - et afbrudt kald udfoeres aldrig senere (R38, Astra MAALT)
Oct 15, 2026
7791521
feat: S1b + S1-v2 - agenten venter selv paa mennesket, ét budget pr. …
Oct 16, 2026
af1f33f
feat: S2a - «Stop all agents now» i ikonet og boksen stopper alle age…
Oct 16, 2026
bf757d1
fix: S2a efter R45 (Astra AFVIST, Opus GODKENDT MED RETTELSER) - stop…
Oct 17, 2026
dce99fe
fix: S2a efter R46 (Astra AFVIST, Opus GODKENDT MED RETTELSER) - de s…
Oct 17, 2026
d50d291
fix: S2a efter R47/R48 - stoppede kalds sene svar, mtime kun ved star…
Oct 18, 2026
87b62de
feat: S2b-1 - sikker frigivelse: et stoppet traek/klik/tast efterlade…
Oct 18, 2026
0d93b97
fix: S2b-1 efter R49 (Astra AFVIST, Opus GODKENDT MED RETTELSER) - et…
Oct 18, 2026
e9f8e74
fix: S2b-1 efter R50 (Astra + Opus GODKENDT MED RETTELSER) - de sidst…
Oct 18, 2026
64c21fc
fix: S2b-1 efter R51 (Astra + Opus GODKENDT MED RETTELSER) - sikkerhe…
Oct 18, 2026
fef883e
fix: S2b-1 efter R52 (Astra GODKENDT, Opus GODKENDT MED RETTELSER) - …
Oct 18, 2026
688e3a8
feat: S2b-2 - tastaturstop: ⌃⌥⌘. stopper alle agenter; Esc under et s…
Oct 19, 2026
9d8e854
fix: S2b-2 efter R53 (Astra AFVIST, Opus GODKENDT MED RETTELSER) - Es…
Oct 19, 2026
921ec58
fix: S2b-2 efter R54 (Astra AFVIST, Opus GODKENDT MED RETTELSER) + mu…
Oct 19, 2026
33801fc
merge: 0.2.2 (df906cd) ind i 0.4-linjen - semantisk fletning (B10)
Oct 20, 2026
3c60db0
docs: 0.4-fladerne siger kun det koden goer + version 0.4.0 (B13)
Oct 20, 2026
64b8dd9
fix(release): byg praecis maerket, og MCPB laast til lockfilen (B18)
Oct 20, 2026
b2e1808
fix(helper): hver haendelse gaar gennem Input.post - proevekrogen ser…
Oct 20, 2026
4b7d606
chore: node_modules uden skraastreg i .gitignore - ogsaa symlinket ig…
Oct 20, 2026
d685290
fix: R59-rettelserne - fladerne og produktets tekster siger kun det k…
Oct 20, 2026
65816f3
fix: R60-rettelser (Astra + Opus, begge GODKENDT MED RETTELSER) - tek…
Oct 20, 2026
2526fdb
fix: R61-rettelser (Astra GODKENDT + lav rest, Opus GODKENDT MED RETT…
Oct 20, 2026
1cff0b5
fix: R62 (Astra GODKENDT MED RETTELSER) - dialog-reserven gaelder kun…
Oct 20, 2026
83ac662
fix: R62 Opus (valgfrit) - llms.txt som FAQ'en + vagt for de haandret…
Oct 20, 2026
9911d2f
test: baggrund-mus 5d/7c ankret til Input.post (B19 flyttede menunett…
Oct 20, 2026
c4a462c
merge: den nye side (#7, side/forside-ny 2c9bcc2) ind i 0.4 - designe…
Oct 21, 2026
e872789
side: forsiden viser 0.4 - «Stop every agent at once» og «Lend it the…
Oct 21, 2026
d040f79
ci: fremmed-mac 90 -> 180 min - 0.4's suite + 401 mutanter + scenarie…
Oct 22, 2026
34b86c3
ci: fremmed-mac - beviser og film foer mutantporten; graensen 360 min
Oct 23, 2026
297d4c0
ci: fremmed-mac - film og beviser uploades foer mutantporten
Oct 23, 2026
bfaa78f
side: forsidens tal fra 0.4-koerslen - 15 agenter, 184 af 184 ord
Oct 23, 2026
f808150
deps: MCP SDK 1.30.0 -> 1.32.1 i laasefilen - proeverne maaler det np…
Oct 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"name": "agent360",
"owner": { "name": "Agent360", "url": "https://computermcp.dev" },
"description": "Computer MCP: macOS computer use you can leave running.",
"plugins": [
{
"name": "computer-mcp",
"source": "./plugin",
"description": "macOS computer use that stays behind your window, asks before it deletes or sends, refuses password managers, and logs every action.",
"version": "0.1.0",
"homepage": "https://computermcp.dev",
"repository": "https://github.com/Agent360dk/computerMCP",
"license": "MIT"
}
]
}
35 changes: 35 additions & 0 deletions .github/ISSUE_TEMPLATE/bug.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
name: "Something did not work"
description: "An agent tried something on your Mac and it failed, or it took your screen when it should not have."
title: "Bug: <what happened in one line>"
labels: ["bug"]
body:
- type: markdown
attributes:
value: |
Nothing is sent from your Mac on its own. Paste only what you are happy to share:
the audit log hashes typed text and never stores what was on screen, but app names
and window titles are in it.
- type: textarea
id: what
attributes:
label: What the agent tried, and what actually happened
validations:
required: true
- type: textarea
id: audit
attributes:
label: The last few lines of the audit log
description: "Ask the agent for `computer_audit` with limit 10, or copy from ~/.local/state/computer-mcp/audit.jsonl."
render: json
- type: textarea
id: learning
attributes:
label: Anything it wrote with computer_learning
description: "~/.local/state/computer-mcp/learnings.jsonl - numbers and email addresses are already masked."
- type: input
id: versions
attributes:
label: macOS version and computer-mcp version
placeholder: "macOS 26.4.1 · computer-mcp 0.2.2"
validations:
required: true
71 changes: 57 additions & 14 deletions .github/mutant-giv-tilbage.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,28 +5,71 @@
set -u
fejl=0
mut() {
local navn="$1" fra="$2" til="$3" d="$RUNNER_TEMP/mut-$1"
local navn="$1" fra="$2" til="$3" d="$RUNNER_TEMP/mut-$1" maal="${MUT_MAAL:-cmcp-helper}"
# Uden byggemappen: den baerer faste stier til originalen (koersel 3 kunne ikke bygge).
mkdir -p "$d" && cp -R helper/Package.swift helper/Sources "$d"/
[ -f helper/Package.resolved ] && cp helper/Package.resolved "$d"/
python3 - "$d/Sources/cmcp-helper/${MUT_FIL:-Skaerm.swift}" "$fra" "$til" <<'PY'
# ⛔ 30/9 (Astra R2 7): et anker der ikke fandtes, stoppede ikke noget - scriptet
# byggede den UMUTEREDE kode og kaldte resultatet et bevis. Nu er det en fejl.
if ! python3 - "$d/Sources/$maal/${MUT_FIL:-Skaerm.swift}" "$fra" "$til" <<'PY2'
import sys
p, a, b = sys.argv[1:4]
s = open(p).read()
assert s.count(a) == 1, a
open(p, 'w').write(s.replace(a, b))
PY
(cd "$d" && swift build -c release 2>&1 | tail -5) ; [ -x "$d/.build/release/cmcp-helper" ] || { echo "::error::$navn kunne ikke bygges"; fejl=1; return; }
if CMCP_HELPER="$d/.build/release/cmcp-helper" node test/giv-tilbage.mjs; then
echo "::error::mutanten $navn overlevede - proeven maaler ikke"; fejl=1
else
echo "mutanten $navn er roed"
fi
PY2
then echo "::error::$navn: ankeret findes ikke praecis én gang"; fejl=1; return; fi
(cd "$d" && swift build -c release 2>&1 | tail -5) ; [ -x "$d/.build/release/$maal" ] || { echo "::error::$navn kunne ikke bygges"; fejl=1; return; }
local ud rc
ud=$(CMCP_HELPER="$d/.build/release/cmcp-helper" CMCP_STATUS_BIN="$d/.build/release/cmcp-status" node "${PROEVE:-test/giv-tilbage.mjs}" 2>&1); rc=$?
# Roed = exit 1 OG en DUMP-linje. Exit 0 = overlevede. Alt andet = instrumentet svarede ikke.
if [ $rc -eq 0 ]; then echo "::error::mutanten $navn overlevede - proeven maaler ikke"; fejl=1
# Runde 3 (Astra 6): KUN den prove mutanten er skrevet til taeller (FORVENTET), ikke en vilkaarlig anden.
# Runde 5 (Astra): hele det forventede praefiks skal staa FORREST paa en DUMP-linje.
elif [ $rc -eq 1 ] && printf '%s\n' "$ud" | awk -v p="DUMP ${FORVENTET:-}" 'index($0, p) == 1 { f = 1 } END { exit !f }'; then echo "mutanten $navn er roed ($(printf '%s\n' "$ud" | awk -v p="DUMP ${FORVENTET:-}" 'index($0, p) == 1 { print; exit }' | cut -c1-90))"
else echo "::error::$navn: instrumentet svarede ikke (rc=$rc) - det er ikke et bevis"; fejl=1; fi
}
mut M1-giver-ikke-tilbage 'NSRunningApplication(processIdentifier: foer.forrestPid)?.activate(options: [])' ''
mut M2-maaler-ikke 'guard foer.forrestPid > 0, efter.forrestPid != foer.forrestPid else { return ["took_screen": false] }' 'return ["took_screen": false]'
FORVENTET=2b mut M1-giver-ikke-tilbage 'NSRunningApplication(processIdentifier: foer.forrestPid)?.activate(options: [])' ''
FORVENTET='2 et tryk' mut M2-maaler-ikke 'guard foer.forrestPid > 0, efter.forrestPid != foer.forrestPid else { return ["took_screen": false] }' 'return ["took_screen": false]'
# M3: launch giver ikke forgrunden tilbage (main.swift)
MUT_FIL=main.swift mut M3-launch-giver-ikke-tilbage 'if (g["took_screen"] as? Bool) == true { for (k, v) in g { ls[k] = v } }' 'if false { for (k, v) in g { ls[k] = v } }'
# M4: kun et skift til maalprogrammet gives tilbage (reglen foer koersel 10)
mut M4-kun-maalprogrammet 'efter.forrestPid == maal || !menneskeRoerteNetop()' 'efter.forrestPid == maal'
FORVENTET='3 et program' MUT_FIL=main.swift mut M3-launch-giver-ikke-tilbage 'if (g["took_screen"] as? Bool) == true || g["observed"] != nil { for (k, v) in g { ls[k] = v } }' 'if false { for (k, v) in g { ls[k] = v } }'
# M4 (28/9): menneske-tjekket maa ikke spurioest blokere give-tilbage. Paa en
# maskine UDEN menneske skal forgrunden stadig gives tilbage - saa hvis nogen
# faar menneske-grenen til altid at fyre (og dermed altid lade forgrunden staa),
# SKAL proeven blive roed.
FORVENTET=2b mut M4-menneske-tjek-blokerer 'if menneskeRoerteNetop() {' 'if true {'
# M5-M6 (29/9, panelet): kodeordsfelter faar heller ikke tastetryk fra `type`.
# M5: fokus-opslaget siger altid «ikke sikkert» -> proeve 3/3k/3b skal blive roed.
# M6: tjekket kun foer foerste tegn -> fokus der flytter undervejs (3c) skal blive roed.
FORVENTET='3 et kodeordsfelt' PROEVE=test/skriv-ankommer.mjs MUT_FIL=Accessibility.swift mut M5-type-i-kodeordsfelt \
'static func sikkerStatus(_ el: AXUIElement, kendtRolle: String? = nil) -> Bool? {' \
'static func sikkerStatus(_ el: AXUIElement, kendtRolle: String? = nil) -> Bool? {
if true { return false }'
FORVENTET=3c PROEVE=test/skriv-ankommer.mjs MUT_FIL=Input.swift mut M6-kun-tjek-ved-start \
'if let stop, stop() { return sendt }' 'if let stop, sendt == 0, stop() { return sendt }'
# M7-M8 (30/9, runde 5): paste stopper foer Cmd+V naar laanet slutter.
# M7: det foerste stop (foer udklipsholderen roeres) er vaek -> «before anything changed» maa ikke kunne naas.
FORVENTET='1 SIGUSR1' PROEVE=test/paste-stop.mjs MUT_FIL=Accessibility.swift mut M7-paste-roerer-udklip-foer-stop \
' if pasteStop { return (false, "stopped before anything changed: the screen loan ended", false) }' ''
# M8: stoppet laeses aldrig -> paste fortsaetter til Cmd+V (kun paa en fremmed maskine).
FORVENTET='1 SIGUSR1' PROEVE=test/paste-stop.mjs MUT_FIL=Accessibility.swift mut M8-paste-hoerer-ikke-stop \
' return sigismember(&s, SIGUSR1) == 1' ' return false'
# M9 (30/9, live-proeven): boksen naevner ikke det ventende spoergsmaal -> 3c skal blive roed.
# 12/10: ankeret flyttet til boksens titel (Tekst.swift) - det gamle forsvandt i 7bc3f41, og ingen saa det,
# fordi «Fremmed Mac» var annulleret paa hver kandidat siden 9/10 (CI 38230972853 fandt det).
FORVENTET=3c PROEVE=test/ikon-menu.mjs MUT_MAAL=cmcp-status MUT_FIL=Tekst.swift mut M9-boksen-tier-om-spoergsmaalet \
'titel: "\(renTekst(v.klient ?? "An agent")) needs you"' 'titel: "Computer MCP"'
# M10 (1/10, konsulent-panelet): giv-tilbage river igen ethvert program tilbage -
# ogsaa et der koerte i forvejen (= mennesket der skiftede skrivebord) -> 4 skal blive roed.
FORVENTET='4 et program der koerte' mut M10-river-menneskets-skift-tilbage \
'if !egen {' 'if false {'
# M11 (1/10, GitHubs Mac 36863990504 - retarget 36901238860): almindelig skrivning
# taeller igen som et menneskeligt skift -> et rigtigt tastetryk ville fejlagtigt
# blokere en legitim tilbagegivelse. Oprindeligt bevist via parallel.mjs's
# menneske-simulation, som siden skriver via tilgaengeligheds-laget (ingen rigtig
# keyDown postes der laengere - den mutant blev umaalelig af parallel.mjs selv).
# giv-tilbage.mjs's sag 5 sender et AEGTE globalt tastetryk med vilje og maaler
# praecis dette.
FORVENTET='5 et rigtigt tastetryk' mut M11-skrivning-er-et-skift \
'[.flagsChanged, .leftMouseDown' '[.keyDown, .flagsChanged, .leftMouseDown'
exit $fejl
67 changes: 67 additions & 0 deletions .github/mutant-porte.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
#!/usr/bin/env python3
# Mutationsbevis for portene (29/9, B7 - MANDAT: «hver vagt skal kunne blive roed»).
# Hver mutant i mutanter-porte.json bygger én fejl ind i en vagt; dens proeve SKAL
# blive roed. Filen gendannes ALTID fra en kopi taget lige foer - aldrig fra git,
# for filen kan baere ucommittet arbejde (30/9: `git checkout` tog en hel funktion).
import hashlib, json, os, shutil, subprocess, sys, tempfile
ROD = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
os.chdir(ROD)
overlevede, fejl = [], []
MUTANTER = json.load(open('.github/mutanter-porte.json', encoding='utf-8'))
# ⛔ 19/10 (S2b-2, MAALT): en proeve der allerede er ROED uden mutation, faar alle sine mutanter til at se
# «fanget» ud - S19 var roed, og 8 mutanter blev meldt roede uden at vaere proevet. Hver proeve koeres derfor
# foerst UMUTERET; er den ikke groen, er dens mutanter ikke bevist.
groen = {}
for proeve in sorted({m['proeve'] for m in MUTANTER}):
tmp = tempfile.mkdtemp(prefix='cmcp-m-', dir='/tmp')
try:
k = subprocess.run(['node', proeve], capture_output=True, text=True, timeout=600, env={**os.environ, 'TMPDIR': tmp + '/'})
groen[proeve] = k.returncode == 0
except subprocess.TimeoutExpired:
groen[proeve] = False
finally:
shutil.rmtree(tmp, ignore_errors=True)
if not groen[proeve]: print(f"::error::proeven {proeve} er ROED uden mutation - dens mutanter er ikke bevist")
for m in MUTANTER:
if not groen.get(m['proeve']):
fejl.append(f"{m['navn']}: proeven {m['proeve']} er roed uden mutation"); continue
orig = open(m['fil'], encoding='utf-8').read()
h = hashlib.sha256(orig.encode()).hexdigest()
par = m.get('par') or [[m['fra'], m['til']]]
tael = [orig.count(a) for a, _ in par]
if any(t != 1 for t in tael):
fejl.append(f"{m['navn']}: ankrene findes {tael} gange"); continue
muteret = orig
for a, b in par: muteret = muteret.replace(a, b)
try:
open(m['fil'], 'w', encoding='utf-8').write(muteret)
# 11/10 (diskchatten): hver mutant koerer i sin EGEN midlertidige mappe, som fjernes bagefter.
# Mutanten faar proeven til at dumpe med vilje - og en dumpet proeve efterlod sine mapper:
# tusindvis pr. port, og disken loeb fuld (Mac'en gik ned 11/10 11.03).
tmp = tempfile.mkdtemp(prefix='cmcp-m-', dir='/tmp')
try:
k = subprocess.run(['node', m['proeve']], capture_output=True, text=True, timeout=600,
env={**os.environ, 'TMPDIR': tmp + '/'})
rc, ud = k.returncode, k.stdout
except subprocess.TimeoutExpired:
rc, ud = 'timeout', ''
finally:
shutil.rmtree(tmp, ignore_errors=True)
finally:
open(m['fil'], 'w', encoding='utf-8').write(orig)
if hashlib.sha256(open(m['fil'], encoding='utf-8').read().encode()).hexdigest() != h:
fejl.append(f"{m['navn']}: {m['fil']} blev IKKE gendannet"); break
# ⛔ Runde 1 30/9 (Astra 9): enhver ikke-nul exit talte som «roed» - ogsaa en
# prove der crashede for foerste assertion. Roed = rc 1 OG en DUMP-linje.
# ⛔ Runde 2 (Astra 7): en tilfaeldig ANDEN DUMP-linje var ogsaa «bevis». Nu skal
# den prove mutanten er skrevet til (`forventet`), vaere en af de roede.
doemt = [l for l in ud.splitlines() if l.startswith('DUMP ' + m.get('forventet', ''))]
if rc == 0:
overlevede.append(m['navn']); print(f"::error::mutanten {m['navn']} overlevede - {m['proeve']} maaler ikke")
elif rc == 1 and doemt:
print(f"mutanten {m['navn']} er roed ({m['proeve']}: {doemt[0][:90]})")
else:
fejl.append(f"{m['navn']}: instrumentet svarede ikke (rc={rc}, {len(doemt)} DUMP-linjer) - det er ikke et bevis")
for f in fejl: print(f"::error::{f}")
print(f"{len(overlevede)} overlevede, {len(fejl)} fejl")
sys.exit(1 if overlevede or fejl else 0)
Loading
Loading