一键导入
extension-content-feeds
RssFeedProvider and SitemapProvider trait implementations for SEO and content syndication
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
RssFeedProvider and SitemapProvider trait implementations for SEO and content syndication
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Search the web for information using the WebSearch tool
Demonstrates governance blocking when plaintext secrets are detected in tool inputs
A simple demonstration skill that searches the web for information
Demonstration skill that attempts to use a plaintext secret, designed to be blocked by governance hooks
List, message, configure, and restart agents via the systemprompt CLI
View traffic, costs, agent stats, and bot detection via the systemprompt CLI
| name | Extension: Content Feeds |
| description | RssFeedProvider and SitemapProvider trait implementations for SEO and content syndication |
Feed providers generate RSS feeds and XML sitemaps for search engine optimization and content syndication. All traits live in crates/shared/provider-contracts/src/.
Generates RSS 2.0 feeds from content sources.
#[async_trait]
pub trait RssFeedProvider: Send + Sync {
fn feed_specs(&self) -> Vec<RssFeedSpec>;
async fn feed_metadata(&self, ctx: &dyn RssFeedContext) -> Result<RssFeedMetadata>;
async fn fetch_items(&self, ctx: &dyn RssFeedContext, limit: usize) -> Result<Vec<RssFeedItem>>;
}
| Field | Type | Description |
|---|---|---|
source | String | Content source to query |
path | String | URL path for the feed (e.g., /feed.xml) |
limit | usize | Maximum items in feed |
impl Extension for MyExtension {
fn rss_feed_providers(&self) -> Vec<Arc<dyn RssFeedProvider>> {
vec![Arc::new(BlogRssFeedProvider)]
}
}
Generates XML sitemaps for search engine indexing.
#[async_trait]
pub trait SitemapProvider: Send + Sync {
fn source_specs(&self) -> Vec<SitemapSourceSpec>;
fn static_urls(&self, base_url: &str) -> Vec<SitemapUrlEntry>;
async fn resolve_placeholders(
&self,
ctx: &dyn SitemapContext,
content: &[ContentItem],
placeholders: &[String],
) -> Result<Vec<SitemapUrlEntry>>;
}
| Field | Type | Description |
|---|---|---|
loc | String | Full URL |
lastmod | Option<DateTime> | Last modification date |
changefreq | Option | daily, weekly, monthly, yearly, never |
priority | Option | 0.0 to 1.0 (default: 0.5) |
impl Extension for MyExtension {
fn sitemap_providers(&self) -> Vec<Arc<dyn SitemapProvider>> {
vec![Arc::new(BlogSitemapProvider)]
}
}
| Practice | Implementation |
|---|---|
Sitemap at /sitemap.xml | Registered by SitemapGenerationJob |
RSS at /feed.xml | Standard feed location |
robots.txt references sitemap | Generated by RobotsTxtGenerationJob |
lastmod reflects actual changes | Use updated_at, not created_at |
| Priority reflects page importance | Homepage: 1.0, blog list: 0.8, posts: 0.7 |
| Rule | Rationale |
|---|---|
All providers are Send + Sync | Async multi-threaded context |
| RSS items sorted by date descending | Most recent first |
| Sitemap URLs must be absolute | Include full base_url prefix |
| Feed limits default to 20 items | Standard RSS practice |
Use DateTime<Utc> for dates | RFC 2822 for RSS, ISO 8601 for sitemap |