Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add serac-labs/serac --skill asset-managementgit clone --depth 1 https://github.com/serac-labs/seracWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/serac-labs/serac/asset-management)<a href="https://agentmods.dev/skills/serac-labs/serac/asset-management"><img src="https://agentmods.dev/badge/skills/serac-labs/serac/asset-management/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/serac-labs/serac/asset-management"><img src="https://agentmods.dev/badge/skills/serac-labs/serac/asset-management.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- NVIDIA SkillSpector pass
What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00043 | $0.02966 |
| Opus 5 | $0.00022 | $0.01483 |
| Sonnet 5 | $0.00009 | $0.00593 |
| Haiku 4.5 | $0.00004 | $0.00297 |
Grade A, and why
asset-management scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 9d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 430 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Asset Management for ServiceNow
Asset Management tracks hardware and software assets throughout their lifecycle.
Asset Architecture
Asset (alm_asset)
├── Hardware Asset (alm_hardware)
│ └── Consumable (alm_consumable)
└── License (alm_license)
CI (cmdb_ci) ←→ Asset (alm_asset)
↑
One CI can have multiple assets over time
Key Tables
| Table | Purpose |
|---|---|
alm_asset |
Base asset table |
alm_hardware |
Hardware assets |
alm_license |
Software licenses |
alm_consumable |
Consumable assets |
ast_contract |
Asset contracts |
cmdb_ci |
Configuration items |
Hardware Assets (ES5)
Create Hardware Asset
// Create hardware asset (ES5 ONLY!)
var asset = new GlideRecord("alm_hardware")
asset.initialize()
// Basic info
asset.setValue("display_name", "Dell Latitude 5520")
asset.setValue("asset_tag", "ASSET-" + generateAssetTag())
asset.setValue("serial_number", "SN123456789")
// Model
asset.setValue("model", getModelSysId("Dell Latitude 5520"))
asset.setValue("model_category", getModelCategorySysId("Laptop"))
// Status and substatus
asset.setValue("install_status", 1) // Installed
asset.setValue("substatus", "in_use")
// Assignment
asset.setValue("assigned_to", userSysId)
asset.setValue("assigned", new GlideDateTime())
asset.setValue("location", locationSysId)
asset.setValue("department", departmentSysId)
// Financial
asset.setValue("cost", 1299.99)
asset.setValue("cost_center", costCenterSysId)
// Dates
asset.setValue("purchase_date", "2024-01-15")
asset.setValue("warranty_expiration", "2027-01-15")
// Link to CI if exists
asset.setValue("ci", cmdbCiSysId)
asset.insert()
Asset Lifecycle States
// Asset install_status values
var ASSET_STATUS = {
INSTALLED: 1, // In use
ON_ORDER: 2, // Ordered, not received
IN_STOCK: 6, // In inventory
IN_TRANSIT: 7, // Being shipped
IN_MAINTENANCE: 8, // Under repair
RETIRED: 9, // End of life
DISPOSED: 10, // Disposed of
}
// Transition asset status (ES5 ONLY!)
function transitionAssetStatus(assetSysId, newStatus, notes) {
var asset = new GlideRecord("alm_hardware")
if (!asset.get(assetSysId)) {
return { success: false, message: "Asset not found" }
}
var currentStatus = parseInt(asset.getValue("install_status"), 10)
// Validate transition
var validTransitions = {
2: [6, 7], // On Order -> In Stock, In Transit
7: [6, 1], // In Transit -> In Stock, Installed
6: [1, 7, 9], // In Stock -> Installed, In Transit, Retired
1: [8, 6, 9], // Installed -> In Maintenance, In Stock, Retired
8: [1, 6, 9], // In Maintenance -> Installed, In Stock, Retired
9: [10], // Retired -> Disposed
}
if (!validTransitions[currentStatus] || validTransitions[currentStatus].indexOf(newStatus) === -1) {
return {
success: false,
message: "Invalid transition from " + currentStatus + " to " + newStatus,
}
}
// Update status
asset.setValue("install_status", newStatus)
// Handle specific transitions
if (newStatus === 1) {
asset.setValue("installed", new GlideDateTime())
} else if (newStatus === 9) {
asset.setValue("retired", new GlideDateTime())
asset.setValue("assigned_to", "")
} else if (newStatus === 10) {
asset.setValue("disposed", new GlideDateTime())
}
// Add work note
if (notes) {
asset.work_notes = notes
}
asset.update()
return { success: true, asset_tag: asset.getValue("asset_tag") }
}
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 9d ago First seen · 430 lines · 43 tokens per session scan A dee8372255e3
asset-management is a skill published in the GitHub repository serac-labs/serac (78 stars, last pushed 14d ago), licensed Apache-2.0. It adds 43 tokens to every session and 2,966 once invoked, about $0.0002 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
axiom-camera-capture
AVCaptureSession, camera preview, photo capture, video recording, RotationCoordinator, session interruptions, deferred processing, capture responsiveness, zero-shutter-lag, photoQualityPrioritization, front camera mirroring.
axiom-camera-capture-ref
Reference — AVCaptureSession, AVCapturePhotoSettings, AVCapturePhotoOutput, RotationCoordinator, photoQualityPrioritization, deferred processing, AVCaptureMovieFileOutput, session presets, capture device APIs.
axiom-metal-migration-ref
Use when converting shaders or looking up API equivalents - GLSL to MSL, HLSL to MSL, GL/DirectX to Metal mappings, MTKView setup code.
axiom-core-location
Use for Core Location implementation patterns - authorization strategy, monitoring strategy, accuracy selection, background location.
mcp-tool-developer
Build Model Context Protocol (MCP) servers and tools from scratch. Full-stack MCP development with TypeScript/Python, testing, deployment, and registry publishing.
agent-carnet
Use this skill when the user asks to save, recall, find, or organize notes. Triggers on: 'remember this', 'save this', 'note this', 'what did we discuss about...', 'check the notebook', 'find in carnet'. Also use proactively when discovering findings worth preserving across sessions.