From c015b80ab345360accde76771f4053ce478c801b Mon Sep 17 00:00:00 2001 From: Igor Pinchuk Date: Mon, 27 Jul 2026 00:34:36 +0800 Subject: [PATCH] =?UTF-8?q?docs(site):=20how-to=20=D1=8D=D0=BA=D1=81=D0=BF?= =?UTF-8?q?=D0=BE=D1=80=D1=82=D0=B0=20Claude=20Design=20+=20IndexNow=20+?= =?UTF-8?q?=20AUR=20PKGBUILD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - docs/export-claude-design-project.html: транзакционный how-to гайд с видимой FAQ-секцией, в стиле лендинга; ловит поисковые запросы про экспорт/бэкап. - IndexNow ключ-файл для ускоренной индексации Bing/Yandex. - sitemap и nav лендинга ссылаются на гайд. - packaging/aur: PKGBUILD + .SRCINFO + инструкция для dsx-bin в AUR. --- docs/58281bc65781121ae58aa2728f6e8036.txt | 1 + docs/export-claude-design-project.html | 271 ++++++++++++++++++++++ docs/index.html | 1 + docs/sitemap.xml | 5 + packaging/aur/.SRCINFO | 17 ++ packaging/aur/PKGBUILD | 26 +++ packaging/aur/README.md | 37 +++ 7 files changed, 358 insertions(+) create mode 100644 docs/58281bc65781121ae58aa2728f6e8036.txt create mode 100644 docs/export-claude-design-project.html create mode 100644 packaging/aur/.SRCINFO create mode 100644 packaging/aur/PKGBUILD create mode 100644 packaging/aur/README.md diff --git a/docs/58281bc65781121ae58aa2728f6e8036.txt b/docs/58281bc65781121ae58aa2728f6e8036.txt new file mode 100644 index 0000000..0f2c0ec --- /dev/null +++ b/docs/58281bc65781121ae58aa2728f6e8036.txt @@ -0,0 +1 @@ +58281bc65781121ae58aa2728f6e8036 diff --git a/docs/export-claude-design-project.html b/docs/export-claude-design-project.html new file mode 100644 index 0000000..a6697cf --- /dev/null +++ b/docs/export-claude-design-project.html @@ -0,0 +1,271 @@ + + + + + +How to export and back up a Claude Design project to your computer + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+

Guide

+

How to export and back up a Claude Design project to your computer

+

The files inside a Claude Design project live on the server. Here's how to pull them onto a local folder — and keep them in sync — with one command, without the bytes ever passing through a model's context.

+ + +
+

If you keep a design system in Claude Design (claude.ai/design), the files are on Anthropic's server, not on your disk. The tempting way to get a local copy is to ask an agent to "read every file and write it locally" — but that pushes every byte of every file through the model's context. On one large project that came to roughly 665,000 tokens for a single export. Moving files is not a reasoning task; you shouldn't pay a reasoning bill for it.

+

dsx is a small command-line tool that does the export as a plain file transfer. It works like git — clone, pull, push, status, diff — and the file bytes never touch a model's context, so the same export costs one summary line instead of 665k tokens.

+ +

Before you start

+
    +
  • You need Claude Code installed and logged in — dsx reuses its OAuth token, so there is no separate login.
  • +
  • macOS or Linux (amd64 or arm64). Windows isn't supported yet.
  • +
  • You need the project ID of the Claude Design project you want to export (it's in the project's URL).
  • +
+ +

Steps

+
    +
  1. +

    Install dsx

    +

    One binary, no dependencies. With Go:

    +
    install
    $ go install github.com/somework/dsx@latest
    +

    Or grab a release archive for your platform from GitHub Releases, or on macOS brew install somework/tap/dsx.

    +
  2. +
  3. +

    Grant access once

    +

    Inside Claude Code, run the consent command so your account allows agent access to your Design projects:

    +
    claude
    > /design consent
    +
  4. +
  5. +

    Clone the project

    +

    Point dsx at the project ID and a target folder. This downloads every file into ./design:

    +
    dsx clone
    $ dsx clone 65fdff85-…-ba9358a234b0 design
    +pulled 103, unchanged 0, binary 6 (660.1 KB)
    +

    That one line — not 665k tokens — is the whole cost of the export.

    +
  6. +
  7. +

    Keep it in sync

    +

    Later, pull down changes made in Claude Design, or push local edits back:

    +
    dsx
    $ # see what changed, offline, no download
    +$ dsx status
    +$ # fetch server changes
    +$ dsx pull
    +$ # send your local edits back
    +$ dsx push
    +
  8. +
+ +

Backing up (and the one flag to be careful with)

+

For a plain backup, a clone followed by periodic pull is all you need — dsx writes every file temp-then-rename, so an interrupted run never leaves a half-written file, and conflicts are decided on the actual bytes, never on timestamps.

+
+

About --prune

+

Adding --prune mirrors deletions — but dsx will only delete a local file it can prove it put there and that you didn't modify. An untracked file is never yours to delete; a locally edited file is a conflict, not a deletion. Still, treat --prune like rm: know what it will remove before you run it.

+
+ +

FAQ

+
+
+ Can I download my Claude Design files without an agent reading each one? +

Yes — that's the whole point. dsx transfers the files directly; the bytes never enter a model's context, so a large project exports for one summary line instead of hundreds of thousands of tokens.

+
+
+ Is this official? Is it safe to use with my account? +

It is unofficial and not affiliated with Anthropic — the Claude Design endpoint is undocumented, and a server change can break dsx. It's built to fail loudly rather than silently: every protocol assumption is pinned by a live test. It reads your existing Claude Code OAuth token and never writes or prints it. The whole thing is a single Go binary with zero third-party dependencies, so it's auditable end to end.

+
+
+ Does it edit my files, or just download them? +

Both directions. pull brings the server's files down; push sends your local edits back; status and diff show what changed. If both sides changed the same file, dsx reports a conflict instead of silently overwriting either copy.

+
+
+ What about images and other binary assets? +

They come down too. dsx detects binary files by content and handles them on a separate lane; the summary line reports how many binary files were transferred.

+
+
+ Does it cost any tokens? +

No. dsx is not a model call — it's a file-sync client. It uses your Claude Code login to authenticate to the endpoint, but moving the files spends no tokens.

+
+
+ Which platforms are supported? +

macOS and Linux, both amd64 and arm64. Windows is not supported yet.

+
+
+ +

Want the story of how the undocumented endpoint was recovered — and the three protocol facts I guessed wrong first? Read the build log.

+ + +
+
+
+ + + + + diff --git a/docs/index.html b/docs/index.html index ef367f0..212497e 100644 --- a/docs/index.html +++ b/docs/index.html @@ -189,6 +189,7 @@ How it works Install Safety + Guide Build log GitHub ↗ diff --git a/docs/sitemap.xml b/docs/sitemap.xml index 323b43c..568d496 100644 --- a/docs/sitemap.xml +++ b/docs/sitemap.xml @@ -5,6 +5,11 @@ weekly 1.0 + + https://somework.github.io/dsx/export-claude-design-project.html + monthly + 0.9 + https://somework.github.io/dsx/reverse-engineering-claude-design.html monthly diff --git a/packaging/aur/.SRCINFO b/packaging/aur/.SRCINFO new file mode 100644 index 0000000..d909ea9 --- /dev/null +++ b/packaging/aur/.SRCINFO @@ -0,0 +1,17 @@ +pkgbase = dsx-bin + pkgdesc = Sync files between a Claude Design project and a local directory, without the bytes passing through a model's context + pkgver = 0.1.2 + pkgrel = 1 + url = https://github.com/somework/dsx + arch = x86_64 + arch = aarch64 + license = MIT + provides = dsx + conflicts = dsx + options = !strip + source_x86_64 = dsx-0.1.2-x86_64.tar.gz::https://github.com/somework/dsx/releases/download/v0.1.2/dsx_0.1.2_linux_amd64.tar.gz + sha256sums_x86_64 = 288e5f68ef6bb5751837ba47e19406b4611a504a449d040b732161c4d4d57fd5 + source_aarch64 = dsx-0.1.2-aarch64.tar.gz::https://github.com/somework/dsx/releases/download/v0.1.2/dsx_0.1.2_linux_arm64.tar.gz + sha256sums_aarch64 = 076f6a2aa08444e9f0c38d97c12786f786c8cbe1c76ff5d0d6b151f9ea5fff85 + +pkgname = dsx-bin diff --git a/packaging/aur/PKGBUILD b/packaging/aur/PKGBUILD new file mode 100644 index 0000000..9bca3f4 --- /dev/null +++ b/packaging/aur/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: somework +pkgname=dsx-bin +pkgver=0.1.2 +pkgrel=1 +pkgdesc="Sync files between a Claude Design project and a local directory, without the bytes passing through a model's context" +arch=('x86_64' 'aarch64') +url="https://github.com/somework/dsx" +license=('MIT') +provides=('dsx') +conflicts=('dsx') +options=('!strip') +source_x86_64=("dsx-${pkgver}-x86_64.tar.gz::${url}/releases/download/v${pkgver}/dsx_${pkgver}_linux_amd64.tar.gz") +source_aarch64=("dsx-${pkgver}-aarch64.tar.gz::${url}/releases/download/v${pkgver}/dsx_${pkgver}_linux_arm64.tar.gz") +sha256sums_x86_64=('288e5f68ef6bb5751837ba47e19406b4611a504a449d040b732161c4d4d57fd5') +sha256sums_aarch64=('076f6a2aa08444e9f0c38d97c12786f786c8cbe1c76ff5d0d6b151f9ea5fff85') + +package() { + install -Dm755 dsx "${pkgdir}/usr/bin/dsx" + install -Dm644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" + install -Dm644 README.md "${pkgdir}/usr/share/doc/${pkgname}/README.md" + + # Shell completions, generated by the shipped binary (offline, no network, no auth). + ./dsx completion bash | install -Dm644 /dev/stdin "${pkgdir}/usr/share/bash-completion/completions/dsx" + ./dsx completion zsh | install -Dm644 /dev/stdin "${pkgdir}/usr/share/zsh/site-functions/_dsx" + ./dsx completion fish | install -Dm644 /dev/stdin "${pkgdir}/usr/share/fish/vendor_completions.d/dsx.fish" +} diff --git a/packaging/aur/README.md b/packaging/aur/README.md new file mode 100644 index 0000000..880c29f --- /dev/null +++ b/packaging/aur/README.md @@ -0,0 +1,37 @@ +# AUR packaging for dsx + +`PKGBUILD` and `.SRCINFO` for the [`dsx-bin`](https://aur.archlinux.org/packages/dsx-bin) +Arch User Repository package. It installs the pre-compiled binary from a GitHub release +(there is no `dsx` source package; the source lives in this repo and builds with `go install`). + +This directory is the canonical source. Publishing to the AUR is manual, by a maintainer with +an AUR account and an SSH key registered there — the same split as the Homebrew tap. + +## Update on a new release + +1. Bump `pkgver` in `PKGBUILD` to the new version (and reset `pkgrel=1`). +2. Refresh both checksums from the release's `checksums.txt`: + + ```sh + gh release download vX.Y.Z --repo somework/dsx --pattern checksums.txt --output - + ``` + + Copy the `linux_amd64` sum into `sha256sums_x86_64` and `linux_arm64` into + `sha256sums_aarch64`. +3. Regenerate `.SRCINFO` (on an Arch box) or edit it by hand to match: + + ```sh + makepkg --printsrcinfo > .SRCINFO + ``` + +## Publish to the AUR + +```sh +git clone ssh://aur@aur.archlinux.org/dsx-bin.git +cp PKGBUILD .SRCINFO dsx-bin/ +cd dsx-bin +git commit -am "upgpkg: dsx-bin X.Y.Z" +git push +``` + +Test locally first with `makepkg -si` in a clean checkout.