Commit Context Lookup
rohitg00/agentmemory
Traces a file, function or line back to the agent session behind its current commit, using git blame and a memory lookup, and reports only what the records show.
KtUI DataTable (KTDataTable) — local/remote data, sorting, filtering, pagination, checkbox selection, state persistence, fixed layouts, event system, and architecture.
$ npx skills add keenthemes/ktui --skill ktui-datatable -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install keenthemes/ktui ktui-datatable --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/keenthemes/ktui.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/ktui-datatable .claude/skills/ktui-datatable && rm -rf skills-srcUse ~/.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/
Install the "ktui-datatable" agent skill from https://github.com/keenthemes/ktui/tree/main/skills/ktui-datatable into .claude/skills/ktui-datatable/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ktui-datatable", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/keenthemes/ktui/tree/main/skills/ktui-datatableType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add keenthemes/ktui --skill ktui-datatable -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install keenthemes/ktui ktui-datatable --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/keenthemes/ktui.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/ktui-datatable .agents/skills/ktui-datatable && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "ktui-datatable" agent skill from https://github.com/keenthemes/ktui/tree/main/skills/ktui-datatable into .agents/skills/ktui-datatable/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ktui-datatable", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add keenthemes/ktui --skill ktui-datatable -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install keenthemes/ktui ktui-datatable --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/keenthemes/ktui.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/ktui-datatable .cursor/skills/ktui-datatable && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "ktui-datatable" agent skill from https://github.com/keenthemes/ktui/tree/main/skills/ktui-datatable into .cursor/skills/ktui-datatable/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ktui-datatable", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/keenthemes/ktui.git --path skills/ktui-datatable--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add keenthemes/ktui --skill ktui-datatable -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install keenthemes/ktui ktui-datatable --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/keenthemes/ktui.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/ktui-datatable .gemini/skills/ktui-datatable && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "ktui-datatable" agent skill from https://github.com/keenthemes/ktui/tree/main/skills/ktui-datatable into .gemini/skills/ktui-datatable/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ktui-datatable", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install keenthemes/ktui ktui-datatableInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add keenthemes/ktui --skill ktui-datatable -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/keenthemes/ktui.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/ktui-datatable .github/skills/ktui-datatable && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "ktui-datatable" agent skill from https://github.com/keenthemes/ktui/tree/main/skills/ktui-datatable into .github/skills/ktui-datatable/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ktui-datatable", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add keenthemes/ktui --skill ktui-datatable -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install keenthemes/ktui ktui-datatable --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/keenthemes/ktui.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/ktui-datatable .opencode/skills/ktui-datatable && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "ktui-datatable" agent skill from https://github.com/keenthemes/ktui/tree/main/skills/ktui-datatable into .opencode/skills/ktui-datatable/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ktui-datatable", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
ktui-datatableKtUI DataTable (KTDataTable) — local/remote data, sorting, filtering, pagination, checkbox selection, state persistence, fixed layouts, event system, and architecture.
Ktui Datatable is an agent skill from keenthemes/ktui. KtUI DataTable (KTDataTable) — local/remote data, sorting, filtering, pagination, checkbox selection, state persistence, fixed layouts, event system, and architecture. Use this skill when building, debugging, or customizing DataTable components.
Its SKILL.md is about 2.6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development, covering Agent memory. The repository describes itself as: Open-source collection of customizable UI components for Tailwind CSS and vanilla JavaScript. The licence is MIT.
12 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 74a8e60. It shows what the files ask for, not the result of running them.
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.
Shell commands in SKILL.md call:
npmnpxFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
ktui.ioFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Ktui Datatable loads about 2.6k tokens when it runs. Until then it costs about 65 tokens; SKILL.md has 627 words of instructions outside code blocks.
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.
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.
The full file from keenthemes/ktui at commit 74a8e60, republished under its MIT licence (© keenthemes). 627 words, ~2,561 tokens.
.claude/skills/ktui-datatable/SKILL.md (or your agent's skills folder).Full reference for the DataTable component in KtUI.
Package: @keenthemes/ktui. Class: KTDataTable. Root attribute: data-kt-datatable.
Always prefer ktui.io/docs/datatable docs and examples over guessing markup or options.
<div data-kt-datatable="true">
<table>
<thead>
<tr>
<th data-kt-datatable-column="name">Name</th>
<th data-kt-datatable-column="email">Email</th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>import { KTDataTable } from '@keenthemes/ktui';
const dt = KTDataTable.getInstance(tableEl);| Option | Type | Description |
|---|---|---|
apiEndpoint | string | Remote data URL |
requestMethod | string | HTTP method (default 'POST') |
requestHeaders | object | Custom headers |
mapResponse | function | Transform API response |
mapRequest | function | Transform request params |
pageSize | number | Rows per page |
pageSizes | number[] | Page size options |
stateSave | boolean | Persist state in localStorage |
columns | object | Column config (render, checkbox, sortType, sortValue, createdCell) |
sort | object | Sort config with classes and callback |
search | object | Search config with delay and callback |
pagination | object | Pagination markup config |
loading | object | Spinner template |
checkbox | object | Row checkbox config (checkedClass, preserveSelection) |
lockedLayout | object | Sticky headers/columns |
tableLayout | string | 'fixed' for fixed column widths (use with <colgroup>) |
filter | object | Column filter config (type, value) |
infoEmpty | string | Empty state HTML (supports innerHTML) |
const dt = KTDataTable.getInstance(tableEl);
dt.sort('name');
dt.sort('name', 'desc'); // explicit sort order
dt.goPage(2);
dt.setPageSize(25);
dt.search('query');
dt.setFilter({ column: 'status', type: 'text', value: 'active' });
dt.reload(); // re-fetch from API
dt.redraw(); // re-render current data
dt.getState(); // { page, sortField, sortOrder, pageSize, ... }
dt.check(value); // check a row by value
dt.uncheck(value); // uncheck a row by value
dt.getChecked(); // get array of checked row values
dt.dispose();| Static method | Returns |
|---|---|
KTDataTable.getInstance(el) | Existing instance or null |
KTDataTable.getOrCreateInstance(el, config?) | Existing or new instance |
KTDataTable.init() | Scans DOM, creates instances |
columns: {
name: {
title: 'Full Name',
render: (item, data, ctx) => `<strong>${item}</strong>`,
sortType: 'string', // or 'numeric'
sortValue: (cellValue, rowData) => rowData.firstName + ' ' + rowData.lastName,
createdCell: (cell, cellData, rowData, row) => {
cell.classList.add('text-primary');
},
},
actions: {
checkbox: true,
},
}interface KTDataTableResponseDataInterface {
data: KTDataTableDataInterface[];
totalCount: number;
}{
apiEndpoint: 'https://api.example.com/users',
requestMethod: 'POST',
requestHeaders: { 'Authorization': 'Bearer ...' },
mapResponse: (response) => ({ data: response.items, totalCount: response.total }),
mapRequest: (params) => ({ ...params, page: params.page + 1 }),
}Use tableLayout: 'fixed' with <colgroup> for consistent column widths across pages:
<table data-kt-datatable-table="true" style="table-layout: fixed; width: 100%;">
<colgroup>
<col style="width: 40px"> <!-- checkbox -->
<col style="width: 70px"> <!-- ID -->
<col> <!-- Name (auto-fill) -->
<col style="width: 120px"> <!-- Status -->
</colgroup>
</table>Client-side filtering with setFilter():
dt.setFilter({ column: 'status', type: 'text', value: 'active' });
dt.setFilter({ column: 'price', type: 'numeric', value: { min: 10, max: 100 } });Filter pipeline runs between search and sort.
Default: When data.length === 0, renders a single row with infoEmpty text (default: "No records found"). Supports HTML.
Custom via data attribute:
<div data-kt-datatable="true"
data-kt-datatable-info-empty='<div class="py-10 text-center">No records found</div>'>Pitfall — never hardcode empty state HTML in <tbody>: The DataTable reads tbody rows as "data" on init. Hardcoded content gets treated as 1 row and disappears on re-render. Always use data-kt-datatable-info-empty or the JS infoEmpty config.
All events dispatch through dual channel:
.on()) — bare nameaddEventListener) — namespaced as kt.datatable.<event>| Event | Payload | When |
|---|---|---|
update | — | Data changed. Call getState() for details. |
sort | { field, order } | Column header click |
change | { cancel } | Before checkbox toggle (cancelable) |
changed | — | After checkbox change. Call getChecked(). |
checked | { value } | Row checked |
unchecked | { value } | Row unchecked |
fetchError | { response, error, status, statusText } | Remote JSON parse failure |
error | { error } | Network fetch failure |
// Internal callback
dt.on('sort', (payload) => { console.log(payload.field); });
// DOM CustomEvent
el.addEventListener('kt.datatable.sort', (e) => {
console.log(e.detail.payload.field);
});Source: src/components/datatable/
| File | Purpose |
|---|---|
datatable.ts | Main class — constructor, _updateData(), _draw(), _finalize(), _dispose() |
datatable-local-provider.ts | Local mode data fetch with checksum-based DOM invalidation |
datatable-remote-provider.ts | Remote API mode with AbortController |
datatable-state-store.ts | State management — patchState(), setPage(), setSort() |
datatable-checkbox.ts | Checkbox handler — header check, row check, reapplyCheckedStates() |
datatable-table-renderer.ts | Renders data rows into <tbody> |
datatable-pagination-renderer.ts | Renders pagination buttons, page size selector |
datatable-sort.ts | Column sort handler with AbortController-based cleanup |
datatable-defaults.ts | DATATABLE_DEFAULTS — static config constants |
datatable-utils.ts | Shared stripHtml() utility |
datatable-search-handler.ts | Debounced search input handler |
datatable-state-persistence.ts | localStorage save/load with try/catch guards |
datatable-registry.ts | Instance Map + DOM fallback |
datatable-layout-plugin.ts | Sticky header/locked columns plugin |
datatable-spinner.ts | Loading spinner show/hide |
datatable-contracts.ts | Interfaces and type contracts |
datatable-column-utils.ts | Column resolution utilities |
types.ts | Type definitions (config, state, data interfaces) |
index.ts | Barrel exports |
Every data update follows this sequence:
_updateData()
├── fetchSync() or fetch() ← reads from DOM or API
├── _draw()
│ ├── _cleanupForRedraw() ← cleans listeners + DOM artifacts (NOT registry)
│ ├── _updateTable() ← re-renders tbody rows
│ ├── _updatePagination() ← re-renders pagination buttons
│ ├── afterDraw layoutPlugin hook
│ └── _saveState() ← persists to localStorage
├── _finalize()
│ ├── _checkbox.init() ← re-queries DOM, calls reapplyCheckedStates()
│ ├── _sortHandler.initSort()
│ ├── searchHandler.attach()
│ ├── KTComponents.init()
│ ├── spinner.hide()
│ └── update _contentChecksum ← MUST be last (after DOM modifications)
└── emit 'update'ORDER MATTERS. _finalize() modifies the DOM. Any checksum saved before _finalize() will be stale.
| Problem | Cause | Fix |
|---|---|---|
| Empty pagination after checkbox select | _contentChecksum saved before _finalize() | Save checksum at END of _finalize() |
| Corrupted localStorage persists | State shrank originalData to current page | localStorage.removeItem('kt_datatable_<id>') |
| Sort listener leak | cloneNode(true) destroys th attrs | Uses AbortController pattern internally |
| Filter stored but never applied | setFilter() writes to state but fetchSync() ignores it | Filter pipeline runs between search and sort |
Hardcoded empty state in <tbody> | DataTable reads tbody rows as "data" on init | Use data-kt-datatable-info-empty attribute instead |
| Column widths shift on pagination | table-layout: auto recalculates per page | Use table-layout: fixed with <colgroup> |
Checkbox events invisible to addEventListener | Was only internal callbacks | Now dispatches as kt.datatable.* CustomEvents |
| Parallel refactoring on shared repo fails | Tight coupling between files | Execute sequentially on single branch |
cd ~/Sites/keenthemes/ktui/ktui
npx vitest run src/components/datatable # all pass
npx tsc --noEmit # typecheck
npm run build:webpack # full bundle
npm run build:lib # ESM + CJS library buildsDo NOT edit lib/esm/ or lib/cjs/ directly — they're generated from npm run build:lib.
© keenthemes, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/ktui-datatable of keenthemes/ktui.
Open the folder on GitHubat commit 74a8e60
Ktui Datatable 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Ktui Datatable this skillkeenthemes/ktui | 151 | — | ~2.6k | Automated safety check: Pass | MIT | |
| Commit Context Lookuprohitg00/agentmemory | 29k | — | ~522 | Automated safety check: Pass | Apache-2.0 | |
| Beacon Memory DistillAsymptote-Labs/agent-beacon | 1.8k | — | ~3k | Automated safety check: Pass | MIT | |
| Shellm Architecture Referencelaude-institute/headlong | 1.2k | — | ~2k | Automated safety check: Notes | Apache-2.0 | |
| Fireworks Tech Graphninehills/skills | 281 | 3 repos | ~8k | Automated safety check: Pass | MIT | |
| Mem0 Status Checkmem0ai/mem0 | 67k | — | ~1.5k | Automated safety check: Pass | Apache-2.0 |
rohitg00/agentmemory
Traces a file, function or line back to the agent session behind its current commit, using git blame and a memory lookup, and reports only what the records show.
Asymptote-Labs/agent-beacon
Turn recorded agent sessions (Beacon traces from Claude Code, Cursor, Codex, OpenCode, and other harnesses) into reviewed, reusable project memory.
laude-institute/headlong
Explains how shellm's bash-based recursive LLM shell fits together - its core engine, identity system, memory, skills and trajectory log.
ninehills/skills
A skill your agent uses when the user wants to create any technical diagram - architecture, data flow, flowchart, sequence, agent/memory, or concept map - and export as SVG+PNG.
mem0ai/mem0
Runs a four-part diagnostic on the mem0 plugin, checking the API key, identity resolution, memory search and memory write, then reports one pass-or-fail summary.
rohitg00/agentmemory
Makes persistent agent memory pay off by searching before work starts and saving each decision the moment it settles, rather than batching a summary at the end.
keenthemes/ktui
Install, configure, and initialize KtUI (Keenthemes Tailwind UI) in any project.
keenthemes/ktui
KtUI Select (KTSelect) — rich searchable multi-select dropdown replacing native select.
keenthemes/ktui
Comprehensive guide to KtUI (Keenthemes Tailwind UI) — components, theming, initialization, data-attribute API, event system, helpers, and common patterns.
Categories
KtUI DataTable (KTDataTable) — local/remote data, sorting, filtering, pagination, checkbox selection, state persistence, fixed layouts, event system, and architecture. Ktui Datatable is an agent skill from keenthemes/ktui. KtUI DataTable (KTDataTable) — local/remote data, sorting, filtering, pagination, checkbox selection, state persistence, fixed layouts, event system, and architecture.
Ktui Datatable fits situations like: customizing DataTable components; tasks that involve Agent memory.
Run `npx skills add keenthemes/ktui --skill ktui-datatable -a claude-code`. Or copy the skill folder (skills/ktui-datatable in keenthemes/ktui) into .claude/skills/ktui-datatable in your project. Claude Code loads it when a task matches its description.
Run `npx skills add keenthemes/ktui --skill ktui-datatable -a codex`. Or copy the skill folder (skills/ktui-datatable in keenthemes/ktui) into .agents/skills/ktui-datatable in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add keenthemes/ktui --skill ktui-datatable -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/ktui-datatable, .gemini/skills/ktui-datatable, .github/skills/ktui-datatable and .opencode/skills/ktui-datatable in your project.
Going by SKILL.md and its folder, Ktui Datatable needs the command-line tools its instructions call (npm and npx). Our summary lists: Node.js.
SKILL.md names 1 domain. As links in the text: ktui.io. This is read from the text; nothing was executed.
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.
Ktui Datatable is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.6k tokens (SKILL.md is roughly 10k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Ktui Datatable: Commit Context Lookup (rohitg00/agentmemory, 29k stars), Beacon Memory Distill (Asymptote-Labs/agent-beacon, 1.8k stars), Shellm Architecture Reference (laude-institute/headlong, 1.2k stars) and Fireworks Tech Graph (ninehills/skills, 281 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
keenthemes (a GitHub organization) maintains it in keenthemes/ktui, which has 151 GitHub stars. The repository holds 4 skills in this directory. The repository was last updated on June 17, 2026.
Source: keenthemes/ktui on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.