ci-local-export

ci-local-export is a skill for Claude Code from dork-labs/dorkos. It costs 67 tokens per session (691 once invoked), scanned A, original, MIT.

A scheduled job that exports local Git hook timing records to a repository branch. Git hooks are scripts that run during actions such as committing or pushing.

In plain words
What is it for?
Use it to report how long local commits and pushes took, identify interrupted runs, and rotate the local timing file.
Why use it?
A remote CI system cannot normally read timing data stored only on a developer's machine. This makes completed daily timings available to the CI data collector.

Skill for Claude Code

Written for Claude Code: disable-model-invocation in frontmatter. Also seen: installed under .agents/ (shared by several agents).

Part of the flow plugin — 41 skills, 44 commands, 5 agents, 4 hooks shipped together

Good fit Use it to report how long local commits and pushes took, identify interrupted runs, and rotate the local timing file.

Compare 6 skills from other repositories ↓
Install with agentmods
npx agentmods add skills/dork-labs/dorkos/ci-local-export
Install

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.

Any agent
npx skills add dork-labs/dorkos --skill ci-local-export
Clone the repo
git clone --depth 1 https://github.com/dork-labs/dorkos

Made for: Claude Code.

Or install flow, the plugin that ships this one along with the rest of its 41 skills, 44 commands, 5 agents, 4 hooks.

Wrote 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.

agentmods badge for ci-local-export

README.md
[![agentmods](https://agentmods.dev/badge/skills/dork-labs/dorkos/ci-local-export/github.svg)](https://agentmods.dev/skills/dork-labs/dorkos/ci-local-export)
Your own site
<a href="https://agentmods.dev/skills/dork-labs/dorkos/ci-local-export"><img src="https://agentmods.dev/badge/skills/dork-labs/dorkos/ci-local-export/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.

agentmods 80×15 button for ci-local-export

Your own site · 80×15
<a href="https://agentmods.dev/skills/dork-labs/dorkos/ci-local-export"><img src="https://agentmods.dev/badge/skills/dork-labs/dorkos/ci-local-export.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 67 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 691 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

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.

ModelPer sessionOnce invoked
Fable 5.1 $0.00067 $0.00691
Opus 5.5 $0.00027 $0.00276
Sonnet 5.5 $0.00013 $0.00138
Haiku 4.5 $0.00007 $0.00069

Measured 27d ago against content hash a417f54629fe, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

Grade A, and why

ci-local-export 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 27d 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.

.agents/skills/ci-local-export/SKILL.md · 36 lines

How it starts

The opening of the file, as written. The whole thing — 36 lines — stays where its author put it; the contents beside it link to each section on GitHub.

ci-local-export

The lefthook time-wrap (packages/ci-steward/bin/time-wrap.sh) records a START and an END line for every hook command in $(git rev-parse --git-common-dir)/ci-steward/local-timings.jsonl. That file lives only on this machine, so a GitHub Actions job cannot read it. This job pushes one aggregate per finished day to local/<clone>/YYYY-MM-DD.json on the ci-steward-data branch, where the daily collector turns it into the local-commit and local-push SLOs. It runs at 04:30 UTC, half an hour before the collector.

Run

pnpm ci:local-export

Then report its output in one or two lines: how many days it exported, whether it pushed, and whether it rotated the file. It never needs anything else.

What it does

  1. Reads the timings file and pairs each START with its END. An END with a signal status (128 + HUP, INT or TERM) is a killed run, and so is a START with no END older than local.killed_after_seconds in ci/config.yaml (the pre-push watchdog's ceiling plus margin); a younger unmatched START might still be running and is left for tomorrow.
  2. Writes each finished day under local/<clone>/. The clone name is a short digest of this machine and this clone, never the hostname (the branch is public); set CI_STEWARD_CLONE or pass --clone <name> to choose one.
  3. Pushes with fetch, rebase and retry. It never creates the branch: before the collector's first run it says so and pushes nothing.
  4. Writes a heartbeat, local/<clone>/exported.json, on every run, so an idle clone (no commits, no pushes) never reads as a stale export.
  5. Rotates the file: lines older than 30 days go, and past 5 MB the oldest half goes. Lines appended while it rewrites are kept.

Approving it

DorkOS finds the schedule: block above and puts this job on the Schedules page as Waiting for approval. It does not run until the operator approves it. Approve it with Approve at Full autonomy: the job runs Bash and git push, and a schedule that arrives in a file is held back to the careful setting, which cannot run either unattended (DOR-2100; docs/guides/task-scheduler.mdx). With plain Approve, every run ends Blocked.

Read the full file on GitHub · 36 lines

Changes

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.

  1. 27d ago First seen · 36 lines · 67 tokens per session scan A a417f54629fe

Subscribe to this mod's changes

ci-local-export is a skill published in the GitHub repository dork-labs/dorkos (10 stars, last pushed today), licensed MIT. It adds 67 tokens to every session and 691 once invoked, about $0.0003 per session on Opus 5.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-09-20.

Related

Other skills, from other repositories

github-flow-for-claude-on-web

Complete GitHub workflow for Claude Code on the web. ALL GitHub operations MUST use REST API (never gh CLI). Includes branch naming (claude/-sessionId), push retry logic, PR/issue management via API, and complete workflows. Use for all GitHub interactions in Claude Code web environment.

shabaraba/vibing.nvim · 71 tokens

stacked-pr-merge

Merging a stack of dependent PRs in this repository — a branch cut from another PR's branch rather than from main. Covers the one merge API that is not 403 here, taking the head SHA from the API, and the stale-lineage rebase that produces mass conflicts if you use plain git rebase origin/main. Use when gh pr merge…

shabaraba/vibing.nvim · 112 tokens

vibing-worktree-create

Create a new git-worktree-backed isolated work area for the current vibing.nvim chat via natural language — no separate UI. Use when the user wants to isolate work in its own worktree ("split this into its own worktree", "start this in isolation", "give this its own branch").

shabaraba/vibing.nvim · 67 tokens

vibing-worktree-attach

Attach the current or a new vibing.nvim chat to an already-existing git worktree via natural language — no separate UI. Use when the user wants to switch/attach a chat to an existing worktree ("let's go into the auth-fix worktree", "attach to worktree X", "continue in the feature-y worktree").

shabaraba/vibing.nvim · 77 tokens

vibing-worktree-finish

Remove a git-worktree-backed isolated work area for vibing.nvim chats via natural language — no separate UI. Use when the user wants to clean one up when done ("clean up this worktree", "I'm done with this branch's worktree", "remove the auth-fix worktree").

shabaraba/vibing.nvim · 67 tokens

vibing-worktree-list

List git-worktree-backed isolated work areas for vibing.nvim chats via natural language — no separate UI. Use when the user wants to see what worktrees/branches exist ("what worktrees do I have", "what's in progress", "show me all worktrees").

shabaraba/vibing.nvim · 62 tokens