Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
95 commits
Select commit Hold shift + click to select a range
1321408
Added: llm-coding-tools-subagents workspace member for agent configur…
Sewer56 Jan 23, 2026
d28eed8
Added: permission system and subagent registry for access control
Sewer56 Jan 23, 2026
b9305fd
Added: Task Tool for framework-agnostic subagent execution with permi…
Sewer56 Jan 23, 2026
1ade901
Changed: Expand preprocess_frontmatter docs with transformation examples
Sewer56 Jan 23, 2026
bc11488
Improved: Rewrite the frontmatter code for performance
Sewer56 Jan 24, 2026
12e835a
Improved: Optimize frontmatter parsing with in-place body extraction …
Sewer56 Jan 26, 2026
bf1dc0d
Changed: Document block_scalar_parts function in frontmatter.rs
Sewer56 Jan 26, 2026
3f5fbb0
Reorder: pub should come first in loader.
Sewer56 Jan 27, 2026
08fe5ea
Improved: Replace IndexMap with HashMap for better performance where …
Sewer56 Jan 27, 2026
a148e83
Added: AGENTS.md at root repo that references inner
Sewer56 Jan 27, 2026
4cea382
Changed: Improve backtracking comment in wildcard matching function
Sewer56 Jan 27, 2026
b9e064d
Added: AgentLoader builder API for flexible agent configuration loading
Sewer56 Jan 27, 2026
eb23a80
Changed: Update docs and add tests for AgentLoader API
Sewer56 Jan 27, 2026
fcd987f
Changed: Consolidate agent loading behind AgentLoader
Sewer56 Jan 29, 2026
e83ef16
Fixed: Verification scripts failing when invoked from non-project dir…
Sewer56 Jan 29, 2026
a98065c
Changed: Refactor AgentLoader to insert into registry immediately
Sewer56 Jan 29, 2026
4af147d
Updated: AGENTS.MD to latest 1.1.0
Sewer56 Jan 30, 2026
fb230a2
Changed: Refactor task modules to prepare for TaskRunner expansion
Sewer56 Jan 30, 2026
c76546f
Changed: Migrate to reloaded-templates-rust:1.1.1
Sewer56 Jan 31, 2026
7ab9d07
Rename llm-coding-tools-subagents to llm-coding-tools-agents
Sewer56 Jan 31, 2026
bbf90ad
Added: AgentCatalog for config-only agent storage and loading
Sewer56 Jan 31, 2026
d37e8af
fix: address CodeRabbit findings
Sewer56 Jan 31, 2026
ea1e373
Added: Cloneable tool catalog types for registry-based agent construc…
Sewer56 Jan 31, 2026
b4f6bc4
fix: address CodeRabbit review findings
Sewer56 Jan 31, 2026
7d536dc
Added: Rig-native AgentRegistry for registry-based task invocation
Sewer56 Jan 31, 2026
c50f3f1
Added: serdesAI AgentRegistry for precomputed agent storage and Task …
Sewer56 Jan 31, 2026
2eef34f
Update Cargo.lock after indexmap dependency addition
Sewer56 Jan 31, 2026
b16fac0
Fixed: Address CodeRabbit review findings
Sewer56 Jan 31, 2026
6bc95f1
Changed: Remove legacy Task APIs and migrate to registry-driven Task …
Sewer56 Feb 1, 2026
57e1f3d
Added: registry-driven Task tool examples for Rig and SerdesAI framew…
Sewer56 Feb 1, 2026
68feb20
Changed: Rename Task examples to "agents" naming with include_str! co…
Sewer56 Feb 1, 2026
7427d58
Migrate examples from OpenRouter to OpenAI with synthetic.new endpoint
Sewer56 Feb 1, 2026
17158db
Remove rig framework support
Sewer56 Feb 2, 2026
dc4f527
Add deprecation notice for rig framework
Sewer56 Feb 2, 2026
169d368
Merge remote-tracking branch 'origin/main' into agents-core
Sewer56 Feb 2, 2026
653572f
Fix: Format Rust source files
Sewer56 Feb 2, 2026
9a9a98c
Added: models.dev catalog crate with bundled snapshot and lookup API
Sewer56 Feb 2, 2026
3a9d908
Added: models.dev catalog cache refresh and update pipeline
Sewer56 Feb 2, 2026
4f68c61
Added: model_resolver for provider-specific model configuration resol…
Sewer56 Feb 2, 2026
afac040
Fixed: Address CodeRabbit review findings
Sewer56 Feb 2, 2026
7941de1
Fixes: improve documentation consistency, add API key redaction in De…
Sewer56 Feb 2, 2026
4be3541
Updated: AGENTS.md location
Sewer56 Feb 6, 2026
817064d
Changed: Replace PathBuf error values with Option<PathBuf> for in-mem…
Sewer56 Feb 6, 2026
a51eb78
Changed: Enforce required description field per OpenCode agent spec
Sewer56 Feb 6, 2026
a65145d
Remove unused format() method from TaskOutput
Sewer56 Feb 6, 2026
cebc73d
Changed: Refactor parser into directory module with dedicated preproc…
Sewer56 Feb 6, 2026
111ab31
Changed: Optimize extract_body_inplace to reuse String allocation in-…
Sewer56 Feb 6, 2026
1b514bb
Changed: Use indoc! macro for cleaner test multiline strings
Sewer56 Feb 6, 2026
27ad82b
Improve: Consolidate empty frontmatter tests
Sewer56 Feb 6, 2026
b00b7b0
Changed: Add 30-second timeout to HTTP client in download_and_compress()
Sewer56 Feb 6, 2026
c4a494b
Added: Explicit Rust toolchain setup to models-dev-update workflow
Sewer56 Feb 7, 2026
56f6bc8
Added: Comment noting unsupported reasoningEffort field in test fixture
Sewer56 Feb 7, 2026
f93f2aa
Changed: Align serdesai-agents example API key handling with serdesai…
Sewer56 Feb 7, 2026
ca59aeb
Changed: Clarify headless scope and simplify AGENTS project overview
Sewer56 Feb 7, 2026
95ccccc
Fixed: Write models.dev.min.json as minified JSON
Sewer56 Feb 7, 2026
cc6f536
Added: Include README.md as crate documentation in lib.rs
Sewer56 Feb 7, 2026
cc7ca3f
Changed: Implement headless permission contract for agent mode and ta…
Sewer56 Feb 7, 2026
91dbbe3
Changed: CodeRabbit CLI review fixes for serdesai and agents crates
Sewer56 Feb 7, 2026
52e4ac9
Added: Recursive Task delegation with caller-specific permission eval…
Sewer56 Feb 7, 2026
f243e40
Apply CodeRabbit review fixes to recursive task delegation and relate…
Sewer56 Feb 7, 2026
c18556b
Changed: Update serdesai README with synthetic API examples and runna…
Sewer56 Feb 7, 2026
b5a75a0
Fixed: Format Rust source files in serdesai crate
Sewer56 Feb 7, 2026
be15cf0
Removed: Dead `last_prompt()` method from recursive task delegation test
Sewer56 Feb 7, 2026
5f795c9
Fixed: Correct misleading comment in depth_2_allow_chain_succeeds test
Sewer56 Feb 7, 2026
40d30a8
Changed: Minor fix of agents crate readme.
Sewer56 Feb 7, 2026
6563c2a
Refactor: Clean up reused code in registry.rs
Sewer56 Feb 7, 2026
3016040
Fixed: Correct doctest in models-dev README to compile properly
Sewer56 Feb 7, 2026
07b7d88
Fixed: Incorrect extension in serdesai example
Sewer56 Feb 7, 2026
a4897e8
Added: Format remaining files
Sewer56 Feb 7, 2026
86ec51b
Updated: Dependencies on agents crate
Sewer56 Feb 7, 2026
0427f67
Changed: Move TaskInput and TaskOutput types to llm-coding-tools-core
Sewer56 Feb 7, 2026
358eecf
Merge main (bf3a29d): Rename operations to tools
Sewer56 Feb 7, 2026
284b847
Changed: Restructure fs module with feature-flagged blocking/tokio im…
Sewer56 Feb 8, 2026
7495288
Changed: Move permission module from agents to core crate
Sewer56 Feb 8, 2026
f88f98c
Changed: Unify llm-coding-tools-agents README and crate docs
Sewer56 Feb 8, 2026
e91df73
Changed: Remove missing_docs lint from all crates
Sewer56 Feb 8, 2026
cd690d0
Removed: Re-export of PermissionAction, Rule, and Ruleset from agents…
Sewer56 Feb 8, 2026
4546a2e
Removed: Unused Substitute trait from system_prompt module
Sewer56 Feb 8, 2026
ab4d2fe
Changed: Restructure core library docs for tools, wrappers, and permi…
Sewer56 Feb 8, 2026
79e9fc0
Added: Proper module documentation for config.rs
Sewer56 Feb 8, 2026
bad1c62
Changed: Simplify add_directory API by splitting into two methods
Sewer56 Feb 8, 2026
801e4d4
Fixed: Prevent duplicate symbol exports when both tokio and blocking …
Sewer56 Feb 14, 2026
fb6f0df
Fixed: Lint in recursive_task_delegation_integration.rs
Sewer56 Feb 14, 2026
2d96028
Fixed: Remove unnecessary mut from AgentLoader doc example
Sewer56 Feb 14, 2026
12a61d5
Changed: Split CI workflow and adopt upstream packages field
Sewer56 Feb 14, 2026
622b68d
Changed: Run formatter
Sewer56 Feb 14, 2026
b0de206
Changed: Simplify serdesai-agents example and rename agent config
Sewer56 Feb 14, 2026
f2fd7c4
Added: Model limit extraction from models.dev snapshots
Sewer56 Feb 14, 2026
70d5a59
Added: OpenCode-style position-based delimiter parsing for model specs
Sewer56 Feb 14, 2026
9b4c044
Changed: Abstract resolver backend via SharedModelResolver trait object
Sewer56 Feb 14, 2026
7de75c4
Fixed: serdesai-agents example missing Task tool permission and API k…
Sewer56 Feb 17, 2026
ca57ee6
Merge branch 'main' into task-tool
Sewer56 Feb 17, 2026
fa7b2fd
Merge branch 'main' into task-tool
Sewer56 Feb 19, 2026
b0b7d21
Merge branch 'main' into task-tool
Sewer56 Feb 19, 2026
5397c30
Remove unreferenced duplicate config.rs and error.rs files
Sewer56 Feb 19, 2026
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
2 changes: 1 addition & 1 deletion .github/template-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
reloaded-templates-rust:1.0.1
reloaded-templates-rust:1.1.1
31 changes: 31 additions & 0 deletions .github/workflows/models-dev-update.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: Update models.dev catalog

on:
schedule:
- cron: "0 9 * * 1"
workflow_dispatch:

jobs:
update-catalog:
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
steps:
- uses: actions/checkout@v4
- uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: stable
cache: true
- name: Run models.dev updater
working-directory: src
run: cargo run -p llm-coding-tools-models-dev --bin models-dev-update
- name: Create pull request
uses: peter-evans/create-pull-request@v6
with:
title: "chore: update models.dev catalog"
body: "Automated update of models.dev catalog snapshot."
commit-message: "chore: update models.dev catalog"
branch: "automation/models-dev-catalog"
add-paths: |
src/llm-coding-tools-models-dev/data/models.dev.min.json
1 change: 1 addition & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
@src/AGENTS.md
42 changes: 9 additions & 33 deletions README.MD
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,17 @@

[![Crates.io - llm-coding-tools-core](https://img.shields.io/crates/v/llm-coding-tools-core.svg)](https://crates.io/crates/llm-coding-tools-core)
[![Crates.io - llm-coding-tools-serdesai](https://img.shields.io/crates/v/llm-coding-tools-serdesai.svg)](https://crates.io/crates/llm-coding-tools-serdesai)
[![Docs.rs](https://docs.rs/llm-coding-tools-serdesai/badge.svg)](https://docs.rs/llm-coding-tools-serdesai)
[![CI](https://github.com/Sewer56/llm-coding-tools/actions/workflows/rust.yml/badge.svg)](https://github.com/Sewer56/llm-coding-tools/actions)
[![CI](https://github.com/Sewer56/llm-coding-tools/actions/workflows/rust.yml/badge.svg)](https://github.com/Sewer56/llm-coding-tools/actions/workflows/rust.yml)

Lightweight, high-performance coding tool implementations for LLM-powered development agents. Plug and play into your favourite frameworks.
Lightweight, high-performance coding tool implementations for LLM-powered development agents.

## About This Workspace

This workspace contains multiple Rust crates for integrating coding tools with LLM agents:

- **[llm-coding-tools-core](./src/llm-coding-tools-core/)**: Framework-agnostic core operations and utilities
- **[llm-coding-tools-serdesai](./src/llm-coding-tools-serdesai/)**: serdesAI framework-specific Tool implementations
- **[llm-coding-tools-agents](./src/llm-coding-tools-agents/)**: Agent configuration loading for registry-driven Task tools

## Features

Expand All @@ -30,50 +30,26 @@ This workspace contains multiple Rust crates for integrating coding tools with L

## Quick Start

Add to your `Cargo.toml`:

```toml
[dependencies]
llm-coding-tools-serdesai = "0.1"
```

```rust,no_run
use llm_coding_tools_serdesai::{AgentBuilder, BashTool, TodoTools};
use llm_coding_tools_serdesai::absolute::{ReadTool, WriteTool, EditTool, GlobTool, GrepTool};

let mut builder = AgentBuilder::new();
let todos = TodoTools::new();

builder
.track(ReadTool::<true>::new())
.track(WriteTool::new())
.track(EditTool::<true>::new())
.track(GlobTool::new())
.track(GrepTool::<true>::new())
.track(BashTool::new())
.track(&todos.read)
.track(&todos.write);

let mut agent = builder.build();

// Use the agent
// let response = agent.invoke("List all files").await?;
```
See [llm-coding-tools-serdesai](./src/llm-coding-tools-serdesai/README.md) for serdesAI framework support.

## Examples

```bash
# serdesAI framework - Basic agent setup
cargo run --example serdesai-agents -p llm-coding-tools-serdesai
cargo run --example serdesai-basic -p llm-coding-tools-serdesai

# serdesAI framework - Sandboxed file access
cargo run --example serdesai-sandboxed -p llm-coding-tools-serdesai

# serdesAI framework - Registry-driven agent invocation
cargo run --example serdesai-agents -p llm-coding-tools-serdesai
```

## Documentation

- [llm-coding-tools-core README](./src/llm-coding-tools-core/README.md)
- [llm-coding-tools-serdesai README](./src/llm-coding-tools-serdesai/README.md)
- [llm-coding-tools-agents README](./src/llm-coding-tools-agents/README.md)
- [Developer Guidelines](./src/AGENTS.md)

## Contributing
Expand Down
17 changes: 9 additions & 8 deletions src/AGENTS.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
Basic coding oriented tools for LLM agents
Basic coding oriented tools for LLM agents.
Comment thread
Sewer56 marked this conversation as resolved.

This is a headless library, there is no TUI interaction model here, so interactive `ask` approval flows and autocomplete-style agent UX are out of scope.
Comment thread
Sewer56 marked this conversation as resolved.

# Feature Flags (llm-coding-tools-core)

Expand All @@ -16,15 +18,14 @@ The `async` and `blocking` features are mutually exclusive - enabling both cause
- `src/error.rs` - Unified error types
- `src/output.rs` - Tool output formatting
- `src/util.rs` - Shared utilities
- `llm-coding-tools-agents/` - Agent config loading and permission model
- `llm-coding-tools-models-dev/` - models.dev catalog integration and snapshot tooling
- `llm-coding-tools-serdesai/` - serdesAI framework Tool implementations
- `src/absolute/` - Unrestricted file system tools
- `src/allowed/` - Sandboxed file system tools
- `src/schema.rs` - Schema building utilities
- `src/convert.rs` - Type conversions between core and serdesAI

# Code & Performance Guidelines

This is a high-performance library. Optimize aggressively.
This is a high-performance library. Optimize aggressively. Use arrays instead of maps if size is known ahead of time.
Optimize for memory. Preallocate or trim if possible. Minimize memory use. Use smaller integers/types where appropriate. Use any other tricks that improve CPU or memory efficiency.

## Memory & Allocation

Expand Down Expand Up @@ -66,6 +67,6 @@ This is a high-performance library. Optimize aggressively.
- Focus comments on "why" not "what"
- Use [`TypeName`] rustdoc links, not backticks.

# Post-Change Verification
# Verification

After you make a change to source code, always run `.cargo/verify.sh` (`.cargo/verify.ps1` on Windows) before returning to the user.
After code changes or for checks (testing/linting/building/docs/formatting), run `.cargo/verify.sh` (`.cargo/verify.ps1` on Windows). It echoes each command and runs the full suite, including core tests and any extra checks. Do this before returning to the user.
54 changes: 53 additions & 1 deletion src/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion src/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

[workspace]
resolver = "2"
members = ["llm-coding-tools-core", "llm-coding-tools-serdesai", "llm-coding-tools-agents"]
members = ["llm-coding-tools-core", "llm-coding-tools-serdesai", "llm-coding-tools-agents", "llm-coding-tools-models-dev"]

# Profile Build
[profile.profile]
Expand Down
32 changes: 32 additions & 0 deletions src/llm-coding-tools-models-dev/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
[package]
name = "llm-coding-tools-models-dev"
version = "0.1.0"
edition = "2021"
description = "Bundled models.dev catalog snapshot and lookup API"
repository = "https://github.com/Sewer56/llm-coding-tools"
license = "Apache-2.0"
readme = "README.md"
include = ["src/**/*", "data/**/*", "build.rs", "README.md"]

[dependencies]
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
thiserror = "2.0"
reqwest = { version = "0.13", default-features = false, features = [
"rustls",
"rustls-native-certs",
] }
tokio = { version = "1.48", features = ["fs", "io-util", "rt", "macros", "sync"] }
zstd = "0.13"

[build-dependencies]
zstd = "0.13"

[dev-dependencies]
tokio = { version = "1.48", features = ["rt", "macros", "sync"] }
tempfile = "3.24"
wiremock = "0.6"

[[bin]]
name = "models-dev-update"
path = "src/bin/models-dev-update.rs"
61 changes: 61 additions & 0 deletions src/llm-coding-tools-models-dev/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# llm-coding-tools-models-dev

Bundled models.dev catalog snapshot and lookup API.

This crate provides a standalone catalog for models.dev provider and model data, with embedded snapshot support and filtering capabilities.

## Features

- Bundled zstd-compressed snapshot (level 22)
- Load from bundled, cached, or downloaded sources
- Model → provider index with optional filtering
- Provider metadata lookup
- Deterministic JSON output for vendored snapshots

## Usage

```rust
# fn main() -> Result<(), Box<dyn std::error::Error>> {
use llm_coding_tools_models_dev::{CatalogSource, ModelLimits, ModelsDevCatalog};
use std::collections::HashSet;

// Load bundled snapshot
let (catalog, source) = ModelsDevCatalog::from_bundled()?;
assert!(matches!(source, CatalogSource::Bundled));

// Resolve providers for a model
let providers = catalog.resolve_provider_for_model("gpt-4o");
if let Some(provider_ids) = providers {
for provider_id in provider_ids {
if let Some(metadata) = catalog.get_provider(provider_id) {
println!("Provider: {} - env: {:?}", metadata.id, metadata.env);
}
}
}

// Optional model-limit lookups
if let Some(ModelLimits { context, output }) = catalog.get_model_limits("gpt-4o") {
println!("gpt-4o context={} output={:?}", context, output);
}

// Load with model filtering
let mut filter = HashSet::new();
filter.insert("gpt-4o".to_string());
let (catalog, _) = ModelsDevCatalog::from_bundled_filtered(&filter)?;
# Ok(())
# }
```

## Update Binary

Regenerate the vendored snapshot from models.dev:

```bash
cargo run -p llm-coding-tools-models-dev --bin models-dev-update
```

This fetches the latest data from <https://models.dev/api.json> and writes a minimal snapshot to `data/models.dev.min.json`.

## License

Apache-2.0
15 changes: 15 additions & 0 deletions src/llm-coding-tools-models-dev/build.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
use std::{env, fs, path::PathBuf};
use zstd::bulk::compress;

fn main() {
let manifest_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").expect("CARGO_MANIFEST_DIR"));
let input = manifest_dir.join("data/models.dev.min.json");
let out_dir = PathBuf::from(env::var("OUT_DIR").expect("OUT_DIR"));
let output = out_dir.join("models.dev.min.json.zst");

let json = fs::read(&input).expect("read models.dev.min.json");
let compressed = compress(&json, 22).expect("zstd compress");
fs::write(&output, compressed).expect("write models.dev.min.json.zst");

println!("cargo:rerun-if-changed={}", input.display());
}
1 change: 1 addition & 0 deletions src/llm-coding-tools-models-dev/data/models.dev.min.json

Large diffs are not rendered by default.

Loading
Loading