Agent skill

Add Resource

by deepmodeling in deepmodeling/Uni-Lab-OS

Guide for adding new resources (materials, bottles, carriers, decks, warehouses) to Uni-Lab-OS (添加新物料/资源).

GPL-3.0Auto-check passed

Install Add Resource

skills CLI
$ npx skills add deepmodeling/Uni-Lab-OS --skill add-resource -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install deepmodeling/Uni-Lab-OS add-resource --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/deepmodeling/Uni-Lab-OS.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.cursor/skills/add-resource .claude/skills/add-resource && rm -rf skills-src

Use ~/.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/

Facts

Skill name
add-resource
GitHub stars
178
Token cost
~2.9k tokens
SKILL.md length
248 words
Files
2
Skills in repo
10
Repo updated
First seen
Licence
GPL-3.0

At a glance

Guide for adding new resources (materials, bottles, carriers, decks, warehouses) to Uni-Lab-OS (添加新物料/资源).

  • Works in 3 steps: name 参数作为前缀:所有工厂函数必须接受 name: str… → Bottle… → 函数名 = @resource(id=...):工厂函数名与注册表 id 保持一致
  • The user wants to add resources
  • SKILL.md covers 资源类型, @resource 装饰器, 创建规范 and 资源模板, plus 3 more sections
  • Calls python

What it does

Add Resource is an agent skill from deepmodeling/Uni-Lab-OS. Guide for adding new resources (materials, bottles, carriers, decks, warehouses) to Uni-Lab-OS (添加新物料/资源). Uses @resource decorator for AST auto-scanning. Covers Bottle, Carrier, Deck, WareHouse definitions. Use when the user wants to add resources, define materials, create a deck layout, add bottles/carriers/plates, or mentions 物料/资源/resource/bottle/carrier/deck/plate/warehouse.

Its SKILL.md is about 2.9k tokens, which your agent loads only when the skill is triggered. The skill folder holds 1 other file (for example `reference.md`).

The repository describes itself as: A Platform for Laboratory Automation. The licence is GPL-3.0.

When your agent uses it

  • The user wants to add resources
  • Define materials
  • Create a deck layout
  • Add bottles/carriers/plates

Example prompts

  • “/add-resource”

Requirements

  • Python 3

Workflow steps

3 steps, taken from the first numbered list in SKILL.md.

  1. name 参数作为前缀:所有工厂函数必须接受 name: str 参数,创建子物料时以 name 作为前缀,确保实例名在运行时全局唯一
  2. Bottle 命名约定:试剂瓶-Bottle,烧杯-Beaker,烧瓶-Flask,小瓶-Vial
  3. 函数名 = @resource(id=...):工厂函数名与注册表 id 保持一致

What it can do on your machine

Read from SKILL.md and the folder at commit 43923ec. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Shell commands in SKILL.md call:

    • python

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Add Resource loads about 2.9k tokens when it runs. Until then it costs about 99 tokens; SKILL.md has 248 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~99
When it runs · the whole SKILL.md, loaded when a task matches
~2.9k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from deepmodeling/Uni-Lab-OS at commit 43923ec, republished under its GPL-3.0 licence (© deepmodeling). 248 words, ~2,865 tokens.

Download SKILL.mdSave it as .claude/skills/add-resource/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
add-resource
description
Guide for adding new resources (materials, bottles, carriers, decks, warehouses) to Uni-Lab-OS (添加新物料/资源). Uses @resource decorator for AST auto-scanning. Covers Bottle, Carrier, Deck, WareHouse definitions. Use when the user wants to add resources, define materials, create a deck layout, add bottles/carriers/plates, or mentions 物料/资源/resource/bottle/carrier/deck/plate/warehouse.

添加新物料资源

Uni-Lab-OS 的资源体系基于 PyLabRobot,通过扩展实现 Bottle、Carrier、WareHouse、Deck 等实验室物料管理。使用 @resource 装饰器注册,AST 自动扫描生成注册表条目。


资源类型

类型基类用途示例
BottleWell (PyLabRobot)单个容器(瓶、小瓶、烧杯、反应器)试剂瓶、粉末瓶
BottleCarrierItemizedCarrier多槽位载架(放多个 Bottle)6 位试剂架、枪头盒
WareHouseItemizedCarrier堆栈/仓库(放多个 Carrier)4x4 堆栈
DeckDeck (PyLabRobot)工作站台面(放多个 WareHouse)反应站 Deck

层级关系: Deck → WareHouse → BottleCarrier → Bottle

WareHouse 本质上和 Site 是同一概念 — 都是定义一组固定的放置位(slot),只不过 WareHouse 多嵌套了一层 Deck。两者都需要开发者根据实际物理尺寸自行计算各 slot 的偏移坐标。


@resource 装饰器

python
from unilabos.registry.decorators import resource

@resource(
    id="my_resource_id",        # 注册表唯一标识(必填)
    category=["bottles"],       # 分类标签列表(必填)
    description="资源描述",
    icon="",                    # 图标
    version="1.0.0",
    handles=[...],              # 端口列表(InputHandle / OutputHandle)
    model={...},                # 3D 模型配置
    class_type="pylabrobot",    # "python" / "pylabrobot" / "unilabos"
)

创建规范

命名规则
  1. name 参数作为前缀:所有工厂函数必须接受 name: str 参数,创建子物料时以 name 作为前缀,确保实例名在运行时全局唯一
  2. Bottle 命名约定:试剂瓶-Bottle,烧杯-Beaker,烧瓶-Flask,小瓶-Vial
  3. 函数名 = @resource(id=...):工厂函数名与注册表 id 保持一致
子物料命名示例
python
# Carrier 内部的 sites 用 name 前缀
for k, v in sites.items():
    v.name = f"{name}_{v.name}"     # "堆栈1左_A01", "堆栈1左_B02" ...

# Carrier 中放置 Bottle 时用 name 前缀
carrier[0] = My_Reagent_Bottle(f"{name}_flask_1")    # "堆栈1左_flask_1"
carrier[i] = My_Solid_Vial(f"{name}_vial_{ordering[i]}")  # "堆栈1左_vial_A1"

# create_homogeneous_resources 使用 name_prefix
sites=create_homogeneous_resources(
    klass=ResourceHolder,
    locations=[...],
    name_prefix=name,  # 自动生成 "{name}_0", "{name}_1" ...
)

# Deck setup 中用仓库名称作为 name 传入
self.warehouses = {
    "堆栈1左": my_warehouse_4x4("堆栈1左"),   # WareHouse.name = "堆栈1左"
    "试剂堆栈": my_reagent_stack("试剂堆栈"),  # WareHouse.name = "试剂堆栈"
}
其他规范
  • max_volume 单位为 μL:500mL = 500000
  • 尺寸单位为 mm:diameter, height, size_x/y/z, dx/dy/dz
  • BottleCarrier 必须设置 num_items_x/y/z:用于前端渲染布局
  • Deck 的 __init__ 必须接受 setup=False:图文件中 config.setup=true 触发 setup()
  • 按项目分组文件:同一工作站的资源放在 unilabos/resources/<project>/ 下
  • __init__ 必须接受 serialize() 输出的所有字段:serialize() 输出会作为 config 回传到 __init__,因此必须通过显式参数或 **kwargs 接受,否则反序列化会报错
  • 持久化运行时状态用 serialize_state():通过 _unilabos_state 字典存储可变信息(如物料内容、液体量),只存 JSON 可序列化的基本类型

资源模板

Bottle
python
from unilabos.registry.decorators import resource
from unilabos.resources.itemized_carrier import Bottle


@resource(id="My_Reagent_Bottle", category=["bottles"], description="我的试剂瓶")
def My_Reagent_Bottle(
    name: str,
    diameter: float = 70.0,
    height: float = 120.0,
    max_volume: float = 500000.0,
    barcode: str = None,
) -> Bottle:
    return Bottle(
        name=name,
        diameter=diameter,
        height=height,
        max_volume=max_volume,
        barcode=barcode,
        model="My_Reagent_Bottle",
    )

Bottle 参数:

  • name: 实例名称(运行时唯一,由上层 Carrier 以前缀方式传入)
  • diameter: 瓶体直径 (mm)
  • height: 瓶体高度 (mm)
  • max_volume: 最大容积(μL,500mL = 500000)
  • barcode: 条形码(可选)
BottleCarrier
python
from pylabrobot.resources import ResourceHolder
from pylabrobot.resources.carrier import create_ordered_items_2d
from unilabos.resources.itemized_carrier import BottleCarrier
from unilabos.registry.decorators import resource


@resource(id="My_6SlotCarrier", category=["bottle_carriers"], description="六槽位载架")
def My_6SlotCarrier(name: str) -> BottleCarrier:
    sites = create_ordered_items_2d(
        klass=ResourceHolder,
        num_items_x=3, num_items_y=2,
        dx=10.0, dy=10.0, dz=5.0,
        item_dx=42.0, item_dy=35.0,
        size_x=20.0, size_y=20.0, size_z=50.0,
    )
    # 子 site 用 name 作为前缀
    for k, v in sites.items():
        v.name = f"{name}_{v.name}"

    carrier = BottleCarrier(
        name=name, size_x=146.0, size_y=80.0, size_z=55.0,
        sites=sites, model="My_6SlotCarrier",
    )
    carrier.num_items_x = 3
    carrier.num_items_y = 2
    carrier.num_items_z = 1

    # 放置 Bottle 时用 name 作为前缀
    ordering = ["A1", "B1", "A2", "B2", "A3", "B3"]
    for i in range(6):
        carrier[i] = My_Reagent_Bottle(f"{name}_vial_{ordering[i]}")
    return carrier
WareHouse / Deck 放置位

WareHouse 和 Site 本质上是同一概念:都是定义一组固定放置位(slot),根据物理尺寸自行批量计算偏移坐标。WareHouse 只是多嵌套了一层 Deck 而已。推荐开发者直接根据实物测量数据计算各 slot 偏移量。

WareHouse(使用 warehouse_factory)
python
from unilabos.resources.warehouse import warehouse_factory
from unilabos.registry.decorators import resource


@resource(id="my_warehouse_4x4", category=["warehouse"], description="4x4 堆栈仓库")
def my_warehouse_4x4(name: str) -> "WareHouse":
    return warehouse_factory(
        name=name,
        num_items_x=4, num_items_y=4, num_items_z=1,
        dx=10.0, dy=10.0, dz=10.0,             # 第一个 slot 的起始偏移
        item_dx=147.0, item_dy=106.0, item_dz=130.0,  # slot 间距
        resource_size_x=127.0, resource_size_y=85.0, resource_size_z=100.0,  # slot 尺寸
        model="my_warehouse_4x4",
        col_offset=0,       # 列标签起始偏移(0 → A01, 4 → A05)
        layout="row-major",  # "row-major" 行优先 / "col-major" 列优先 / "vertical-col-major" 竖向
    )

warehouse_factory 参数说明:

  • dx/dy/dz:第一个 slot 相对 WareHouse 原点的偏移(mm)
  • item_dx/item_dy/item_dz:相邻 slot 间距(mm),需根据实际物理间距测量
  • resource_size_x/y/z:每个 slot 的可放置区域尺寸
  • layout:影响 slot 标签和坐标映射
    • "row-major":A01,A02,...,B01,B02,...(行优先,适合横向排列)
    • "col-major":A01,B01,...,A02,B02,...(列优先)
    • "vertical-col-major":竖向排列,y 坐标反向
Deck 组装 WareHouse

Deck 通过 setup() 将多个 WareHouse 放置到指定坐标:

python
from pylabrobot.resources import Deck, Coordinate
from unilabos.registry.decorators import resource


@resource(id="MyStation_Deck", category=["deck"], description="我的工作站 Deck")
class MyStation_Deck(Deck):
    def __init__(self, name="MyStation_Deck", size_x=2700.0, size_y=1080.0, size_z=1500.0,
                 category="deck", setup=False, **kwargs) -> None:
        super().__init__(name=name, size_x=size_x, size_y=size_y, size_z=size_z)
        if setup:
            self.setup()

    def setup(self) -> None:
        self.warehouses = {
            "堆栈1左": my_warehouse_4x4("堆栈1左"),
            "堆栈1右": my_warehouse_4x4("堆栈1右"),
        }
        self.warehouse_locations = {
            "堆栈1左": Coordinate(-200.0, 400.0, 0.0),  # 自行测量计算
            "堆栈1右": Coordinate(2350.0, 400.0, 0.0),
        }
        for wh_name, wh in self.warehouses.items():
            self.assign_child_resource(wh, location=self.warehouse_locations[wh_name])
Site 模式(前端定向放置)

适用于有固定孔位/槽位的设备(如移液站 PRCXI 9300),Deck 通过 sites 列表定义前端展示的放置位,前端据此渲染可拖拽的孔位布局:

python
import collections
from typing import Any, Dict, List, Optional
from pylabrobot.resources import Deck, Resource, Coordinate
from unilabos.registry.decorators import resource


@resource(id="MyLabDeck", category=["deck"], description="带 Site 定向放置的 Deck")
class MyLabDeck(Deck):
    # 根据设备台面实测批量计算各 slot 坐标偏移
    _DEFAULT_SITE_POSITIONS = [
        (0, 0, 0), (138, 0, 0), (276, 0, 0), (414, 0, 0),       # T1-T4
        (0, 96, 0), (138, 96, 0), (276, 96, 0), (414, 96, 0),   # T5-T8
    ]
    _DEFAULT_SITE_SIZE = {"width": 128.0, "height": 86.0, "depth": 0}
    _DEFAULT_CONTENT_TYPE = ["plate", "tip_rack", "tube_rack", "adaptor"]

    def __init__(self, name: str, size_x: float, size_y: float, size_z: float,
                 sites: Optional[List[Dict[str, Any]]] = None, **kwargs):
        super().__init__(size_x, size_y, size_z, name)
        if sites is not None:
            self.sites = [dict(s) for s in sites]
        else:
            self.sites = []
            for i, (x, y, z) in enumerate(self._DEFAULT_SITE_POSITIONS):
                self.sites.append({
                    "label": f"T{i + 1}",          # 前端显示的槽位标签
                    "visible": True,                # 是否在前端可见
                    "position": {"x": x, "y": y, "z": z},  # 槽位物理坐标
                    "size": dict(self._DEFAULT_SITE_SIZE),  # 槽位尺寸
                    "content_type": list(self._DEFAULT_CONTENT_TYPE),  # 允许放入的物料类型
                })
        self._ordering = collections.OrderedDict(
            (site["label"], None) for site in self.sites
        )

    def assign_child_resource(self, resource: Resource,
                              location: Optional[Coordinate] = None,
                              reassign: bool = True,
                              spot: Optional[int] = None):
        idx = spot
        if spot is None:
            for i, site in enumerate(self.sites):
                if site.get("label") == resource.name:
                    idx = i
                    break
        if idx is None:
            for i in range(len(self.sites)):
                if self._get_site_resource(i) is None:
                    idx = i
                    break
        if idx is None:
            raise ValueError(f"No available site for '{resource.name}'")
        loc = Coordinate(**self.sites[idx]["position"])
        super().assign_child_resource(resource, location=loc, reassign=reassign)

    def serialize(self) -> dict:
        data = super().serialize()
        sites_out = []
        for i, site in enumerate(self.sites):
            occupied = self._get_site_resource(i)
            sites_out.append({
                "label": site["label"],
                "visible": site.get("visible", True),
                "occupied_by": occupied.name if occupied else None,
                "position": site["position"],
                "size": site["size"],
                "content_type": site["content_type"],
            })
        data["sites"] = sites_out
        return data

Site 字段说明:

字段类型说明
labelstr槽位标签(如 "T1"),前端显示名称,也用于匹配 resource.name
visiblebool是否在前端可见
positiondict物理坐标 {x, y, z}(mm),需自行测量计算偏移
sizedict槽位尺寸 {width, height, depth}(mm)
content_typelist允许放入的物料类型,如 ["plate", "tip_rack", "tube_rack", "adaptor"]

参考实现: unilabos/devices/liquid_handling/prcxi/prcxi.py 中的 PRCXI9300Deck(4x4 共 16 个 site)。


文件位置

unilabos/resources/
├── <project>/              # 按项目分组
│   ├── bottles.py          # Bottle 工厂函数
│   ├── bottle_carriers.py  # Carrier 工厂函数
│   ├── warehouses.py       # WareHouse 工厂函数
│   └── decks.py            # Deck 类定义

验证

bash
# 资源可导入
python -c "from unilabos.resources.my_project.bottles import My_Reagent_Bottle; print(My_Reagent_Bottle('test'))"

# 启动测试(AST 自动扫描)
unilab -g <graph>.json

仅在以下情况仍需 YAML:第三方库资源(如 pylabrobot 内置资源,无 @resource 装饰器)。


关键路径

内容路径
Bottle/Carrier 基类unilabos/resources/itemized_carrier.py
WareHouse 基类 + 工厂unilabos/resources/warehouse.py
PLR 注册unilabos/resources/plr_additional_res_reg.py
装饰器定义unilabos/registry/decorators.py

© deepmodeling, GPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 1 other file in .cursor/skills/add-resource of deepmodeling/Uni-Lab-OS.

  • SKILL.md
  • reference.md

Open the folder on GitHubat commit 43923ec

Compare with similar skills

Add Resource 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.

Add Resource compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Add Resource this skilldeepmodeling/Uni-Lab-OS178—~2.9kAutomated safety check: PassGPL-3.0
Carrier Relationship Managementaffaan-m/ECC274k5 repos~5.9kAutomated safety check: PassApache-2.0
Agent Resource Allocatorruvnet/ruflo74k2 repos~4.9kAutomated safety check: PassMIT
Resourceswindmill-labs/windmill18k—~1.7kAutomated safety check: PassCustom licence
Resource Hintsthedaviddias/Front-End-Checklist74k—~430Automated safety check: PassMIT
Carrier Relationship Managementsickn33/agentic-awesome-skills47k2 repos~5.9kAutomated safety check: PassMIT

Similar skills

  • Supports freight managers in sourcing and vetting carriers, running RFPs, negotiating rates, building routing guides and scoring carrier performance.

    274k GitHub starsUsed in 5 repos~5.9k tokens
    Business, Finance & HRAuto-check passed
  • Agent skill for resource-allocator - invoke with $agent-resource-allocator

    74k GitHub starsUsed in 2 repos~4.9k tokens
    Auto-check passed
  • Resources

    windmill-labs/windmill

    MUST use when managing resources.

    18k GitHub stars~1.7k tokensUpdated today
    Backend & APIsAuto-check passed
  • Resource Hints

    thedaviddias/Front-End-Checklist

    A skill your agent uses when auditing slow page loads, heavy assets, or rendering delays related to Use resource hints for faster loading.

    74k GitHub stars~430 tokensUpdated yesterday
    Frontend & DesignAuto-check passed
  • Carrier Relationship Management

    sickn33/agentic-awesome-skills

    Codified expertise for managing carrier portfolios, negotiating freight rates, tracking carrier performance, allocating freight, and maintaining strategic carrier relationships.

    47k GitHub starsUsed in 2 repos~5.9k tokens
    Sales & SupportAuto-check passed
  • Board Deck Builder

    alirezarezvani/claude-skills

    Assembles comprehensive board and investor update decks by pulling perspectives from all C-suite roles.

    28k GitHub starsUsed in 1 repo~1.9k tokens
    Business, Finance & HRAuto-check passed

More from deepmodeling/Uni-Lab-OS

All 10 skills in this repo
  • Batch Submit Experiment

    deepmodeling/Uni-Lab-OS

    Batch submit experiments (notebooks) to the Uni-Lab cloud platform (leap-lab) — list workflows, generate nodeparams from registry schemas, submit multiple rounds, check notebook status.

    178 GitHub stars~2.3k tokensUpdated 13 days ago
    Auto-check passed
  • Create Device Skill

    deepmodeling/Uni-Lab-OS

    Create a skill for any Uni-Lab device by extracting action schemas from the device registry.

    178 GitHub stars~4.2k tokensUpdated 13 days ago
    Auto-check passed
  • Filter Workflow By Tags

    deepmodeling/Uni-Lab-OS

    Query backend workflow list, aggregate all tags, and filter workflows by domain/scenario requirements using tags.

    178 GitHub stars~2.9k tokensUpdated 13 days ago
    Auto-check passed
  • Submit Agent Result

    deepmodeling/Uni-Lab-OS

    Submit historical experiment results (agentresult) to Uni-Lab cloud platform (leap-lab) notebook — read data files, assemble JSON payload, PUT to cloud API.

    178 GitHub stars~1.7k tokensUpdated 13 days ago
    Auto-check passed
  • Add Device

    deepmodeling/Uni-Lab-OS

    Guide for adding new devices to Uni-Lab-OS (接入新设备). An agent skill from deepmodeling/Uni-Lab-OS.

    178 GitHub stars~3.1k tokensUpdated 13 days ago
    Auto-check passed
  • Add Workstation

    deepmodeling/Uni-Lab-OS

    Guide for adding new workstations to Uni-Lab-OS (接入新工作站). An agent skill from deepmodeling/Uni-Lab-OS.

    178 GitHub stars~4.4k tokensUpdated 13 days ago
    Auto-check passed

Questions about Add Resource

What does Add Resource do?

Guide for adding new resources (materials, bottles, carriers, decks, warehouses) to Uni-Lab-OS (添加新物料/资源). Add Resource is an agent skill from deepmodeling/Uni-Lab-OS. Guide for adding new resources (materials, bottles, carriers, decks, warehouses) to Uni-Lab-OS (添加新物料/资源).

When should I use Add Resource?

Add Resource fits situations like: the user wants to add resources; define materials; create a deck layout; add bottles/carriers/plates.

How do I install Add Resource in Claude Code?

Run `npx skills add deepmodeling/Uni-Lab-OS --skill add-resource -a claude-code`. Or copy the skill folder (.cursor/skills/add-resource in deepmodeling/Uni-Lab-OS) into .claude/skills/add-resource in your project. Claude Code loads it when a task matches its description.

How do I install Add Resource in Codex?

Run `npx skills add deepmodeling/Uni-Lab-OS --skill add-resource -a codex`. Or copy the skill folder (.cursor/skills/add-resource in deepmodeling/Uni-Lab-OS) into .agents/skills/add-resource in your project. Codex loads it when a task matches its description.

Can I use Add Resource in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add deepmodeling/Uni-Lab-OS --skill add-resource -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/add-resource, .gemini/skills/add-resource, .github/skills/add-resource and .opencode/skills/add-resource in your project.

What does Add Resource need to run?

Going by SKILL.md and its folder, Add Resource needs the command-line tools its instructions call (python). Our summary lists: Python 3.

Does Add Resource access the network?

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.

Is Add Resource safe to install?

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.

What licence does Add Resource use?

Add Resource is published under the GPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Add Resource use?

About 2.9k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Add Resource?

Skills that share tags, products or a category with Add Resource: Carrier Relationship Management (affaan-m/ECC, 274k stars), Agent Resource Allocator (ruvnet/ruflo, 74k stars), Resources (windmill-labs/windmill, 18k stars) and Resource Hints (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.

Who maintains Add Resource?

deepmodeling (a GitHub organization) maintains it in deepmodeling/Uni-Lab-OS, which has 178 GitHub stars. The repository holds 10 skills in this directory. The repository was last updated on September 24, 2026.

Source: deepmodeling/Uni-Lab-OS on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.