# Format, distribution og indlæsning

## Fælles formatpolitik

skillMOS' egen kandidat bruger `.codex-plugin/plugin.json` og `skills/`.
Det er et bevidst compatibility-valg; OpenAI beskriver denne creator-vej [S2].
Eksisterende målplugins bevarer som udgangspunkt deres understøttede format.
Portable root-`plugin.json` vælges bevidst, når distributionsmålet kræver det.
Dokumentationens portable anbefaling gør ikke compatibility ugyldig.

For portable pakker med den genkendte Agent Plugins-schema er rodidentiteten
og `skills/` kanoniske. Når `extensions.com.openai` er et objekt, erstatter det
hele `.codex-plugin/plugin.json` som OpenAI-indstillinger; der foretages ingen
merge. Uden inline-objekt kan overlayet levere disse indstillinger. Legacy
`skills`/`mcpServers` kan ikke ændre portable komponentdiscovery [S1].

Lokal byggepolitik: vores releases versionsmærkes, og konverteringen skal
indeholde alle aftalte Skills. Det er ikke en universel regel om, at alle
plugins har Skills, obligatorisk version eller præcis ét manifest.
Bevar apps, hooks og dependencies i en eksisterende pakke; kontrollér deres
konkrete kontrakter. Ukendte felter kræver gennemgang frem for blind sletning.

## Veje ind i værten

Dokumentationssnapshot, læst 24.09.2026: Learn beskriver standalone Skills til
desktop/Codex og pluginbundne Skills til Chat/Work på web, desktop og mobil [S3].
Help beskriver workspace-managed Skills på berettigede konti under lokale
adgangsregler [S6]. Brug den importvej, som faktisk findes på modtagerens konto.
Disse kilder er ikke en installationskvittering for denne kandidat.

Ved aktivering: navn/description bruges før fuld metodetekst. Skriv derfor
kerneopgaven tidligt i description. Eksplicit valg og implicit opgavematch er
begge dokumenteret [S3]. En tilladelse til implicit invocation er ikke et
løfte om aktivering i enhver chat. Test målfladen i nye samtaler.

Ved en konkret fejl undersøges i rækkefølge: distribution/adgang → discovery
→ faktisk læsning → værktøjer → metodens resultat. En adgangsafvisning siger
kun noget om den forsøgte vej. En manglende UI-chip afgør ikke installation.
Brug faktisk eksponerede ressourcer; ingen gættede URI'er eller prioritetsfelter.
Regler i en aldrig læst Skill kan ikke styre den første besked.

## Metadata og grafik

I det læste submission-snapshot må `policy` indeholde `products` og
`allow_implicit_invocation`. Hvis products er med, er værdierne CHAT/CODEX;
implicit-feltet er boolean. Products er ikke obligatorisk [S5].
`agents/openai.yaml` er valgfri i den generelle Skill-struktur [S3].
Bevar relevante metadata og efterprøv konkrete ændringer mod aktuel kilde.

SVG er et dokumenteret ikonformat; et PNG-eksempel er ikke et generelt krav.
S5's afsnit "Image errors" beskriver **Directory-branding**: kvadratiske ikoner,
minimum 48 × 48 og numeriske SVG-dimensioner uden enheder/procenter. Det er
ikke en generel tilladelse til at ændre en mål-Skills ikon eller et blanketkrav
om 512 × 512. Helperen rapporterer sin deklarerede ikonprofil separat fra den
sikre, komplette og kildebevarende pakning. En profil med FAIL gør samlet status
REVIEW, men blokerer ikke alene en byte-bevarende lokal kandidat [S5].

Bevar ikonbytes ved ren konvertering. Forklar et kendt målkrav og den nødvendige
beslutning før eventuel autoriseret ændring. Privat import og fuld Directory-
accept er ikke testet af helperen. PASS i ikonprofilen er kun PASS for dens
kontroller, ikke for en komplet tilmelding.

Parseren klassificerer numeriske værdier, px og relative enheder uden rå
konverteringsfejl. Procenter giver ingen kendt absolut størrelse. viewBox bruges
kun som dimensionsgrundlag, når width og height faktisk mangler; det skjuler
ikke eksplicitte enheder eller procenter. Negativ/ikke-finit geometri, ugyldigt
XML og entities afvises. Uafklaret aktivt SVG-indhold eller eksterne referencer
blokerer build til særskilt gennemgang; kontrollen er ikke fuld SVG-sanitization.

## Privat oprettelse og opdatering

Discover creator/management-funktionen og læs dens aktuelle schema, når den
konkrete brugeropgave omfatter en kontoændring. Vælg personligt eller workspace
scope efter faktisk kontekst. En pakket fil giver ingen yderligere rettigheder.
Ved uklart write-svar: læs status før retry. Ved succes: genlæs filliste, SKILL.md
og nødvendige referencer, og sammenlign bytes, når kilden kan hentes.
Backend-normalisering skal fremgå. Brug returnerede identiteter/links.

Bevar eksisterende post/identitet. Udeladte filer ved en update er ikke
nødvendigvis slettet; læs den aktuelle værktøjskontrakt. Undgå konkurrerende
standalone- og pluginkopier. Oprettelse, installation og ny-chat-test er separate
handlinger [S4]. Et script eller en projektinstruktion er ikke en scheduler.

## Primærkilder

- [S1] Package your plugin: https://developers.openai.com/plugins/build/plugins
- [S2] Build plugins: https://learn.chatgpt.com/docs/build-plugins
- [S3] Build skills: https://learn.chatgpt.com/docs/build-skills
- [S4] Plugins: https://learn.chatgpt.com/docs/plugins
- [S5] Submission errors: https://developers.openai.com/plugins/deploy/submission-errors
- [S6] Skills in ChatGPT: https://help.openai.com/en/articles/20001066-skills-in-chatgpt
- [S7] Build skills: https://developers.openai.com/plugins/build/skills

Ved senere formatændringer genlæses relevante primærkilder. Ovenstående er
daterede parafraser; kontrolproceduren og defaults er skillMOS' egen standard.
