Save Url Kb logo

Save Url Kb

Organization
hraness
save-url-kb

Capture public or signed-in web content into a local Markdown knowledge base as an auditable source bundle with local assets. Use when the user asks to clip, save, scrape, or archive an article, social post or thread, GitHub or Discourse discussion, feed, inbox, private document, WhatsApp conversation, YouTube page, or another page already visible in their browser. Supports URL capture, the current signed-in tab, temporary browser-profile snapshots, saved HTML, media, evidence, honest completeness, and knowledge-base linking.

Overview

Publisherhraness
Repositoryslopcamera
Skill namesave-url-kb
Stars
7
Forks
1
Bundled files
4
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 4 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by hraness on GitHub. Read the source before you install it.

Installation

Install the Save Url Kb AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/hraness/slopcamera/tree/main/.agents/skills/save-url-kb
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/hraness/slopcamera.git /tmp/slopcamera
mkdir -p .claude/skills
cp -r /tmp/slopcamera/.agents/skills/save-url-kb .claude/skills/save-url-kb
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Save Url Kb in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Save Url Kb on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Save Url Kb is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Capture web content

Use the installed wordcell CLI. Check the available local routes when the capture may need a browser or optional media tools:

sh
wordcell doctor
wordcell adapters

Resolve <vault> to the directory containing its authored or managed index.md front door, then set the shell-local KB_ROOT to that path (KB_ROOT=kb from a typical repository root, or KB_ROOT=. from inside the vault). Pass --output "$KB_ROOT/articles" to captures and read the vault's applicable agent instructions before writing.

Pick the read surface

Start ordinary URL capture with the layered default:

sh
wordcell clip https://example.com/article --output "$KB_ROOT/articles"

The command tries stable structured data, bounded HTTP extraction, and rendered-browser fallback as needed. If those routes produce no usable source material, URL capture may perform one read-only lookup for an existing Archive.today-family snapshot. It never submits the source for archival. A useful structured provider result, including a partial Hacker News result, remains authoritative over the archive fallback.

When the source is already open in a signed-in browser, read the current tab in place:

sh
wordcell clip current --browser-live --output "$KB_ROOT/articles"
wordcell clip current --cdp 9222 --output "$KB_ROOT/articles"

For --browser-live, first enable Chrome's local debugging connection at chrome://inspect/#remote-debugging (Chrome 144+). If Chrome was launched with an explicit loopback debugging port, pass that numeric port to --cdp instead.

Current-tab capture derives the source URL from the attached tab. It does not navigate, click, type, submit, upload, or scroll that tab.

To open a URL with existing browser state, select a profile. A path-backed profile is copied into a temporary snapshot for the capture, so the source profile remains unchanged:

sh
wordcell clip https://example.com/member/article --browser-profile "$KB_CAPTURE_PROFILE" --output "$KB_ROOT/articles"

Use cookie-backed HTTP when the page does not require browser-only local state, or import a page already saved from any browser:

sh
wordcell clip https://example.com/member/article --cookie-source chrome --cookie-profile "Default" --output "$KB_ROOT/articles"
wordcell clip https://example.com/member/article --cookies-file "$KB_COOKIES_FILE" --output "$KB_ROOT/articles"
wordcell clip https://example.com/article --html "$KB_SAVED_HTML" --output "$KB_ROOT/articles"
wordcell clip https://example.com/article --html - --output "$KB_ROOT/articles" < page.html

Read references/authentication.md for current-tab, profile, cookie, and saved-page selection details.

Keep the boundary ingestion-only

Capture reads source material. It never posts, likes, follows, sends, deletes, reacts, or submits. URL-based browser capture may navigate to the requested URL and scroll within fixed work limits, taking bounded observations as content is rendered; those operations exist only to reveal content for ingestion.

If a new surface needs support, add an extraction route, fixture coverage, or a generic rendered-page fallback. Do not add a write-capable provider integration to clipping.

Choose scope and artifacts

sh
wordcell clip https://example.com/post --scope page --output "$KB_ROOT/articles"
wordcell clip https://example.com/post --scope thread --output "$KB_ROOT/articles"
wordcell clip https://example.com/discussion --scope comments --output "$KB_ROOT/articles"
wordcell clip https://example.com/post --media none --output "$KB_ROOT/articles"
wordcell clip https://example.com/post --media all --output "$KB_ROOT/articles"
wordcell clip https://example.com/post --evidence source --output "$KB_ROOT/articles"
wordcell clip https://example.com/post --evidence all --output "$KB_ROOT/articles"
wordcell clip https://example.com/post --output "$KB_CAPTURE_OUTPUT"
wordcell clip https://example.com/post --force --output "$KB_ROOT/articles"

With the resolved output path, wordcell clip installs one atomic bundle under $KB_ROOT/articles/<slug>/:

text
<slug>/
  <slug>.md
  capture.json
  assets/
  evidence/       # only when requested

The Markdown is the readable source record. capture.json records the source and canonical URLs, acquisition attempts, selected extractor, status, counts, warnings, localized asset hashes, and requested evidence outcomes. A partial failure can preserve useful source text without overstating completeness.

The normal image route localizes inline images from ordinary pages and rendered social posts, including X and LinkedIn, plus exposed video posters or thumbnails. For YouTube, the default capture (unless --media none) asks yt-dlp for the title, description, duration, channel, local thumbnail, and one available exact-language transcript. --media all additionally localizes accessible, non-DRM audio or video; the full payload is never downloaded by default. Missing optional metadata or transcript regions remain explicit in the capture status and warnings.

Review X posts and threads

Use --scope thread for an X status URL even when the expected result is one long post. Preserve the complete root post or long-form article text, then distinguish same-author continuation posts from quoted posts and third-party replies. Do not flatten reply authorship or treat visible timeline neighbors as part of the requested thread.

When the caller wants a reusable or republished record, review the author's public profile surface as a separate source boundary. Record the display name, @handle, canonical profile URL, public bio exactly as exposed, and public external profile link when present. Treat a blank or unavailable bio as missing; never infer one from post prose. If the downstream record needs durable profile provenance, capture the canonical profile URL separately instead of editing the status capture.

Inspect localized X assets individually. Keep the root post's numbered photo assets distinct from the author avatar, profile banner, extractor-generated cover duplicates, quoted-post media, and third-party reply avatars or images. A media-tool warning does not mean normal inline photos are missing when those photos are already present in assets/; report the two artifact routes separately. Preserve partial whenever X does not expose a trustworthy item tree, even if the complete visible root post and its images were retained.

Source evidence is stored as sanitized inert HTML. Screenshots are viewport pixels and can include everything visible in the tab, so inspect them before retaining or sharing a bundle.

Backfill saved-URL metadata

With KB installed, build the pinned Rust metadata-search helper and backfill every saved external URL into a separate tool-owned sidecar:

sh
wordcell url-metadata tool build
wordcell url-metadata backfill --root "$KB_ROOT" --json

The backfill runs serially with bounded output and time, resumes compatible sidecars by default, and searches for exact source matches plus existing Archive.today-family snapshots. It never rewrites the saved Markdown or adopts the search library's URL normalization, accepts descriptive metadata only from an exact source match, records partial or failed engines literally, and never promotes search output into capture.json. Use --refresh for an explicit replacement run after reviewing the provider and archive disclosure policy.

Report completeness literally

Read references/platforms.md when selecting or explaining a route. Use wordcell adapters --json when software needs the installed capability matrix.

Interpret status as follows:

  • complete: the selected bounded representation has no known missing boundary.
  • partial: useful content was retained, but a count, cursor, configured bound, hidden branch, unloaded region, or generic rendered representation prevents a completeness claim.
  • auth-required: the selected routes reached a sign-in gate.
  • blocked: the source returned a block or verification shell.
  • unsupported: no route produced usable source material.

For page scope, item counts cover primary entries. For thread and comment scopes, they cover replies or comments and exclude the root, quotes, ancestors, and pagination markers. A rendered conversation can retain visible prose while reporting capturedItems: 0 when the page does not expose a trustworthy item tree.

Preserve missing, deleted, blocked, cyclic, depth-limited, item-limited, and pagination-boundary states. Never upgrade a fallback to complete when declared counts, cursors, virtualization, or configured bounds disagree.

Separate source from synthesis

Treat the captured Markdown and manifest as the source record. Put summaries, comparisons, decisions, and changing interpretations in a maintained note rather than rewriting the capture to match a later conclusion.

Connect the maintained note to the capture with an explicit wikilink. Let wordcell backlinks derive incoming relationships; do not insert reciprocal links or generated backlink sections into authored notes. After adding or linking a capture, review the maintained note for reusable concepts and relationships, then run the vault's normal refresh and check loop:

sh
wordcell percolate "<maintained-note-id>" --root "$KB_ROOT" --limit 25 --json
wordcell refresh --root "$KB_ROOT"
wordcell check --root "$KB_ROOT"

Review the result

  1. Compare the Markdown, quoted context, counts, warnings, and assets with the source surface.
  2. Confirm the manifest names the route that actually supplied the selected text.
  3. Inspect requested screenshots, source evidence, and unexpectedly large assets.
  4. Report what was captured, what remains partial, where the bundle was written, and which maintained note links to it.

When changing clipping behavior, add focused fixtures for the affected surface and run the public package checks plus a representative capture.

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Save Url Kb AI skill do?

Capture public or signed-in web content into a local Markdown knowledge base as an auditable source bundle with local assets. Use when the user asks to clip, save, scrape, or archive an article, social post or thread, GitHub or Discourse discussion, feed, inbox, private document, WhatsApp conversation, YouTube page, or another page already visible in their browser. Supports URL capture, the current signed-in tab, temporary browser-profile snapshots, saved HTML, media, evidence, honest completeness, and knowledge-base linking.

Why use Save Url Kb on TypingMind?

Because you install it once and use it with any model. Save Url Kb is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Save Url Kb in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/hraness/slopcamera/tree/main/.agents/skills/save-url-kb. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Save Url Kb?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Save Url Kb?

As many as you like. As long as a model supports skills, you can use Save Url Kb with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Save Url Kb AI skill free?

Yes. It is published on GitHub by hraness under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇