Chisle
The coding-agent plugin that bills 52% of a bare model across 20 live tasks. Terse persona + tool-output compressor + context diet.
翻訳待ち
132 small, independent packages for React, PHP, Node and Python: UI primitives, data grids, spreadsheets, workflow engines, xlsx/pptx/docx writers, Stripe catalogs, feature gating. Take one or take th
翻訳待ち
開発ツールPHPGitHub @Particle-Academyオンライン所有者未確認
Have you tried it? One tap is enough. No sign-in needed.
Charlotte: a headless website-builder agent kit on prism-harness and fancy-cms. Drafts, autonomy, code-checked facts, long-poll events.
翻訳待ち
Loading the full README.
Read the full README ↗A headless website-builder agent kit for Laravel. Charlotte lets your app host an agent that builds and edits fancy-cms pages, live, beside a person. It runs on prism-harness, so any Prism provider works.
It is headless on purpose: Charlotte writes an ordered event log, and any chat
UI you build reads it. A plain fetch loop is enough
(docs/fetch-chat.html).
Pre-1.0. Breaking changes land in minor releases; read the CHANGELOG before upgrading.
charlotte_brief, cms_describe, cms_icons, cms_assets,
cms_get, cms_apply, cms_changes_since, cms_check and cms_finish.
Writes are pinned to a revision, so a person editing at the same time is never
overwritten.$session->publish($revision, $by).full applies each edit to the draft at once.
approve_on_save collects edits in a change set a person approves or rejects.missing_required_fact), and prices, percentages,
counts, phone numbers, emails, dates, years and quotes that no fact supports
are flagged (unsupported_claim). No model is involved.cms_finish refuses (not_ready,
with the defects) a page whose stacks and grids have no layout, whose links
run together, that never changes at tablet or desktop width, that lacks an
image the brief requires or a meta description, or that states a figure or
date the brief does not give. Each defect names its node and rule; after
charlotte.finish.max_not_ready refusals in a row (3) the agent stops and
hands the defects back. An agent cannot write a stack or grid without a
layout. The builder prompt carries a responsive skeleton, type scale and
spacing scale to start from, as fancy-cms data.use Charlotte\Brief\Brief;
use Charlotte\Facades\Charlotte;
// Once, in a service provider:
Charlotte::resolveTenantUsing(fn ($request) => (string) $request->user()->current_team_id);
Charlotte::authorizeUsing(fn ($user, string $ability, array $subject): bool => $user->can('charlotte.'.$ability));
Charlotte::routes();
// In your controller:
$session = Charlotte::for($request->user())
->tenant((string) $team->getKey())
->page('home')
->brief(Brief::fromArray($validated['brief']))
->autonomy('approve_on_save')
->open();
$cursor = $session->send('Build the landing page from the brief.', (string) $request->user()->getKey());
// A queue worker runs the turn; clients poll GET /charlotte/sessions/{id}/events?after=<cursor>&wait=20
Full setup: docs/laravel-quickstart.md.
Open with site() instead of page() and the agent builds several pages:
it creates and routes pages, edits a shared @header and @footer once for
every page, sets the nav, and makes a 404 page. Routes your app serves itself
are refused, so list them:
// config/charlotte.php
'site' => ['reserved_routes' => ['/login', '/register', '/forgot-password', '/reset-password/*', '/dashboard']],
$session = Charlotte::for($request->user())->tenant((string) $team->getKey())->site('marketing')
->brief(Brief::fromArray($validated['brief']))->open();
$session->siteExport(); // {pages[{route, title, description, doc}], header, footer, notFound, islands}
$session->publish($session->site()['revision'], (string) $request->user()->getKey()); // every page and region at once
cms_check adds site-wide checks: broken internal links, orphan pages, a
missing 404 or home page, and nav consistency.
Component nodes and islands. By default Charlotte reads fancy-cms's own
island catalogue ({$schema, $defs, types}). That gives the agent the
built-in nodes chart, kpi, table, leaderboard and input, placed
under those bare names; island: true is implied. To add your own islands
beside them, use namespace:Name types, which are placed with island: true:
app()->instance(\Charlotte\Islands\IslandCatalogue::class,
\Charlotte\Islands\CmsDescribeIslands::withHost([['type' => 'kit:Tabs', 'description' => 'Tabbed panels', 'props' => $schema]]));
Every node of a catalogue type is checked against its JSON Schema, with the
catalogue's $defs, for every actor. An unknown type, richtext, and
island: true on a native element are refused.
Rendered contrast. Charlotte::renderedUsing() hands Charlotte a browser's
measurements (Checks\RenderedEvidence::fromAxe() reads axe-core results), so
contrast is judged on the rendered page, islands included. Without one it is
judged on the document, and every check result says which ran.
This is the beginning of the README. Read the rest at the original. Read the full README ↗