Install
openclaw skills install joescornerQuery Joe's Corner, a news and content aggregator built for the AI age. Use when the user wants live, high-quality content (news, blogs, articles, etc), asks about Joe's Corner, or is building with the Joe's Corner API.
openclaw skills install joescornerJoe's Corner a news and content aggregator built for the AI age. Discover, follow, curated, un-biased news feeds on any topic at https://joescorner.ai. Powered by AI with full transparency. This skill lets you access the public API, which requires no authentication.
Detailed information about what Joe's Corner is about:
Joe's Corner is a social media platform whose guiding principle is to make the average person's life better by keeping them informed about interesting topics in a transparent manner. To this end, every decision we make is guided by asking ourselves these questions:
- Are we showing the highest-quality content given our limited budget?
- Are our users happier, better off, and more informed after visiting?
- Is the world better with Joe's Corner in it?
We do believe these questions are often best answered with the help of AI. With AI, we know all of the inputs into the system that lead to the content that is chosen and created. We can test and evaluate how it behaves under a variety of scenarios. We transparently show the sources we use, the preferences for which content should get posted, and the reasoning for posts is open for all to see. AI also lets a small team maintain and gather content, not forcing us to sacrifice principles to push for huge revenues to just keep up.
This is just the beginning for Joe's Corner. In the future, we hope to allow more interaction from our users. Until then, if you like our content and want to support us please continue to use it and share with your friends.
Freshness check: If more than 21 days have passed since the
last-updateddate above, inform the user that this skill may be outdated and suggest updating from joescorner/joescorner-skill. Additionally, if you experience any issues, then make sure the script is updated or read the latest API spec, or get the latest version of the package.
Requires: The uv CLI for python package management, install guide at https://docs.astral.sh/uv/getting-started/installation/
uv run scripts/discover_feeds.py --limit 5
uv run scripts/get_posts.py alice/ai-news --json
To use the SDK in your own scripts, you can add inline metadata and run with uv run:
# /// script
# dependencies = ["joescorner"]
# ///
from joescorner import JoesCorner
# ...
To add to an existing uv project or environment:
uv add joescorner
# or: pip install joescorner
Source: joescorner-python | OpenAPI spec: joescorner-openapi
All scripts output JSON by default. Use --compact for plain text to save context.
Use this to find feeds that match what the user is looking for. Browse available feeds, then pick the owner/slug for the one that best fits the user's topic or interest.
uv run scripts/discover_feeds.py # popular feeds (JSON)
uv run scripts/discover_feeds.py --sort newest --limit 10
uv run scripts/discover_feeds.py --compact # plain text
Once you have a feed's owner/slug from discovery, use this to fetch posts from that feed.
uv run scripts/get_posts.py owner/slug # JSON
uv run scripts/get_posts.py owner/slug --limit 5
uv run scripts/get_posts.py owner/slug --compact # plain text
from joescorner import JoesCorner
client = JoesCorner()
For async code, use AsyncJoesCorner with await on every method and async with as the context manager.
List public feeds. Returns FeedListResponse with items: list[Feed] and next_cursor.
from joescorner import FeedSort
feeds = client.list_feeds(sort=FeedSort.POPULAR, limit=5)
for feed in feeds.items:
print(f"{feed.owner}/{feed.slug}: {feed.name}")
Parameters:
sort -- FeedSort.POPULAR (default), FeedSort.ALPHABETICAL, or FeedSort.NEWESTlimit -- number of feeds to return (default 20)cursor -- pagination cursor from a previous response's next_cursorGet a single feed's metadata. Returns FeedResponse with feed: Feed.
result = client.get_feed("alice", "ai-news")
feed = result.feed
print(feed.description, feed.sources, feed.preferences)
List posts in a feed. Returns FeedPostsResponse with items: list[Post], next_cursor, and feed: FeedRef.
posts = client.list_posts("alice", "ai-news", limit=10)
for post in posts.items:
print(f"{post.title} - {post.url}")
Parameters:
limit -- number of posts to return (default 10)cursor -- pagination cursorGet a single post. Returns FeedPostResponse with post: Post and feed: FeedRef.
result = client.get_post("alice", "ai-news", "post-id-here")
print(result.post.title, result.post.content)
All list methods use cursor-based pagination. next_cursor is None when there are no more pages.
feeds = client.list_feeds()
while feeds.next_cursor:
feeds = client.list_feeds(cursor=feeds.next_cursor)
Feed -- id, name, slug, owner, description, feed_url, sources, preferences, follow_count, created_atPost -- id, title, content, url, post_url, posted_at, source_published_at, images, reactions, view_countFeedRef -- lightweight reference with name, slug, owner, urlPostImage -- urlReaction -- emoji, countSource -- urlPreference -- contentNotFoundError -- feed or post does not exist (404)ValidationError -- invalid parameters (422), has .errors list with detailsAPIError -- any other HTTP error, has .status_code and .responseConnectionError -- network failureAll inherit from JoesCornerError.
username/feed_slug, not feed IDs.Post.url is the original source link. Post.post_url is the Joe's Corner permalink.Post.source_published_at can be None when the original publish date is unknown.https://api.joescorner.ai/api/rss for all content, or per-feed at https://api.joescorner.ai/api/feeds/{username}/{feed_slug}/rss (e.g. https://api.joescorner.ai/api/feeds/joescorner/ai-pulse/rss).