cli
Use the pdsx CLI for ATProto record operations. Requires auth for writes, supports batch operations via stdin.
Packaged view
This page reorganizes the original catalog entry around fit, installability, and workflow context first. The original raw source lives below.
Install command
npx @skill-hub/cli install zzstoatzz-pdsx-cli
Repository
Skill path: skills/cli
Use the pdsx CLI for ATProto record operations. Requires auth for writes, supports batch operations via stdin.
Open repositoryBest for
Primary workflow: Run DevOps.
Technical facets: Full Stack, Security.
Target audience: everyone.
License: Unknown.
Original source
Catalog source: SkillHub Club.
Repository owner: zzstoatzz.
This is still a mirrored public skill entry. Review the repository before installing into production workflows.
What it helps with
- Install cli into Claude Code, Codex CLI, Gemini CLI, or OpenCode workflows
- Review https://github.com/zzstoatzz/pdsx before adding cli to shared team environments
- Use cli for development workflows
Works across
Favorites: 0.
Sub-skills: 0.
Aggregator: No.
Original source / Raw SKILL.md
---
name: cli
description: Use the pdsx CLI for ATProto record operations. Requires auth for writes, supports batch operations via stdin.
---
# pdsx CLI
Use `uvx pdsx` (or `uv run pdsx` for local dev) for ATProto record operations.
## Authentication
Reads don't need auth, just `-r/--repo`. Writes need `--handle` and `--password`:
```bash
# reads - no auth
uvx pdsx -r someone.bsky.social ls app.bsky.feed.post
# writes - auth required
uvx pdsx --handle you.bsky.social --password xxxx-xxxx create app.bsky.feed.post text='hello'
```
You can also set env vars: `ATPROTO_HANDLE`, `ATPROTO_PASSWORD`
## Commands
| Command | Aliases | Description |
|---------|---------|-------------|
| `list` | `ls` | list records in a collection |
| `get` | `cat` | get a specific record |
| `create` | `touch`, `add` | create record(s) |
| `update` | `edit` | update record(s) |
| `delete` | `rm` | delete record(s) |
| `upload-blob` | - | upload image/video |
| `whoami` | `me`, `identity` | show authenticated identity |
## Examples
```bash
# list posts from someone
uvx pdsx -r zzstoatzz.io ls app.bsky.feed.post
# get a specific post
uvx pdsx get at://did:plc:xxx/app.bsky.feed.post/abc123
# get someone's profile
uvx pdsx -r zzstoatzz.io get app.bsky.actor.profile/self
# create a post
uvx pdsx --handle you.bsky.social --password $APP_PASSWORD create app.bsky.feed.post text='hello from pdsx'
# check who you're authenticated as
uvx pdsx --handle you.bsky.social --password $APP_PASSWORD whoami
# delete a post
uvx pdsx --handle you.bsky.social --password $APP_PASSWORD rm at://did:plc:xxx/app.bsky.feed.post/abc123
```
## Batch Operations
Pipe JSONL to stdin for batch operations:
```bash
# batch create
echo '{"text":"post 1"}
{"text":"post 2"}' | uvx pdsx --handle ... create app.bsky.feed.post
# batch delete
echo 'at://did:plc:xxx/app.bsky.feed.post/abc123
at://did:plc:xxx/app.bsky.feed.post/def456' | uvx pdsx --handle ... rm
# batch update (JSONL with uri field)
echo '{"uri":"at://...","text":"updated text"}' | uvx pdsx --handle ... update
```
## Output Formats
Use `-o/--output` for different formats:
```bash
uvx pdsx -r someone.bsky.social ls app.bsky.feed.post -o json
uvx pdsx -r someone.bsky.social ls app.bsky.feed.post -o yaml
uvx pdsx -r someone.bsky.social ls app.bsky.feed.post -o table
uvx pdsx -r someone.bsky.social ls app.bsky.feed.post -o compact # default for list
```
## Common Collections
| Collection | Purpose |
|------------|---------|
| `app.bsky.feed.post` | posts |
| `app.bsky.actor.profile` | profile (rkey is `self`) |
| `app.bsky.feed.like` | likes |
| `app.bsky.feed.repost` | reposts |
| `app.bsky.graph.follow` | follows |