tdx-assets
Look up staff devices, assets, and locations in TeamDynamix (TDX).
Skill by gebruder
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/gebruder-tdx-assets
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/tdx-assets
What's inside
- Skill name
tdx-assets- Description
- Look up staff devices, assets, and locations in TeamDynamix (TDX). Given a list of names, emails, or partial identifiers, resolve each person and return the assets assigned to them with location, model, ownership type, and status. Read-only.
- License
- MIT
- Instructions
- 122 lines in SKILL.md · view on GitHub
Files (4)
- ACCEPTANCE.md
- INSTALL.md
- SKILL.md
- reference.md
SKILL.md (first lines)
# TeamDynamix staff asset lookup
Look up the devices and locations assigned to staff in TeamDynamix.
The operator gives you a list of people (names, emails, or partial
identifiers, often messy); you resolve each to a TDX person, pull the
assets assigned to them, and return one table plus a section for names
you could not resolve cleanly.
## Authentication
Every request uses the `http_request` tool with `credential: tdx-api`.
The tool injects that credential host-side as the `Authorization: Bearer`
header; you never see the token value and must not put credentials in a
request body or a header yourself. There is **no login step** in this
skill: the `tdx-api` credential is already a TDX bearer token the
operator minted and stored.
If any call returns **HTTP 401**, the token has expired. **Stop
immediately**, do not retry, and tell the operator: "The `tdx-api`
credential has expired; refresh it (see INSTALL.md) and run again." You
cannot re-authenticate from inside this skill.
## Steps
1. **Resolve each person.** For each input identifier, call
`http_request`:
- method `GET`
- url `https://your-tenant.teamdynamix.com/TDWebApi/api/people/lookup?searchText=<url-encoded identifier>&maxResults=10`
- credential `tdx-api`
The response is a JSON array of `User` objects. `people/lookup`
returns the identity fields you need (`UID`, `FullName`,
`PrimaryEmail`, `LocationName`, `IsActive`); it omits collection
properties (`Attributes` among them) that this skill does not use.
Prefer entries with `IsActive: true`. Then:
- **Exactly one active match** → resolved. Keep `UID`, `FullName`,
`PrimaryEmail`.
- **More than one plausible match** → **ambiguous**. Do not auto-pick.
Add the candidates (`FullName`, `PrimaryEmail`, `UID`) to the
"Needs confirmation" section and move on.
- **No match** → add the original identifier to the "Could not
resolve" section. Never silently drop an input.
2. **Pull assets per resolved person.** For each resolved `UID`, call
`http_request`:
- method `POST`
- url `https://your-tenant.teamdynamix.com/TDWebApi/api/APPID/assets/search`
- credential `tdx-api`
- body `{"OwningCustomerIDs": ["<UID>"], "MaxResults": 100}`
The response is a JSON array of `Asset` objects. **Asset search does
not return the `Attributes` collection** (custom attributes): you get
base fields only, so location, model, ownership, and status come from
this response, but the inventory date does not (step 3).
3. **Fetch inventory detail only when it is in play, and cap it.** The
"Last inventory date" column comes from a tenant custom attribute in
`Attributes[]`, which asset search omits. Fetch it per asset **only
when** the inventory column is actually needed: the operator
configured the attribute (see INSTALL.md) or the user asked for
inventory dates. When it is needed, for each asset up to a cap of
**25 detail fetches per run**, call `http_request`:
- method `GET`
- url `https://your-tenant.teamdynamix.com/TDWebApi/api/APPID/assets/<asset ID>`
- credential `tdx-api`
The response is a single `Asset` with `Attributes[]` populated. Read
the configured attribute by `Name`; use its `ValueText` (or `Value`).
- If the inventory column is not in play, write "not available".
- If the tenant has no such attribute or it is empty, write "not
available".
- If you reach the 25-fetch cap, write "not available (not fetched,
over cap)" for the remaining assets rather than issuing more
requests. Both searches are rate-limited (60 requests per 60 seconds
per IP); do not fan out unbounded detail fetches.
4. **Emit one table**, one row per (person, asset):
| Person (input) | Resolved match | Location | Asset model | Ownership type | Last inventory date |
|---|---|---|---|---|---|
- Resolved match = `FullName` (`PrimaryEmail`).
- Location = `LocationName`, plus `LocationRoomName` when present.
- Asset model = `ProductModelName`.
- Ownership type = "Person" when `OwningCustomerName` is set;
"Department" when only `OwningDepartmentName` is set.
- Last inventory date = the value from step 3, or one of the "not
available" forms above. Do not invent a date.
- A resolved person with zero assets gets one row with the asset
columns blank and a note "no assets found".
5. **Then two sections below the table:**
- **Needs confirmation**: ambiguous people, with their candidates,
for the operator to disambiguate. Do not pick for them.
- **Could not resolve**: input identifiers with no match, listed
verbatim so nothing is lost.
## Errors and limits
- **401** → stop and ask for a token refresh (above). One occurrence
ends the run.
- **429** → TDX rate-limits these endpoints (60 requests per 60 seconds
per IP for the searches). Wait a few seconds and retry that one call
once; if it is still 429, stop and report that TDX is rate-limiting.
The 25-fetch detail cap in step 3 exists to keep large lists from
triggering this.
- Any other non-2xx on a person's call → skip that person, note the
status in "Could not resolve", and continue with the rest.
- Missing custom attributes → "not available", never an error.
## Read-only
This skill reads only; it never calls a create, update, or delete
endpoint. Read-only rests on two things: the tool refuses every write
verb (only `GET`, `HEAD`, and the one declared search POST are allowed),
and the TDX endpoints this skill uses are side-effect-free reads. Note
that a `GET` to any path on the bound TDX host carries the credential;
this skill confines itself by instruction to `people/lookup`,
`assets/search` (POST), and `assets/<id>`, and the operator's egressFrom gebruder/wirken, MIT.
More from gebruder/wirken
- 0.785score
librarian
gebruder
Read-only retrieval over the daily-digest kept set.
SkillAFreshness: A★ 192Claude Code +9 - 0.785score
aggregator
gebruder
Daily fetch from a fixed public allowlist; score against the user's interests file; cluster into themes; push the digest to the configured channel
SkillAFreshness: A★ 192Claude Code +9 - 0.782score
lyrik
gebruder
Security assessment of a codebase, minimal mode for runner validation
SkillAFreshness: A★ 192Claude Code +9 - 0.778score
web-fetch
gebruder
Fetch and extract content from URLs
SkillAFreshness: A★ 192Claude Code +9 - 0.778score
file-search
gebruder
Find files and search content across directories
SkillAFreshness: A★ 192Claude Code +9 - 0.778score
notes
gebruder
Create and manage text notes in the workspace
SkillAFreshness: A★ 192Claude Code +9 - 0.778score
ssh
gebruder
SSH key management and remote connections
SkillAFreshness: A★ 192Claude Code +9 - 0.778score
system-info
gebruder
System information and monitoring
SkillAFreshness: A★ 192Claude Code +9 - 0.778score
github
gebruder
GitHub operations via the gh CLI
SkillAFreshness: A★ 192Claude Code +9 - 0.778score
json-tools
gebruder
Parse, query, and transform JSON data
SkillAFreshness: A★ 192Claude Code +9 - 0.778score
disk-usage
gebruder
Analyze disk usage and find large files
SkillAFreshness: A★ 192Claude Code +9 - 0.778score
calculator
gebruder
Math calculations and unit conversions
SkillAFreshness: A★ 192Claude Code +9
Signals
- Stars
- 192
- Forks
- 10
- Open issues
- 23
- Last commit (this folder)
- Jul 3, 2026 (3 months ago)
- Last release
- Oct 23, 2026 (5 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/gebruder/wirken
- Website
- wirken.ai
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from gebruder
- 0.785score
librarian
gebruder
Read-only retrieval over the daily-digest kept set.
SkillAFreshness: A★ 192Claude Code +9 - 0.785score
aggregator
gebruder
Daily fetch from a fixed public allowlist; score against the user's interests file; cluster into themes; push the digest to the configured channel
SkillAFreshness: A★ 192Claude Code +9 - 0.782score
lyrik
gebruder
Security assessment of a codebase, minimal mode for runner validation
SkillAFreshness: A★ 192Claude Code +9 - 0.778score
process-manager
gebruder
Monitor and manage system processes
SkillAFreshness: A★ 192Claude Code +9 - 0.778score
github
gebruder
GitHub operations via the gh CLI
SkillAFreshness: A★ 192Claude Code +9 - 0.778score
file-search
gebruder
Find files and search content across directories
SkillAFreshness: A★ 192Claude Code +9
Cite this page
tdx-assets skill. Agent Mart. https://agentmart.dev/skills/gebruder-tdx-assets (last updated 2026-10-24)