Apple Container
sickn33/agentic-awesome-skills
Build, run, and manage OCI/Linux containers as lightweight per-container VMs on Apple-silicon macOS using Apple's open-source container CLI, no Docker daemon required.
A skill your agent uses when using Groups or Containers in Phaser 4.
$ npx skills add autonomous-ai/openharness --skill groups-and-containers -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install autonomous-ai/openharness groups-and-containers --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/autonomous-ai/openharness.git skills-src && mkdir -p .claude/skills && cp -r skills-src/store/agents/phaser/skills/groups-and-containers .claude/skills/groups-and-containers && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "groups-and-containers" agent skill from https://github.com/autonomous-ai/openharness/tree/main/store/agents/phaser/skills/groups-and-containers into .claude/skills/groups-and-containers/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "groups-and-containers", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/autonomous-ai/openharness/tree/main/store/agents/phaser/skills/groups-and-containersType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add autonomous-ai/openharness --skill groups-and-containers -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install autonomous-ai/openharness groups-and-containers --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/autonomous-ai/openharness.git skills-src && mkdir -p .agents/skills && cp -r skills-src/store/agents/phaser/skills/groups-and-containers .agents/skills/groups-and-containers && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "groups-and-containers" agent skill from https://github.com/autonomous-ai/openharness/tree/main/store/agents/phaser/skills/groups-and-containers into .agents/skills/groups-and-containers/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "groups-and-containers", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add autonomous-ai/openharness --skill groups-and-containers -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install autonomous-ai/openharness groups-and-containers --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/autonomous-ai/openharness.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/store/agents/phaser/skills/groups-and-containers .cursor/skills/groups-and-containers && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "groups-and-containers" agent skill from https://github.com/autonomous-ai/openharness/tree/main/store/agents/phaser/skills/groups-and-containers into .cursor/skills/groups-and-containers/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "groups-and-containers", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/autonomous-ai/openharness.git --path store/agents/phaser/skills/groups-and-containers--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add autonomous-ai/openharness --skill groups-and-containers -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install autonomous-ai/openharness groups-and-containers --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/autonomous-ai/openharness.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/store/agents/phaser/skills/groups-and-containers .gemini/skills/groups-and-containers && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "groups-and-containers" agent skill from https://github.com/autonomous-ai/openharness/tree/main/store/agents/phaser/skills/groups-and-containers into .gemini/skills/groups-and-containers/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "groups-and-containers", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install autonomous-ai/openharness groups-and-containersInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add autonomous-ai/openharness --skill groups-and-containers -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/autonomous-ai/openharness.git skills-src && mkdir -p .github/skills && cp -r skills-src/store/agents/phaser/skills/groups-and-containers .github/skills/groups-and-containers && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "groups-and-containers" agent skill from https://github.com/autonomous-ai/openharness/tree/main/store/agents/phaser/skills/groups-and-containers into .github/skills/groups-and-containers/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "groups-and-containers", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add autonomous-ai/openharness --skill groups-and-containers -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install autonomous-ai/openharness groups-and-containers --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/autonomous-ai/openharness.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/store/agents/phaser/skills/groups-and-containers .opencode/skills/groups-and-containers && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "groups-and-containers" agent skill from https://github.com/autonomous-ai/openharness/tree/main/store/agents/phaser/skills/groups-and-containers into .opencode/skills/groups-and-containers/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "groups-and-containers", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
groups-and-containersA skill your agent uses when using Groups or Containers in Phaser 4.
Groups And Containers is an agent skill from autonomous-ai/openharness. Use this skill when using Groups or Containers in Phaser 4. Covers organizing game objects, object pooling, batch operations, and nested transforms with Containers. Triggers on: Group, Container, object pool, getFirstDead, children.
Its SKILL.md is about 4.4k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
The repository describes itself as: The ultimate harness for coding agents and beyond. All your agents. All your machines. One command center. Start with code, then follow your curiosity and build across… The licence is MIT.
12 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 50da5db. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are javascript).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Groups And Containers loads about 4.4k tokens when it runs. Until then it costs about 64 tokens; SKILL.md has 962 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from autonomous-ai/openharness at commit 50da5db, republished under its MIT licence (© autonomous-ai). 962 words, ~4,364 tokens.
.claude/skills/groups-and-containers/SKILL.md (or your agent's skills folder).Logical grouping (Group), visual grouping with transform inheritance (Container), render-layer grouping (Layer), object pooling, and when to use each in Phaser 4.
Key source paths: src/gameobjects/group/, src/gameobjects/container/, src/gameobjects/layer/
Related skills: ../sprites-and-images/SKILL.md, ../physics-arcade/SKILL.md
// In a Scene's create() method:
// --- Group: logical collection, no transform, great for pooling ---
const enemies = this.add.group();
enemies.create(100, 200, 'enemy'); // creates Sprite at (100,200)
enemies.create(300, 200, 'enemy');
// --- Container: visual parent with inherited transform ---
const hud = this.add.container(10, 10);
const icon = this.add.image(0, 0, 'heart');
const label = this.add.text(20, 0, 'x3');
hud.add([icon, label]); // children move/scale/rotate with hud
// --- Layer: render-ordering bucket, no position/scale ---
const bgLayer = this.add.layer();
const fgLayer = this.add.layer();
bgLayer.add(this.add.image(400, 300, 'sky'));
fgLayer.add(this.add.sprite(400, 300, 'player'));| Feature | Group | Container | Layer |
|---|---|---|---|
| Purpose | Logical collection / pool | Visual parent with transform | Render-order bucket |
| On display list | No (children are) | Yes (renders children) | Yes (renders children) |
| Position/rotation/scale | No | Yes (children inherit) | No |
| Children storage | children (Set) | list (Array) | List (Structs.List) |
| Physics | Via physics.add.group() | Limited (offsets if not at 0,0) | No |
| Input | No (children can) | Yes (needs hit area shape) | No |
| Object pooling | Yes (getFirstDead, kill) | No | No |
| Masks | No | Yes (not per-child in Canvas) | Yes |
| Alpha/blend/visible | No (batch via setVisible) | Yes | Yes |
| Nesting | N/A | Container in Container | Cannot go in Container |
| Extends | EventEmitter | GameObject | List |
| Factory | this.add.group() | this.add.container(x, y) | this.add.layer() |
Group: Managing collections of similar objects (enemies, bullets, coins), object pooling with active/inactive lifecycle, physics group collisions. No shared visual transform. Members can belong to multiple Groups simultaneously.
Container: Children inherit position, rotation, scale, alpha. Composite UI elements (health bars, inventory slots), moving/rotating clusters as one unit, nested transforms. By default exclusive -- a child can only belong to one Container (use setExclusive(false) to override).
Layer: Controlling render order of object batches, applying shared alpha/blend/mask. No position/scale/rotation. Lightweight render bucketing.
// Empty group, add existing objects
const gems = this.add.group();
gems.add(existingSprite);
gems.addMultiple([sprite1, sprite2, sprite3]);
// Group with config -- creates children automatically
const coins = this.add.group({
classType: Phaser.GameObjects.Sprite,
key: 'coin',
quantity: 10, // overrides frameQuantity
setXY: { x: 50, y: 300, stepX: 60 },
setScale: { x: 0.5, y: 0.5 }
});
// Custom class type with pool limit
const bullets = this.add.group({
classType: Bullet, // must accept (scene, x, y, key, frame)
maxSize: 30,
defaultKey: 'bullet',
runChildUpdate: true // calls child.update() each frame
});The core pooling pattern: deactivate objects instead of destroying them, then reuse inactive ones.
// Setup pool
const bullets = this.add.group({
classType: Phaser.GameObjects.Sprite,
defaultKey: 'bullet',
maxSize: 30
});
// Fire a bullet -- get() finds first inactive member or creates one
function fireBullet(x, y) {
const bullet = bullets.get(x, y);
if (bullet) {
bullet.setActive(true);
bullet.setVisible(true);
bullet.body.velocity.y = -300; // if physics enabled
}
}
// Deactivate when off-screen or on hit
function killBullet(bullet) {
bullets.killAndHide(bullet); // sets active=false, visible=false
// If using physics, also reset the body:
// bullet.body.stop();
}
// Alternative: manual getFirst
const inactive = bullets.getFirst(false); // first where active===false
const active = bullets.getFirstAlive(); // first where active===true
const dead = bullets.getFirstDead(true, x, y); // first inactive, create if nullPool helper methods on Group:
| Method | Description |
|---|---|
get(x, y, key, frame) | Shortcut: getFirst(false, true, ...) -- finds inactive or creates |
getFirst(state, createIfNull, x, y, key, frame) | First member matching active state |
getFirstAlive(createIfNull, x, y, key, frame) | First member where active===true |
getFirstDead(createIfNull, x, y, key, frame) | First member where active===false |
getLast(state, createIfNull, x, y, key, frame) | Like getFirst but searches back-to-front |
kill(gameObject) | Sets active=false on a member |
killAndHide(gameObject) | Sets active=false and visible=false |
countActive(value) | Count members where active===value (default true) |
getTotalUsed() | Count of active members |
getTotalFree() | maxSize - active count (remaining pool capacity) |
isFull() | True if children.size >= maxSize |
Physics groups extend Group with automatic body assignment. See ../physics-arcade/SKILL.md for full details.
// Arcade Physics group -- every member gets a dynamic body
const enemies = this.physics.add.group({
key: 'enemy',
quantity: 5,
setXY: { x: 100, y: 100, stepX: 80 }
});
// Static physics group -- immovable bodies
const platforms = this.physics.add.staticGroup();
platforms.create(400, 568, 'ground');
// Collide physics groups with each other
this.physics.add.collider(player, platforms);
this.physics.add.overlap(bullets, enemies, onHit);// HUD that follows camera
const hud = this.add.container(10, 10);
hud.setScrollFactor(0); // pinned to camera
const healthBar = this.add.rectangle(0, 0, 200, 20, 0x00ff00);
const healthText = this.add.text(210, -5, '100 HP');
hud.add([healthBar, healthText]);
// Move everything at once
hud.setPosition(50, 50);
// Scale and rotate propagate to children
hud.setScale(1.5);
hud.setRotation(0.1);
// Alpha affects all children
hud.setAlpha(0.8);
// Nested containers
const inventory = this.add.container(300, 500);
for (let i = 0; i < 5; i++) {
const slot = this.add.container(i * 55, 0);
slot.add([
this.add.rectangle(0, 0, 48, 48, 0x333333),
this.add.image(0, 0, `item-${i}`)
]);
inventory.add(slot); // Container inside Container
}Key Container methods:
| Method | Description |
|---|---|
add(child) / addAt(child, index) | Add Game Object(s); removes from display list |
remove(child, destroyChild) | Remove; optionally destroy |
getAt(index) / getIndex(child) | Access by index |
getByName(name) / getFirst(prop, val) | Query children |
getAll(prop, val) / count(prop, val) | Filtered access and counting |
sort(property) / swap(a, b) / moveTo(child, idx) | Ordering |
each(cb, ctx) / iterate(cb, ctx) | Iteration (iterate passes index) |
setScrollFactor(x, y, updateChildren) | Pass true to also apply to children |
getBounds(output) | Bounding rect of all children |
pointToContainer(source, output) | World point to local space |
setExclusive(value) | When false, children can exist in multiple places |
replace(oldChild, newChild) | Swap one child for another |
setSize(width, height) | Set hit area size (required for input) |
length | Read-only child count |
const bgLayer = this.add.layer();
const entityLayer = this.add.layer();
const uiLayer = this.add.layer();
// Add objects -- they render in layer order, then by depth within layer
bgLayer.add(this.add.image(400, 300, 'sky'));
entityLayer.add(player);
entityLayer.add(enemy);
uiLayer.add(scoreText);
// Control depth of layers themselves
bgLayer.setDepth(0);
entityLayer.setDepth(1);
uiLayer.setDepth(2);
// Children set depth within their layer
enemy.setDepth(5); // relative to entityLayer, not the Scene
// Apply shared effects to entire layer
entityLayer.setAlpha(0.5);
entityLayer.setVisible(false);
entityLayer.setBlendMode(Phaser.BlendModes.ADD);// createMultiple accepts a GroupCreateConfig or array of them
const coins = this.add.group();
coins.createMultiple({
key: 'coin',
quantity: 20,
setXY: { x: 50, y: 100, stepX: 40, stepY: 0 },
setScale: { x: 0.5, y: 0.5 },
setRotation: { value: 0, step: 0.1 }, // each rotated 0.1 more than previous
setAlpha: { value: 1 },
setOrigin: { x: 0.5, y: 0.5 },
setDepth: { value: 5 },
gridAlign: {
width: 5,
height: 4,
cellWidth: 48,
cellHeight: 48,
x: 100,
y: 200
}
});
// Multiple configs at once (creates two different sets)
coins.createMultiple([
{ key: 'gold-coin', quantity: 10, setXY: { x: 50, y: 100, stepX: 30 } },
{ key: 'silver-coin', quantity: 10, setXY: { x: 50, y: 200, stepX: 30 } }
]);const enemies = this.add.group();
// Get all children as array
const all = enemies.getChildren();
const active = enemies.getMatching('active', true);
// Batch property operations
enemies.setXY(200, 300);
enemies.incX(5); // add 5 to each member's x
enemies.setVisible(false);
enemies.propertyValueSet('tintTopLeft', 0xff0000);
enemies.playAnimation('walk');
// Stepping: apply incremental values across members
enemies.setX(100, 50); // first at x=100, next at 150, then 200...
enemies.setY(200, 30); // first at y=200, next at 230, then 260...
enemies.setXY(100, 200, 50, 30); // combined X and Y stepping
enemies.incXY(10, 5); // add 10 to each x, 5 to each y
enemies.angle(0, 15); // first at 0 deg, next at 15, then 30...
enemies.setAlpha(1, -0.1); // first at 1.0, next at 0.9, then 0.8...
enemies.setScale(1, 0, 0.1, 0); // scaleX: 1.0, 1.1, 1.2... (stepX=0.1)
enemies.setDepth(0, 1); // depth 0, 1, 2, 3...
enemies.setOrigin(0.5);
enemies.setBlendMode(Phaser.BlendModes.ADD);
enemies.setTint(0xff0000);
enemies.shuffle(); // randomize order in the groupFactory: this.add.group(children?, config?)
Config types:
GroupConfig -- classType, name, active, maxSize, defaultKey, defaultFrame,
runChildUpdate, createCallback, removeCallback
GroupCreateConfig -- key (required), classType, frame, quantity, visible, active,
repeat, yoyo, frameQuantity, max, setXY, setRotation,
setScale, setOrigin, setAlpha, setDepth, setScrollFactor,
hitArea, gridAlign
Key members: children (Set), classType, maxSize, defaultKey, defaultFrame,
active, runChildUpdate
Lifecycle: create, createMultiple, add, addMultiple, remove, clear, destroy
Queries: getFirst, getFirstAlive, getFirstDead, getLast, get, getChildren,
getLength, getMatching, contains, countActive, getTotalUsed,
getTotalFree, isFull
Pool: get, getFirstDead, kill, killAndHide
Bulk ops: setX/Y/XY, incX/Y/XY, setAlpha, setVisible, toggleVisible,
playAnimation, propertyValueSet, propertyValueInc, setOrigin,
setDepth, shuffle, setBlendMode, setTintFactory: this.add.container(x?, y?, children?)
Extends: GameObject
Mixins: AlphaSingle, BlendMode, ComputedSize, Depth, Mask, Transform, Visible
Key members: list (Array), exclusive, maxSize, scrollFactorX/Y
Children: add, addAt, remove, removeAt, removeBetween, removeAll
Queries: getAt, getIndex, getByName, getFirst, getAll, getRandom, count
Ordering: sort, swap, moveTo, moveUp, moveDown, sendToBack, bringToTop,
moveAbove, moveBelow, reverse
Transform: pointToContainer, getBounds, getBoundsTransformMatrix
Iteration: each(cb, ctx), iterate(cb, ctx, ...args)
Config: setExclusive, setScrollFactor(x, y, updateChildren)
Property: length (read-only child count)Factory: this.add.layer(children?)
Extends: Phaser.Structs.List
Mixins: AlphaSingle, BlendMode, Depth, Filters, Mask, RenderSteps, Visible
Key members: scene, displayList, sortChildrenFlag
Children: add, remove (inherited from List)
Settings: setAlpha, setBlendMode, setDepth, setVisible, setMask, setName,
setActive, setState, setData, getData
No position, rotation, scale, scroll factor, input, or physics.
Cannot be added to a Container. Containers can be added to Layers.Group is NOT on the display list. Its children appear on the Scene display list individually. Moving a Group does nothing visually -- use Container for that.
Container has performance overhead. Every child requires extra matrix math per frame. Deep nesting multiplies this. Avoid Containers when a Group or Layer suffices.
Container origin is always 0,0. The transform point cannot be changed. Position children relative to (0,0).
Container children lose Scene-level depth control. A child's depth only orders within the Container. The Container's own depth positions it in the Scene.
Physics + Container is problematic. If a Container is not at (0,0), physics bodies on children will be offset. Avoid physics bodies on Container children.
Container children cannot be individually masked in Canvas rendering. Only the Container itself can have a mask. Masks do not stack for nested Containers. Masks do stack in WebGL rendering.
Group.get() vs Group.getFirst() differ. get(x, y) is shorthand for getFirst(false, true, x, y) -- finds first inactive member and creates if none found. getFirst(state) defaults to active===false without auto-creating.
Layer cannot go inside a Container. Containers can be added to Layers, but not the reverse.
Group children Set is unordered. No index-based access. Use getChildren() to get an array snapshot.
killAndHide does not remove from the group. It only sets active=false and visible=false. The object stays in the group for reuse.
Container.setScrollFactor does not auto-propagate. Pass true as the third argument to also update children: container.setScrollFactor(0, 0, true).
Group.create() adds to the Scene display list. But group.add() does NOT unless you pass true as the second argument.
Container needs setSize() for input. Containers have no implicit size. You must call container.setSize(width, height) before setInteractive() will work with a hit area.
| File | Description |
|---|---|
src/gameobjects/group/Group.js | Group class -- pooling, create, getFirst*, kill, batch ops |
src/gameobjects/group/GroupFactory.js | this.add.group() factory registration |
src/gameobjects/group/typedefs/GroupConfig.js | GroupConfig typedef (classType, maxSize, callbacks) |
src/gameobjects/group/typedefs/GroupCreateConfig.js | GroupCreateConfig typedef (key, quantity, setXY, etc.) |
src/gameobjects/container/Container.js | Container class -- list management, nested transforms |
src/gameobjects/container/ContainerFactory.js | this.add.container() factory registration |
src/gameobjects/container/ContainerRender.js | Container WebGL/Canvas render functions |
src/gameobjects/layer/Layer.js | Layer class -- display list bucket with alpha/blend/mask |
src/gameobjects/layer/LayerFactory.js | this.add.layer() factory registration |
src/gameobjects/layer/LayerRender.js | Layer WebGL/Canvas render functions |
src/physics/arcade/ArcadePhysics.js | this.physics.add.group() / staticGroup() |
© autonomous-ai, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in store/agents/phaser/skills/groups-and-containers of autonomous-ai/openharness.
Open the folder on GitHubat commit 50da5db
Groups And Containers next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Groups And Containers this skillautonomous-ai/openharness | 1.1k | — | ~4.4k | Automated safety check: Pass | MIT | |
| Apple Containersickn33/agentic-awesome-skills | 47k | 1 repos | ~2.5k | Automated safety check: Pass | Apache-2.0 | |
| Container Security Hardeningsickn33/agentic-awesome-skills | 47k | 1 repos | ~1k | Automated safety check: Notes | MIT | |
| Container Queriesthedaviddias/Front-End-Checklist | 74k | — | ~526 | Automated safety check: Pass | MIT | |
| CSS Containmentthedaviddias/Front-End-Checklist | 74k | — | ~512 | Automated safety check: Pass | MIT | |
| Detecting Container Escape Attemptsmukul975/Anthropic-Cybersecurity-Skills | 34k | — | ~2.9k | Automated safety check: Pass | Apache-2.0 |
sickn33/agentic-awesome-skills
Build, run, and manage OCI/Linux containers as lightweight per-container VMs on Apple-silicon macOS using Apple's open-source container CLI, no Docker daemon required.
sickn33/agentic-awesome-skills
Harden Docker/container images and runtime deployments with secure base images, non-root users, CVE scanning, SBOM/signing, seccomp/AppArmor, and Kubernetes pod security controls.
thedaviddias/Front-End-Checklist
A skill your agent uses when reviewing stylesheets, component styles, and responsive behavior related to Use container queries for component-level responsiveness.
thedaviddias/Front-End-Checklist
A skill your agent uses when reviewing stylesheets, component styles, and responsive behavior related to Use CSS containment to limit repaint scope.
mukul975/Anthropic-Cybersecurity-Skills
Detects container escape at runtime across tooling - namespace manipulation, capability abuse, kernel exploits, sensitive host mounts, and anomalous syscalls - and explains which signals matter…
mukul975/Anthropic-Cybersecurity-Skills
Audits container and pod configuration for escape-enabling misconfiguration using the Kubernetes Python client - privileged flags, dangerous capability grants, host path mounts, shared namespaces…
autonomous-ai/openharness
Slices 3D mesh files into printer-profiled plain G-code through real slicer CLIs, with backend discovery, input inspection, dry runs and static validation.
autonomous-ai/openharness
Turns a home-automation request into standard, testable automations.yaml, run against Home Assistant Core's real triggers and verified with its own trace tool.
autonomous-ai/openharness
Turns a musical brief into LilyPond concert-pitch music, checked parts for each instrument and a playable practice pack.
autonomous-ai/openharness
Turns an STL and explicit printer and material requirements into compared OrcaSlicer plans, an editable 3MF project, checked G-code and a portable handoff.
autonomous-ai/openharness
Builds an editable DOCX report, a formula-driven XLSX workbook and a fresh LibreOffice PDF preview from one structured source file, then checks them together.
autonomous-ai/openharness
Dry-run, upload, and cautiously initiate local Bambu Lab print jobs from validated plain .gcode, using Bambu LAN FTPS/MQTT handoffs.
A skill your agent uses when using Groups or Containers in Phaser 4. Groups And Containers is an agent skill from autonomous-ai/openharness. Use this skill when using Groups or Containers in Phaser 4.
Groups And Containers fits situations like: containers in Phaser 4.
Run `npx skills add autonomous-ai/openharness --skill groups-and-containers -a claude-code`. Or copy the skill folder (store/agents/phaser/skills/groups-and-containers in autonomous-ai/openharness) into .claude/skills/groups-and-containers in your project. Claude Code loads it when a task matches its description.
Run `npx skills add autonomous-ai/openharness --skill groups-and-containers -a codex`. Or copy the skill folder (store/agents/phaser/skills/groups-and-containers in autonomous-ai/openharness) into .agents/skills/groups-and-containers in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add autonomous-ai/openharness --skill groups-and-containers -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/groups-and-containers, .gemini/skills/groups-and-containers, .github/skills/groups-and-containers and .opencode/skills/groups-and-containers in your project.
SKILL.md names no scripts, command-line tools or credentials: Groups And Containers is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Groups And Containers is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.4k tokens (SKILL.md is roughly 17k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Groups And Containers: Apple Container (sickn33/agentic-awesome-skills, 47k stars), Container Security Hardening (sickn33/agentic-awesome-skills, 47k stars), Container Queries (thedaviddias/Front-End-Checklist, 74k stars) and CSS Containment (thedaviddias/Front-End-Checklist, 74k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
autonomous-ai (a GitHub organization) maintains it in autonomous-ai/openharness, which has 1,149 GitHub stars. The repository holds 100 skills in this directory. The repository was last updated on October 8, 2026.
Source: autonomous-ai/openharness on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.