Skip to content
This repository was archived by the owner on May 28, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions .claude/hooks/session-start.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#!/bin/bash
set -euo pipefail

# Only run in remote (Claude Code on the web) environments
if [ "${CLAUDE_CODE_REMOTE:-}" != "true" ]; then
exit 0
fi

# Install Rust toolchain with fmt and clippy components if not present
if ! command -v rustup &>/dev/null; then
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain stable
source "$HOME/.cargo/env"
fi

# Ensure rustfmt and clippy are installed
rustup component add rustfmt clippy 2>/dev/null || true

# Pre-build dependencies so cargo build/test/clippy are fast later
cd "$CLAUDE_PROJECT_DIR"
cargo build 2>/dev/null || true
14 changes: 14 additions & 0 deletions .claude/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"hooks": {
"SessionStart": [
{
"hooks": [
{
"type": "command",
"command": "$CLAUDE_PROJECT_DIR/.claude/hooks/session-start.sh"
}
]
}
]
}
}
38 changes: 23 additions & 15 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -1,24 +1,32 @@
<!-- This file was auto-generated by aps (https://github.com/westonplatter/aps) -->

## Rust Core Principles
# Rust Core Principles

### Clarity Beats Cleverness
Readable, explicit code is preferred over compact or “smart” code.
Use descriptive names over short ones
Prefer match over deeply nested if chains
Avoid overly generic abstractions unless reuse is proven
Optimize for the next human (or agent) reading this code.
## Clarity Beats Cleverness
Readable, explicit code is preferred over compact or "smart" code.
- Use descriptive names over short ones
- Prefer match over deeply nested if chains
- Avoid overly generic abstractions unless reuse is proven
- Optimize for the next human (or agent) reading this code.

### Small, Testable Units
Prefer small functions with narrow responsibility.
One function = one job
Pure functions when possible
Add unit tests for behavior, not implementation
If it’s hard to test, it’s probably doing too much.
## Small, Testable Units
- Prefer small functions with narrow responsibility.
- One function = one job
- Pure functions when possible
- Add unit tests for behavior, not implementation
- If it's hard to test, it's probably doing too much.

## Pull Requests
## Case-Insensitive File Name Checks
All file name comparisons (e.g. detecting SKILL.md, README.md, or any
well-known file) must be case-insensitive. Use `eq_ignore_ascii_case`
in Rust rather than exact string equality. This ensures consistent
behavior across case-sensitive and case-insensitive file systems.

### Pull Request Description
---

# Pull Requests

## Pull Request Description
When opening or updating pull requests, include the following write-up in the PR body.

- Summary (required). Less than 100 words. What changed and why (not a file list)
Expand Down
14 changes: 14 additions & 0 deletions src/cli.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,9 @@ pub enum Commands {
/// Display status from lockfile
Status(StatusArgs),

/// List manifest entries and their resources
List(ListArgs),

/// Catalog operations for asset discovery
Catalog(CatalogArgs),
}
Expand Down Expand Up @@ -156,6 +159,17 @@ pub struct StatusArgs {
pub manifest: Option<PathBuf>,
}

#[derive(Parser, Debug)]
pub struct ListArgs {
/// Path to the manifest file
#[arg(long)]
pub manifest: Option<PathBuf>,

/// Show on-disk asset tree for synced entries
#[arg(long)]
pub assets: bool,
}

#[derive(Parser, Debug)]
pub struct CatalogArgs {
#[command(subcommand)]
Expand Down
Loading