Repository navigation
smeldr.dev/cli v0.17.2 — coverage gate
[0.17.2] — 2026-09-19
Added
codecov.yml (target 24%, ~2 points below today's real 25.8% coverage) and a coverage-upload step in ci.yml (go test -coverprofile=coverage.out ./... + codecov/codecov-action@v5). Neither existed before. Raising coverage toward core's own 96% gate is real, separate, follow-up work — this release only adds the regression gate at today's real baseline.
[0.17.1] — 2026-09-19
Changed
cli's module root has no importable package — cmd/smeldr-cli is the only one, and pkg.go.dev renders whatever package doc comment sits there. Moved main.go's existing, accurate comment (env vars, usage) to a dedicated doc.go. Docs-only, no behaviour change.
[0.17.0] — 2026-09-03
Added
- Two list commands now render an aligned table by default instead of raw JSON:
smeldr-cli <type> list(e.g.smeldr-cli posts list) displays SLUG, STATUS, CREATEDAT, UPDATEDAT;smeldr-cli social post listdisplays ID, PLATFORM, STATUS, SCHEDULED_AT. Both commands gained--json(restore raw-JSON output) and--fields <comma,separated,keys>(custom columns, case-insensitive key matching). A new sharedkeyedTablehelper reuses existingrenderTable,findKeyIn, andasStringhelpers instead of duplicating table logic.
[0.16.0] — 2026-09-02
Added
- A new top-level
transitioncommand:smeldr-cli transition <type_name> <slug> --to <state> [--reason <text>]. Moves an item — dynamic content or a compiled type (e.g.Decision,Task,Signal) — to a new state via its registered StateFlow, over MCP (calling thetransition_itemtool). Role is enforced by the target transition's own gate on the server, not by smeldr-cli itself. This is the CLI's first way to reachtransition_itemat all — previously the only way to trigger a StateFlow transition on a compiled type (e.g. ratifying a Decision) was a hand-built raw HTTP request to the MCP endpoint. Example:smeldr-cli transition Decision <slug> --to ratified.
Fixed
- The
smeldr-cli --version/smeldr-cli versionoutput (thecliVersionconstant inmain.go) had been stuck at0.15.2since thev0.15.3release shipped — the binary's own version output was lying about itself for that whole release. Now correctly reports the version being shipped.
[0.15.3] — 2026-08-20
Removed
loadConfigno longer falls back to legacyFORGE_URL/FORGE_TOKEN/FORGE_MCP_URLenv vars, and.forge-cli.envis no longer read as a fallback to.smeldr-cli.env—SMELDR_*and.smeldr-cli.envonly now. Extends D53's reasoning (no compatibility twin for a caller that does not exist,smeldr.dev/core) from core's exported Go API to this repo's own env-var compatibility, per Peter's own explicit 2026-08-15 go-ahead (T87).
[0.15.2] — 2026-07-09
Changed
post create,post list,post get,post publish,post archive,
post delete,post queuenow call the REST API (SMELDR_URLwith bearer
tokenSMELDR_TOKEN) instead of MCP tools. Endpoints:POST /social/posts,
GET /social/posts,GET /social/posts/{id},PUT /social/posts/{id},
DELETE /social/posts/{id}. Post delete returns 204 No Content (no output).- Help text updated to clarify: post commands use REST API (SMELDR_URL + bearer
token); credential, schedule, and platform commands use MCP endpoint (SMELDR_MCP_URL).
[0.15.1] — 2026-06-28
Added
- LICENSE file (MIT).
smeldr-clihas no AGPL linkage (does not import
smeldr.dev/core); MIT maximises adoption for an operator tool.
Copyright holder: Peter Ravn Thers.
[0.15.0] — 2026-06-10
Added
smeldr-cli logs— fetches and displays in-memory captured log entries
from a running Smeldr instance (Admin role). Flags:--level(min level),
--limit(most recent N),--since(RFC3339),--json(raw output).
Requiresapp.CaptureLogs()on the server (core v1.36.0+, A128) (T79).
[0.14.1] — 2026-06-07
Changed
- Brand-prose sweep (T101, A135): flag description, help text, and comments updated
"Forge" → "Smeldr" (init.go, media.go, status.go). Test env-var identifiers
TEST_FORGE_CLI_*→TEST_SMELDR_CLI_*,__nonexistent_forge_cli_env__→
__nonexistent_smeldr_cli_env__. Preserved:ForgeURL, FORGE_* fallback docs,
README migration note, fixture values. No exported-symbol or behaviour change.
[0.14.0] — 2026-06-07
Breaking
-
Binary renamed
forge-cli→smeldr-cli(T100, Amendment A133): The
install path is nowgo install smeldr.dev/cli/cmd/smeldr-cli@latest. Update
any scripts that invokeforge-clito usesmeldr-cli.Legacy
FORGE_*env vars and.forge-cli.envare still read as fallbacks
(T86/T87 compatibility track — no change required for existing env files).
Added
smeldr-cli logscommand (T79, Amendment A133):GET /_logsdirectly
(not via MCP) — prints a tabwriter table of the in-memory log ring captured by
app.CaptureLogs()(core v1.36.0+, A128). Requires Admin role.- Flags:
--level LEVEL,--limit N,--since RFC3339,--json. - Table columns: TIMESTAMP, LEVEL, SEQ, MESSAGE (entries newest-first).
- Dropped-entry footer when the ring buffer has overflowed.
- Direct HTTP (not MCP) — works even when the MCP layer is the failing component.
- Flags:
[0.13.0] — 2026-06-04
Added
navcommand group (Amendment A127, T18): four Editor-role commands
for navigation tree management (requiresapp.Nav(...)on the server):nav list— aligned table output (ID, LABEL, PATH, PARENT, HIDDEN, GHOST, SORT);--jsonfor raw.nav create --label <label> [--path <path>] [--parent-id <id>] [--module <module>] [--hidden] [--ghost] [--sort-order <n>]nav update <id> [same flags]— absent fields preserved from stored item.nav delete <id>— deletes item and all its descendants.
[0.12.0] — 2026-06-04
Added
redirectcommand group (Amendment A125, T30): three Editor-role commands
for runtime redirect management (requiresapp.Redirects(db)on the server):redirect list— aligned table output (FROM, TO, CODE, PREFIX);--jsonfor raw.redirect create --from <path> --to <path> [--code 301|302|410] [--prefix]redirect delete <from-path>
[0.11.0] — 2026-06-03
Changed (additive, non-breaking)
SMELDR_*env vars preferred (Amendment A123, T86 / T78):loadConfignow
readsSMELDR_URL,SMELDR_TOKEN,SMELDR_MCP_URLfirst, falling back to
FORGE_URL,FORGE_TOKEN,FORGE_MCP_URLwhen unset. Both.smeldr-cli.env
and.forge-cli.envare read (.smeldr-cli.envloaded first).forge-cli init
now writes.smeldr-cli.envwithSMELDR_*variable names. Closes T78.
[0.10.0] — 2026-06-01
Block-system commands (T32 component 6, Amendment A119) + T77 table output.
Note: the
0.9.0–0.9.3entries are absent from this CHANGELOG, and the
cliVersionconst had lagged at0.9.0despite tags shipping through0.9.3
(audit list, oauth revoke, etc.). This release resyncs the const to0.10.0;
the missing 0.9.x entries are a pre-existing gap to backfill separately.
Added
blockcommand group mirroring the 12 block MCP tools (T32 component 3):block node create|update|get|list|publish|archive(Author role).block section add|reorder|removeandblock item add|reorder|remove(Editor role).
block node listprints an aligned table (columns ID, type_name, status, slug);
--jsonswitches to raw JSON.- Block
Fieldskeys are case-sensitive PascalCase;--field K=Vpreserves casing
(and--fields <json>passes an object through verbatim).
Changed
cliVersionresynced0.9.0→0.10.0.
[0.8.0] — 2026-05-14
forge-social CLI parity — credential get/delete, platform configure, X support.
Added
forge-cli social credential get <id>— retrieves a single credential by slug viaget_social_credential.forge-cli social credential delete <id>— permanently deletes a credential viadelete_social_credential.forge-cli social platform configure --platform mastodon|linkedin|x --client-id <id> --client-secret <secret> --redirect-url <url> [--instance-url <url>] [--success-url <url>]— configures per-platform OAuth 2.0 app credentials viacreate_platform_config. Never echoes secrets.
Changed
forge-cli social credential create— now accepts--platform x. Fatal error if--instance-urlis provided for platformx.forge-cli social post create/queue— help text updated to showmastodon|linkedin|xfor--platform.
[0.7.0] — 2026-05-12
forge-social CLI commands — post, credential, and schedule management (M18+M19).
Added
forge-cli social post create --credential <id> --body "..." [--platform mastodon|linkedin] [--at <RFC3339>]— creates a draft or scheduled post via MCP.forge-cli social post queue --credential <id> --body "..." [--platform ...]— enqueues a post for the next available PublicationSchedule slot (statusqueued).forge-cli social post list [--status <status>]— lists posts filtered by status.forge-cli social post get <id>— retrieves a single post.forge-cli social post publish <id>— publishes a post immediately.forge-cli social post archive <id>— archives a post.forge-cli social post delete <id>— permanently deletes a post.forge-cli social credential create --platform mastodon|linkedin [--instance-url <url>]— starts OAuth flow and prints the authorization URL.forge-cli social credential list— lists all configured credentials.forge-cli social schedule create --credential <id> --slot "<weekday> HH:MM IANA/TZ" [--slot ...]— creates a recurring publication schedule.forge-cli social schedule show --credential <id>— shows the schedule for a credential.forge-cli social schedule pause --credential <id>— suspends the schedule.forge-cli social schedule resume --credential <id>— reactivates a paused schedule.forge-cli social schedule delete --credential <id>— removes the schedule.
[0.6.0] — 2026-05-09
Media subcommands and AVIF support (Milestone 13, Amendment A93).
Added
forge-cli media upload <file> [--description <text>]— uploads a file to
the Forge media library viaPOST /mediawith the configured bearer token.
--descriptionis required for image files (WCAG 1.1.1). Prints the returned
URL on success.forge-cli media list [--type image|document|video|audio|other]— lists all
media records. Prints a table of ID, type, upload date, and URL.forge-cli media delete <id>— permanently deletes a media record by ID..avifadded to the image extension set — AVIF uploads now require
--description, consistent with forge-media v1.2.0 AVIF support.
[0.5.0] — 2026-05-08
Draft preview subcommand (Milestone 12, Amendment A92).
Added
forge preview <prefix> <slug>— generates a signed draft preview URL via the
create_preview_urlMCP tool and prints it to stdout. Requires Admin role.
The URL grants read access to Draft or Scheduled content for the token lifetime
(default 12 h). Archived items return 404 even with a valid token.
[0.4.0] — 2026-05-08
Webhook management commands (Milestone 11 — CLI parity for forge-mcp webhook tools).
Added
forge webhook create --url URL --events EVENT,...— registers a new outbound
webhook endpoint (HTTPS only). Prints the signing secret once.forge webhook list— lists all registered endpoints.forge webhook delete <endpoint-id>— removes an endpoint by ID.forge webhook deliveries <job-id>— shows delivery log for a job.forge webhook retry <job-id>— re-queues a dead job for delivery.
[0.3.0] — 2026-05-04
Added
forge-cli init [--url URL] [--bootstrap-token TOKEN] [--name NAME] [--days N] [--force]
Bootstrap a new Forge instance: validates reachability (/_health), creates
a named admin token via the bootstrap token, writes.forge-cli.env
(FORGE_URL+FORGE_TOKEN), and verifies the new token. Use--forceto
overwrite an existing env file.
[0.2.1] — 2026-05-02
Patch release — no code changes. Re-tag to refresh module proxy cache after
vanity URL migration to forge-cms.dev.
[0.2.0] — 2026-04-30
Go 1.26.2 and module path migration to forge-cms.dev (Amendment A76).
Changed
go.mod: module path renamed fromgithub.com/forge-cms/forge-clito
forge-cms.dev/forge-cli;godirective bumped from1.22to1.26.2.
[0.1.0] — 2026-04-07
Initial release — operator CLI for Forge instances (Decision 28).
Added
forge-cli <type> create [--from file]— create a Draft viaPOST /{prefix}forge-cli <type> update <slug> [--from file]— GET-then-PUT field overlayforge-cli <type> publish <slug>— GET-then-PUT withStatus: publishedforge-cli <type> unpublish <slug>— GET-then-PUT withStatus: draftforge-cli <type> archive <slug>— GET-then-PUT withStatus: archivedforge-cli <type> delete <slug>—DELETE /{prefix}/{slug}forge-cli <type> list [--status <s>]— list items with optional status filterforge-cli <type> get <slug>— print a single item as JSONforge-cli token create --name <n> --role <r> [--ttl <d>]— issue a token via MCPforge-cli token list— list tokens via MCPforge-cli token revoke <id>— revoke a token via MCPforge-cli status—GET /_health, print JSON- Config via
FORGE_URL,FORGE_TOKEN,FORGE_MCP_URLenv vars or.forge-cli.env - YAML-subset frontmatter parser (no external dependencies)
- Pure stdlib — zero third-party dependencies