Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Diagnose interface errors, drops, CRCs, duplex mismatches, flapping, speed negotiation issues, and counter trends on routers, switches, and Linux hosts.
.claude/skills/network-interface-health/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-17 | ✗→✓ | ▲ Improved | — | — |
| case-01 | ✗→✓ | ▲ Improved | — | — |
| case-14 | ✗→✓ | ▲ Improved | — | — |
| case-23 | ✗→✗ | = Same ✗ | — | — |
| case-21 | ✗→✗ | = Same ✗ | — | — |
Use this skill when a network symptom might be caused by a physical link, switch port, cable, transceiver, duplex setting, or congested interface.
ifInErrors, ifOutErrors, or ifOutDiscards.Interface counters are evidence, but the trend matters more than the absolute number. Capture a baseline, wait a measurement interval, capture again, then compare increments.
textshow interfaces <interface> show interfaces <interface> status show logging | include <interface>|changed state|line protocol
On Linux hosts:
textip -s link show <interface> ethtool <interface> ethtool -S <interface>
| Counter | Meaning | Common cause | | --- | --- | --- | | CRC | Received frame checksum failed | Bad cable, dirty fiber, bad optic, duplex mismatch | | input errors | Aggregate receive-side errors | Check sub-counters before concluding | | runts | Frames below minimum Ethernet size | Duplex mismatch, collision domain, faulty NIC | | giants | Frames larger than expected MTU | MTU mismatch or jumbo-frame boundary | | input drops | Device could not accept inbound packets | Burst, oversubscription, CPU path, queue pressure | | output drops | Egress queue discarded packets | Congestion, QoS policy, undersized uplink | | resets | Interface hardware reset | Flapping, keepalive, driver, optic, power | | collisions | Ethernet collision counter | Half duplex or negotiation mismatch |
arriving on that side, not necessarily the port reporting the error.
uplink.
Prefer auto-negotiation on modern Ethernet links when both sides support it. If one side must be fixed, configure both sides explicitly and document why. Never mix fixed speed/duplex on one side with auto on the other.
textshow interfaces <interface> | include duplex|speed
Slice each interface block from one header to the next. Do not use an arbitrary character window; large interface blocks can cause counters to be missed or assigned to the wrong port.
pythonimport re from typing import Any HEADER_RE = re.compile( r"^(?P<name>\S+) is (?P<status>(?:administratively )?down|up), " r"line protocol is (?P<protocol>up|down)", re.I | re.M, ) ERROR_RE = re.compile(r"(?P<input>\d+) input errors, (?P<crc>\d+) CRC", re.I) DROP_RE = re.compile(r"(?P<output>\d+) output errors", re.I) DUPLEX_RE = re.compile(r"(?P<duplex>Full|Half|Auto)-duplex,\s+(?P<speed>[^,]+)", re.I) def parse_show_interfaces(raw: str) -> list[dict[str, Any]]: headers = list(HEADER_RE.finditer(raw)) interfaces = [] for index, header in enumerate(headers): end = headers[index + 1].start() if index + 1 < len(headers) else len(raw) block = raw[header.start():end] errors = ERROR_RE.search(block) drops = DROP_RE.search(block) duplex = DUPLEX_RE.search(block) interfaces.append({ "name": header.group("name"), "status": header.group("status"), "protocol": header.group("protocol"), "duplex": duplex.group("duplex") if duplex else "unknown", "speed": duplex.group("speed").strip() if duplex else "unknown", "input_errors": int(errors.group("input")) if errors else 0, "crc_errors": int(errors.group("crc")) if errors else 0, "output_errors": int(drops.group("output")) if drops else 0, }) return interfaces
network-troubleshooternetwork-config-validationhomelab-network-setup| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-23 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-21 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-20 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-02 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-15 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-22 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-03 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-17 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-18 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-05 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-08 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-01 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-07 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-14 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-11 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-13 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-12 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-04 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-06 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-09 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-10 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-16 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-19 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-24 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 24 cases were attempted. The headline lift of +13 percentage points is the difference between those two pass rates over the 24 comparable cases.
The per-case answers from this run were removed by the retention sweep, so the case table below shows the verdicts without the text either arm produced. The counts above were recorded at the time and are unaffected. Answers are now kept for 180 days.
Other measured skills in the registry, with their headline benchmark lift.