Agent skill

Sync Upstream

by garfiec in garfiec/Librechat-Mobile

Sync the Switchboard client with a newer official LibreChat server version — a stable release, a release candidate, or a PARTIAL sync up to an untagged upstream commit (e.g.

MITAuto-check: notesMobile

Install Sync Upstream

skills CLI
$ npx skills add garfiec/Librechat-Mobile --skill sync-upstream -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install garfiec/Librechat-Mobile sync-upstream --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/garfiec/Librechat-Mobile.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/sync-upstream .claude/skills/sync-upstream && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
sync-upstream
GitHub stars
112
Token cost
~3.4k tokens
SKILL.md length
1,397 words
Files
7
Skills in repo
5
Repo updated
First seen
Licence
MIT

At a glance

Sync the Switchboard client with a newer official LibreChat server version — a stable release, a release candidate, or a PARTIAL sync up to an untagged upstream commit (e.g.

  • Works in 5 steps: Prereqs, target & mode (you, with Bash) → Discovery (WF1) → HITL interview (you) → …
  • Mobile work in your project
  • SKILL.md covers Two modes, Target Modes (sync), Phase 0 — Prereqs, target &… and Phase 1 — Discovery (WF1), plus 5 more sections
  • Calls git and gh; reaches github.com

What it does

Sync Upstream is an agent skill from garfiec/Librechat-Mobile. Sync the Switchboard client with a newer official LibreChat server version — a stable release, a release candidate, or a PARTIAL sync up to an untagged upstream commit (e.g. current dev HEAD). If the client is ALREADY at the target commit, runs an AUDIT of the last synced delta to catch anything that was missed. Coordinates two dynamic workflows (discovery, implementation) around human decision gates.

Its SKILL.md is about 3.4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 7 other files (for example `reference/android-architecture.md`, `reference/api-mapping.md` and `reference/model-mapping.md`).

It sits in Mobile. It works with OpenAI. The repository describes itself as: Native Android & iOS client for LibreChat, built with Kotlin Multiplatform and Compose Multiplatform. The licence is MIT.

When your agent uses it

  • Mobile work in your project

Example prompts

  • “/sync-upstream”

Requirements

  • Pre-approved tools (allowed-tools): Bash, Read, Glob, Grep, Write, Edit, WebFetch, WebSearch, Workflow, AskUserQuestion

Workflow steps

5 steps, taken from the step headings in SKILL.md.

  1. Prereqs, target & mode (you, with Bash)
  2. Discovery (WF1)
  3. HITL interview (you)
  4. Implementation (WF2)
  5. Test & push tail (you) — HARD STOP

What it can do on your machine

Read from SKILL.md and the folder at commit a677510. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Bash
    • Read
    • Glob
    • Grep
    • Write
    • Edit
    • WebFetch
    • WebSearch
    • Workflow
    • AskUserQuestion

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • git
    • gh

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • github.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Sync Upstream loads about 3.4k tokens when it runs. Until then it costs about 105 tokens; SKILL.md has 1,397 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~105
When it runs · the whole SKILL.md, loaded when a task matches
~3.4k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NotePre-approves every shell command (allowed-tools: Bash)SKILL.md
    allowed-tools: Bash, Read, Glob, Grep, Write, Edit, WebFetch, WebSearch, Workflow, AskUserQuestion

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from garfiec/Librechat-Mobile at commit a677510, republished under its MIT licence (© garfiec). 1,397 words, ~3,440 tokens.

Download SKILL.mdSave it as .claude/skills/sync-upstream/SKILL.md (or your agent's skills folder). This skill also uses 6 other files; get the full folder from GitHub.
name
sync-upstream
description
Sync the Switchboard client with a newer official LibreChat server version — a stable release, a release candidate, or a PARTIAL sync up to an untagged upstream commit (e.g. current dev HEAD). If the client is ALREADY at the target commit, runs an AUDIT of the last synced delta to catch anything that was missed. Coordinates two dynamic workflows (discovery, implementation) around human decision gates.
allowed-tools
Bash, Read, Glob, Grep, Write, Edit, WebFetch, WebSearch, Workflow, AskUserQuestion
argument-hint
[target] (stable tag | rc tag | branch dev/main | commit SHA; add 'audit' or '--full' to force/ widen an audit; defaults to latest stable)

Sync Upstream

Synchronize the Switchboard app with a newer version of the official LibreChat server.

You are the coordinator. You run the lightweight deterministic work yourself with Bash (prereqs, target/mode resolution, final consistency asserts) and own the three human decision points. All heavy parallel work is delegated to two dynamic workflows — you never read or write app code yourself.

[you]  0. Prereqs + resolve target + detect mode          (Bash — fail loud on ambiguity)
  │
[WF1]  1. sync-upstream-discovery   — parallel multi-angle sweep → converged findings
  │
[you]  2. HITL INTERVIEW            — the one real gate: target + scope + direction   (AskUserQuestion)
  │
[WF2]  3. sync-upstream-implement   — implement → build+consistency gates → ≥2 independent review passes
  │
[you]  4. TEST + PUSH TAIL          — present test plan, facilitate device testing, hold the push gate

Two workflows do the work; you hold the seams. A workflow cannot pause to ask the user — that is exactly why the target choice, the proposal approval, and the no-push/device-test boundary live in your main loop between invocations, never inside a script.

Two modes

Resolve these before anything else (Phase 0), because they change the whole run:

ModeTriggerGoalVersion bookkeeping
syncresolved target commit ≠ current pinabsorb new upstream changesadvances (version.properties, UPSTREAM_VERSION, submodule, commit map)
auditresolved target commit == current pin (or audit in $ARGUMENTS)re-check that the LAST synced delta was fully/correctly absorbed — find missesnone — the pin does not move

Audit's default range is the last synced delta (previous pin → current pin), recovered from UPSTREAM_VERSION's own git history. --full widens it to full-pin reconciliation.

Target Modes (sync)

ModeTarget looks likebackendTargetVersionUPSTREAM_VERSIONGating strategy
releasev0.8.8 (default: latest stable tag)0.8.8tag=v0.8.8, commit=<tag commit>isCompatibleOrNewer(version, "0.8.8-rc1")
rcv0.8.8-rc10.8.8-rc1tag=v0.8.8-rc1, commit=<tag commit>isCompatibleOrNewer(version, "0.8.8-rc1")
partialdev, main, or a SHA<base>+dev.<sha8>tag=<last v-tag at/before commit>, commit=<target SHA>supportsFeature(detected, "<next-rc-line>", landedDate)

Shared invariants: the diff base is always commit= from UPSTREAM_VERSION (never tag=); BackendVersion.parse() handles all three forms; a later sync from a partial baseline is normal.


Phase 0 — Prereqs, target & mode (you, with Bash)

Working directory is already the mobile repo root — do not cd elsewhere; rely on relative paths. Fail LOUD on any ambiguity below — never guess a baseline or target for the user.

  1. Submodule. git submodule status. If upstream/ missing: git submodule add https://github.com/LibreChat-AI/LibreChat.git upstream && git submodule update --init.
  2. Version file. cat UPSTREAM_VERSION. If missing, create from version.properties backendTargetVersion + submodule HEAD (tag=v<version>, commit=<HEAD>, date=$(date +%Y-%m-%d)).
  3. Clean tree. git status --porcelain. If dirty → ask the user to commit/stash; wait.
  4. Baseline consistency (compute, then apply — a partial/rc baseline is NOT an inconsistency):
    • X.Y.Z+dev.<sha8> → <sha8> must be a prefix of commit=; verify the sha, not tag equality.
    • X.Y.Z-rcN / plain X.Y.Z → must equal tag= without v.
    • Always: submodule HEAD must equal commit=.
    • On failure → ask the user which state is the true baseline; wait. Never auto-pick.
  5. Fetch + resolve target. cd upstream && git fetch origin --tags && git fetch origin dev main. Resolve $ARGUMENTS (see Target Modes) to a full {target_commit}:
    • none → newest stable tag (exclude -rc/-beta/-alpha), but still enumerate newer rc tags and how far dev/main are ahead (git rev-list --count {base_commit}..origin/dev) for the interview.
    • tag (stable or rc) → that tag; never silently drop an rc the user named.
    • branch/SHA → partial; {base_version} from git show {sha}:package.json, {anchor_tag} = git describe --tags --abbrev=0 --match "v[0-9]*" {sha} (--match is required — upstream also tags Helm charts like chart-2.0.7).
  6. Detect mode. If {target_commit} == commit= (submodule HEAD) or $ARGUMENTS contains audit → audit mode; the audit base is the previous commit= from git log -p --format=%H -- UPSTREAM_VERSION (or full-pin if --full). Else sync mode. If sync mode and no newer tags AND branch heads == base → tell the user "already up to date" and offer an audit instead of stopping.
  7. Artifacts dir. mkdir -p .claude/sync-upstream/artifacts.
  8. Mirrored constants. scripts/check-mirrors.py --from {base_commit} --to {target_commit} --diff Some upstream values are never served over the API, so the client hardcodes a copy — which providers take documents natively, which MIME types the parser extracts, which feedback reasons the write route accepts. These drift silently: nothing fails to decode, nothing errors, the app just makes worse decisions as it ages, so the ordinary diff sweep reads them as inert constant edits and defers them. Exit 1 means at least one moved; the output names the Kotlin file to reconcile. Exit 2 is not drift — it is a fatal (empty submodule, unresolvable revision, bad registry); fix the setup and re-run rather than reporting it as a finding. Carry every DRIFT and ?? row into the Phase 2 interview as its own item — a ?? means upstream renamed or deleted the symbol, so the registry entry is wrong either way. Registry: scripts/mirrors.json. Adding a mirror to the codebase means adding an entry there in the same PR.

If a prior run's artifacts exist (ls .claude/sync-upstream/artifacts/), offer to resume from them.


Phase 1 — Discovery (WF1)

Invoke the discovery workflow. It runs the parallel multi-angle sweep, converges + cross-references the mobile codebase, and runs a completeness critic. Watch its phase tree live via /workflows.

Workflow({ name: "sync-upstream-discovery", args: {
  mode, baseCommit, targetCommit, targetMode, baseVersion, anchorTag,
  skillDir: "<abs path to .claude/skills/sync-upstream>",
  artifactsDir: "<abs path to .claude/sync-upstream/artifacts>",
} })

It returns { mode, range, findings[], counts, criticComplete, reportPath } and writes artifacts/discovery-report.md. Each finding is machine-complete: category, severity, mobile-gap status, iosMain coverage, landing commit + UTC landedDate, first-target-line, gate form. Do not paraphrase-and-lose those — thread the structured objects straight into WF2.


Show full SKILL.md (595 more words)Show less

Phase 2 — HITL interview (you)

This is the single human gate. Present the converged report, then use AskUserQuestion to settle:

  • Target / scope (sync): confirm the resolved target or switch (stable / rc / partial — the findings are already tagged by target-line, so switching just filters). If the user switches, you have the data; no re-run needed unless they name a target outside the swept superset (then re-invoke WF1).
  • Which items to implement now vs defer (Breaking + Security cannot be deferred — say so).
  • Direction on UI items that don't map cleanly to Compose (surface the 2-3 options per item).
  • Audit: which surfaced misses to fix now.
  • Drifted mirrors (Phase 0 step 8): each one is a hand-maintained copy that upstream has moved underneath. They are cheap to reconcile and invisible if skipped — present them explicitly rather than folding them into the general findings list.
  • Items marked backend-blocked are shown as knowingly-skipped, never built.

Persist the approved, scoped list to artifacts/approved-{target}.md. If the user cancels, archive the report and stop cleanly. Do not invoke WF2 until the user approves.


Phase 3 — Implementation (WF2)

Invoke the implementation workflow with the approved list. It implements per group, runs build + consistency gates, then ≥2 mandatory independent review passes (stateless ⇒ independent by construction; CONFIRMED vs PLAUSIBLE; iteration-capped). It ends at local commits — it never pushes.

Workflow({ name: "sync-upstream-implement", args: {
  approvedItems, mode, targetMode, targetCommit, baseVersion, anchorTag,
  targetTag,               // release/rc only; null for partial
  sha8,                    // partial only
  bumpVersion,             // FALSE in audit mode
  branchName,              // chore/sync-upstream-{tag} | -dev-{sha8} | -audit-{sha8}
  skillDir, artifactsDir,
  reportPath,              // artifacts/discovery-report.md
} })

Returns { branchName, buildResults, buildGreen, consistency, reviewPasses, reviewClean, unresolvedConfirmed, testPlan }.

Then re-assert independently (you, with Bash) — do not trust the workflow's self-report blindly:

  • sync: sha8 is a prefix of commit=; cd upstream && git rev-parse HEAD == commit=; BackendCommitMap.kt contains the 12-char prefix of commit= (same check release.yml runs); README upper bound matches; each supportsFeature row's landedDate ≤ synced commit's UTC date.
  • audit: the pin did not move — commit=, backendTargetVersion, submodule HEAD, and BackendCommitMap.kt are all unchanged from before the audit.

If buildGreen is false or unresolvedConfirmed is true, report it and route back into WF2 (scoped to the failures) rather than proceeding.


Phase 4 — Test & push tail (you) — HARD STOP

Phase 3 ends at local commits. DO NOT push. DO NOT open a PR. Build + detekt + tests confirm scaffolding, not feature correctness. A sync must be device-tested against a real backend on BOTH Android and iOS (incl. older-server compat) before a PR is offered. The branch stays local-only until the user walks the test plan and explicitly says "push it" / "open the PR".

Present:

## Sync Ready for Device Testing: {baseline} → {target}   [{mode}]
Branch `{branchName}` is local-only. Not pushed. No PR opened.

### Files changed        {grouped by module}
### Test plan            {WF2 testPlan — Android / iOS / compat}
### How to build & run   Android: assembleDebug + install. iOS: linkDebugFrameworkIosSimulatorArm64, run in Xcode.
                         Connect to a target-version server + an older supported server; walk the plan.
                         Partial: verify new features HIDDEN on the older server, visible on a server the
                         regenerated BackendCommitMap COVERS (between landing and the pin). A server NEWER
                         than the pin resolves to no-version → features fail closed by design (not a bug),
                         and your own dev server drifts past the pin within days.
### Version updates      {sync: the bumps; audit: "none — pin unchanged"}

Then:

  • User reports bugs → re-invoke WF2 scoped to just those fixes (same branch), loop until they're happy.
  • User explicitly authorizes the push → only then run git push / gh pr create. Not before.

Dispatch on-device test facilitation as needed (split by platform, or platform × feature area for large syncs). Device testing is the human's; you facilitate and route blockers back into WF2.


Reference files (read by the workflows' agents, not by you)

${CLAUDE_SKILL_DIR}/reference/: upstream-paths.md (diff surface), api-mapping.md, model-mapping.md, ui-mapping.md, upstream-backend-gaps.md (client-only vapor features — do not build), android-architecture.md (implementer patterns). Root: DISCOVERY.md, VERSION_GATES.md, BackendVersion.kt, scripts/mirrors.json (hand-mirrored upstream constants — see Phase 0 step 8).

Error recovery

SituationRecovery
Submodule / UPSTREAM_VERSION missingRecreate (Phase 0 steps 1–2)
Dirty tree / baseline inconsistency / SHA not foundAsk the user — never auto-resolve
Already up to dateOffer an audit (don't just stop)
No newer tags but dev/main aheadOffer a partial sync
WF1/WF2 returns partial (agent died)Re-invoke with resumeFromRunId (cached agents replay); artifacts under artifacts/ show the phase reached
BackendCommitMap missing the pin (release.yml net)WF2's regen step runs AFTER submodule checkout; re-run if needed
Build/consistency/review failReported in WF2's return; re-invoke WF2 scoped to the failures
Session compacted mid-runArtifacts dir is the resume authority; resumeFromRunId only within a single workflow invocation

© garfiec, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 6 other files in .claude/skills/sync-upstream of garfiec/Librechat-Mobile.

  • SKILL.md
  • reference/android-architecture.md
  • reference/api-mapping.md
  • reference/model-mapping.md
  • reference/ui-mapping.md
  • reference/upstream-backend-gaps.md
  • reference/upstream-paths.md

Open the folder on GitHubat commit a677510

Compare with similar skills

Sync Upstream next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Sync Upstream compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Sync Upstream this skillgarfiec/Librechat-Mobile112—~3.4kAutomated safety check: NotesMIT
Swift AI SDK Upstreamteunlao/swift-ai-sdk154—~1.6kAutomated safety check: PassApache-2.0
Agent Recorder FixturesSwiftedMind/SwiftAgent227—~906Automated safety check: PassMIT
Publish ReleaseAyuilos/Miffan192—~635Automated safety check: PassAGPL-3.0
Ipaship Auditatharvnaik1/ipaship-audit108—~1.5kAutomated safety check: NotesMIT
Developing Genkit Dartevanca/flutter-ai-rules649—~961Automated safety check: PassMIT

Similar skills

  • Swift AI SDK Upstream

    teunlao/swift-ai-sdk

    A skill your agent uses for Swift AI SDK upstream parity management: refresh or inspect Vercel AI SDK baselines, scan upstream package coverage, classify drift, plan provider/core/docs audits, land…

    154 GitHub stars~1.6k tokensUpdated 2 days ago
    MobileAuto-check passed
  • Agent Recorder Fixtures

    SwiftedMind/SwiftAgent

    Record real OpenAI/Anthropic HTTP back-and-forth (requests + responses, including streaming text/event-stream) and print paste-ready Swift fixtures for SwiftAgent unit tests (ReplayHTTPClient) using…

    227 GitHub stars~906 tokensUpdated 8 mo ago
    MobileAuto-check passed
  • Publish Release

    Ayuilos/Miffan

    Publish a GitHub release for this fork, with a bilingual changelog that separates fork-owned changes from changes introduced by upstream merges.

    192 GitHub stars~635 tokensUpdated 2 days ago
    MobileAuto-check passed
  • Ipaship Audit

    atharvnaik1/ipaship-audit

    A skill your agent uses when auditing iOS/Android app submissions for compliance with Apple App Store Review Guidelines or Google Play Developer Policies.

    108 GitHub stars~1.5k tokensUpdated 4 mo ago
    MobileAuto-check: notes
  • Developing Genkit Dart

    evanca/flutter-ai-rules

    A skill your agent uses when building AI agents in Dart, implementing Genkit flows or tools, integrating LLMs into Dart or Flutter applications, or using Genkit Dart plugins.

    649 GitHub stars~961 tokensUpdated 24 days ago
    MobileAuto-check passed
  • Cc Pocket Support

    heypandax/pairlet

    Answer CC Pocket setup, usage, safety, and troubleshooting questions from the public manual and current code evidence.

    140 GitHub stars~278 tokensUpdated today
    MobileAuto-check passed

More from garfiec/Librechat-Mobile

  • Release Highlights

    garfiec/Librechat-Mobile

    Add a hand-written Highlights section to a GitHub release whose notes were auto-generated, summarizing the release's PRs in user-facing language above the generated changelog.

    112 GitHub stars~2k tokensUpdated today
    Auto-check: notes
  • Audit Deps

    garfiec/Librechat-Mobile

    Audit open dependabot PRs in this repo. An agent skill from garfiec/Librechat-Mobile.

    112 GitHub stars~2.4k tokensUpdated today
    Auto-check: notes
  • Update Web Assets

    garfiec/Librechat-Mobile

    Update the third-party JavaScript vendored into the app for the artifact, diagram, and math WebViews (KaTeX, mermaid, marked, highlight.js, Tailwind, Babel, React).

    112 GitHub stars~1.8k tokensUpdated today
    Auto-check: notes
  • Audit I18n

    garfiec/Librechat-Mobile

    Audit localization / i18n coverage across the compose-resources surface (10 modules x 9 locales).

    112 GitHub stars~7.2k tokensUpdated today
    Auto-check: notes

Works with

Categories

Questions about Sync Upstream

What does Sync Upstream do?

Sync the Switchboard client with a newer official LibreChat server version — a stable release, a release candidate, or a PARTIAL sync up to an untagged upstream commit (e.g. Sync Upstream is an agent skill from garfiec/Librechat-Mobile.g.

When should I use Sync Upstream?

Sync Upstream fits situations like: mobile work in your project.

How do I install Sync Upstream in Claude Code?

Run `npx skills add garfiec/Librechat-Mobile --skill sync-upstream -a claude-code`. Or copy the skill folder (.claude/skills/sync-upstream in garfiec/Librechat-Mobile) into .claude/skills/sync-upstream in your project. Claude Code loads it when a task matches its description.

How do I install Sync Upstream in Codex?

Run `npx skills add garfiec/Librechat-Mobile --skill sync-upstream -a codex`. Or copy the skill folder (.claude/skills/sync-upstream in garfiec/Librechat-Mobile) into .agents/skills/sync-upstream in your project. Codex loads it when a task matches its description.

Can I use Sync Upstream in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add garfiec/Librechat-Mobile --skill sync-upstream -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/sync-upstream, .gemini/skills/sync-upstream, .github/skills/sync-upstream and .opencode/skills/sync-upstream in your project.

What does Sync Upstream need to run?

Going by SKILL.md and its folder, Sync Upstream needs the command-line tools its instructions call (git and gh). Its frontmatter pre-approves these tools: Bash, Read, Glob, Grep, Write, Edit, WebFetch, WebSearch, Workflow, AskUserQuestion.

Does Sync Upstream access the network?

SKILL.md names 1 domain. In commands or code: github.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.

Is Sync Upstream safe to install?

Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Sync Upstream use?

Sync Upstream is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Sync Upstream use?

About 3.4k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Sync Upstream?

Skills that share tags, products or a category with Sync Upstream: Swift AI SDK Upstream (teunlao/swift-ai-sdk, 154 stars), Agent Recorder Fixtures (SwiftedMind/SwiftAgent, 227 stars), Publish Release (Ayuilos/Miffan, 192 stars) and Ipaship Audit (atharvnaik1/ipaship-audit, 108 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Sync Upstream?

garfiec (a GitHub user) maintains it in garfiec/Librechat-Mobile, which has 112 GitHub stars. The repository holds 5 skills in this directory. The repository was last updated on October 8, 2026.

Source: garfiec/Librechat-Mobile on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.